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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-04-03 08:32:37 +04:00
( 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
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-04-03 08:32:37 +04:00
*/
2011-01-07 14:01:42 +03:00
# include "../libcli/netlogon/netlogon.h"
2005-04-03 08:32:37 +04:00
2005-04-05 12:35:02 +04:00
/*
2005-05-10 05:59:00 +04:00
a datagram name request
2005-04-05 12:35:02 +04:00
*/
struct nbt_dgram_request {
struct nbt_dgram_request * next , * prev ;
/* where to send the request */
2006-01-10 01:12:53 +03:00
struct socket_address * dest ;
2005-04-05 12:35:02 +04:00
/* 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 ;
2008-12-29 22:24:57 +03:00
struct tevent_context * event_ctx ;
2005-04-03 08:32:37 +04:00
/* the fd event */
2008-12-29 22:24:57 +03:00
struct tevent_fd * fde ;
2005-04-03 08:32:37 +04:00
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 * ,
2006-01-10 01:12:53 +03:00
struct socket_address * src ) ;
2009-02-02 11:55:58 +03:00
void * private_data ;
2005-04-03 08:32:37 +04:00
} 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 * ,
2006-01-10 01:12:53 +03:00
struct socket_address * src ) ;
2005-04-05 12:35:02 +04:00
struct dgram_mailslot_handler {
struct dgram_mailslot_handler * next , * prev ;
struct nbt_dgram_socket * dgmsock ;
const char * mailslot_name ;
dgram_mailslot_handler_t handler ;
2009-02-02 11:55:58 +03:00
void * private_data ;
2005-04-05 12:35:02 +04:00
} ;
/* prototypes */
NTSTATUS nbt_dgram_send ( struct nbt_dgram_socket * dgmsock ,
struct nbt_dgram_packet * packet ,
2006-01-10 01:12:53 +03:00
struct socket_address * dest ) ;
2005-04-05 12:35:02 +04:00
NTSTATUS dgram_set_incoming_handler ( struct nbt_dgram_socket * dgmsock ,
void ( * handler ) ( struct nbt_dgram_socket * ,
struct nbt_dgram_packet * ,
2006-01-10 01:12:53 +03:00
struct socket_address * ) ,
2009-02-02 10:24:00 +03:00
void * private_data ) ;
2005-04-05 12:35:02 +04:00
struct nbt_dgram_socket * nbt_dgram_socket_init ( TALLOC_CTX * mem_ctx ,
2010-05-09 19:20:01 +04:00
struct tevent_context * event_ctx ) ;
2005-04-05 12:35:02 +04:00
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 ,
2009-02-02 10:24:00 +03:00
void * private_data ) ;
2005-04-05 12:35:02 +04:00
struct dgram_mailslot_handler * dgram_mailslot_temp ( struct nbt_dgram_socket * dgmsock ,
const char * mailslot_name ,
dgram_mailslot_handler_t handler ,
2009-02-02 10:24:00 +03:00
void * private_data ) ;
2005-04-13 09:50:02 +04:00
DATA_BLOB dgram_mailslot_data ( struct nbt_dgram_packet * dgram ) ;
2005-04-05 12:35:02 +04:00
2005-04-06 15:17:08 +04:00
NTSTATUS dgram_mailslot_send ( struct nbt_dgram_socket * dgmsock ,
enum dgram_msg_type msg_type ,
const char * mailslot_name ,
struct nbt_name * dest_name ,
2006-01-10 01:12:53 +03:00
struct socket_address * dest ,
2005-04-06 15:17:08 +04:00
struct nbt_name * src_name ,
DATA_BLOB * request ) ;
NTSTATUS dgram_mailslot_netlogon_send ( struct nbt_dgram_socket * dgmsock ,
struct nbt_name * dest_name ,
2006-01-10 01:12:53 +03:00
struct socket_address * dest ,
2008-05-16 07:03:01 +04:00
const char * mailslot_name ,
2005-04-06 15:17:08 +04:00
struct nbt_name * src_name ,
struct nbt_netlogon_packet * request ) ;
2005-04-11 03:09:38 +04:00
NTSTATUS dgram_mailslot_netlogon_reply ( struct nbt_dgram_socket * dgmsock ,
struct nbt_dgram_packet * request ,
2007-12-06 18:36:54 +03:00
const char * my_netbios_name ,
2005-04-11 03:09:38 +04:00
const char * mailslot_name ,
2008-05-17 06:38:58 +04:00
struct nbt_netlogon_response * reply ) ;
2018-02-17 22:42:19 +03:00
NTSTATUS dgram_mailslot_netlogon_parse_request ( TALLOC_CTX * mem_ctx ,
2008-05-17 06:38:58 +04:00
struct nbt_dgram_packet * dgram ,
struct nbt_netlogon_packet * netlogon ) ;
NTSTATUS dgram_mailslot_netlogon_parse_response ( struct dgram_mailslot_handler * dgmslot ,
TALLOC_CTX * mem_ctx ,
struct nbt_dgram_packet * dgram ,
struct nbt_netlogon_response * netlogon ) ;
2006-01-14 13:03:18 +03:00
NTSTATUS dgram_mailslot_browse_send ( struct nbt_dgram_socket * dgmsock ,
struct nbt_name * dest_name ,
struct socket_address * dest ,
struct nbt_name * src_name ,
struct nbt_browse_packet * request ) ;
NTSTATUS dgram_mailslot_browse_reply ( struct nbt_dgram_socket * dgmsock ,
struct nbt_dgram_packet * request ,
const char * mailslot_name ,
2007-12-02 18:20:29 +03:00
const char * my_netbios_name ,
2006-01-14 13:03:18 +03:00
struct nbt_browse_packet * reply ) ;
NTSTATUS dgram_mailslot_browse_parse ( struct dgram_mailslot_handler * dgmslot ,
TALLOC_CTX * mem_ctx ,
struct nbt_dgram_packet * dgram ,
struct nbt_browse_packet * pkt ) ;