1/* 2 Unix SMB/CIFS implementation. 3 4 wins name resolution module 5 6 Copyright (C) Andrew Tridgell 2005 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program. If not, see <http://www.gnu.org/licenses/>. 20*/ 21 22#include "includes.h" 23#include "../libcli/nbt/libnbt.h" 24#include "libcli/resolve/resolve.h" 25#include "param/param.h" 26#include "lib/socket/socket.h" 27#include "lib/socket/netif.h" 28 29struct resolve_wins_data { 30 const char **address_list; 31 struct interface *ifaces; 32 uint16_t nbt_port; 33 int nbt_timeout; 34}; 35 36/** 37 wins name resolution method - async send 38 */ 39struct composite_context *resolve_name_wins_send( 40 TALLOC_CTX *mem_ctx, 41 struct tevent_context *event_ctx, 42 void *userdata, 43 uint32_t flags, 44 uint16_t port, 45 struct nbt_name *name) 46{ 47 struct resolve_wins_data *wins_data = talloc_get_type(userdata, struct resolve_wins_data); 48 if (wins_data->address_list == NULL) return NULL; 49 return resolve_name_nbtlist_send(mem_ctx, event_ctx, flags, port, name, 50 wins_data->address_list, wins_data->ifaces, 51 wins_data->nbt_port, wins_data->nbt_timeout, 52 false, true); 53} 54 55/* 56 wins name resolution method - recv side 57 */ 58NTSTATUS resolve_name_wins_recv(struct composite_context *c, 59 TALLOC_CTX *mem_ctx, 60 struct socket_address ***addrs, 61 char ***names) 62{ 63 return resolve_name_nbtlist_recv(c, mem_ctx, addrs, names); 64} 65 66bool resolve_context_add_wins_method(struct resolve_context *ctx, const char **address_list, struct interface *ifaces, uint16_t nbt_port, int nbt_timeout) 67{ 68 struct resolve_wins_data *wins_data = talloc(ctx, struct resolve_wins_data); 69 wins_data->address_list = (const char **)str_list_copy(wins_data, address_list); 70 wins_data->ifaces = talloc_reference(wins_data, ifaces); 71 wins_data->nbt_port = nbt_port; 72 wins_data->nbt_timeout = nbt_timeout; 73 return resolve_context_add_method(ctx, resolve_name_wins_send, resolve_name_wins_recv, 74 wins_data); 75} 76 77bool resolve_context_add_wins_method_lp(struct resolve_context *ctx, struct loadparm_context *lp_ctx) 78{ 79 struct interface *ifaces; 80 load_interfaces(ctx, lp_interfaces(lp_ctx), &ifaces); 81 return resolve_context_add_wins_method(ctx, lp_wins_server_list(lp_ctx), ifaces, lp_nbt_port(lp_ctx), lp_parm_int(lp_ctx, NULL, "nbt", "timeout", 1)); 82} 83