diff options
Diffstat (limited to 'source/include/nameserv.h')
-rw-r--r-- | source/include/nameserv.h | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/source/include/nameserv.h b/source/include/nameserv.h new file mode 100644 index 00000000000..168dd4ba866 --- /dev/null +++ b/source/include/nameserv.h @@ -0,0 +1,184 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + NBT netbios header - version 2 + Copyright (C) Andrew Tridgell 1994-1995 + + 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 02139, USA. + +*/ + +#define MAX_DGRAM_SIZE 576 +#define MIN_DGRAM_SIZE 12 + +#define NMB_PORT 137 +#define DGRAM_PORT 138 +#define SMB_PORT 139 + +enum name_source {LMHOSTS, REGISTER, SELF, DNS, DNSFAIL}; +enum node_type {B_NODE=0, P_NODE=1, M_NODE=2, NBDD_NODE=3}; +enum packet_type {NMB_PACKET, DGRAM_PACKET}; + +/* a netbios name structure */ +struct nmb_name { + char name[17]; + char scope[64]; + int name_type; +}; + +/* this is the structure used for the local netbios name list */ +struct name_record +{ + struct name_record *next; + struct name_record *prev; + struct nmb_name name; + time_t death_time; + struct in_addr ip; + BOOL unique; + enum name_source source; +}; + +/* this is used by the list of domains */ +struct domain_record +{ + struct domain_record *next; + struct domain_record *prev; + fstring name; + time_t lastannounce_time; + int announce_interval; + struct in_addr bcast_ip; +}; + +/* this is used to hold the list of servers in my domain */ +struct server_record +{ + struct server_record *next; + struct server_record *prev; + fstring name; + fstring comment; + uint32 servertype; + time_t death_time; +}; + +/* a resource record */ +struct res_rec { + struct nmb_name rr_name; + int rr_type; + int rr_class; + int ttl; + int rdlength; + char rdata[MAX_DGRAM_SIZE]; +}; + +/* define a nmb packet. */ +struct nmb_packet +{ + struct { + int name_trn_id; + int opcode; + BOOL response; + struct { + BOOL bcast; + BOOL recursion_available; + BOOL recursion_desired; + BOOL trunc; + BOOL authoritative; + } nm_flags; + int rcode; + int qdcount; + int ancount; + int nscount; + int arcount; + } header; + + struct { + struct nmb_name question_name; + int question_type; + int question_class; + } question; + + struct res_rec *answers; + struct res_rec *nsrecs; + struct res_rec *additional; +}; + + +/* a datagram - this normally contains SMB data in the data[] array */ +struct dgram_packet { + struct { + int msg_type; + struct { + enum node_type node_type; + BOOL first; + BOOL more; + } flags; + int dgm_id; + struct in_addr source_ip; + int source_port; + int dgm_length; + int packet_offset; + } header; + struct nmb_name source_name; + struct nmb_name dest_name; + int datasize; + char data[MAX_DGRAM_SIZE]; +}; + +/* define a structure used to queue packets. this will be a linked + list of nmb packets */ +struct packet_struct +{ + struct packet_struct *next; + struct packet_struct *prev; + struct in_addr ip; + int port; + int fd; + time_t timestamp; + enum packet_type packet_type; + union { + struct nmb_packet nmb; + struct dgram_packet dgram; + } packet; +}; + + +/* this defines a list of network interfaces */ +struct net_interface { + struct net_interface *next; + struct in_addr ip; + struct in_addr bcast; + struct in_addr netmask; +}; + + +/* prototypes */ +void free_nmb_packet(struct nmb_packet *nmb); +void free_packet(struct packet_struct *packet); +struct packet_struct *read_packet(int fd,enum packet_type packet_type); +BOOL send_packet(struct packet_struct *p); +struct packet_struct *receive_packet(int fd,enum packet_type type,int timeout); +void make_nmb_name(struct nmb_name *n,char *name,int type,char *this_scope); +BOOL name_query(int fd,char *name,int name_type, + BOOL bcast,BOOL recurse, + struct in_addr to_ip, struct in_addr *ip,void (*fn)()); +BOOL name_status(int fd,char *name,int name_type,BOOL recurse, + struct in_addr to_ip,char *master,char *rname, + void (*fn)()); +BOOL send_mailslot_reply(char *mailslot,int fd,char *buf,int len, + char *srcname,char *dstname, + int src_type,int dest_type, + struct in_addr dest_ip, + struct in_addr src_ip); +char *namestr(struct nmb_name *n); |