]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Create pt_tls_dispatcher with separate server address and identity
authorMartin Willi <martin@revosec.ch>
Wed, 16 Jan 2013 13:51:20 +0000 (14:51 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 16 Jan 2013 14:02:14 +0000 (15:02 +0100)
src/libpttls/pt_tls_dispatcher.c
src/libpttls/pt_tls_dispatcher.h

index f89e1a5f2c1dfe9e76b99e9182bae12a89c5d676..adcf5b4bfaebd11772ee1dc862535f79a8aca725 100644 (file)
@@ -18,7 +18,6 @@
 
 #include <threading/thread.h>
 #include <utils/debug.h>
-#include <networking/host.h>
 #include <processing/jobs/callback_job.h>
 
 #include <errno.h>
@@ -51,22 +50,14 @@ struct private_pt_tls_dispatcher_t {
 /**
  * Open listening server socket
  */
-static bool open_socket(private_pt_tls_dispatcher_t *this,
-                                               char *server, u_int16_t port)
+static bool open_socket(private_pt_tls_dispatcher_t *this, host_t *host)
 {
-       host_t *host;
-
        this->fd = socket(AF_INET, SOCK_STREAM, 0);
        if (this->fd == -1)
        {
                DBG1(DBG_TNC, "opening PT-TLS socket failed: %s", strerror(errno));
                return FALSE;
        }
-       host = host_create_from_dns(server, AF_UNSPEC, port);
-       if (!host)
-       {
-               return FALSE;
-       }
        if (bind(this->fd, host->get_sockaddr(host),
                         *host->get_sockaddr_len(host)) == -1)
        {
@@ -160,7 +151,8 @@ METHOD(pt_tls_dispatcher_t, destroy, void,
 /**
  * See header
  */
-pt_tls_dispatcher_t *pt_tls_dispatcher_create(char *server, u_int16_t port)
+pt_tls_dispatcher_t *pt_tls_dispatcher_create(host_t *address,
+                                                                                         identification_t *id)
 {
        private_pt_tls_dispatcher_t *this;
 
@@ -169,15 +161,17 @@ pt_tls_dispatcher_t *pt_tls_dispatcher_create(char *server, u_int16_t port)
                        .dispatch = _dispatch,
                        .destroy = _destroy,
                },
-               .server = identification_create_from_string(server),
+               .server = id,
                .fd = -1,
        );
 
-       if (!open_socket(this, server, port))
+       if (!open_socket(this, address))
        {
+               address->destroy(address);
                destroy(this);
                return NULL;
        }
+       address->destroy(address);
 
        return &this->public;
 }
index c6f386470850e22879add0c89f337825cbcb5983..463bd6cc839d3792b5df09bf33c4b1d34ba320d7 100644 (file)
@@ -21,7 +21,8 @@
 #ifndef PT_TLS_DISPATCHER_H_
 #define PT_TLS_DISPATCHER_H_
 
-#include <utils/utils.h>
+#include <networking/host.h>
+#include <utils/identification.h>
 
 typedef struct pt_tls_dispatcher_t pt_tls_dispatcher_t;
 
@@ -46,10 +47,11 @@ struct pt_tls_dispatcher_t {
 /**
  * Create a pt_tls_dispatcher instance.
  *
- * @param server               server address
- * @param port                 server port to listen
+ * @param address              server address with port to listen on, gets owned
+ * @param id                   TLS server identity, gets owned
  * @return                             dispatcher service
  */
-pt_tls_dispatcher_t *pt_tls_dispatcher_create(char *server, u_int16_t port);
+pt_tls_dispatcher_t *pt_tls_dispatcher_create(host_t *address,
+                                                                                         identification_t *id);
 
 #endif /** PT_TLS_DISPATCHER_H_ @}*/