NETCFG: save messages if changed.
[citadel.git] / citadel / room_ops.c
index 1e4209bdc6867bccc3a8b9e10ed9b1d15d2bb99b..14ddd8e53c154dc058222343b4367d59bf585e81 100644 (file)
@@ -565,8 +565,7 @@ void lputfloor(struct floor *flbuf, int floor_num)
 /* 
  *  Traverse the room file...
  */
-void CtdlForEachRoom(void (*CallBack) (struct ctdlroom *EachRoom, void *out_data),
-               void *in_data)
+void CtdlForEachRoom(ForEachRoomCallBack CB, void *in_data)
 {
        struct ctdlroom qrbuf;
        struct cdbdata *cdbqr;
@@ -582,7 +581,41 @@ void CtdlForEachRoom(void (*CallBack) (struct ctdlroom *EachRoom, void *out_data
                cdb_free(cdbqr);
                room_sanity_check(&qrbuf);
                if (qrbuf.QRflags & QR_INUSE) {
-                       (*CallBack)(&qrbuf, in_data);
+                       CB(&qrbuf, in_data);
+               }
+       }
+}
+
+/* 
+ *  Traverse the room file...
+ */
+void CtdlForEachNetCfgRoom(ForEachRoomNetCfgCallBack CB,
+                          void *in_data,
+                          RoomNetCfg filter)
+{
+       struct ctdlroom qrbuf;
+       struct cdbdata *cdbqr;
+
+       cdb_rewind(CDB_ROOMS);
+
+       while (cdbqr = cdb_next_item(CDB_ROOMS), cdbqr != NULL) {
+               memset(&qrbuf, 0, sizeof(struct ctdlroom));
+               memcpy(&qrbuf, cdbqr->ptr,
+                      ((cdbqr->len > sizeof(struct ctdlroom)) ?
+                       sizeof(struct ctdlroom) : cdbqr->len)
+               );
+               cdb_free(cdbqr);
+               room_sanity_check(&qrbuf);
+               if (qrbuf.QRflags & QR_INUSE)
+               {
+                       OneRoomNetCfg* RNCfg;
+                       RNCfg = CtdlGetNetCfgForRoom(qrbuf.QRnumber);
+                       if ((RNCfg != NULL) &&
+                           ((filter == maxRoomNetCfg) ||
+                            (RNCfg->NetConfigs[filter] != NULL)))
+                       {
+                               CB(&qrbuf, in_data, RNCfg);
+                       }
                }
        }
 }