X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fyaz-pdu-assoc.cpp;h=01cdb586bdc3c3de8fecaa46f1ee15fa145bcbc8;hb=805b4fdf7b70b0e9b298064f24ceff0c1d38e05b;hp=88006bba435dcb5a489ae2ffc565c32ad719be9f;hpb=bedf8fd2207fdfe7b666377a29a5761f90b064b8;p=yazpp-moved-to-github.git diff --git a/src/yaz-pdu-assoc.cpp b/src/yaz-pdu-assoc.cpp index 88006bb..01cdb58 100644 --- a/src/yaz-pdu-assoc.cpp +++ b/src/yaz-pdu-assoc.cpp @@ -1,5 +1,5 @@ /* This file is part of the yazpp toolkit. - * Copyright (C) 1998-2012 Index Data and Mike Taylor + * Copyright (C) 1998-2013 Index Data and Mike Taylor * 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