// DHCP enumeration void NmDhcpRefresh(HWND hWnd, SM_HUB *r) { LVB *b; RPC_ENUM_DHCP t; UINT i; // Validate arguments if (hWnd == NULL || r == NULL) { Close(hWnd); return; } Zero(&t, sizeof(t)); StrCpy(t.HubName, sizeof(t.HubName), r->HubName); if (CALL(hWnd, ScEnumDHCP(r->Rpc, &t)) == false) { return; } b = LvInsertStart(); for (i = 0;i < t.NumItem;i++) { RPC_ENUM_DHCP_ITEM *e = &t.Items[i]; wchar_t tmp0[MAX_SIZE]; wchar_t tmp1[MAX_SIZE]; wchar_t tmp2[MAX_SIZE]; wchar_t tmp3[MAX_SIZE]; wchar_t tmp4[MAX_SIZE]; wchar_t tmp5[MAX_SIZE]; char str[MAX_SIZE]; // ID UniToStru(tmp0, e->Id); // Time GetDateTimeStrEx64(tmp1, sizeof(tmp1), SystemToLocal64(e->LeasedTime), NULL); GetDateTimeStrEx64(tmp2, sizeof(tmp2), SystemToLocal64(e->ExpireTime), NULL); MacToStr(str, sizeof(str), e->MacAddress); StrToUni(tmp3, sizeof(tmp3), str); IPToStr32(str, sizeof(str), e->IpAddress); StrToUni(tmp4, sizeof(tmp4), str); StrToUni(tmp5, sizeof(tmp5), e->Hostname); LvInsertAdd(b, ICO_INTERNET, NULL, 6, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5); } LvInsertEnd(b, hWnd, L_TABLE); FreeRpcEnumDhcp(&t); }
UINT NtEnumDhcpList(NAT *n, RPC_ENUM_DHCP *t) { UINT ret = ERR_NO_ERROR; VH *v = NULL; Lock(n->lock); { v = n->Virtual; if (n->Online == false || v == NULL) { ret = ERR_OFFLINE; } else { LockVirtual(v); { if (v->Active == false) { ret = ERR_OFFLINE; } else { FreeRpcEnumDhcp(t); Zero(t, sizeof(RPC_ENUM_DHCP)); LockList(v->DhcpLeaseList); { UINT i; t->NumItem = LIST_NUM(v->DhcpLeaseList); t->Items = ZeroMalloc(sizeof(RPC_ENUM_DHCP_ITEM) * t->NumItem); for (i = 0;i < t->NumItem;i++) { DHCP_LEASE *dhcp = LIST_DATA(v->DhcpLeaseList, i); RPC_ENUM_DHCP_ITEM *e = &t->Items[i]; e->Id = dhcp->Id; e->LeasedTime = TickToTime(dhcp->LeasedTime); e->ExpireTime = TickToTime(dhcp->ExpireTime); Copy(e->MacAddress, dhcp->MacAddress, 6); e->IpAddress = dhcp->IpAddress; e->Mask = dhcp->Mask; StrCpy(e->Hostname, sizeof(e->Hostname), dhcp->Hostname); } } UnlockList(v->DhcpLeaseList); } } UnlockVirtual(v); } } Unlock(n->lock); return ret; }