From 3545a9b8734bfabdff760253dd73216aad25b925 Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Sun, 7 Jul 1996 13:29:56 +0000 Subject: added the recently shuffled and updated source files missed in the previous commit (see previous log message for details) fixed bug in nameservreply.c: wrong macro in use (RSSVAL not IVAL!). did another make proto lkcl (This used to be commit d78b319062144d14a54408fce77ccc313ad58ee3) --- source3/namedbresp.c | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 source3/namedbresp.c (limited to 'source3/namedbresp.c') diff --git a/source3/namedbresp.c b/source3/namedbresp.c new file mode 100644 index 0000000000..a9abc5d9b5 --- /dev/null +++ b/source3/namedbresp.c @@ -0,0 +1,151 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + NBT netbios library routines + Copyright (C) Andrew Tridgell 1994-1996 + + 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. + + Module name: namedbresp.c + +*/ + +#include "includes.h" + +extern int ClientNMB; +extern int ClientDGRAM; + +extern struct subnet_record *subnetlist; + +extern int DEBUGLEVEL; + +extern pstring scope; +extern pstring myname; +extern struct in_addr ipzero; +extern struct in_addr ipgrp; + +int num_response_packets = 0; + +/*************************************************************************** + add an expected response record into the list + **************************************************************************/ +void add_response_record(struct subnet_record *d, + struct response_record *n) +{ + struct response_record *n2; + + if (!d) return; + + num_response_packets++; /* count of total number of packets still around */ + + if (!d->responselist) + { + d->responselist = n; + n->prev = NULL; + n->next = NULL; + return; + } + + for (n2 = d->responselist; n2->next; n2 = n2->next) ; + + n2->next = n; + n->next = NULL; + n->prev = n2; +} + + +/*************************************************************************** + remove an expected response record from the list + **************************************************************************/ +void remove_response_record(struct subnet_record *d, + struct response_record *n) +{ + if (!d) return; + + if (n->prev) n->prev->next = n->next; + if (n->next) n->next->prev = n->prev; + + if (d->responselist == n) d->responselist = n->next; + + free(n); + + num_response_packets--; /* count of total number of packets still around */ +} + + +/**************************************************************************** + create a name query response record + **************************************************************************/ +struct response_record *make_response_queue_record(enum state_type state, + int id,int fd, + int quest_type, char *name,int type, int nb_flags, time_t ttl, + BOOL bcast,BOOL recurse, + struct in_addr send_ip, struct in_addr reply_to_ip) +{ + struct response_record *n; + + if (!name || !name[0]) return NULL; + + if (!(n = (struct response_record *)malloc(sizeof(*n)))) + return(NULL); + + n->response_id = id; + n->state = state; + n->fd = fd; + n->quest_type = quest_type; + make_nmb_name(&n->name, name, type, scope); + n->nb_flags = nb_flags; + n->ttl = ttl; + n->bcast = bcast; + n->recurse = recurse; + n->send_ip = send_ip; + n->reply_to_ip = reply_to_ip; + + n->repeat_interval = 1; /* XXXX should be in ms */ + n->repeat_count = 4; + n->repeat_time = time(NULL) + n->repeat_interval; + + n->num_msgs = 0; + + return n; +} + + +/**************************************************************************** + find a response in a subnet's name query response list. + **************************************************************************/ +struct response_record *find_response_record(struct subnet_record **d, + uint16 id) +{ + struct response_record *n; + + if (!d) return NULL; + + for ((*d) = subnetlist; (*d); (*d) = (*d)->next) + { + for (n = (*d)->responselist; n; n = n->next) + { + if (n->response_id == id) { + return n; + } + } + } + + *d = NULL; + + return NULL; +} + + -- cgit