--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/UCCSDeviceControl/CTCPTransport.cpp Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2005-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:
+*
+*/
+
+
+
+#include <e32def.h>
+#include <inet.h>
+
+#include "CTCPTransport.h"
+#include "assert.h"
+
+#include <CommDbConnPref.h>
+
+
+CTCPTransport::CTCPTransport()
+ {
+ }
+
+CTCPTransport::~CTCPTransport()
+ {
+ iSocket.Close();
+ iServer.Close();
+ }
+
+TInt CTCPTransport::InitialiseL()
+ {
+ return KErrNone;
+ }
+
+TInt CTCPTransport::Release( void )
+ {
+ iSocket.Close();
+ iServer.Close();
+ return KErrNone;
+ }
+
+TInt CTCPTransport::ConnectL( TDesC* aRemoteHost )
+ {
+ // Retrieve the destination port location
+ TInt colonPos = aRemoteHost->Locate( TChar(':') );
+ if(colonPos != KErrNotFound)
+ {
+ // Set the destination port
+ TPtrC host( aRemoteHost->Left(colonPos) );
+ TLex portLex( aRemoteHost->Mid(colonPos + 1) );
+ TInt port = 0;
+ portLex.Val( port );
+ iDestAddr.SetPort( port );
+
+ // Retrieve and set the destination ip address
+ TBuf<20> ipAddress;
+ ipAddress.Copy( host.Ptr(), colonPos );
+ iDestAddr.Input( ipAddress );
+ }
+ else
+ {
+ iDestAddr.SetPort( KUCCTCPPort );
+ }
+
+ // pick out the iap/snap index..
+ TInt index=0;
+ TPtrC mode;
+
+ TInt pipePos = aRemoteHost->Locate( TChar('|') );
+ if( pipePos != KErrNotFound )
+ {
+ TPtrC tempstr( aRemoteHost->Ptr() + pipePos + 1 );
+ TInt indexPos = tempstr.Locate( TChar(':') );
+
+ if( indexPos != KErrNotFound )
+ {
+ mode.Set( tempstr.Left(indexPos) );
+ TLex iapLex( tempstr.Mid(indexPos + 1) );
+ iapLex.Val( index );
+ }
+ }
+
+ // Connect to the server - need to retry as the first few attepts seem to fail over PPP
+ User::LeaveIfError( iServer.Connect() );
+ User::LeaveIfError( iConnection.Open(iServer) );
+
+ if( index > 0 && mode.Compare( _L("IAP") ) == 0 )
+ {
+ TCommDbConnPref pref;
+ pref.SetIapId(index);
+ pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
+ User::LeaveIfError(iConnection.Start(pref));
+ }
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+ else if( index > 0 && mode.Compare( _L("SNAP") ) == 0 )
+ {
+ TConnSnapPref pref(index);
+ User::LeaveIfError(iConnection.Start(pref));
+ }
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+ else
+ {
+ User::LeaveIfError(iConnection.Start());
+ }
+
+ TInt ret = -1;
+ while( ret )
+ {
+ User::LeaveIfError( iSocket.Open(iServer, KAfInet, KSockStream, KProtocolInetTcp, iConnection) );
+ TRequestStatus status;
+ iSocket.Connect( iDestAddr, status );
+ User::WaitForRequest( status );
+ ret = status.Int();
+ }
+
+ return KErrNone;
+ }
+
+TInt CTCPTransport::Disconnect( void )
+ {
+ iSocket.Close();
+ iServer.Close();
+ return KErrNone;
+ }
+
+TInt CTCPTransport::RequestSend( TDesC8 *aData, const TUint aDataLength )
+ {
+ assert( aData->Length() == aDataLength );
+ // Write to the socket
+ TRequestStatus status;
+ iSocket.Write( *aData, status );
+ User::WaitForRequest( status );
+ return status.Int();
+ }
+
+TInt CTCPTransport::RequestReceive( TPtr8 *aRecvBufferPtr, TUint aByteCount )
+ {
+ assert( aRecvBufferPtr->MaxLength() == aByteCount );
+ // Read from the socket
+ TRequestStatus status;
+ iSocket.Read( *aRecvBufferPtr, status );
+ User::WaitForRequest( status );
+ return status.Int();
+ }
+
+TText8 *CTCPTransport::Error( void )
+ {
+ return NULL;
+ }