// Update the adapter list void UtSpeedMeterDlgRefreshList(HWND hWnd) { wchar_t *old; MS_ADAPTER_LIST *o; UINT i; // Validate arguments if (hWnd == NULL) { return; } if (g_ut_adapter_list_updating) { return; } g_ut_adapter_list_updating = true; // Get the current selection old = GetText(hWnd, E_LIST); if (old != NULL) { if (UniStrLen(old) == 0) { Free(old); old = NULL; } } o = MsCreateAdapterList(); CbReset(hWnd, E_LIST); CbSetHeight(hWnd, E_LIST, 18); for (i = 0;i < o->Num;i++) { wchar_t tmp[MAX_SIZE]; MS_ADAPTER *a = o->Adapters[i]; if (a->Info) { StrToUni(tmp, sizeof(tmp), a->Title); CbAddStr(hWnd, E_LIST, tmp, 0); } } // Re-select the previous selection if (old != NULL) { CbSelectIndex(hWnd, E_LIST, CbFindStr(hWnd, E_LIST, old)); Free(old); } MsFreeAdapterList(o); g_ut_adapter_list_updating = false; }
// Hash the list of current Ethernet devices UINT GetEthDeviceHash() { #ifdef OS_UNIX // UNIX UINT num; UINT i; char tmp[4096]; UCHAR hash[SHA1_SIZE]; TOKEN_LIST *t = GetEthList(); num = t->NumTokens; tmp[0] = 0; for (i = 0;i < t->NumTokens;i++) { StrCat(tmp, sizeof(tmp), t->Token[i]); } FreeToken(t); Hash(hash, tmp, StrLen(tmp), true); Copy(&num, hash, sizeof(UINT)); return num; #else // OS_UNIX // Win32 UINT ret = 0; MS_ADAPTER_LIST *a = MsCreateAdapterListEx(true); UINT num; UINT i; char tmp[4096]; UCHAR hash[SHA1_SIZE]; tmp[0] = 0; if (a != NULL) { for (i = 0;i < a->Num;i++) { StrCat(tmp, sizeof(tmp), a->Adapters[i]->Title); } } MsFreeAdapterList(a); Hash(hash, tmp, StrLen(tmp), true); Copy(&num, hash, sizeof(UINT)); return num; #endif // OS_UNIX }
// アダプタリストの更新 void UtSpeedMeterDlgRefreshList(HWND hWnd) { wchar_t *old; MS_ADAPTER_LIST *o; UINT i; // 引数チェック if (hWnd == NULL) { return; } // 現在の選択を取得 old = GetText(hWnd, E_LIST); if (old != NULL) { if (UniStrLen(old) == 0) { Free(old); old = NULL; } } o = MsCreateAdapterList(); CbReset(hWnd, E_LIST); CbSetHeight(hWnd, E_LIST, 18); for (i = 0;i < o->Num;i++) { wchar_t tmp[MAX_SIZE]; MS_ADAPTER *a = o->Adapters[i]; if (a->Info) { StrToUni(tmp, sizeof(tmp), a->Title); CbAddStr(hWnd, E_LIST, tmp, 0); } } // 前回の選択を再選択 if (old != NULL) { CbSelectIndex(hWnd, E_LIST, CbFindStr(hWnd, E_LIST, old)); Free(old); } MsFreeAdapterList(o); }
TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden) { TOKEN_LIST *ret; UINT i; UINT j; UINT dummy_int; MS_ADAPTER_LIST *adapter_list; if (IsEthSupported() == false) { return NULL; } if (total_num_including_hidden == NULL) { total_num_including_hidden = &dummy_int; } *total_num_including_hidden = 0; Lock(eth_list_lock); InitEthAdaptersList(); adapter_list = MsCreateAdapterList(); ret = ZeroMalloc(sizeof(TOKEN_LIST)); ret->NumTokens = LIST_NUM(eth_list); ret->Token = ZeroMalloc(sizeof(char *) * ret->NumTokens); j = 0; for (i = 0;i < ret->NumTokens;i++) { char tmp[MAX_SIZE]; WP_ADAPTER *a = LIST_DATA(eth_list, i); MS_ADAPTER *msa = NULL; bool show = true; if (Win32EthGetShowAllIf() == false) { msa = MsGetAdapterByGuidFromList(adapter_list, a->Guid); if (InStr(a->Title, "vpn client adapter")) { // Hide virtual NIC for VPN client show = false; } if (InStr(a->Title, "tunnel adapter")) { // Hide tunnel adapter show = false; } if (InStr(a->Title, "teredo tunnel")) { // Hide tunnel adapter show = false; } if (InStr(a->Title, "MS Tunnel Interface")) { // Hide tunnel adapter show = false; } if (InStr(a->Title, "pseudo-interface")) { // Hide tunnel adapter show = false; } } if (msa != NULL) { // Hide except physical Ethernet NIC if (msa->IsNotEthernetLan) { show = false; } MsFreeAdapter(msa); } Win32EthMakeCombinedName(tmp, sizeof(tmp), a->Title, a->Guid); if (show) { ret->Token[j++] = CopyStr(tmp); Debug("%s - %s\n", a->Guid, a->Title); } } *total_num_including_hidden = ret->NumTokens; ret->NumTokens = j; Unlock(eth_list_lock); MsFreeAdapterList(adapter_list); return ret; }