diff -r f21293830889 -r 26ce6fb6aee2 applayerpluginsandutils/httptransportplugins/httptransporthandler/csocket.cpp --- a/applayerpluginsandutils/httptransportplugins/httptransporthandler/csocket.cpp Tue May 25 13:17:20 2010 +0300 +++ b/applayerpluginsandutils/httptransportplugins/httptransporthandler/csocket.cpp Wed Jun 09 10:16:57 2010 +0300 @@ -43,6 +43,21 @@ return self; } +CSocket* CSocket::New(MCommsInfoProvider& aCommsInfoProvider, TSocketType aSocketType) + { + CSocket* self = new CSocket(aCommsInfoProvider); + if(self) + { + TInt error = self->Construct(aSocketType); + if(error != KErrNone) + { + delete self; + self = NULL; + } + } + return self; + } + CSocket::~CSocket() /** Destructor. @@ -70,54 +85,62 @@ @param aSocketType The type of the socket. */ { - switch( aSocketType ) - { - case EProtocolSocket: - { - if ( iCommsInfoProvider.HasConnection() ) - { - // Open a protocol socket with a RConnection - User::LeaveIfError(iSocket.Open( - iCommsInfoProvider.SocketServer(), - iCommsInfoProvider.ProtocolDescription().iAddrFamily, - iCommsInfoProvider.ProtocolDescription().iSockType, - iCommsInfoProvider.ProtocolDescription().iProtocol, - iCommsInfoProvider.Connection() - )); - } - else - { - // Open a protocol socket without a RConnection, we don't need one ( Loopback address ) - User::LeaveIfError(iSocket.Open( - iCommsInfoProvider.SocketServer(), - iCommsInfoProvider.ProtocolDescription().iAddrFamily, - iCommsInfoProvider.ProtocolDescription().iSockType, - iCommsInfoProvider.ProtocolDescription().iProtocol - )); - } - } break; - case EBlankSocket: - { - // Open a blank socket - User::LeaveIfError(iSocket.Open(iCommsInfoProvider.SocketServer())); - } break; - default: - User::Invariant(); - } - TInt id = iCommsInfoProvider.SessionId(); - if(id>=0) - { - // set socket option - iSocket.SetOpt(KSOHttpSessionId, KSOLHttpSessionInfo, id); - iSocket.SetOpt(KSoTcpKeepAlive, KSolInetTcp, KTcpTriggeredKeepAlive); - } - if(aSocketType != EBlankSocket) - { - iSocket.SetOpt(KSoTcpNoDelay,KSolInetTcp,1); // Disable the nagle. - iSocket.SetOpt(KSORecvBuf, KSOLSocket, KSocketRecvBufSize); // Set the socket recv buf to be 16K - } + User::LeaveIfError(Construct(aSocketType)); } +TInt CSocket::Construct(TSocketType aSocketType) + { + TInt error = KErrNone; + switch( aSocketType ) + { + case EProtocolSocket: + { + if ( iCommsInfoProvider.HasConnection() ) + { + // Open a protocol socket with a RConnection + error = iSocket.Open(iCommsInfoProvider.SocketServer(), + iCommsInfoProvider.ProtocolDescription().iAddrFamily, + iCommsInfoProvider.ProtocolDescription().iSockType, + iCommsInfoProvider.ProtocolDescription().iProtocol, + iCommsInfoProvider.Connection() + ); + } + else + { + // Open a protocol socket without a RConnection, we don't need one ( Loopback address ) + error = iSocket.Open(iCommsInfoProvider.SocketServer(), + iCommsInfoProvider.ProtocolDescription().iAddrFamily, + iCommsInfoProvider.ProtocolDescription().iSockType, + iCommsInfoProvider.ProtocolDescription().iProtocol + ); + } + } break; + case EBlankSocket: + { + // Open a blank socket + error = iSocket.Open(iCommsInfoProvider.SocketServer()); + } break; + default: + User::Invariant(); + } + if(error == KErrNone) + { + TInt id = iCommsInfoProvider.SessionId(); + if(id>=0) + { + // set socket option + iSocket.SetOpt(KSOHttpSessionId, KSOLHttpSessionInfo, id); + iSocket.SetOpt(KSoTcpKeepAlive, KSolInetTcp, KTcpTriggeredKeepAlive); + } + if(aSocketType != EBlankSocket) + { + iSocket.SetOpt(KSoTcpNoDelay,KSolInetTcp,1); // Disable the nagle. + iSocket.SetOpt(KSORecvBuf, KSOLSocket, KSocketRecvBufSize); // Set the socket recv buf to be 16K + } + } + return error; + } + TInt CSocket::Listen(TUint aQSize, TUint16 aPort) /** Start the listen service. The socket is bound to the local port specified by