-/*
- * Deserialize a netconfig , allocate and return structured data
- */
-OneRoomNetCfg *ParseRoomNetConfigFile(char *serialized_data)
-{
- const char *Pos = NULL;
- const CfgLineType *pCfg = NULL;
- StrBuf *Line = NULL;
- StrBuf *InStr = NULL;
- StrBuf *Cfg = NULL;
- OneRoomNetCfg *OneRNCfg = NULL;
- int num_lines = 0;
- int i = 0;
-
- OneRNCfg = malloc(sizeof(OneRoomNetCfg));
- memset(OneRNCfg, 0, sizeof(OneRoomNetCfg));
-
- Line = NewStrBuf();
- InStr = NewStrBuf();
- Cfg = NewStrBufPlain(serialized_data, -1);
- num_lines = num_tokens(ChrPtr(Cfg), '\n');
-
- for (i=0; i<num_lines; ++i) {
- StrBufExtract_token(Line, Cfg, i, '\n');
- if (StrLength(Line) > 0) {
- Pos = NULL;
- StrBufExtract_NextToken(InStr, Line, &Pos, '|');
-
- pCfg = GetCfgTypeByStr(SKEY(InStr));
- if (pCfg != NULL)
- {
- pCfg->Parser(pCfg, Line, Pos, OneRNCfg);
- }
- else
- {
- if (OneRNCfg->misc == NULL)
- {
- OneRNCfg->misc = NewStrBufDup(Line);
- }
- else
- {
- if (StrLength(OneRNCfg->misc) > 0) {
- StrBufAppendBufPlain(OneRNCfg->misc, HKEY("\n"), 0);
- }
- StrBufAppendBuf(OneRNCfg->misc, Line, 0);
- }
- }
- }
- }
- FreeStrBuf(&InStr);
- FreeStrBuf(&Line);
- FreeStrBuf(&Cfg);
- return OneRNCfg;
-}
-
-
-void SaveRoomNetConfigFile(OneRoomNetCfg *OneRNCfg, long roomnum)
-{
- RoomNetCfg eCfg;
- StrBuf *Cfg = NULL;
- StrBuf *OutBuffer = NULL;
- HashPos *CfgIt;
-
- Cfg = NewStrBuf();
- OutBuffer = NewStrBuf();
- CfgIt = GetNewHashPos(CfgTypeHash, 1);
- for (eCfg = subpending; eCfg < maxRoomNetCfg; eCfg ++)
- {
- const CfgLineType *pCfg;
- pCfg = GetCfgTypeByEnum(eCfg, CfgIt);
- if (pCfg)
- {
- if (pCfg->IsSingleLine)
- {
- pCfg->Serializer(pCfg, OutBuffer, OneRNCfg, NULL);
- }
- else
- {
- RoomNetCfgLine *pName = OneRNCfg->NetConfigs[pCfg->C];
- while (pName != NULL)
- {
- pCfg->Serializer(pCfg, OutBuffer, OneRNCfg, pName);
- pName = pName->next;
- }
- }
- }
-
- }
- DeleteHashPos(&CfgIt);
-
- if (OneRNCfg->misc != NULL) {
- StrBufAppendBuf(OutBuffer, OneRNCfg->misc, 0);
- }
-
- write_netconfig_to_configdb(roomnum, ChrPtr(OutBuffer));
-
- FreeStrBuf(&OutBuffer);
- FreeStrBuf(&Cfg);
-}
-
-
-void AddRoomCfgLine(OneRoomNetCfg *OneRNCfg, struct ctdlroom *qrbuf, RoomNetCfg LineType, RoomNetCfgLine *Line)
-{
- RoomNetCfgLine **pLine;
-
- if (OneRNCfg == NULL)
- {
- OneRNCfg = (OneRoomNetCfg*) malloc(sizeof(OneRoomNetCfg));
- memset(OneRNCfg, 0, sizeof(OneRoomNetCfg));
- }
- pLine = &OneRNCfg->NetConfigs[LineType];
-
- while(*pLine != NULL) pLine = &((*pLine)->next);
- *pLine = Line;
-}
-
-
-void FreeRoomNetworkStructContent(OneRoomNetCfg *OneRNCfg)
-{
- RoomNetCfg eCfg;
- HashPos *CfgIt;
-
- CfgIt = GetNewHashPos(CfgTypeHash, 1);
- for (eCfg = subpending; eCfg < maxRoomNetCfg; eCfg ++)
- {
- const CfgLineType *pCfg;
- RoomNetCfgLine *pNext, *pName;
-
- pCfg = GetCfgTypeByEnum(eCfg, CfgIt);
- pName= OneRNCfg->NetConfigs[eCfg];
- while (pName != NULL)
- {
- pNext = pName->next;
- if (pCfg != NULL)
- {
- pCfg->DeAllocator(pCfg, &pName);
- }
- else
- {
- DeleteGenericCfgLine(NULL, &pName);
- }
- pName = pNext;
- }
- }
- DeleteHashPos(&CfgIt);
-
- FreeStrBuf(&OneRNCfg->Sender);
- FreeStrBuf(&OneRNCfg->RoomInfo);
- FreeStrBuf(&OneRNCfg->misc);
- memset(OneRNCfg, 0, sizeof(OneRoomNetCfg));
-}
-
-
-void vFreeRoomNetworkStruct(void *vOneRoomNetCfg)
-{
- OneRoomNetCfg *OneRNCfg;
- OneRNCfg = (OneRoomNetCfg*)vOneRoomNetCfg;
- FreeRoomNetworkStructContent(OneRNCfg);
- free(OneRNCfg);
-}
-
-
-void FreeRoomNetworkStruct(OneRoomNetCfg **pOneRNCfg)
-{
- vFreeRoomNetworkStruct(*pOneRNCfg);
- *pOneRNCfg=NULL;
-}
-
-
-/*
- * Fetch the netconfig entry for a room, parse it, and return the data.
- * Caller owns the returned memory and MUST free it using FreeRoomNetworkStruct()
- */
-OneRoomNetCfg *CtdlGetNetCfgForRoom(long roomnum)
-{
- OneRoomNetCfg *OneRNCfg = NULL;
- char *serialized_config = NULL;
-
- serialized_config = LoadRoomNetConfigFile(roomnum);
- if (!serialized_config) return NULL;
-
- OneRNCfg = ParseRoomNetConfigFile(serialized_config);
- free(serialized_config);
- return OneRNCfg;
-}
-
-