// Update void NmMainDlgRefresh(HWND hWnd, RPC *r) { #if 0 RPC_NAT_STATUS t; wchar_t tmp[MAX_SIZE]; wchar_t tmp2[MAX_SIZE]; // Validate arguments if (r == NULL || hWnd == NULL) { return; } Zero(&t, sizeof(RPC_NAT_STATUS)); CALL(hWnd, NcGetStatus(r, &t)); if (t.Online == false) { UniStrCpy(tmp, sizeof(tmp), _UU("NM_OFFLINE")); Enable(hWnd, B_CONNECT); Disable(hWnd, B_DISCONNECT); } else { if (t.Connected) { UniFormat(tmp, sizeof(tmp), _UU("NM_CONNECTED"), t.Status.ServerName); } else { if (t.LastError == ERR_NO_ERROR) { UniStrCpy(tmp, sizeof(tmp), _UU("NM_CONNECTING")); } else { UniFormat(tmp, sizeof(tmp), _UU("NM_CONNECT_ERROR"), t.LastError, _E(t.LastError)); } } Disable(hWnd, B_CONNECT); Enable(hWnd, B_DISCONNECT); } UniFormat(tmp2, sizeof(tmp2), _UU("NM_STATUS_TAG"), tmp); SetText(hWnd, S_STATUS, tmp2); FreeRpcNatStatus(&t); #endif }
// Show the status of the router bool NmStatus(HWND hWnd, SM_SERVER *s, void *param) { LVB *b; RPC_NAT_STATUS t; wchar_t tmp[MAX_SIZE]; SM_HUB *h = (SM_HUB *)param; // Validate arguments if (hWnd == NULL || s == NULL) { return false; } Zero(&t, sizeof(t)); StrCpy(t.HubName, sizeof(t.HubName), h->HubName); if (CALL(hWnd, ScGetSecureNATStatus(s->Rpc, &t)) == false) { return false; } b = LvInsertStart(); StrToUni(tmp, sizeof(tmp), h->HubName); LvInsertAdd(b, ICO_HUB, NULL, 2, _UU("SM_HUB_COLUMN_1"), tmp); UniFormat(tmp, sizeof(tmp), _UU("SM_SNAT_NUM_SESSION"), t.NumTcpSessions); LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("NM_STATUS_TCP"), tmp); UniFormat(tmp, sizeof(tmp), _UU("SM_SNAT_NUM_SESSION"), t.NumUdpSessions); LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("NM_STATUS_UDP"), tmp); UniFormat(tmp, sizeof(tmp), _UU("SM_SNAT_NUM_SESSION"), t.NumIcmpSessions); LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("NM_STATUS_ICMP"), tmp); UniFormat(tmp, sizeof(tmp), _UU("SM_SNAT_NUM_SESSION"), t.NumDnsSessions); LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("NM_STATUS_DNS"), tmp); UniFormat(tmp, sizeof(tmp), _UU("SM_SNAT_NUM_CLIENT"), t.NumDhcpClients); LvInsertAdd(b, ICO_PROTOCOL_DHCP, NULL, 2, _UU("NM_STATUS_DHCP"), tmp); LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_SNAT_IS_KERNEL"), t.IsKernelMode ? _UU("SEC_YES") : _UU("SEC_NO")); LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_SNAT_IS_RAW"), t.IsRawIpMode ? _UU("SEC_YES") : _UU("SEC_NO")); LvInsertEnd(b, hWnd, L_STATUS); FreeRpcNatStatus(&t); return true; }
// 状態の取得 UINT NtGetStatus(NAT *n, RPC_NAT_STATUS *t) { Lock(n->lock); { VH *v = n->Virtual; FreeRpcNatStatus(t); Zero(t, sizeof(RPC_NAT_STATUS)); LockVirtual(v); { UINT i; LockList(v->NatTable); { for (i = 0;i < LIST_NUM(v->NatTable);i++) { NAT_ENTRY *e = LIST_DATA(v->NatTable, i); switch (e->Protocol) { case NAT_TCP: t->NumTcpSessions++; break; case NAT_UDP: t->NumUdpSessions++; break; } } } UnlockList(v->NatTable); t->NumDhcpClients = LIST_NUM(v->DhcpLeaseList); } UnlockVirtual(v); } Unlock(n->lock); return ERR_NO_ERROR; }
// Get the state UINT NtGetStatus(NAT *n, RPC_NAT_STATUS *t) { Lock(n->lock); { VH *v = n->Virtual; FreeRpcNatStatus(t); Zero(t, sizeof(RPC_NAT_STATUS)); LockVirtual(v); { UINT i; LockList(v->NatTable); { for (i = 0;i < LIST_NUM(v->NatTable);i++) { NAT_ENTRY *e = LIST_DATA(v->NatTable, i); switch (e->Protocol) { case NAT_TCP: t->NumTcpSessions++; break; case NAT_UDP: t->NumUdpSessions++; break; case NAT_ICMP: t->NumIcmpSessions++; break; case NAT_DNS: t->NumDnsSessions++; break; } } if (NnIsActive(v) && v->NativeNat != NULL) { NATIVE_NAT *nn = v->NativeNat; for (i = 0;i < LIST_NUM(nn->NatTableForSend->AllList);i++) { NATIVE_NAT_ENTRY *e = LIST_DATA(nn->NatTableForSend->AllList, i); switch (e->Protocol) { case NAT_TCP: t->NumTcpSessions++; break; case NAT_UDP: t->NumUdpSessions++; break; case NAT_ICMP: t->NumIcmpSessions++; break; case NAT_DNS: t->NumDnsSessions++; break; } } } } UnlockList(v->NatTable); t->NumDhcpClients = LIST_NUM(v->DhcpLeaseList); t->IsKernelMode = NnIsActiveEx(v, &t->IsRawIpMode); } UnlockVirtual(v); } Unlock(n->lock); return ERR_NO_ERROR; }