PT-TLS dispatcher TNCCS constructor takes peer identities to pass to factory
authorMartin Willi <martin@revosec.ch>
Thu, 14 Feb 2013 13:48:54 +0000 (14:48 +0100)
committerMartin Willi <martin@revosec.ch>
Thu, 14 Feb 2013 16:09:28 +0000 (17:09 +0100)
src/libpttls/pt_tls_dispatcher.c
src/libpttls/pt_tls_dispatcher.h

index fab4459..813580c 100644 (file)
@@ -47,9 +47,14 @@ struct private_pt_tls_dispatcher_t {
        identification_t *server;
 
        /**
+        * Peer identity
+        */
+       identification_t *peer;
+
+       /**
         * TNCCS protocol handler constructor
         */
-       tnccs_t*(*create)();
+       pt_tls_tnccs_constructor_t *create;
 };
 
 /**
@@ -111,7 +116,8 @@ static void cleanup(pt_tls_server_t *connection)
 }
 
 METHOD(pt_tls_dispatcher_t, dispatch, void,
-       private_pt_tls_dispatcher_t *this, tnccs_t*(*create)())
+       private_pt_tls_dispatcher_t *this,
+       pt_tls_tnccs_constructor_t *create)
 {
        while (TRUE)
        {
@@ -129,7 +135,7 @@ METHOD(pt_tls_dispatcher_t, dispatch, void,
                        continue;
                }
 
-               tnccs = create();
+               tnccs = create(this->server, this->peer);
                if (!tnccs)
                {
                        close(fd);
@@ -157,6 +163,7 @@ METHOD(pt_tls_dispatcher_t, destroy, void,
                close(this->fd);
        }
        this->server->destroy(this->server);
+       this->peer->destroy(this->peer);
        free(this);
 }
 
@@ -174,6 +181,8 @@ pt_tls_dispatcher_t *pt_tls_dispatcher_create(host_t *address,
                        .destroy = _destroy,
                },
                .server = id,
+               /* we currently don't authenticate the peer, use %any identity */
+               .peer = identification_create_from_encoding(ID_ANY, chunk_empty),
                .fd = -1,
        );
 
index 5d01f7f..3c6560b 100644 (file)
 typedef struct pt_tls_dispatcher_t pt_tls_dispatcher_t;
 
 /**
+ * Constructor callback to create TNCCS to use within PT-TLS.
+ *
+ * @param server                       server identity
+ * @param peer                         peer identity
+ */
+typedef tnccs_t* (pt_tls_tnccs_constructor_t)(identification_t *server,
+                                                                                         identification_t *peer);
+
+/**
  * PT-TLS dispatcher service, handles PT-TLS connections as a server.
  */
 struct pt_tls_dispatcher_t {
@@ -41,7 +50,8 @@ struct pt_tls_dispatcher_t {
         *
         * @param create                TNCCS constructor function to use
         */
-       void (*dispatch)(pt_tls_dispatcher_t *this, tnccs_t*(*create)());
+       void (*dispatch)(pt_tls_dispatcher_t *this,
+                                        pt_tls_tnccs_constructor_t *create);
 
        /**
         * Destroy a pt_tls_dispatcher_t.