diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-04-05 08:35:02 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:11:26 -0500 |
commit | 769070d502a95439ea7d6e2c6616cfa08fc5d673 (patch) | |
tree | d8bac8a0d0df76c1a135913288599d9784b0578f /source4/libcli/dgram/libdgram.h | |
parent | e1e8928840b632297e3cbbd19aeef5e075ff7798 (diff) | |
download | samba-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.h | 77 |
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); + + + + + + + |