2013-10-03 45 views
0

我嘗試連接StreamSocket重視SecureStreamSocket:POCO:如何正確地將StreamSocket附加到SecureStreamSocket?

class MyConnection : public TCPServerConnection { 
    private: 
    Context::Ptr m_pContext; 
    public: 
    MyConnection(const StreamSocket& socket, Context::Ptr pContext) 
    : TCPServerConnection(socket), 
     m_pContext(pContext) 
    { 
    } 

    virtual void run() { 
     SecureStreamSocket secureSock(SecureStreamSocket::attach(socket(), m_pContext)); 
     socket() = secureSock; 
    } 
} 

但我有異常SSLException:

SSL Exception [N4Poco3Net12SSLExceptionE]: error:140C5042:SSL routines:SSL_UNDEFINED_FUNCTION:called a function you should not call 

SSL庫的初始化進行:

Poco::Net::initializeSSL(); // inside Application::initialize 

初始化SSL初始化後上下文:

Poco::Net::Context::Ptr pContext = 
     new Poco::Net::Context(
      Poco::Net::Context::SERVER_USE, 
      "server.key", 
      "server.crt", 
      "/path/to/certs/" 
     ); 

回答

0

我們可以重寫SecureStreamSocket ::連接(...)這樣說:

SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext) 
{ 
    SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>streamSocket.impl()), pContext); 
    SecureStreamSocket result(pImpl); 
    if (pImpl->context()->isForServerUse()) 
     pImpl->acceptSSL(); 
    else 
     pImpl->connectSSL(); 
    return result; 
} 

感謝this post。現在它適用於服務器和客戶端。

相關問題