version 1.39, 2005/08/14 00:54:43
|
version 1.40, 2005/08/19 00:24:32
|
|
|
// Basic SSL socket | // Basic SSL socket |
// | // |
| |
SSLSocket::SSLSocket(Sint32 socket, SSLContext * sslcontext, Boolean exportConnection) |
SSLSocket::SSLSocket( |
|
Sint32 socket, |
|
SSLContext * sslcontext, |
|
ReadWriteSem * sslContextObjectLock, |
|
Boolean exportConnection) |
: | : |
_SSLConnection(0), | _SSLConnection(0), |
_socket(socket), | _socket(socket), |
_SSLContext(sslcontext), | _SSLContext(sslcontext), |
|
_sslContextObjectLock(sslContextObjectLock), |
_SSLCallbackInfo(0), | _SSLCallbackInfo(0), |
_certificateVerified(false), | _certificateVerified(false), |
_exportConnection(exportConnection) | _exportConnection(exportConnection) |
|
|
//SSL_do_handshake(_SSLConnection); | //SSL_do_handshake(_SSLConnection); |
//SSL_set_accept_state(_SSLConnection); | //SSL_set_accept_state(_SSLConnection); |
| |
redo_accept: |
// Make sure the SSLContext object is not updated during this operation. |
|
ReadLock rlock(*_sslContextObjectLock); |
|
|
ssl_rc = SSL_accept(_SSLConnection); | ssl_rc = SSL_accept(_SSLConnection); |
| |
if (ssl_rc < 0) | if (ssl_rc < 0) |
|
|
if ((ssl_rsn == SSL_ERROR_WANT_READ) || | if ((ssl_rsn == SSL_ERROR_WANT_READ) || |
(ssl_rsn == SSL_ERROR_WANT_WRITE)) | (ssl_rsn == SSL_ERROR_WANT_WRITE)) |
{ | { |
goto redo_accept; |
PEG_METHOD_EXIT(); |
|
return 0; |
} | } |
else | else |
{ | { |
|
|
} | } |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return ssl_rc; |
return 1; |
} | } |
| |
Sint32 SSLSocket::connect() | Sint32 SSLSocket::connect() |
|
|
MP_Socket::MP_Socket(Uint32 socket) | MP_Socket::MP_Socket(Uint32 socket) |
: _socket(socket), _isSecure(false) {} | : _socket(socket), _isSecure(false) {} |
| |
MP_Socket::MP_Socket(Uint32 socket, SSLContext * sslcontext, Boolean exportConnection) |
MP_Socket::MP_Socket( |
|
Uint32 socket, |
|
SSLContext * sslcontext, |
|
ReadWriteSem * sslContextObjectLock, |
|
Boolean exportConnection) |
{ | { |
PEG_METHOD_ENTER(TRC_SSL, "MP_Socket::MP_Socket()"); | PEG_METHOD_ENTER(TRC_SSL, "MP_Socket::MP_Socket()"); |
if (sslcontext != NULL) | if (sslcontext != NULL) |
{ | { |
_isSecure = true; | _isSecure = true; |
_sslsock = new SSLSocket(socket, sslcontext, exportConnection); |
_sslsock = new SSLSocket( |
|
socket, sslcontext, sslContextObjectLock, exportConnection); |
} | } |
else | else |
{ | { |
|
|
Sint32 MP_Socket::accept() | Sint32 MP_Socket::accept() |
{ | { |
if (_isSecure) | if (_isSecure) |
if (_sslsock->accept() < 0) return -1; |
{ |
return 0; |
return (_sslsock->accept()); |
|
} |
|
return 1; |
} | } |
| |
Sint32 MP_Socket::connect() | Sint32 MP_Socket::connect() |
|
|
MP_Socket::MP_Socket(Uint32 socket) | MP_Socket::MP_Socket(Uint32 socket) |
: _socket(socket), _isSecure(false) {} | : _socket(socket), _isSecure(false) {} |
| |
MP_Socket::MP_Socket(Uint32 socket, SSLContext * sslcontext, |
MP_Socket::MP_Socket( |
|
Uint32 socket, |
|
SSLContext * sslcontext, |
|
ReadWriteSem * sslContextObjectLock, |
Boolean exportConnection) | Boolean exportConnection) |
: _socket(socket), _isSecure(false) {} | : _socket(socket), _isSecure(false) {} |
| |
|
|
Socket::disableBlocking(_socket); | Socket::disableBlocking(_socket); |
} | } |
| |
Sint32 MP_Socket::accept() { return 0; } |
Sint32 MP_Socket::accept() { return 1; } |
| |
Sint32 MP_Socket::connect() { return 0; } | Sint32 MP_Socket::connect() { return 0; } |
| |