hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/Csocket.cpp
changeset 0 a03f92240627
child 4 73ff0d268e1d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/Csocket.cpp	Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  General purpose socket implementetion
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CSocket.h"
+#include <es_sock.h>
+#include <in_sock.h>
+#include "CSocketWriter.h"
+#include "CSocketReader.h"
+#include "MSocketObserver.h"
+
+#define DEBUG_FILENAME "IPProxyEngine.log"
+#include "DebugPrint.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSocket::CSocket
+// -----------------------------------------------------------------------------
+//
+CSocket::CSocket( RSocket* aSocket, TInt aUDPRemotePort /*= -1*/ ) :
+    iSocket( aSocket ),
+    iHasOwnership( EFalse ),
+    iUDPRemotePort( aUDPRemotePort )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSocket::ConstructL()
+    {
+    iSocketWriter = CSocketWriter::NewL( *iSocket, iUDPRemotePort );
+    iSocketWriter->SetObserver( this );
+    iSocketReader = CSocketReader::NewL( *iSocket, iUDPRemotePort );
+    iSocketReader->SetObserver( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::NewL
+// -----------------------------------------------------------------------------
+//
+CSocket* CSocket::NewL( RSocket* aSocket, TInt aUDPRemotePort /*= -1*/ )
+    {
+    CSocket* self = CSocket::NewLC( aSocket, aUDPRemotePort );
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::NewLC
+// -----------------------------------------------------------------------------
+//
+CSocket* CSocket::NewLC( RSocket* aSocket, TInt aUDPRemotePort /*= -1*/ )
+    {
+    CSocket* self = new( ELeave ) CSocket( aSocket, aUDPRemotePort );
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+    return self;
+    }
+
+
+// Destructor
+CSocket::~CSocket()
+    {
+    delete iSocketWriter;
+    delete iSocketReader;
+    if ( iHasOwnership && iSocket )
+        {
+        TRequestStatus status;
+        iSocket->Shutdown( RSocket::EImmediate, status );
+        User::WaitForRequest( status );
+        iSocket->Close();
+        delete iSocket;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSocket::WriteL
+// -----------------------------------------------------------------------------
+//
+void CSocket::WriteL( const TDesC8& aData )
+    {
+    iSocketWriter->IssueWriteL( aData );
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::GetRSocket
+// -----------------------------------------------------------------------------
+//
+RSocket* CSocket::GetRSocket()
+    {
+    return iSocket;
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::RemotePort
+// -----------------------------------------------------------------------------
+//
+TUint CSocket::RemotePort() const
+    {
+    if ( IsUDP() )
+        {
+        return iUDPRemotePort;
+        }
+    else
+        {
+        TSockAddr addr;
+        iSocket->RemoteName( addr );
+        return addr.Port();
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::LocalPort
+// -----------------------------------------------------------------------------
+//
+TUint CSocket::LocalPort() const
+    {
+    return iSocket->LocalPort();
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::SetObserver
+// -----------------------------------------------------------------------------
+//
+void CSocket::SetObserver( MSocketObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::SetSocketOwnershipMode
+// -----------------------------------------------------------------------------
+//
+void CSocket::SetSocketOwnershipMode( TBool aHasOwnership )
+    {
+    iHasOwnership = aHasOwnership;
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::IssueRead
+// -----------------------------------------------------------------------------
+//
+void CSocket::IssueRead()
+    {
+    iSocketReader->Start();
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::Cancel
+// -----------------------------------------------------------------------------
+//
+void CSocket::Cancel()
+    {
+    iSocketReader->Cancel();
+    iSocketWriter->Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::DataReceivedL
+// -----------------------------------------------------------------------------
+//
+void CSocket::SocketInfo( TProtocolDesc& aDesc) const
+    {
+    iSocket->Info( aDesc );
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::IsUDP
+// -----------------------------------------------------------------------------
+//
+TBool CSocket::IsUDP() const
+    {
+    TProtocolDesc desc;
+    iSocket->Info( desc );
+    if ( desc.iProtocol == KProtocolInetUdp && iUDPRemotePort > -1 )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::DataReceivedL
+// -----------------------------------------------------------------------------
+//
+void CSocket::DataReceivedL( const TDesC8& aData )
+    {
+    iObserver->DataReceivedL( this, aData );
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::BufferUnderrunL
+// -----------------------------------------------------------------------------
+//
+void CSocket::BufferUnderrunL()
+    {
+    //No implementation
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::WriterErrorL
+// -----------------------------------------------------------------------------
+//
+void CSocket::WriterErrorL( TInt aErrorCode )
+    {
+    DEBUG_PRINT( DEBUG_STRING(
+        "CSocket::WriterErrorL( %d )" ), aErrorCode );
+
+    iObserver->ErrorL( this, aErrorCode );
+    }
+
+// -----------------------------------------------------------------------------
+// CSocket::ReaderErrorL
+// -----------------------------------------------------------------------------
+//
+void CSocket::ReaderErrorL( TInt aErrorCode )
+    {
+    DEBUG_PRINT( DEBUG_STRING(
+        "CSocket::ReaderErrorL( %d ), UDP port=%d" ), aErrorCode, iUDPRemotePort );
+
+    if ( aErrorCode == KErrEof || aErrorCode == KErrCancel ||
+        aErrorCode == KErrDisconnected || aErrorCode == KErrNotReady )
+        {
+        iObserver->DisconnectedL( this );
+        }
+    else
+        {
+        iObserver->ErrorL( this, aErrorCode );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSocket::ObserverLeaved
+// -----------------------------------------------------------------------------
+//
+void CSocket::ObserverLeaved( TInt aLeaveCode )
+    {
+    iObserver->ObserverLeaved( this, aLeaveCode );
+    }
+
+
+//  End of File