2005-04-03 08:32:37 +04:00
/*
Unix SMB / CIFS implementation .
a raw async NBT DGRAM library
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "librpc/gen_ndr/ndr_nbt.h"
2005-04-05 12:35:02 +04:00
/*
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 ;
} ;
2005-04-03 08:32:37 +04:00
/*
context structure for operations on dgram packets
*/
struct nbt_dgram_socket {
struct socket_context * sock ;
struct event_context * event_ctx ;
/* the fd event */
struct fd_event * fde ;
2005-04-05 12:35:02 +04:00
/* a queue of outgoing requests */
struct nbt_dgram_request * send_queue ;
/* a list of mailslot handlers */
struct dgram_mailslot_handler * mailslot_handlers ;
2005-04-03 08:32:37 +04:00
/* what to do with incoming request packets */
struct {
void ( * handler ) ( struct nbt_dgram_socket * , struct nbt_dgram_packet * ,
const char * , int ) ;
void * private ;
} incoming ;
} ;
2005-04-05 12:35:02 +04:00
/*
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 ) ;