diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2010-03-06 02:04:52 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2010-03-06 02:04:52 +0000 |
commit | 5ef168f30582cfd441def20089c1d503128ec159 (patch) | |
tree | 1a5a348f460b78fce48c3942ffce9405f56f4253 /pjlib/src/pj/ssl_sock_symbian.cpp | |
parent | ac131cb38e62d9b73fc857e270430c0f9ecab27c (diff) |
Ticket #1043:
- Fixed bug of unused timeout setting in Symbian SSL socket, ssl_sock_symbian.cpp.
- Added an SSL test scenario of SSL connect timeout, SSL socket client tries to connect to non-SSL socket server.
- Fixed OpenSSL-based SSL socket to start SSL timer before TCP connect (was started after TCP connected and before SSL handshake).
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3117 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/ssl_sock_symbian.cpp')
-rw-r--r-- | pjlib/src/pj/ssl_sock_symbian.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/pjlib/src/pj/ssl_sock_symbian.cpp b/pjlib/src/pj/ssl_sock_symbian.cpp index 65916d73..9237ef13 100644 --- a/pjlib/src/pj/ssl_sock_symbian.cpp +++ b/pjlib/src/pj/ssl_sock_symbian.cpp @@ -171,7 +171,8 @@ private: delete reader_; reader_ = NULL; if (securesock_) { - securesock_->Close(); + if (state_ == SSL_STATE_ESTABLISHED) + securesock_->Close(); delete securesock_; securesock_ = NULL; } @@ -213,10 +214,9 @@ int CPjSSLSocket::Connect(CPjSSLSocket_cb cb, void *key, key_ = key; rem_addr_ = rem_addr; servername_.Set(servername); - state_ = SSL_STATE_CONNECTING; - rSock.Connect(rem_addr_, iStatus); SetActive(); + state_ = SSL_STATE_CONNECTING; rSock.LocalName(local_addr_); @@ -276,20 +276,16 @@ void CPjSSLSocket::DoCancel() case SSL_STATE_CONNECTING: { RSocket &rSock = ((CPjSocket*)sock_)->Socket(); + rSock.CancelConnect(); - CleanupSubObjects(); - state_ = SSL_STATE_NULL; } break; case SSL_STATE_HANDSHAKING: { securesock_->CancelHandshake(); - securesock_->Close(); - CleanupSubObjects(); - state_ = SSL_STATE_NULL; } break; @@ -322,7 +318,15 @@ void CPjSSLSocket::RunL() if (servername_.Length() > 0) securesock_->SetOpt(KSoSSLDomainName, KSolInetSSL, servername_); - securesock_->FlushSessionCache(); + + // FlushSessionCache() seems to also fire signals to all + // completed AOs (something like CActiveScheduler::RunIfReady()) + // which may cause problem, e.g: we've experienced that when + // SSL timeout is set to 1s, the SSL timeout timer fires up + // at this point and securesock_ instance gets deleted here! + // So be careful using this. And we don't think we need it here. + //securesock_->FlushSessionCache(); + securesock_->StartClientHandshake(iStatus); SetActive(); state_ = SSL_STATE_HANDSHAKING; @@ -647,6 +651,7 @@ PJ_DEF(pj_status_t) pj_ssl_sock_create (pj_pool_t *pool, ssock->sock_type = param->sock_type; ssock->cb = param->cb; ssock->user_data = param->user_data; + ssock->timeout = param->timeout; ssock->ciphers_num = param->ciphers_num; if (param->ciphers_num > 0) { unsigned i; @@ -1153,6 +1158,7 @@ static void connect_cb(int err, void *key) } else { delete ssock->sock; ssock->sock = NULL; + if (err == KErrTimedOut) status = PJ_ETIMEDOUT; } if (ssock->cb.on_connect_complete) { |