// Convert the binary to folder FOLDER *CfgBufBinToFolder(BUF *b) { FOLDER *f, *c; // Validate arguments if (b == NULL) { return NULL; } // Create a temporary folder c = CfgCreateFolder(NULL, "tmp"); // Read a binary CfgReadNextFolderBin(b, c); // Get root folder f = CfgGetFolder(c, TAG_ROOT); if (f == NULL) { // Missing CfgDeleteFolder(c); return NULL; } Delete(c->Folders, f); f->Parent = NULL; CfgDeleteFolder(c); return f; }
void CfgTest() { #if 0 FOLDER *root; BUF *b; Debug("\nCFG Test Begin\n"); root = CfgCreateFolder(NULL, TAG_ROOT); CfgTest2(root, 5); b = CfgFolderToBufText(root); //Print("%s\n", b->Buf); SeekBuf(b, 0, 0); CfgDeleteFolder(root); DumpBuf(b, "test1.config"); root = CfgBufTextToFolder(b); FreeBuf(b); b = CfgFolderToBufText(root); // Print("%s\n", b->Buf); DumpBuf(b, "test2.config"); FreeBuf(b); CfgSave(root, "test.txt"); CfgDeleteFolder(root); Debug("\nCFG Test End\n"); #endif }
// Reading configuration bool ElLoadConfig(EL *e) { FOLDER *root; bool ret = false; // Validate arguments if (e == NULL) { return false; } e->Port = EL_ADMIN_PORT; e->CfgRw = NewCfgRw(&root, EL_CONFIG_FILENAME); if (root != NULL) { ElLoadConfigFromFolder(e, root); CfgDeleteFolder(root); } else { char *pass = ""; Hash(e->HashedPassword, pass, StrLen(pass), true); e->AutoDeleteCheckDiskFreeSpaceMin = DISK_FREE_SPACE_DEFAULT; } return ret; }
// Convert the stream text to a folder FOLDER *CfgBufTextToFolder(BUF *b) { FOLDER *f, *c; // Validate arguments if (b == NULL) { return NULL; } // Read recursively from the root folder c = CfgCreateFolder(NULL, "tmp"); while (true) { // Read the text stream if (CfgReadNextTextBUF(b, c) == false) { break; } } // Getting root folder f = CfgGetFolder(c, TAG_ROOT); if (f == NULL) { // Root folder is not found CfgDeleteFolder(c); return NULL; } // Remove the reference from tmp folder to the root Delete(c->Folders, f); f->Parent = NULL; // Delete the tmp folder CfgDeleteFolder(c); // Return the root folder return f; }
// Write the configuration void ElSaveConfig(EL *e) { FOLDER *root; // Validate arguments if (e == NULL) { return; } root = CfgCreateFolder(NULL, TAG_ROOT); ElSaveConfigToFolder(e, root); SaveCfgRw(e->CfgRw, root); CfgDeleteFolder(root); }
// Delete the folder void CfgDeleteFolder(FOLDER *f) { FOLDER **ff; ITEM **tt; UINT num, i; // Validate arguments if (f == NULL) { return; } // Remove all subfolders num = LIST_NUM(f->Folders); ff = Malloc(sizeof(FOLDER *) * num); Copy(ff, f->Folders->p, sizeof(FOLDER *) * num); for (i = 0;i < num;i++) { CfgDeleteFolder(ff[i]); } Free(ff); // Remove all items num = LIST_NUM(f->Items); tt = Malloc(sizeof(ITEM *) * num); Copy(tt, f->Items->p, sizeof(ITEM *) * num); for (i = 0;i < num;i++) { CfgDeleteItem(tt[i]); } Free(tt); // Memory release Free(f->Name); // Remove from the parent list if (f->Parent != NULL) { Delete(f->Parent->Folders, f); } // Release the list ReleaseList(f->Folders); ReleaseList(f->Items); // Release of the memory of the body Free(f); }
// Write the configuration to a file void NiWriteConfig(NAT *n) { // Validate arguments if (n == NULL) { return; } Lock(n->lock); { FOLDER *root = CfgCreateFolder(NULL, TAG_ROOT); BUF *b; // Certificate b = XToBuf(n->AdminX, false); CfgAddBuf(root, "AdminCert", b); FreeBuf(b); // Secret key b = KToBuf(n->AdminK, false, NULL); CfgAddBuf(root, "AdminKey", b); FreeBuf(b); // Password CfgAddByte(root, "HashedPassword", n->HashedPassword, sizeof(n->HashedPassword)); CfgAddInt(root, "AdminPort", n->AdminPort); CfgAddBool(root, "Online", n->Online); // Virtual host option NiWriteVhOption(n, root); // Connection options if (n->ClientOption != NULL && n->ClientAuth != NULL) { NiWriteClientData(n, root); } SaveCfgRw(n->CfgRw, root); CfgDeleteFolder(root); } Unlock(n->lock); }
// 設定をファイルに書き込む void NiWriteConfig(NAT *n) { // 引数チェック if (n == NULL) { return; } Lock(n->lock); { FOLDER *root = CfgCreateFolder(NULL, TAG_ROOT); BUF *b; // 証明書 b = XToBuf(n->AdminX, false); CfgAddBuf(root, "AdminCert", b); FreeBuf(b); // 秘密鍵 b = KToBuf(n->AdminK, false, NULL); CfgAddBuf(root, "AdminKey", b); FreeBuf(b); // パスワード CfgAddByte(root, "HashedPassword", n->HashedPassword, sizeof(n->HashedPassword)); CfgAddInt(root, "AdminPort", n->AdminPort); CfgAddBool(root, "Online", n->Online); // 仮想ホストオプション NiWriteVhOption(n, root); // 接続オプション if (n->ClientOption != NULL && n->ClientAuth != NULL) { NiWriteClientData(n, root); } SaveCfgRw(n->CfgRw, root); CfgDeleteFolder(root); } Unlock(n->lock); }