summaryrefslogtreecommitdiff
path: root/source4/libcli/dgram/libdgram.h
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-04-05 08:35:02 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:11:26 -0500
commit769070d502a95439ea7d6e2c6616cfa08fc5d673 (patch)
treed8bac8a0d0df76c1a135913288599d9784b0578f /source4/libcli/dgram/libdgram.h
parente1e8928840b632297e3cbbd19aeef5e075ff7798 (diff)
downloadsamba-769070d502a95439ea7d6e2c6616cfa08fc5d673.tar.gz
samba-769070d502a95439ea7d6e2c6616cfa08fc5d673.tar.bz2
samba-769070d502a95439ea7d6e2c6616cfa08fc5d673.zip
r6209: started added code to support mailslot requests over UDP/138
datagrams. This adds the IDL to parse mailslot packets, plus mailslot dispatch and listener registration code. mailslots are used for UDP/138 browse and netlogon packets (This used to be commit f20e7e5200de736b3451d748ed716be638f93502)
Diffstat (limited to 'source4/libcli/dgram/libdgram.h')
-rw-r--r--source4/libcli/dgram/libdgram.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/source4/libcli/dgram/libdgram.h b/source4/libcli/dgram/libdgram.h
index 6ead6dccf0..866877e341 100644
--- a/source4/libcli/dgram/libdgram.h
+++ b/source4/libcli/dgram/libdgram.h
@@ -22,6 +22,21 @@
#include "librpc/gen_ndr/ndr_nbt.h"
+
+/*
+ a nbt name request
+*/
+struct nbt_dgram_request {
+ struct nbt_dgram_request *next, *prev;
+
+ /* where to send the request */
+ const char *dest_addr;
+ int dest_port;
+
+ /* the encoded request */
+ DATA_BLOB encoded;
+};
+
/*
context structure for operations on dgram packets
*/
@@ -32,6 +47,12 @@ struct nbt_dgram_socket {
/* the fd event */
struct fd_event *fde;
+ /* a queue of outgoing requests */
+ struct nbt_dgram_request *send_queue;
+
+ /* a list of mailslot handlers */
+ struct dgram_mailslot_handler *mailslot_handlers;
+
/* what to do with incoming request packets */
struct {
void (*handler)(struct nbt_dgram_socket *, struct nbt_dgram_packet *,
@@ -39,3 +60,59 @@ struct nbt_dgram_socket {
void *private;
} incoming;
};
+
+
+/*
+ the mailslot code keeps a list of mailslot handlers. A mailslot
+ handler is a function that receives incoming packets for a specific
+ mailslot name. When a caller needs to send a mailslot and wants to
+ get a reply then it needs to register itself as listening for
+ incoming packets on the reply mailslot
+*/
+
+typedef void (*dgram_mailslot_handler_t)(struct dgram_mailslot_handler *,
+ struct nbt_dgram_packet *,
+ const char *, int );
+
+struct dgram_mailslot_handler {
+ struct dgram_mailslot_handler *next, *prev;
+
+ struct nbt_dgram_socket *dgmsock;
+ const char *mailslot_name;
+
+ dgram_mailslot_handler_t handler;
+ void *private;
+};
+
+
+/* prototypes */
+NTSTATUS nbt_dgram_send(struct nbt_dgram_socket *dgmsock,
+ struct nbt_dgram_packet *packet,
+ const char *dest_addr,
+ int dest_port);
+NTSTATUS dgram_set_incoming_handler(struct nbt_dgram_socket *dgmsock,
+ void (*handler)(struct nbt_dgram_socket *,
+ struct nbt_dgram_packet *,
+ const char *, int ),
+ void *private);
+struct nbt_dgram_socket *nbt_dgram_socket_init(TALLOC_CTX *mem_ctx,
+ struct event_context *event_ctx);
+
+const char *dgram_mailslot_name(struct nbt_dgram_packet *packet);
+struct dgram_mailslot_handler *dgram_mailslot_find(struct nbt_dgram_socket *dgmsock,
+ const char *mailslot_name);
+struct dgram_mailslot_handler *dgram_mailslot_listen(struct nbt_dgram_socket *dgmsock,
+ const char *mailslot_name,
+ dgram_mailslot_handler_t handler,
+ void *private);
+struct dgram_mailslot_handler *dgram_mailslot_temp(struct nbt_dgram_socket *dgmsock,
+ const char *mailslot_name,
+ dgram_mailslot_handler_t handler,
+ void *private);
+
+
+
+
+
+
+