s4:lib/tevent: rename structs
[gd/samba-autobuild/.git] / source4 / libcli / resolve / wins.c
index aa4ec0cea4535c2edb31829ea8b3f68cc50df677..03eaf8786fd6a26bd573bae3b6be8a08b5fe4816 100644 (file)
@@ -7,7 +7,7 @@
    
    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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    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.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
-#include "system/network.h"
-#include "libcli/raw/libcliraw.h"
-#include "libcli/composite/composite.h"
+#include "../libcli/nbt/libnbt.h"
+#include "libcli/resolve/resolve.h"
+#include "param/param.h"
+#include "lib/socket/socket.h"
+#include "lib/socket/netif.h"
 
-/*
+struct resolve_wins_data {
+       const char **address_list;
+       struct interface *ifaces;
+       uint16_t nbt_port;
+       int nbt_timeout;
+};
+
+/**
   wins name resolution method - async send
  */
-struct composite_context *resolve_name_wins_send(struct nbt_name *name, 
-                                                struct event_context *event_ctx)
+struct composite_context *resolve_name_wins_send(
+                               TALLOC_CTX *mem_ctx, 
+                               struct tevent_context *event_ctx,
+                               void *userdata,
+                               uint32_t flags,
+                               uint16_t port,
+                               struct nbt_name *name)
 {
-       const char **address_list = lp_wins_server_list();
-       if (address_list == NULL) return NULL;
-       return resolve_name_nbtlist_send(name, event_ctx, address_list, False, True);
+       struct resolve_wins_data *wins_data = talloc_get_type(userdata, struct resolve_wins_data);
+       if (wins_data->address_list == NULL) return NULL;
+       return resolve_name_nbtlist_send(mem_ctx, event_ctx, flags, port, name,
+                                        wins_data->address_list, wins_data->ifaces,
+                                        wins_data->nbt_port, wins_data->nbt_timeout,
+                                        false, true);
 }
 
 /*
   wins name resolution method - recv side
  */
 NTSTATUS resolve_name_wins_recv(struct composite_context *c, 
-                                TALLOC_CTX *mem_ctx, const char **reply_addr)
+                               TALLOC_CTX *mem_ctx,
+                               struct socket_address ***addrs,
+                               char ***names)
 {
-       return resolve_name_nbtlist_recv(c, mem_ctx, reply_addr);
+       return resolve_name_nbtlist_recv(c, mem_ctx, addrs, names);
 }
 
-/*
-  wins name resolution method - sync call
- */
-NTSTATUS resolve_name_wins(struct nbt_name *name, 
-                           TALLOC_CTX *mem_ctx,
-                           const char **reply_addr)
+bool resolve_context_add_wins_method(struct resolve_context *ctx, const char **address_list, struct interface *ifaces, uint16_t nbt_port, int nbt_timeout)
 {
-       struct composite_context *c = resolve_name_wins_send(name, NULL);
-       return resolve_name_wins_recv(c, mem_ctx, reply_addr);
+       struct resolve_wins_data *wins_data = talloc(ctx, struct resolve_wins_data);
+       wins_data->address_list = (const char **)str_list_copy(wins_data, address_list);
+       wins_data->ifaces = talloc_reference(wins_data, ifaces);
+       wins_data->nbt_port = nbt_port;
+       wins_data->nbt_timeout = nbt_timeout;
+       return resolve_context_add_method(ctx, resolve_name_wins_send, resolve_name_wins_recv,
+                                         wins_data);
 }
 
+bool resolve_context_add_wins_method_lp(struct resolve_context *ctx, struct loadparm_context *lp_ctx)
+{
+       struct interface *ifaces;
+       load_interfaces(ctx, lp_interfaces(lp_ctx), &ifaces);
+       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));
+}