diff -r bb2423252ea3 -r c1029e558ef5 linklayerprotocols/tundriver/te_tundriver/Dummy3rdPartyApp/src/Dummy3rdPartyApp.cpp --- a/linklayerprotocols/tundriver/te_tundriver/Dummy3rdPartyApp/src/Dummy3rdPartyApp.cpp Wed Sep 15 13:53:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -/* - ============================================================================ - Name : Dummy3rdPartyApp.cpp - Author : Gurpreet Singh Nagi - Copyright : Your copyright notice - Description : Exe source file - ============================================================================ - */ - -// Include Files - -#include "Dummy3rdPartyApp.h" -#include -#include -#include // Console - -// Constants -_LIT(KTextConsoleTitle, "Dummy3rdPartyApp"); -_LIT(KTextFailed, " failed, leave code = %d"); -_LIT(KTextPressAnyKey, " [press any key]\n"); - -#define BUF_SIZE 2048 -// Global Variables -LOCAL_D CConsoleBase* console; // write all messages to this - - -// Local Functions -void Dummy3rdPartyApp::InitConn() - { - if((iStatus = iVirtSocketServ.Connect()) == KErrNone ) - console->Printf(_L("Opening Socket Server on Virtual Interface.\n")); - - if((iStatus = iRealSocketServ.Connect()) == KErrNone ) - console->Printf(_L("Opening Socket Server on Real Interface.\n")); - - if((iStatus = iHookSocketServ.Connect()) == KErrNone ) - console->Printf(_L("Opening Socket Server for Hook.\n")); - - if((iStatus = iVirtConnection.Open(iVirtSocketServ, KAfInet)) == KErrNone ) - console->Printf(_L("\nOpening Virtual Connection.")); - - if((iStatus = iRealConnection.Open(iRealSocketServ, KAfInet)) == KErrNone ) - console->Printf(_L("\nOpening Real Connection.\n")); - - iHookSocket.Open(iHookSocketServ,_L("tun")); - - } - -void Dummy3rdPartyApp::StartConn() - { - iVirtCommDbPref.SetIapId(14); // Dummy Interface - iVirtCommDbPref.SetBearerSet(KCommDbBearerVirtual); - iVirtCommDbPref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); - - TInt err = KErrNone; - iVirtConnection.Start(iVirtCommDbPref, iStatus); - User::WaitForRequest(iStatus); - err = iStatus.Int(); - if(iStatus == KErrNone) - console->Printf(_L("Connection Started on Virtual Interface.\n")); - User::LeaveIfError(err); - err = KErrNone; - //open socket on Virtual interface. - iStatus = iVirtSocket.Open(iVirtSocketServ, KAfInet, KSockDatagram, KProtocolInetUdp, iVirtConnection); - //if((iStatus = iVirtSocket.Open(iVirtSocketServ, KAfInet, KSockDatagram, KProtocolInetUdp, iVirtConnection)) == KErrNone ) - if(iStatus == KErrNone) - console->Printf(_L("Socket Opened on Virtual Interface.\n")); - - iRealCommDbPref.SetIapId(9); //Real Interface i.e. ethernet - iRealCommDbPref.SetBearerSet(KCommDbBearerLAN); - iRealCommDbPref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); - - iRealConnection.Start(iRealCommDbPref, iStatus); - User::WaitForRequest(iStatus); - if(iStatus == KErrNone) - console->Printf(_L("Connection Started on Real Interface.\n")); - err = iStatus.Int(); - //open socket on real interface - if((iStatus = iRealSocket.Open(iRealSocketServ, KAfInet, KSockDatagram, KProtocolInetUdp, iRealConnection)) == KErrNone ) - console->Printf(_L("Socket Opened on Real Interface.\n")); - User::LeaveIfError(err); - - //set destination port and IP ie. OpenVPN gateway address - iRealAddr.SetV4MappedAddress(INET_ADDR(10,225,171,71)); - iRealAddr.SetPort(1194); - err = KErrNone; - //bind local port to socket - // To Get any available port from the kernel - - TInetAddr inetAddrBind; - inetAddrBind.SetPort(KInetPortAny); - inetAddrBind.SetAddress(KInetAddrAny); - iVirtSocket.Bind(inetAddrBind); - TUint port1 = iVirtSocket.LocalPort(); - - TPckgC portPckg (port1); - iHookSocket.SetOpt(KSolInetIp,KSoTunnelPort,portPckg); - - console->Printf(_L("Socket bound on Virtual Interface.\n"), err); - - err = iRealSocket.SetLocalPort(1194); - console->Printf(_L("Socket bound on Real Interface.\n"), err); - - } - - -void Dummy3rdPartyApp::ProcessData() - { - //Receive data from client on virtual interface - iVirtSocket.RecvFrom(iSendBuf, iVirtAddr, NULL, iStatus); - User::WaitForRequest(iStatus); - - if(iStatus == KErrNone) - { - console->Printf(_L("\nData Received from Virtual Interface: ")); - //copy received data to temp buffer and print it - //TBuf buf; - //buf.Copy(iSendBuf); - //console->Printf(buf); - } - else - console->Printf(_L("\nData receive failed on Virtual Interface.")); - - //Send data on real interface to OpenVPN Gateway. - iRealSocket.SendTo(iSendBuf, iRealAddr, NULL, iStatus); - User::WaitForRequest(iStatus); - - if( iStatus == KErrNone) - { - console->Printf(_L("\nData Sent on Real interface : ")); - - //display sent data - //TBuf buf; - //buf.Copy(iSendBuf); - //console->Printf(buf); - } - else - console->Printf(_L("\nData send failed on Real Interface")); - - //Receive data from from real interface - iRealSocket.RecvFrom(iRecvBuf, iRealAddr, NULL, iStatus); - User::WaitForRequest(iStatus); - - if(iStatus == KErrNone) - { - console->Printf(_L("\nData Received from Real Interface: ")); - //copy received data to temp buffer and print it - //TBuf buf; - //buf.Copy(iRecvBuf); - //console->Printf(buf); - } - else - console->Printf(_L("\nData receive failed on Real Interface")); - - //Send data to virtual interface. - iVirtSocket.SendTo(iRecvBuf, iVirtAddr, NULL, iStatus); - User::WaitForRequest(iStatus); - - if( iStatus == KErrNone) - { - console->Printf(_L("\nData Sent on Virtual interface : ")); - - //display sent data - //TBuf buf; - //buf.Copy(iRecvBuf); - //console->Printf(buf); - } - else - console->Printf(_L("\nData send failed on Virtual Interface")); - } - -void Dummy3rdPartyApp::CloseConn() - { - //Close all handles. - iVirtSocket.Close(); - iRealSocket.Close(); - iHookSocket.Close(); - - iVirtConnection.Close(); - iRealConnection.Close(); - iVirtSocketServ.Close(); - iRealSocketServ.Close(); - iHookSocketServ.Close(); - } - -LOCAL_C void MainL() - { - Dummy3rdPartyApp obj; - - //intializing connection and socket - obj.InitConn(); - //start the connection - obj.StartConn(); - - while(1) - { - obj.ProcessData(); - } - //close connection, subconnection, socket - //TODO: how to explicitly close the loop? - // One possible solution is running a timer. - obj.CloseConn(); - } - -LOCAL_C void DoStartL() - { - // Create active scheduler (to run active objects) - CActiveScheduler* scheduler = new (ELeave) CActiveScheduler(); - CleanupStack::PushL(scheduler); - CActiveScheduler::Install(scheduler); - - MainL(); - // Delete active scheduler - CleanupStack::PopAndDestroy(scheduler); - } - -// Global Functions - -GLDEF_C TInt E32Main() - { - // Create cleanup stack - __UHEAP_MARK; - CTrapCleanup* cleanup = CTrapCleanup::New(); - - // Create output console - TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize( - KConsFullScreen, KConsFullScreen))); - if (createError) - return createError; - - // Run application code inside TRAP harness, wait keypress when terminated - TRAPD(mainError, DoStartL()); - if (mainError) - console->Printf(KTextFailed, mainError); - console->Printf(KTextPressAnyKey); - console->Getch(); - - delete console; - delete cleanup; - __UHEAP_MARKEND; - return KErrNone; - }