svn commit: samba r17081 - in branches/SAMBA_4_0/source/libcli/smb2: .

metze at samba.org metze at samba.org
Mon Jul 17 07:45:23 GMT 2006


Author: metze
Date: 2006-07-17 07:45:23 +0000 (Mon, 17 Jul 2006)
New Revision: 17081

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

Log:
add idle handler support to the smb2 client lib too

metze
Modified:
   branches/SAMBA_4_0/source/libcli/smb2/smb2.h
   branches/SAMBA_4_0/source/libcli/smb2/transport.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/smb2/smb2.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/smb2/smb2.h	2006-07-17 03:53:39 UTC (rev 17080)
+++ branches/SAMBA_4_0/source/libcli/smb2/smb2.h	2006-07-17 07:45:23 UTC (rev 17081)
@@ -48,6 +48,15 @@
 
 	/* context of the stream -> packet parser */
 	struct packet_context *packet;
+
+	/* an idle function - if this is defined then it will be
+	   called once every period microseconds while we are waiting
+	   for a packet */
+	struct {
+		void (*func)(struct smb2_transport *, void *);
+		void *private;
+		uint_t period;
+	} idle;
 };
 
 

Modified: branches/SAMBA_4_0/source/libcli/smb2/transport.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/smb2/transport.c	2006-07-17 03:53:39 UTC (rev 17080)
+++ branches/SAMBA_4_0/source/libcli/smb2/transport.c	2006-07-17 07:45:23 UTC (rev 17081)
@@ -307,3 +307,39 @@
 
 	talloc_set_destructor(req, smb2_request_destructor);
 }
+
+static void idle_handler(struct event_context *ev, 
+			 struct timed_event *te, struct timeval t, void *private)
+{
+	struct smb2_transport *transport = talloc_get_type(private,
+							   struct smb2_transport);
+	struct timeval next = timeval_add(&t, 0, transport->idle.period);
+	transport->socket->event.te = event_add_timed(transport->socket->event.ctx, 
+						      transport,
+						      next,
+						      idle_handler, transport);
+	transport->idle.func(transport, transport->idle.private);
+}
+
+/*
+  setup the idle handler for a transport
+  the period is in microseconds
+*/
+void smb2_transport_idle_handler(struct smb2_transport *transport, 
+				 void (*idle_func)(struct smb2_transport *, void *),
+				 uint64_t period,
+				 void *private)
+{
+	transport->idle.func = idle_func;
+	transport->idle.private = private;
+	transport->idle.period = period;
+
+	if (transport->socket->event.te != NULL) {
+		talloc_free(transport->socket->event.te);
+	}
+
+	transport->socket->event.te = event_add_timed(transport->socket->event.ctx, 
+						      transport,
+						      timeval_current_ofs(0, period),
+						      idle_handler, transport);
+}



More information about the samba-cvs mailing list