svn commit: samba r3315 - in branches/SAMBA_4_0/source: include libcli/raw

tridge at samba.org tridge at samba.org
Thu Oct 28 08:15:13 GMT 2004


Author: tridge
Date: 2004-10-28 08:15:12 +0000 (Thu, 28 Oct 2004)
New Revision: 3315

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=3315&nolog=1

Log:
converted the libcli/raw/ code to use the generic socket library. This
allows me to test with the socket:testnonblock option. It passes.

Modified:
   branches/SAMBA_4_0/source/include/cli_context.h
   branches/SAMBA_4_0/source/libcli/raw/clisocket.c
   branches/SAMBA_4_0/source/libcli/raw/clitransport.c


Changeset:
Modified: branches/SAMBA_4_0/source/include/cli_context.h
===================================================================
--- branches/SAMBA_4_0/source/include/cli_context.h	2004-10-28 07:55:33 UTC (rev 3314)
+++ branches/SAMBA_4_0/source/include/cli_context.h	2004-10-28 08:15:12 UTC (rev 3315)
@@ -70,8 +70,7 @@
 	/* the port used */
 	int port;
 	
-	/* the open file descriptor */
-	int fd;
+	struct socket_context *sock;
 
 	/* a count of the number of packets we have received. We
 	 * actually only care about zero/non-zero at this stage */

Modified: branches/SAMBA_4_0/source/libcli/raw/clisocket.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/clisocket.c	2004-10-28 07:55:33 UTC (rev 3314)
+++ branches/SAMBA_4_0/source/libcli/raw/clisocket.c	2004-10-28 08:15:12 UTC (rev 3315)
@@ -22,19 +22,6 @@
 #include "includes.h"
 
 /*
-  destroy a socket
- */
-static int sock_destructor(void *ptr)
-{
-	struct smbcli_socket *sock = ptr;
-	if (sock->fd != -1) {
-		close(sock->fd);
-		sock->fd = -1;
-	}
-	return 0;
-}
-
-/*
   create a smbcli_socket context
 */
 struct smbcli_socket *smbcli_sock_init(TALLOC_CTX *mem_ctx)
@@ -47,15 +34,13 @@
 	}
 
 	ZERO_STRUCTP(sock);
-	sock->fd = -1;
+	sock->sock = NULL;
 	sock->port = 0;
 
 	/* 20 second default timeout */
 	sock->timeout = 20000;
 	sock->hostname = NULL;
 
-	talloc_set_destructor(sock, sock_destructor);
-
 	return sock;
 }
 
@@ -65,10 +50,7 @@
 */
 BOOL smbcli_sock_connect(struct smbcli_socket *sock, struct in_addr *ip, int port)
 {
-	if (getenv("LIBSMB_PROG")) {
-		sock->fd = sock_exec(getenv("LIBSMB_PROG"));
-		return sock->fd != -1;
-	}
+	NTSTATUS status;
 
 	if (port == 0) {
 		int i;
@@ -82,19 +64,24 @@
 		return False;
 	}
 
-	sock->dest_ip = *ip;
-	sock->port = port;
-	sock->fd = open_socket_out(SOCK_STREAM,
-				   &sock->dest_ip,
-				   sock->port, 
-				   LONG_CONNECT_TIMEOUT);
-	if (sock->fd == -1) {
+	status = socket_create("ip", SOCKET_TYPE_STREAM, &sock->sock, 0);
+	if (!NT_STATUS_IS_OK(status)) {
 		return False;
 	}
+	talloc_steal(sock, sock->sock);
 
-	set_blocking(sock->fd, False);
-	set_socket_options(sock->fd, lp_socket_options());
+	status = socket_connect(sock->sock, NULL, 0, inet_ntoa(*ip), port, 0);
+	if (!NT_STATUS_IS_OK(status)) {
+		talloc_free(sock->sock);
+		sock->sock = NULL;
+		return False;
+	}
 
+	sock->dest_ip = *ip;
+	sock->port = port;
+
+	socket_set_option(sock->sock, lp_socket_options(), NULL);
+
 	return True;
 }
 
@@ -104,9 +91,9 @@
 ****************************************************************************/
 void smbcli_sock_dead(struct smbcli_socket *sock)
 {
-	if (sock->fd != -1) {
-		close(sock->fd);
-		sock->fd = -1;
+	if (sock->sock != NULL) {
+		talloc_free(sock->sock);
+		sock->sock = NULL;
 	}
 }
 
@@ -115,7 +102,7 @@
 ****************************************************************************/
 void smbcli_sock_set_options(struct smbcli_socket *sock, const char *options)
 {
-	set_socket_options(sock->fd, options);
+	socket_set_option(sock->sock, options, NULL);
 }
 
 /****************************************************************************
@@ -123,12 +110,24 @@
 ****************************************************************************/
 ssize_t smbcli_sock_write(struct smbcli_socket *sock, const char *data, size_t len)
 {
-	if (sock->fd == -1) {
+	NTSTATUS status;
+	DATA_BLOB blob;
+	size_t nsent;
+
+	if (sock->sock == NULL) {
 		errno = EIO;
 		return -1;
 	}
 
-	return write(sock->fd, data, len);
+	blob.data = discard_const(data);
+	blob.length = len;
+
+	status = socket_send(sock->sock, &blob, &nsent, 0);
+	if (NT_STATUS_IS_ERR(status)) {
+		return -1;
+	}
+
+	return nsent;
 }
 
 
@@ -137,12 +136,20 @@
 ****************************************************************************/
 ssize_t smbcli_sock_read(struct smbcli_socket *sock, char *data, size_t len)
 {
-	if (sock->fd == -1) {
+	NTSTATUS status;
+	size_t nread;
+
+	if (sock->sock == NULL) {
 		errno = EIO;
 		return -1;
 	}
 
-	return read(sock->fd, data, len);
+	status = socket_recv(sock->sock, data, len, &nread, 0);
+	if (NT_STATUS_IS_ERR(status)) {
+		return -1;
+	}
+
+	return nread;
 }
 
 /****************************************************************************
@@ -155,10 +162,12 @@
 	char *name, *p;
 	BOOL ret;
 
+#if 0
 	if (getenv("LIBSMB_PROG")) {
 		sock->fd = sock_exec(getenv("LIBSMB_PROG"));
 		return sock->fd != -1;
 	}
+#endif
 
 	name = talloc_strdup(sock, host);
 

Modified: branches/SAMBA_4_0/source/libcli/raw/clitransport.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/clitransport.c	2004-10-28 07:55:33 UTC (rev 3314)
+++ branches/SAMBA_4_0/source/libcli/raw/clitransport.c	2004-10-28 08:15:12 UTC (rev 3315)
@@ -82,7 +82,7 @@
 
 	ZERO_STRUCT(transport->called);
 
-	fde.fd = sock->fd;
+	fde.fd = socket_get_fd(sock->sock);
 	fde.flags = EVENT_FD_READ;
 	fde.handler = smbcli_transport_event_handler;
 	fde.private = transport;
@@ -501,7 +501,7 @@
 {
 	smbcli_transport_process_send(transport);
 	smbcli_transport_process_recv(transport);
-	if (transport->socket->fd == -1) {
+	if (transport->socket->sock == NULL) {
 		return False;
 	}
 	return True;
@@ -515,7 +515,7 @@
 void smbcli_transport_send(struct smbcli_request *req)
 {
 	/* check if the transport is dead */
-	if (req->transport->socket->fd == -1) {
+	if (req->transport->socket->sock == NULL) {
 		req->state = SMBCLI_REQUEST_ERROR;
 		req->status = NT_STATUS_NET_WRITE_FAULT;
 		return;



More information about the samba-cvs mailing list