// Set the connection settings UINT NtSetClientConfig(NAT *n, RPC_CREATE_LINK *t) { Lock(n->lock); { if (n->ClientOption != NULL || n->ClientAuth != NULL) { Free(n->ClientOption); CiFreeClientAuth(n->ClientAuth); } n->ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION)); Copy(n->ClientOption, t->ClientOption, sizeof(CLIENT_OPTION)); n->ClientAuth = CopyClientAuth(t->ClientAuth); } Unlock(n->lock); NiWriteConfig(n); if (n->Online) { NtOffline(n, NULL); NtOnline(n, NULL); } return ERR_NO_ERROR; }
// Edit the client configuration void NmEditClientConfig(HWND hWnd, RPC *r) { CM_ACCOUNT a; RPC_CREATE_LINK t; bool ret = false; // Validate arguments if (hWnd == NULL || r == NULL) { return; } Zero(&a, sizeof(a)); Zero(&t, sizeof(t)); a.ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION)); a.NatMode = true; a.Rpc = r; if (CALLEX(hWnd, NcGetClientConfig(r, &t)) != ERR_NO_ERROR) { // Create New a.ClientOption->Port = 443; a.ClientOption->RetryInterval = 15; a.ClientOption->NumRetry = INFINITE; a.ClientOption->AdditionalConnectionInterval = 1; a.ClientOption->UseEncrypt = true; a.ClientOption->NoRoutingTracking = true; a.ClientAuth = ZeroMalloc(sizeof(CLIENT_AUTH)); a.ClientAuth->AuthType = CLIENT_AUTHTYPE_PASSWORD; } else { // Edit a.EditMode = true; Copy(a.ClientOption, t.ClientOption, sizeof(CLIENT_OPTION)); a.ClientAuth = CopyClientAuth(t.ClientAuth); FreeRpcCreateLink(&t); } ret = CmEditAccountDlg(hWnd, &a); Free(a.ServerCert); Free(a.ClientOption); CiFreeClientAuth(a.ClientAuth); }
// Release the NAT configuration void NiFreeConfig(NAT *n) { // Validate arguments if (n == NULL) { return; } // Write the latest configuration NiWriteConfig(n); // Release the configuration R/W FreeCfgRw(n->CfgRw); n->CfgRw = NULL; Free(n->ClientOption); CiFreeClientAuth(n->ClientAuth); FreeX(n->AdminX); FreeK(n->AdminK); }
// NAT の設定の解放 void NiFreeConfig(NAT *n) { // 引数チェック if (n == NULL) { return; } // 最新の設定の書き込み NiWriteConfig(n); // 設定 R/W の解放 FreeCfgRw(n->CfgRw); n->CfgRw = NULL; Free(n->ClientOption); CiFreeClientAuth(n->ClientAuth); FreeX(n->AdminX); FreeK(n->AdminK); }
// Clean-up the link void CleanupLink(LINK *k) { // Validate arguments if (k == NULL) { return; } DeleteLock(k->lock); if (k->ClientSession) { ReleaseSession(k->ClientSession); } Free(k->Option); CiFreeClientAuth(k->Auth); Free(k->Policy); if (k->ServerCert != NULL) { FreeX(k->ServerCert); } Free(k); }