[NeoStats-Devel] [Commits] r2463 - trunk/lib/adns

[email protected]
Newsgroups gmane.comp.neostats.devel
Message-ID <[email protected]>
Author: Mark
Date: Thu Apr  7 04:54:32 2005
New Revision: 2463

Modified:
   trunk/lib/adns/event.c
   trunk/lib/adns/internal.h
   trunk/lib/adns/setup.c
Log:
more adns win32 tidy ups and porting to os socket layer

Modified: trunk/lib/adns/event.c
==============================================================================
--- trunk/lib/adns/event.c	(original)
+++ trunk/lib/adns/event.c	Thu Apr  7 04:54:32 2005
@@ -124,21 +124,21 @@
 		assert(!ads->tcprecv_skip);
 
 		proto = getprotobyname("tcp");
-    if (!proto) { adns__diag(ads,-1,0,"unable to find protocol no. for TCP !"); return; }
-	ADNS_CLEAR_ERRNO
+		if (!proto) 
+		{ 
+			adns__diag(ads,-1,0,"unable to find protocol no. for TCP !"); 
+			return; 
+		}
+		ADNS_CLEAR_ERRNO;
 		fd = socket(AF_INET, SOCK_STREAM, proto->p_proto);
-	ADNS_CAPTURE_ERRNO;
+		ADNS_CAPTURE_ERRNO;
 		if (fd < 0) {
-			adns__diag(ads, -1, 0,
-				   "cannot create TCP socket: %s",
-				   strerror(errno));
+			adns__diag(ads, -1, 0, "cannot create TCP socket: %s", strerror(errno));
 			return;
 		}
-		r = adns__setnonblock(ads, fd);
-		if (r) {
-			adns__diag(ads, -1, 0,
-				   "cannot make TCP socket nonblocking: %s",
-				   strerror(r));
+		if( os_sock_set_nonblocking( fd ) < 0 )
+		{
+			adns__diag(ads, -1, 0, "cannot make TCP socket nonblocking: %s", strerror(r));
 			os_sock_close(fd);
 			return;
 		}
@@ -146,9 +146,9 @@
 		addr.sin_family = AF_INET;
 		addr.sin_port = htons(DNS_PORT);
 		addr.sin_addr = ads->servers[ads->tcpserver].addr;
-    ADNS_CLEAR_ERRNO;
-    r= connect(fd,(const struct sockaddr*)&addr,sizeof(addr));
-    ADNS_CAPTURE_ERRNO;
+		ADNS_CLEAR_ERRNO;
+		r= connect(fd,(const struct sockaddr*)&addr,sizeof(addr));
+		ADNS_CAPTURE_ERRNO;
 		ads->tcpsocket = fd;
 		ads->tcpstate = server_connecting;
 		if (r == 0) {

Modified: trunk/lib/adns/internal.h
==============================================================================
--- trunk/lib/adns/internal.h	(original)
+++ trunk/lib/adns/internal.h	Thu Apr  7 04:54:32 2005
@@ -344,10 +344,6 @@
 	char **searchlist;
 };
 
-/* From setup.c: */
-
-int adns__setnonblock(adns_state ads, OS_SOCKET fd); /* => errno value */
-
 /* From general.c: */
 
 void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent,

Modified: trunk/lib/adns/setup.c
==============================================================================
--- trunk/lib/adns/setup.c	(original)
+++ trunk/lib/adns/setup.c	Thu Apr  7 04:54:32 2005
@@ -557,36 +557,11 @@
 }
 
 
-int adns__setnonblock(adns_state ads, OS_SOCKET fd) {
-#ifdef WIN32
-   unsigned long Val = 1;
-   return (ioctlsocket (fd, FIONBIO, &Val) == 0) ? 0 : -1;
-#else
-	int r;
-
-	r = fcntl(fd, F_GETFL, 0);
-	if (r < 0)
-		return errno;
-	r |= O_NONBLOCK;
-	r = fcntl(fd, F_SETFL, r);
-	if (r < 0)
-		return errno;
-	return 0;
-#endif
-}
-
-static int init_begin(adns_state * ads_r, adns_initflags flags,
-		      FILE * diagfile)
+static int init_begin(adns_state * ads_r, adns_initflags flags, FILE * diagfile)
 {
 	adns_state ads;
 
-#ifdef WIN32  
-  WORD wVersionRequested = MAKEWORD( 2, 0 );
-  WSADATA wsaData;
-  int err;
-#endif
-    
-  ads= ns_malloc(sizeof(*ads)); if (!ads) return errno;
+	ads= ns_malloc(sizeof(*ads)); if (!ads) return errno;
 
 	ads->iflags = flags;
 	ads->diagfile = diagfile;
@@ -602,30 +577,13 @@
 	adns__vbuf_init(&ads->tcprecv);
 	ads->tcprecv_skip = 0;
 	ads->nservers = ads->nsortlist = ads->nsearchlist =
-	    ads->tcpserver = 0;
+	ads->tcpserver = 0;
 	ads->searchndots = 1;
 	ads->tcpstate = server_disconnected;
 	timerclear(&ads->tcptimeout);
 	ads->searchlist = 0;
 
- #ifdef WIN32 
-  err= WSAStartup( wVersionRequested, &wsaData );
-  if ( err != 0 ) {
-    if (ads->diagfile && ads->iflags & adns_if_debug)
-      fprintf(ads->diagfile,"adns: WSAStartup() failed. \n");
-    return -1;}
-  if (LOBYTE( wsaData.wVersion ) != 2 ||
-    HIBYTE( wsaData.wVersion ) != 0 ) {
-    if (ads->diagfile && ads->iflags & adns_if_debug)
-      fprintf(ads->diagfile,"adns: Need Winsock 2.0 or better!\n");
-    
-    WSACleanup();
-    return -1;}
-  
-  /* The WinSock DLL is acceptable. Proceed. */
-#endif
-
-	*ads_r = ads;
+ 	*ads_r = ads;
 	return 0;
 }
 
@@ -637,8 +595,7 @@
 
 	if (!ads->nservers) {
 		if (ads->diagfile && ads->iflags & adns_if_debug)
-			fprintf(ads->diagfile,
-				"adns: no nameservers, using localhost\n");
+			fprintf(ads->diagfile, "adns: no nameservers, using localhost\n");
 		ia.s_addr = htonl(INADDR_LOOPBACK);
 		addserver(ads, ia);
 	}
@@ -656,37 +613,29 @@
 		goto x_free;
 	}
 
-	r = adns__setnonblock(ads, ads->udpsocket);
-	if (r) {
+	if( os_sock_set_nonblocking( ads->udpsocket ) < 0 )
+	{
 		r = errno;
-		goto x_closeudp;
+		os_sock_close(ads->udpsocket);
+		goto x_free;
 	}
     if (ads->fdfunc)
-      ads->fdfunc(ads->udpsocket, POLLIN);
-/* EVNT read */
+		ads->fdfunc(ads->udpsocket, POLLIN);
+	/* EVNT read */
 	return 0;
-
-      x_closeudp:
-  os_sock_close(ads->udpsocket);
-      x_free:
-  ns_free(ads);
-#ifdef WIN32
-  WSACleanup();
-#endif /* WIN32 */
+	
+x_free:
+	ns_free(ads);
 	return r;
 }
 
 static void init_abort(adns_state ads)
 {
 	if (ads->nsearchlist) {
-    ns_free(ads->searchlist[0]);
-    ns_free(ads->searchlist);
+		ns_free(ads->searchlist[0]);
+		ns_free(ads->searchlist);
 	}
-  ns_free(ads);
-#ifdef WIN32
-  WSACleanup();
-#endif /* WIN32 */
-
+	ns_free(ads);
 }
 
 int adns_init(adns_state * ads_r, adns_initflags flags, FILE * diagfile, fd_update func)
@@ -695,15 +644,15 @@
 	const char *res_options, *adns_res_options;
 	int r;
 #ifdef WIN32
-  #define SECURE_PATH_LEN (MAX_PATH - 64)
-  char PathBuf[MAX_PATH];
-  struct in_addr addr;
-  #define ADNS_PFIXED_INFO_BLEN (2048)
-  PFIXED_INFO network_info = (PFIXED_INFO)alloca(ADNS_PFIXED_INFO_BLEN);
-  ULONG network_info_blen = ADNS_PFIXED_INFO_BLEN;
-  DWORD network_info_result;
-  PIP_ADDR_STRING pip;
-  const char *network_err_str = "";
+	#define SECURE_PATH_LEN (MAX_PATH - 64)
+	char PathBuf[MAX_PATH];
+	struct in_addr addr;
+	#define ADNS_PFIXED_INFO_BLEN (2048)
+	PFIXED_INFO network_info = (PFIXED_INFO)alloca(ADNS_PFIXED_INFO_BLEN);
+	ULONG network_info_blen = ADNS_PFIXED_INFO_BLEN;
+	DWORD network_info_result;
+	PIP_ADDR_STRING pip;
+	const char *network_err_str = "";
 #endif
 
 	r = init_begin(&ads, flags, diagfile ? diagfile : stderr);
@@ -716,35 +665,47 @@
 	ccf_options(ads, "ADNS_RES_OPTIONS", -1, adns_res_options);
 
 #ifdef WIN32
-  GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
-  strcat(PathBuf,"\\resolv.conf");
-  readconfig(ads,PathBuf,1);
-  GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
-  strcat(PathBuf,"\\resolv-adns.conf");
-  readconfig(ads,PathBuf,0);
-  GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
-  strcat(PathBuf,"\\System32\\Drivers\\etc\\resolv.conf");
-  readconfig(ads,PathBuf,1);
-  GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
-  strcat(PathBuf,"\\System32\\Drivers\\etc\\resolv-adns.conf");
-  readconfig(ads,PathBuf,0);
-  network_info_result = GetNetworkParams(network_info, &network_info_blen);
-  if (network_info_result != ERROR_SUCCESS){
-    switch(network_info_result) {
-    case ERROR_BUFFER_OVERFLOW: network_err_str = "ERROR_BUFFER_OVERFLOW"; break;
-    case ERROR_INVALID_PARAMETER: network_err_str = "ERROR_INVALID_PARAMETER"; break;
-    case ERROR_NO_DATA: network_err_str = "ERROR_NO_DATA"; break;
-    case ERROR_NOT_SUPPORTED: network_err_str = "ERROR_NOT_SUPPORTED"; break;}
-    adns__diag(ads,-1,0,"GetNetworkParams() failed with error [%d] %s",
-      network_info_result,network_err_str);
-    }
-  else {
-    for(pip = &(network_info->DnsServerList); pip; pip = pip->Next) {
-      addr.s_addr = inet_addr(pip->IpAddress.String);
-      if ((addr.s_addr != INADDR_ANY) && (addr.s_addr != INADDR_NONE))
-        addserver(ads, addr); 
-    }
-  }
+	GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
+	strcat(PathBuf,"\\resolv.conf");
+	readconfig(ads,PathBuf,1);
+	GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
+	strcat(PathBuf,"\\resolv-adns.conf");
+	readconfig(ads,PathBuf,0);
+	GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
+	strcat(PathBuf,"\\System32\\Drivers\\etc\\resolv.conf");
+	readconfig(ads,PathBuf,1);
+	GetWindowsDirectory(PathBuf, SECURE_PATH_LEN);
+	strcat(PathBuf,"\\System32\\Drivers\\etc\\resolv-adns.conf");
+	readconfig(ads,PathBuf,0);
+	network_info_result = GetNetworkParams(network_info, &network_info_blen);
+	if (network_info_result != ERROR_SUCCESS)
+	{
+		switch(network_info_result) 
+		{
+			case ERROR_BUFFER_OVERFLOW: 
+				network_err_str = "ERROR_BUFFER_OVERFLOW"; 
+				break;
+			case ERROR_INVALID_PARAMETER: 
+				network_err_str = "ERROR_INVALID_PARAMETER"; 
+				break;
+			case ERROR_NO_DATA: 
+				network_err_str = "ERROR_NO_DATA"; 
+				break;
+			case ERROR_NOT_SUPPORTED: 
+				network_err_str = "ERROR_NOT_SUPPORTED"; 
+				break;
+		}
+		adns__diag(ads,-1,0,"GetNetworkParams() failed with error [%d] %s", network_info_result,network_err_str);
+	}
+	else 
+	{
+		for(pip = &(network_info->DnsServerList); pip; pip = pip->Next) 
+		{
+			addr.s_addr = inet_addr(pip->IpAddress.String);
+			if ((addr.s_addr != INADDR_ANY) && (addr.s_addr != INADDR_NONE))
+				addserver(ads, addr); 
+		}
+	}
 #else
 	readconfig(ads, "/etc/resolv.conf", 1);
 	readconfig(ads, "/etc/resolv-adns.conf", 0);
@@ -759,10 +720,8 @@
 	ccf_options(ads, "RES_OPTIONS", -1, res_options);
 	ccf_options(ads, "ADNS_RES_OPTIONS", -1, adns_res_options);
 
-	ccf_search(ads, "LOCALDOMAIN", -1,
-		   instrum_getenv(ads, "LOCALDOMAIN"));
-	ccf_search(ads, "ADNS_LOCALDOMAIN", -1,
-		   instrum_getenv(ads, "ADNS_LOCALDOMAIN"));
+	ccf_search(ads, "LOCALDOMAIN", -1, instrum_getenv(ads, "LOCALDOMAIN"));
+	ccf_search(ads, "ADNS_LOCALDOMAIN", -1, instrum_getenv(ads, "ADNS_LOCALDOMAIN"));
 
 	if (ads->configerrno && ads->configerrno != EINVAL) {
 		r = ads->configerrno;
@@ -835,9 +794,6 @@
 	adns__vbuf_free(&ads->tcprecv);
 	freesearchlist(ads);
   ns_free(ads);
-#ifdef WIN32
-  WSACleanup();
-#endif /* WIN32 */
 
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.