s4:lib/socket: add helpers functions to convert between socket_address and tsocket_ad...
authorStefan Metzmacher <metze@samba.org>
Wed, 23 Dec 2009 08:38:21 +0000 (09:38 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 24 Dec 2009 16:38:32 +0000 (17:38 +0100)
metze

source4/lib/socket/config.mk
source4/lib/socket/socket.c
source4/lib/socket/socket.h

index ac515c8f6dfead2d3ed2b54ed5474c9e4e04f77a..07491e115a20832a5a301ee3d58f94aaed456ab1 100644 (file)
@@ -34,7 +34,7 @@ socket_unix_OBJ_FILES = $(libsocketsrcdir)/socket_unix.o
 ################################################
 # Start SUBSYSTEM SOCKET
 [SUBSYSTEM::samba_socket]
-PUBLIC_DEPENDENCIES = LIBTALLOC
+PUBLIC_DEPENDENCIES = LIBTALLOC LIBTSOCKET
 PRIVATE_DEPENDENCIES = SOCKET_WRAPPER LIBCLI_COMPOSITE LIBCLI_RESOLVE
 # End SUBSYSTEM SOCKET
 ################################################
index 8e2f1683f229c35156ce7a6409cd04b60887f980..23eade7b53f0ad632f2eb889c42f31ad569466f3 100644 (file)
@@ -24,6 +24,7 @@
 #include "system/filesys.h"
 #include "system/network.h"
 #include "param/param.h"
+#include "../lib/tsocket/tsocket.h"
 
 /*
   auto-close sockets on free
@@ -344,6 +345,47 @@ _PUBLIC_ struct socket_address *socket_get_my_addr(struct socket_context *sock,
        return sock->ops->fn_get_my_addr(sock, mem_ctx);
 }
 
+_PUBLIC_ struct tsocket_address *socket_address_to_tsocket_address(TALLOC_CTX *mem_ctx,
+                                                                  const struct socket_address *a)
+{
+       struct tsocket_address *r;
+       int ret;
+
+       if (a->sockaddr) {
+               ret = tsocket_address_bsd_from_sockaddr(mem_ctx,
+                                                       a->sockaddr,
+                                                       a->sockaddrlen,
+                                                       &r);
+       } else {
+               ret = tsocket_address_inet_from_strings(mem_ctx,
+                                                       a->family,
+                                                       a->addr,
+                                                       a->port,
+                                                       &r);
+       }
+
+       if (ret != 0) {
+               return NULL;
+       }
+
+       return r;
+}
+
+_PUBLIC_ struct socket_address *tsocket_address_to_socket_address(TALLOC_CTX *mem_ctx,
+                                                                 const struct tsocket_address *a)
+{
+       ssize_t ret;
+       struct sockaddr_storage ss;
+       size_t sslen = sizeof(ss);
+
+       ret = tsocket_address_bsd_sockaddr(a, (struct sockaddr *)(void *)&ss, sslen);
+       if (ret < 0) {
+               return NULL;
+       }
+
+       return socket_address_from_sockaddr(mem_ctx, (struct sockaddr *)(void *)&ss, ret);
+}
+
 _PUBLIC_ int socket_get_fd(struct socket_context *sock)
 {
        if (!sock->ops->fn_get_fd) {
index 02872457b589c96d4943f8880a3971364bd7e003..5f29618f141ba5f61e143eed82303b15cbb2a2dc 100644 (file)
@@ -127,6 +127,7 @@ struct socket_context {
 };
 
 struct resolve_context;
+struct tsocket_address;
 
 /* prototypes */
 NTSTATUS socket_create_with_ops(TALLOC_CTX *mem_ctx, const struct socket_ops *ops,
@@ -158,6 +159,10 @@ NTSTATUS socket_set_option(struct socket_context *sock, const char *option, cons
 char *socket_get_peer_name(struct socket_context *sock, TALLOC_CTX *mem_ctx);
 struct socket_address *socket_get_peer_addr(struct socket_context *sock, TALLOC_CTX *mem_ctx);
 struct socket_address *socket_get_my_addr(struct socket_context *sock, TALLOC_CTX *mem_ctx);
+struct tsocket_address *socket_address_to_tsocket_address(TALLOC_CTX *mem_ctx,
+                                                         const struct socket_address *a);
+struct socket_address *tsocket_address_to_socket_address(TALLOC_CTX *mem_ctx,
+                                                        const struct tsocket_address *a);
 int socket_get_fd(struct socket_context *sock);
 NTSTATUS socket_dup(struct socket_context *sock);
 struct socket_address *socket_address_from_strings(TALLOC_CTX *mem_ctx,