Release 1.6.4
[yazpp-moved-to-github.git] / src / yaz-pdu-assoc.cpp
index 88006bb..76ac5a2 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the yazpp toolkit.
- * Copyright (C) 1998-2012 Index Data and Mike Taylor
+ * Copyright (C) Index Data 
  * See the file LICENSE for details.
  */
 
@@ -52,7 +52,9 @@ namespace yazpp_1 {
         int idleTime;
         int log;
         void init(yazpp_1::ISocketObservable *socketObservable);
+        COMSTACK comstack(const char *type_and_host, void **vp);
         bool m_session_is_dead;
+        char *cert_fname;
     };
 }
 
@@ -72,10 +74,12 @@ void PDU_Assoc_priv::init(ISocketObservable *socketObservable)
     idleTime = 0;
     log = YLOG_DEBUG;
     m_session_is_dead = false;
+    cert_fname = 0;
 }
 
 PDU_Assoc::~PDU_Assoc()
 {
+    xfree(m_p->cert_fname);
     delete m_p;
 }
 
@@ -463,7 +467,7 @@ int PDU_Assoc::send_PDU(const char *buf, int len)
     return 0;
 }
 
-COMSTACK PDU_Assoc::comstack(const char *type_and_host, void **vp)
+COMSTACK PDU_Assoc_priv::comstack(const char *type_and_host, void **vp)
 {
     return cs_create_host(type_and_host, 2, vp);
 }
@@ -497,10 +501,14 @@ int PDU_Assoc::listen(IPDU_Observer *observer, const char *addr)
 
     m_PDU_Observer = observer;
     void *ap;
-    m_p->cs = comstack(addr, &ap);
+    m_p->cs = m_p->comstack(addr, &ap);
 
     if (!m_p->cs)
         return -1;
+
+    if (m_p->cert_fname)
+        cs_set_ssl_certificate_file(m_p->cs, m_p->cert_fname);
+
     if (cs_bind(m_p->cs, ap, CS_SERVER) < 0)
         return -2;
 
@@ -522,6 +530,11 @@ int PDU_Assoc::listen(IPDU_Observer *observer, const char *addr)
     return 0;
 }
 
+COMSTACK PDU_Assoc::get_comstack()
+{
+    return m_p->cs;
+}
+
 void PDU_Assoc::idleTime(int idleTime)
 {
     m_p->idleTime = idleTime;
@@ -535,7 +548,7 @@ int PDU_Assoc::connect(IPDU_Observer *observer, const char *addr)
     shutdown();
     m_PDU_Observer = observer;
     void *ap;
-    m_p->cs = comstack(addr, &ap);
+    m_p->cs = m_p->comstack(addr, &ap);
     if (!m_p->cs)
         return -1;
     int res = cs_connect(m_p->cs, ap);
@@ -601,6 +614,15 @@ const char*PDU_Assoc::getpeername()
         return 0;
     return cs_addrstr(m_p->cs);
 }
+
+void PDU_Assoc::set_cert_fname(const char *fname)
+{
+    xfree(m_p->cert_fname);
+    m_p->cert_fname = 0;
+    if (fname)
+        m_p->cert_fname = xstrdup(fname);
+}
+
 /*
  * Local variables:
  * c-basic-offset: 4