summaryrefslogtreecommitdiff
path: root/source4/libcli/smb2/transport.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-07-17 07:45:23 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:10:11 -0500
commit73b066281e6f80beb46bbfdb9742e26d3550dfce (patch)
treeafe26695d03c9c88d90ce6443b8eb3c4d6d79720 /source4/libcli/smb2/transport.c
parent45b64e394d19c64ec2e0a65e75b52c5024abf592 (diff)
downloadsamba-73b066281e6f80beb46bbfdb9742e26d3550dfce.tar.gz
samba-73b066281e6f80beb46bbfdb9742e26d3550dfce.tar.bz2
samba-73b066281e6f80beb46bbfdb9742e26d3550dfce.zip
r17081: add idle handler support to the smb2 client lib too
metze (This used to be commit 1f48e7dca6a06078f3655a7f7a8f109bd6c0cb8e)
Diffstat (limited to 'source4/libcli/smb2/transport.c')
-rw-r--r--source4/libcli/smb2/transport.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/source4/libcli/smb2/transport.c b/source4/libcli/smb2/transport.c
index df3bec8720..c970bf7147 100644
--- a/source4/libcli/smb2/transport.c
+++ b/source4/libcli/smb2/transport.c
@@ -307,3 +307,39 @@ void smb2_transport_send(struct smb2_request *req)
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);
+}