svn commit: samba r18417 - in branches/SAMBA_4_0/source/lib/socket_wrapper: .

metze at samba.org metze at samba.org
Tue Sep 12 06:19:12 GMT 2006


Author: metze
Date: 2006-09-12 06:19:11 +0000 (Tue, 12 Sep 2006)
New Revision: 18417

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=18417

Log:
overload send() and recv() by socket wrapper
and add a dummy swrap_dump_packet() function
which can later dump the packet content,
so that a script can then generate a capture file
for wireshark

metze
Modified:
   branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.c
   branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.h


Changeset:
Modified: branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.c
===================================================================
--- branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.c	2006-09-12 04:03:43 UTC (rev 18416)
+++ branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.c	2006-09-12 06:19:11 UTC (rev 18417)
@@ -53,6 +53,8 @@
 #define real_setsockopt setsockopt
 #define real_recvfrom recvfrom
 #define real_sendto sendto
+#define real_recv recv
+#define real_send send
 #define real_socket socket
 #define real_close close
 #endif
@@ -398,6 +400,20 @@
 	return -1;
 }
 
+enum swrap_packet_type {
+	SWRAP_RECVFROM,
+	SWRAP_SENDTO,
+	SWRAP_RECV,
+	SWRAP_SEND
+};
+
+static void swrap_dump_packet(struct socket_info *si, const struct sockaddr *addr,
+			      enum swrap_packet_type type,
+			      const void *buf, size_t len, ssize_t ret)
+{
+
+}
+
 _PUBLIC_ int swrap_socket(int domain, int type, int protocol)
 {
 	struct socket_info *si;
@@ -700,12 +716,14 @@
 				     si->domain, from, fromlen) == -1) {
 		return -1;
 	}
-	
+
+	swrap_dump_packet(si, from, SWRAP_RECVFROM, buf, len, ret);
+
 	return ret;
 }
 
 
-_PUBLIC_ ssize_t swrap_sendto(int  s,  const  void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
+_PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
 {
 	struct sockaddr_un un_addr;
 	int ret;
@@ -740,6 +758,9 @@
 			/* ignore the any errors in broadcast sends */
 			real_sendto(s, buf, len, flags, (struct sockaddr *)&un_addr, sizeof(un_addr));
 		}
+
+		swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len, len);
+
 		return len;
 	}
 
@@ -752,9 +773,48 @@
 		}
 	}
 
+	swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len, ret);
+
 	return ret;
 }
 
+_PUBLIC_ ssize_t swrap_recv(int s, void *buf, size_t len, int flags)
+{
+	int ret;
+	struct socket_info *si = find_socket_info(s);
+
+	if (!si) {
+		return real_recv(s, buf, len, flags);
+	}
+
+	ret = real_recv(s, buf, len, flags);
+	if (ret == -1) 
+		return ret;
+
+	swrap_dump_packet(si, NULL, SWRAP_RECV, buf, len, ret);
+
+	return ret;
+}
+
+
+_PUBLIC_ ssize_t swrap_send(int s, const void *buf, size_t len, int flags)
+{
+	int ret;
+	struct socket_info *si = find_socket_info(s);
+
+	if (!si) {
+		return real_send(s, buf, len, flags);
+	}
+
+	ret = real_send(s, buf, len, flags);
+	if (ret == -1) 
+		return ret;
+
+	swrap_dump_packet(si, NULL, SWRAP_SEND, buf, len, ret);
+
+	return ret;
+}
+
 _PUBLIC_ int swrap_close(int fd)
 {
 	struct socket_info *si = find_socket_info(fd);

Modified: branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.h
===================================================================
--- branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.h	2006-09-12 04:03:43 UTC (rev 18416)
+++ branches/SAMBA_4_0/source/lib/socket_wrapper/socket_wrapper.h	2006-09-12 06:19:11 UTC (rev 18417)
@@ -28,7 +28,9 @@
 int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
 int swrap_setsockopt(int s, int  level,  int  optname,  const  void  *optval, socklen_t optlen);
 ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
-ssize_t swrap_sendto(int  s,  const  void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
+ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
+ssize_t swrap_recv(int s, void *buf, size_t len, int flags);
+ssize_t swrap_send(int s, const void *buf, size_t len, int flags);
 int swrap_close(int);
 
 #ifdef SOCKET_WRAPPER_REPLACE
@@ -78,6 +80,16 @@
 #endif
 #define sendto(s,buf,len,flags,to,tolen)          swrap_sendto(s,buf,len,flags,to,tolen)
 
+#ifdef recv
+#undef recv
+#endif
+#define recv(s,buf,len,flags)		swrap_recv(s,buf,len,flags)
+
+#ifdef send
+#undef send
+#endif
+#define send(s,buf,len,flags)		swrap_send(s,buf,len,flags)
+
 #ifdef socket
 #undef socket
 #endif



More information about the samba-cvs mailing list