summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/ssl_sock_symbian.cpp
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-03-06 02:04:52 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-03-06 02:04:52 +0000
commit5ef168f30582cfd441def20089c1d503128ec159 (patch)
tree1a5a348f460b78fce48c3942ffce9405f56f4253 /pjlib/src/pj/ssl_sock_symbian.cpp
parentac131cb38e62d9b73fc857e270430c0f9ecab27c (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.cpp24
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) {