--- sresolv.c.cvs	2006-04-24 15:25:02.000000000 -0300
+++ sresolv.c	2006-04-24 15:15:12.000000000 -0300
@@ -75,7 +75,11 @@
 
 #define SU_LOG sresolv_log
 
-#include <sofia-sip/su_debug.h>
+#include <sofia-sip/su_debug.h>
+
+#ifdef _WIN32
+#include <winreg.h>
+#endif
 
 /**@var SRESOLV_DEBUG
  *
@@ -1171,7 +1175,19 @@
 static 
 int
 sres_parse_resolv_conf(sres_resolver_t *res, const char *filename)
-{
+{
+#ifdef _WIN32
+  HKEY key_handle, interface_key_handle;  
+  FILETIME ftime;
+  int ret;
+  int index;
+  char interface_guid[64];
+  char name_servers[64];
+  int name_servers_length = 64;
+  int guid_size = 64;
+  su_strlst_t *reg_dns_list;
+#endif
+
   char buf[PATH_MAX];
   FILE *f;
   int line;
@@ -1180,7 +1196,7 @@
   sres_server_t *dns;
   int num_servers, i, search = 0;
   char const *localdomain = getenv("LOCALDOMAIN");
-
+
   res->res_search[0] = localdomain;
 
   dns_list = su_strlst_create(home);
@@ -1240,14 +1256,59 @@
 
     fclose(f);
   }
-  
+  
+#ifdef _WIN32
+  /* open Interfaces registry Key */
+  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces",0,KEY_READ,&key_handle)){
+    SU_DEBUG_2(("RegOpenKeyEx failed\n"));
+  }else{
+    index = 0;
+    /* for each interface listed ... */
+    while(RegEnumKeyEx(key_handle,index,interface_guid,&guid_size,NULL,NULL,0,&ftime) == ERROR_SUCCESS){
+      if(RegOpenKeyEx(key_handle,interface_guid,0,KEY_READ,&interface_key_handle) == ERROR_SUCCESS){
+        name_servers_length = 64;
+        /* get name servers and ... */
+        ret = RegQueryValueEx(interface_key_handle,"NameServer",NULL,NULL,name_servers,&name_servers_length);
+        /* ignore data in excess of 64 byts. 64 bytes should fit plenty of nameservers */
+        if((ret == ERROR_SUCCESS) || (ret == ERROR_MORE_DATA)){
+          if(name_servers[0]){
+            SU_DEBUG_3(("Got nameservers %s from registry\n",name_servers));
+              
+            /* add to list */
+            reg_dns_list = su_strlst_split(home, name_servers,",");
+
+            for(i = 0 ; i < su_strlst_len(reg_dns_list); i++){
+              su_strlst_dup_append(dns_list,su_strlst_item(reg_dns_list,i));
+            }
+
+            su_strlst_destroy(reg_dns_list);
+          }else{
+            SU_DEBUG_3(("Interface has no nameservers\n"));
+          }
+        }
+        RegCloseKey(interface_key_handle);
+      }else{
+        SU_DEBUG_2(("interface RegOpenKeyEx failed\n"));
+      }
+      index++;
+      guid_size = 64;
+    }
+    RegCloseKey(key_handle);
+  }
+
+  num_servers = su_strlst_len(dns_list);
+
+#else 
+
   num_servers = su_strlst_len(dns_list);
 
   if (num_servers == 0) {
     su_strlst_dup_append(dns_list, "127.0.0.1");
     num_servers++;
   }
+
+#endif
 
   res->res_n_servers = num_servers;
   dns = su_zalloc(res->res_home, num_servers * sizeof(*res->res_servers));
   res->res_servers = dns;
