| 388 { |
388 { |
| 389 guint net_cnt = 0; |
389 guint net_cnt = 0; |
| 390 |
390 |
| 391 WSAQUERYSET qs; |
391 WSAQUERYSET qs; |
| 392 HANDLE h; |
392 HANDLE h; |
| 393 int retval; |
393 gint retval; |
| |
394 int errorid; |
| 394 |
395 |
| 395 memset(&qs, 0, sizeof(WSAQUERYSET)); |
396 memset(&qs, 0, sizeof(WSAQUERYSET)); |
| 396 qs.dwSize = sizeof(WSAQUERYSET); |
397 qs.dwSize = sizeof(WSAQUERYSET); |
| 397 qs.dwNameSpace = NS_NLA; |
398 qs.dwNameSpace = NS_NLA; |
| 398 |
399 |
| 399 retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h); |
400 retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h); |
| 400 if (retval != ERROR_SUCCESS) { |
401 if (retval != ERROR_SUCCESS) { |
| 401 int errorid = WSAGetLastError(); |
402 gchar *msg; |
| 402 gchar *msg = g_win32_error_message(errorid); |
403 errorid = WSAGetLastError(); |
| |
404 msg = g_win32_error_message(errorid); |
| 403 gaim_debug_warning("network", "Couldn't retrieve NLA SP lookup handle. " |
405 gaim_debug_warning("network", "Couldn't retrieve NLA SP lookup handle. " |
| 404 "NLA service is probably not running. Message: %s (%d).\n", |
406 "NLA service is probably not running. Message: %s (%d).\n", |
| 405 msg, errorid); |
407 msg, errorid); |
| 406 g_free(msg); |
408 g_free(msg); |
| 407 |
409 |
| 408 return -1; |
410 return -1; |
| 409 } else { |
411 } else { |
| 410 char buf[1024]; |
412 char buf[1024]; |
| 411 WSAQUERYSET *res = (LPWSAQUERYSET) buf; |
413 WSAQUERYSET *res = (LPWSAQUERYSET) buf; |
| 412 DWORD size = sizeof(buf); |
414 DWORD size = sizeof(buf); |
| 413 while (WSALookupServiceNext(h, 0, &size, res) == ERROR_SUCCESS) { |
415 while ((retval = WSALookupServiceNext(h, 0, &size, res)) == ERROR_SUCCESS) { |
| 414 net_cnt++; |
416 net_cnt++; |
| 415 gaim_debug_info("network", "found network '%s'\n", |
417 gaim_debug_info("network", "found network '%s'\n", |
| 416 res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"); |
418 res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"); |
| 417 size = sizeof(buf); |
419 size = sizeof(buf); |
| 418 } |
420 } |
| 419 |
421 |
| 420 WSALookupServiceEnd(h); |
422 errorid = WSAGetLastError(); |
| |
423 if (!(errorid == WSA_E_NO_MORE || errorid == WSAENOMORE)) { |
| |
424 gchar *msg = g_win32_error_message(errorid); |
| |
425 gaim_debug_error("network", "got unexpected NLA response %s (%d)\n", msg, errorid); |
| |
426 g_free(msg); |
| |
427 |
| |
428 net_cnt = -1; |
| |
429 } |
| |
430 |
| |
431 retval = WSALookupServiceEnd(h); |
| 421 } |
432 } |
| 422 |
433 |
| 423 return net_cnt; |
434 return net_cnt; |
| 424 |
435 |
| 425 } |
436 } |