obex/obexprotocol/obex/test/tobex/TOBEXCON.CPP
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/obex/obexprotocol/obex/test/tobex/TOBEXCON.CPP	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,966 @@
+// Copyright (c) 1997-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 <es_sock.h>
+#include <ir_sock.h>
+#include <bautils.h>
+#include <usbman.h>
+#include <d32usbc.h>
+#include <e32keys.h>
+#include "TOBEXCON.H"
+#include "clienthandler.h"
+#include "serverhandlerbase.h"
+#include "serverhandler.h"
+#include "serverhandlerfile.h"
+#include "btextnotifiers.h"
+
+#ifdef EMPTY_HEADERS_TEST
+#include "emptyheaderstest.h"
+#endif //EMPTY_HEADERS_TEST
+
+#define EPOCIDENT _L8("EPOC32 ER5")
+
+
+CActiveConsole::CActiveConsole(CConsoleBase* aConsole) 
+    : CActive(EPriorityNormal),
+      iConsole(aConsole),
+      iTestMode(E_Inactive),
+      iDiscoverySlots(KObexIrdaDefaultDiscoverySlotsToUse),
+      iDiscoveryAttempts(KObexIrdaDefaultDiscoveryAttempts),
+      iRecvMTU(KObexPacketDefaultSize),
+      iTransmitMTU(KObexPacketDefaultSize)
+    {
+#ifdef EMPTY_HEADERS_TEST
+	iDisplayHeaders = ETrue;
+#endif //EMPTY_HEADERS_TEST    
+    }
+
+CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole)
+    {
+    CActiveConsole* self = new (ELeave) CActiveConsole(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+    return self;
+    }
+
+void CActiveConsole::ConstructL ()
+    { 
+    iRefHandler = CReferenceHandler::NewL();
+    iConsole->Printf(_L("\r\n"));
+    CActiveScheduler::Add(this);			// Add to active scheduler
+    
+    // Create private path and set default Inbox path
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+	fs.CreatePrivatePath(EDriveC);
+	fs.SetSessionToPrivate(EDriveC);	
+	fs.SessionPath(iInboxRoot);
+	fs.Close();
+    }
+
+CActiveConsole::~CActiveConsole()
+	{
+	// Make sure we're cancelled
+	Cancel();
+
+	// safe to delete NULL
+	delete iObexClientHandler;
+	delete iObexServerHandler;
+	delete iObexServerHandlerFile;
+	delete iRefHandler;
+	}
+
+void  CActiveConsole::DoCancel()
+    {
+    iConsole->ReadCancel();
+    }
+
+void  CActiveConsole::RunL()
+    {
+	// Save the current test mode in case the next action leaves
+	TUint oldTestMode = iTestMode;
+    TRAPD(err,ProcessKeyPressL(TChar(iConsole->KeyCode())));
+	if(err != KErrNone)
+		{
+		iConsole->Printf(_L("Failed. Error: %d\r\n"),err);
+		// Put the test mode back again
+		iTestMode = oldTestMode;
+		RequestCharacter();
+		}
+    }
+
+void CActiveConsole::RequestCharacter()
+    {
+    // A request is issued to the CConsoleBase to accept a
+    // character from the keyboard.
+    if (iTestMode == E_Client)
+		{
+		iConsole->Printf(_L("Commands :- \r\n"));
+		iConsole->Printf(_L(" A  -  IrObex Abort\r\n"));
+		iConsole->Printf(_L(" 1  -  IrObex Connect Menu\r\n"));
+		iConsole->Printf(_L(" 2  -  IrObex Disconnect\r\n"));
+		iConsole->Printf(_L(" 3  -  IrObex Put obj 1 : %S\r\n"), &(iObexClientHandler->iFilename1));
+		iConsole->Printf(_L(" 4  -  IrObex Put Obj 2 : %S\r\n"), &(iObexClientHandler->iFilename2));
+		iConsole->Printf(_L(" z  -  IrObex Put Obj 3 : %S\r\n"), &(iObexClientHandler->iFilename3));
+		iConsole->Printf(_L(" y  -  Enter HTTP/App param Test Menu\r\n")); //E_Client_HTTP_Menu
+		iConsole->Printf(_L(" 5  -  IrObex Get by name\r\n"));
+		iConsole->Printf(_L(" 6  -  IrObex Get by type\r\n"));
+		iConsole->Printf(_L(" 7  -  IrObex SetPath\r\n"));
+		iConsole->Printf(_L(" 8  -  IrObex Put reference object\r\n"));
+		iConsole->Printf(_L(" 9  -  IrObex Get reference object\r\n"));
+		iConsole->Printf(_L(" 0  -  IrObex Setup OBEX\r\n"));
+		iConsole->Printf(_L(" h  -  Toggle display of object headers\r\n"));
+#ifdef ERROR_RESOLUTION_EXTENSION
+		iConsole->Printf(_L(" l  -  Display last error\r\n"));
+#endif
+#ifdef EMPTY_HEADERS_TEST
+		iConsole->Printf(_L(" t  -  Empty headers test menu\r\n"));
+#endif //EMPTY_HEADERS_TEST
+		iConsole->Printf(_L(" s  -  kill the Obex Client\r\n"));
+		}
+	if ( iTestMode == E_Client_HTTP_Menu )
+		{ 
+		iConsole->Printf(_L(" 1  -  HTTP Multiple Packets, will all arrive\r\n"));
+		iConsole->Printf(_L(" 2  -  HTTP Multiple Packets, too many arrive in two parts\r\n"));
+		iConsole->Printf(_L(" 3  -  HTTP Single Packet too large, nothing will arrive\r\n"));
+		iConsole->Printf(_L(" 4  -  HTTP Single Packet too large with several smaller packets which will arrive\r\n"));
+		iConsole->Printf(_L(" 5  -  App parameters test\r\n"));
+		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
+		}
+	if ( iTestMode == E_Client_Connect_Menu )
+		{
+		iConsole->Printf(_L(" 0  -  IrObex Disconnect\r\n"));
+		iConsole->Printf(_L(" 1  -  IrObex Connect\r\n"));
+		iConsole->Printf(_L(" 2  -  IrObex Connect with Authentication\r\n"));
+		iConsole->Printf(_L(" 3  -  IrObex Connect with Target Header\r\n"));
+		iConsole->Printf(_L(" 4  -  IrObex Connect with Authentication AND Target Header\r\n"));
+		iConsole->Printf(_L(" 5  -  Get remote address\r\n"));
+		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
+		}
+	if ( iTestMode == E_Client_Setup_Menu )
+		{
+		iConsole->Printf(_L(" 1  -  Change Put Object 1\r\n"));
+		iConsole->Printf(_L(" 2  -  Change Put Object 2\r\n"));
+		iConsole->Printf(_L(" 3  -  Change Obex Get Name : %S\r\n"), &(iObexClientHandler->iObexName));
+		iConsole->Printf(_L(" 4  -  Change Obex Get Type : %S\r\n"), &(iObexClientHandler->iGetType));
+		iConsole->Printf(_L(" 5  -  Enable password support (so they can challenge us)\r\n"));
+		iConsole->Printf(_L(" 6  -  Set challenge password : %S\r\n"), &(iObexClientHandler->iChallengePassword));
+		iConsole->Printf(_L(" 7  -  Change Authentication Challenge Header\r\n"));
+		iConsole->Printf(_L(" 8  -  Set Command Time-out\r\n"));
+		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
+		iConsole->Printf(_L(" p  -  Set default file path : %S\r\n"), &iInboxRoot);
+		}
+	if ( iTestMode == E_Client_Authentication_Header_Menu )
+		{
+		iConsole->Printf(_L(" 1  -  Suppress Options Header\r\n"));
+		iConsole->Printf(_L(" 2  -  Suppress Realm Header\r\n"));
+		iConsole->Printf(_L(" 3  -  Suppress Options and Realm Headers\r\n"));
+		iConsole->Printf(_L(" 4  -  Reset to Default Authentication Headers\r\n"));
+		iConsole->Printf(_L(" 5  -  Attempt Invalid Authentication Headers Value (i)\r\n"));
+		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
+		}
+	if (iTestMode == E_Server)
+		{
+		iConsole->Printf(_L(" 1  -  Make OBEX Challenge on all incoming connections\r\n"));
+		iConsole->Printf(_L(" 2  -  Disable authentication\r\n"));
+		iConsole->Printf(_L(" 3  -  Enable password support (so they can challenge us)\r\n"));
+		iConsole->Printf(_L(" 4  -  Set FTP local who (insist on target header\r\n"));
+		iConsole->Printf(_L(" 5  -  Change challenge password : %S\r\n"), &(iObexServerHandler->iChallengePassword));
+		iConsole->Printf(_L(" 6  -  Get remote address\r\n"));
+        iConsole->Printf(_L(" 7  -  Set Target Checking to NoChecking\r\n"));
+        iConsole->Printf(_L(" 8  -  Set Target Checking to IfPresent\r\n"));
+        iConsole->Printf(_L(" 9  -  Set Target Checking to Always\r\n"));
+		iConsole->Printf(_L(" h  -  Toggle display of object headers\r\n"));
+		iConsole->Printf(_L(" p  -  Set Inbox root directory : %S\r\n"), &iInboxRoot);
+#ifdef PACKET_ACCESS_EXTENSION
+		iConsole->Printf(_L(" a  -  Enable displaying of request packets\r\n"));
+#endif // PACKET_ACCESS_EXTENSION
+		if(iTransport == EIrda)
+			{
+			iConsole->Printf(_L(" o  -  start suppressing IrDA discovery requests\r\n"));
+			iConsole->Printf(_L(" c  -  stop suppressing IrDA discovery requests\r\n"));
+			}
+
+		iConsole->Printf(_L("press 's' to stop the Obex Server\r\n"));
+		iConsole->Printf(_L("press 'S' to start the Obex Server\r\n"));
+		}
+	if (iTestMode == E_Server_File)
+		{
+		iConsole->Printf(_L(" Started Obex server, receiving into file-backed buffer object\r\n"));
+		iConsole->Printf(_L(" 1  -  Make OBEX Challenge on all incoming connections\r\n"));
+		iConsole->Printf(_L(" 2  -  Disable authentication\r\n"));
+		iConsole->Printf(_L(" 3  -  Enable password support (so they can challenge us)\r\n"));
+		iConsole->Printf(_L(" 4  -  Set FTP local who (insist on target header\r\n"));
+		iConsole->Printf(_L(" 5  -  Change challenge password : %S\r\n"), &(iObexServerHandlerFile->iChallengePassword));
+		iConsole->Printf(_L(" 6  -  Get remote address\r\n"));
+		iConsole->Printf(_L(" 7  -  Toggle buffered file writes\r\n"));
+		iConsole->Printf(_L(" p  -  Set Inbox root directory : %S\r\n"), &iInboxRoot);
+		iConsole->Printf(_L("s - Stop the Obex Server\r\n"));
+		iConsole->Printf(_L("g - Start the Obex Server\r\n"));
+		iConsole->Printf(_L("press 'k' to kill the Obex Server\r\n"));
+		}
+
+    if(iTestMode == E_Inactive)
+		{
+		iConsole->Printf(_L("press '1' to start the Obex Client over Bluetooth\r\n"));
+		iConsole->Printf(_L("press '2' to start the Obex Server over Bluetooth\r\n"));
+		iConsole->Printf(_L("press '3' to start the Obex Client over Irda\r\n"));
+		iConsole->Printf(_L("press 'a' to set the number of discovery slots to use in Irda\r\n"));
+ 		iConsole->Printf(_L("press 'b' to set the number of discovery attempts to make in Irda\r\n"));
+		iConsole->Printf(_L("press '4' to start the Obex Server over Irda\r\n"));
+		iConsole->Printf(_L("press '5' to start the Obex Server over Irda (filename backed buffer object)\r\n"));
+		iConsole->Printf(_L("press 'r' to start the Obex Server over Irda (RFile backed buffer object)\r\n"));
+		iConsole->Printf(_L("press '6' to start the Obex Server over USB\r\n"));
+		iConsole->Printf(_L("press '7' to start the Obex Client over USB\r\n"));
+		iConsole->Printf(_L("press 'n' to set the IrDA Nickname\r\n"));
+		iConsole->Printf(_L("press 'm' to set the Obex Recv MTU\r\n"));
+		iConsole->Printf(_L("press 'M' to set the Obex Transmit MTU\r\n"));
+		iConsole->Printf(_L("press 'p' to toggle performance logging\r\n"));
+		}
+#ifdef EMPTY_HEADERS_TEST
+	if ( iTestMode == E_Empty_Headers_Accept_Test )
+		{
+		iConsole->Printf(_L(" 1  -  Sent a packet with NOT empty following headers:\n\t[ Name, Type, Description, Target, Application Parameters ]\r\n\n"));
+		iConsole->Printf(_L(" 2  -  Sent a packet with existing but empty following headers:\n\t[ Name, Type, Description, Target, Application Parameters ]\r\n\n"));
+		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
+		}
+#endif //EMPTY_HEADERS_TEST
+	if(iTestMode == E_GetIrDANickname && iIrDANicknameBuffer.Length() == 0)
+		{
+		iConsole->Printf(_L("Enter new IrDA nickname: "));
+		}
+	if(iTestMode == E_EnterRecvMTU && iRecvMTU == 0)
+		{
+		iConsole->Printf(_L("Enter new Receive MTU value (m=max, d=default): "));
+		}
+	if(iTestMode == E_EnterTransmitMTU && iTransmitMTU == 0)
+		{
+		iConsole->Printf(_L("Enter new Transmit MTU value (m=max, d=default): "));
+		}
+	//if(E_SdpQuery) // no extra options
+
+    if(iTestMode != E_GetIrDANickname &&
+       iTestMode != E_EnterRecvMTU &&
+       iTestMode != E_EnterTransmitMTU)
+    	{
+    	iConsole->Printf(_L("press Escape to quit\r\n\r\n"));
+    	}
+    iConsole->Read(iStatus); 
+    SetActive();
+    }
+
+void CActiveConsole::ProcessKeyPressL(TChar aChar)
+    {
+    if (aChar == EKeyEscape)
+		{
+		CActiveScheduler::Stop();
+		return;
+		}
+
+    if(iTestMode ==E_Inactive)
+		{
+		switch (aChar)
+			{
+		case '1': 
+			iTestMode = E_SdpQuery;
+			iTransport = EBluetooth;
+			iObexClientHandler = CObexClientHandler::NewL(this, EBluetooth);
+			break;
+		case'3':
+			iTestMode = E_Client;
+			iTransport = EIrda;
+			iObexClientHandler = CObexClientHandler::NewL(this, EIrda);
+			break;
+		case 'a':
+ 			SetNumber(iDiscoverySlots);
+ 			break;
+ 		case 'b':
+ 			SetNumber(iDiscoveryAttempts);
+ 			break;	
+		case 'n':
+			iTestMode = E_GetIrDANickname;
+			iIrDANicknameBuffer.Zero();
+			break;
+		case 'p':
+			// Toggle the internal state.
+			iPerformanceLoggingEnabled = !iPerformanceLoggingEnabled;
+			if(iPerformanceLoggingEnabled)
+				{
+				iConsole->Printf(_L("\r\nPerformance logging enabled.\r\n\r\n"));
+				}
+			else
+				{
+				iConsole->Printf(_L("\r\nPerformance logging disabled.\r\n\r\n"));
+				}
+			break;
+		case '2':
+			iTestMode = E_Server;
+			iTransport = EBluetooth;
+			iObexServerHandler = CObexServerHandler::NewL(this, EBluetooth);
+			break;
+		case '4':
+			iTestMode = E_Server;
+			iTransport = EIrda;
+			iObexServerHandler = CObexServerHandler::NewL(this, EIrda);
+			break;
+		case '5':
+			iTestMode = E_Server_File;	// Added test for file-backed buffer object receive
+			iTransport = EIrda;
+			iObexServerHandlerFile = CObexServerHandlerFile::NewL(this,EIrda);
+			break;
+		case 'r':
+			iTestMode = E_Server_File;	// Added test for file-backed buffer object receive
+			iTransport = EIrda;
+			iObexServerHandlerFile = CObexServerHandlerFile::NewL(this,EIrda,ETrue);
+			break;
+		case '6':
+			{
+			iTestMode = E_Server;
+			
+#ifndef __WINS__
+			iTransport = EUsb;
+
+			// For USB, we unfortunately need to start it, then register our
+			// interfaces, then do a soft connect.
+			TInt err = User::LoadLogicalDevice(_L("EUSBC"));
+			if (err != KErrNone && err != KErrAlreadyExists)
+				{
+				User::Leave(err);
+				}
+			
+			RUsb usb;
+			User::LeaveIfError(usb.Connect());
+			TRequestStatus status;
+			usb.TryStart(2, status);
+			User::WaitForRequest(status);
+			iConsole->Printf(_L("Starting USB returned %d\n"), status.Int());
+            User::LeaveIfError(status.Int());
+			usb.Close();
+			
+			RDevUsbcClient usbDriver;
+			User::LeaveIfError(usbDriver.Open(0));
+			User::LeaveIfError(usbDriver.DeviceDisconnectFromHost());
+			
+			iObexServerHandler = CObexServerHandler::NewL(this, EUsb);
+
+			User::LeaveIfError(usbDriver.DeviceConnectToHost());
+			usbDriver.Close();
+
+#else
+
+			iTransport = EWin32Usb;
+			iObexServerHandler = CObexServerHandler::NewL(this, EWin32Usb);
+#endif
+
+			}
+			break;
+		case '7':
+			{
+			iTestMode = E_Client;
+			
+#ifdef __WINS__
+			iTransport = EWin32Usb;
+			iObexClientHandler = CObexClientHandler::NewL(this, EWin32Usb);
+			
+#else
+
+			iTransport = EUsb;
+			
+			// For USB, we unfortunately need to start it, then register our
+			// interfaces, then do a soft connect.
+			TInt loaded = User::LoadLogicalDevice(_L("EUSBC"));
+			iConsole->Printf(_L("Loading ldd returned %d\n"), loaded);
+			
+			RUsb usb;
+			User::LeaveIfError(usb.Connect());
+			iConsole->Printf(_L("Connected to USB\n"));
+			TRequestStatus status;
+			usb.TryStart(2,status);
+			User::WaitForRequest(status);
+			iConsole->Printf(_L("Starting USB returned %d\n"), status.Int());
+		    User::LeaveIfError(status.Int());
+			usb.Close();
+			
+			RDevUsbcClient usbDriver;
+			User::LeaveIfError(usbDriver.Open(0));
+			User::LeaveIfError(usbDriver.DeviceDisconnectFromHost());
+			
+			iObexClientHandler = CObexClientHandler::NewL(this, EUsb);
+
+			User::LeaveIfError(usbDriver.DeviceConnectToHost());
+			usbDriver.Close();
+#endif
+
+			}
+			break;
+		case 'm':
+			// Reset MTU value.
+			iRecvMTU = 0;
+			iTestMode = E_EnterRecvMTU;
+			break;
+
+		case 'M':
+			// Reset MTU value.
+			iTransmitMTU = 0;
+			iTestMode = E_EnterTransmitMTU;
+			break;
+			
+		default:
+			break;
+			}
+		}
+
+    else if(iTestMode == E_Server)
+		{
+		switch (aChar)
+			{
+		case 's': 
+			iObexServerHandler->Stop();
+			break;
+		case 'S':
+			iObexServerHandler->Start();
+			break;
+		case 'g': case 'G':
+			iObexServerHandler->Start();
+			break;
+		case 'h': case 'H':
+			iDisplayHeaders = !iDisplayHeaders;
+			break;
+		case 'k': case 'K':
+			delete iObexServerHandler;
+			iObexServerHandler = NULL;
+			iTestMode = E_Inactive;
+			break;
+		case 'o':
+			if(iTransport == EIrda)
+				{
+				iSupp.Open();
+				}
+			break;
+		case 'c':
+			if(iTransport == EIrda)
+				{
+				iSupp.Close();
+				}
+			break;
+		case '1':
+			iObexServerHandler->EnableAuthentication();
+			break;
+		case '2':
+			iObexServerHandler->DisableAuthentication();
+			break;
+		case '3':
+			iObexServerHandler->EnablePassword();
+			break;
+		case '4':
+			iObexServerHandler->SetLocalWho();
+			break;
+		case '5':
+			iObexServerHandler->ChangeChallengePassword();
+			break;
+		case '6':
+			iObexServerHandler->RemoteAddress();
+			break;
+        case '7':
+			iObexServerHandler->SetTargetChecking(CObexServer::ENoChecking);
+			break;
+		case '8':
+			iObexServerHandler->SetTargetChecking(CObexServer::EIfPresent);
+			break;
+		case '9':
+            iObexServerHandler->SetTargetChecking(CObexServer::EAlways);
+			break;
+		case 'p':
+			SetInboxRoot();
+			break;
+#ifdef PACKET_ACCESS_EXTENSION
+		case 'a':
+			iObexServerHandler->PacketAccessUiL(ETrue);
+			break;
+#endif // PACKET_ACCESS_EXTENSION
+		default:
+			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
+			break;
+			}
+		}
+
+	else if(iTestMode == E_Server_File)
+		{
+		switch (aChar)
+			{
+		case 's': case 'S':
+			iObexServerHandlerFile->Stop();
+			delete iObexServerHandlerFile;
+			iObexServerHandlerFile = NULL;
+			iTestMode = E_Inactive;
+			break;
+		case '1':
+			iObexServerHandlerFile->EnableAuthentication();
+			break;
+		case '2':
+			iObexServerHandlerFile->DisableAuthentication();
+			break;
+		case '3':
+			iObexServerHandlerFile->EnablePassword();
+			break;
+		case '4':
+			iObexServerHandlerFile->SetLocalWho();
+			break;
+		case '5':
+			iObexServerHandlerFile->ChangeChallengePassword();
+			break;
+		case '6':
+			iObexServerHandlerFile->RemoteAddress();
+			break;
+		case '7':
+			iObexServerHandlerFile->ToggleWriteBuffering();
+			break;
+		case 'p':
+			SetInboxRoot();
+			break;
+		
+		default:
+			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
+			break;
+			}
+		}
+	
+	else if (iTestMode == E_Client_Connect_Menu )
+		{
+		switch (aChar)
+			{
+		case '0':
+			iObexClientHandler->Disconnect();
+			break;
+		case '1':
+			iObexClientHandler->Connect();
+			break;
+		case '2':
+			iObexClientHandler->ConnectWithAuthenticationL();
+			break;
+		case '3':
+			iObexClientHandler->ConnectWithTarget();
+			break;
+		case '4':
+			iObexClientHandler->ConnectWithAuthenticationAndTargetL();
+			break;
+		case '5':
+			iObexClientHandler->RemoteAddress();
+			break;
+		default:
+			iTestMode = E_Client;
+			break;
+			}
+		}
+	else if ( iTestMode == E_Client_HTTP_Menu )
+		{
+		switch (aChar)	//tam
+			{
+		case '1':	//HTTP Multiple Packets;
+			iObexClientHandler->HTTPTest1L();
+			break;
+		case '2':	//HTTP Multiple Packets, too many, will arrive in two parts
+			iObexClientHandler->HTTPTest2L();
+			break;
+		case '3':	//HTTP Single Packet too large, nothing will arrive
+			iObexClientHandler->HTTPTest3L();
+			break;
+		case '4':	//HTTP Single Packet too large
+					//with several smaller packets which will arrive
+			iObexClientHandler->HTTPTest4L();
+			break;
+		case '5':	//App parameters test
+			iObexClientHandler->AppParamsTestL();
+		default:
+			iTestMode = E_Client;
+			break;
+			}
+
+		}
+	else if (iTestMode == E_Client_Setup_Menu )
+		{
+		switch (aChar)
+			{
+		case '1': 
+			iObexClientHandler->SetName(iObexClientHandler->iFilename1);
+			break;
+		case '2':
+			iObexClientHandler->SetName(iObexClientHandler->iFilename2);
+			break;
+		case '3':
+			iObexClientHandler->SetObexName();
+			break;
+		case '4': 
+			iObexClientHandler->SetType();
+			break;
+		case '5':
+			iObexClientHandler->EnablePassword();
+			break;
+		case '6':
+			iObexClientHandler->ChangeChallengePassword();
+			break;
+		case '7':
+			iTestMode = E_Client_Authentication_Header_Menu;
+			break;
+		case '8':
+			iObexClientHandler->SetCommandTimeout();
+			break;
+		case 'p':
+			SetInboxRoot();
+			break;
+		default:
+			iTestMode = E_Client;
+			break;
+			}
+		}
+	else if(iTestMode == E_Client)
+		{
+		switch (aChar)
+			{
+		case 'a': case 'A':
+			iObexClientHandler->Abort();
+			break;
+		case '1': 
+			iTestMode = E_Client_Connect_Menu;
+			break;
+		case '2':
+			iObexClientHandler->Disconnect();
+			break;
+		case '3': 
+			iObexClientHandler->Put(iObexClientHandler->iFilename1);
+			break;
+		case '4': 
+			iObexClientHandler->Put(iObexClientHandler->iFilename2);
+			break;
+		case 'y':case 'Y':
+			iTestMode = E_Client_HTTP_Menu;
+			break;
+		case 'z':case 'Z':
+			iObexClientHandler->Put(iObexClientHandler->iFilename3);
+			break;
+		case '5':
+			iObexClientHandler->GetByNameL();
+			break;
+		case '6':
+			iObexClientHandler->GetByTypeL();
+			break;
+		case '7':
+			iObexClientHandler->SetPath();
+			break;
+		case '8':
+			iObexClientHandler->SetCurrentTestNumber(); 
+			iObexClientHandler->PutReferenceL(10);
+			break;
+		case '9':
+			iObexClientHandler->SetCurrentTestNumber(); 
+			iObexClientHandler->GetReferenceL(8);
+			break;
+		case '0': 
+			iTestMode = E_Client_Setup_Menu;
+			break;
+		case 'h': case 'H':
+			iDisplayHeaders = !iDisplayHeaders;
+			break;
+#ifdef ERROR_RESOLUTION_EXTENSION
+		case 'l': case 'L':
+			iObexClientHandler->LastError();
+			break;
+#endif // ERROR_RESOLUTION_EXTENSION
+
+#ifdef EMPTY_HEADERS_TEST
+		case 't': 
+			iTestMode = E_Empty_Headers_Accept_Test;
+			break;
+#endif //EMPTY_HEADERS_TEST
+
+		case 's': case 'S':
+			delete iObexClientHandler;
+			iObexClientHandler = NULL;
+			iTestMode = E_Inactive;
+			break;
+		default:
+			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
+			break;
+			}
+		}
+	else if(iTestMode == E_Client_Authentication_Header_Menu)
+		{
+		switch (aChar)
+			{
+		case '1':
+		case '2':
+		case '3':
+		case '4':
+		case '5':
+			iObexClientHandler->ChangeAuthenticationChallengeHeaders(aChar);
+			break;
+		case 's': case 'S':
+			iTestMode = E_Client_Setup_Menu;
+			break;
+		default:
+			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
+			break;
+			}
+		}
+	else if(iTestMode == E_GetIrDANickname)
+		{
+		if(aChar.IsControl() ||
+		   iIrDANicknameBuffer.Length() == iIrDANicknameBuffer.MaxSize())
+			{
+			// Return to main menu.
+			iTestMode = E_Inactive;
+			iConsole->Printf(_L("\nNickname set to: %S\n\n"), &iIrDANicknameBuffer);
+			}
+		else
+			{
+			iConsole->Printf(_L("%c"), aChar.operator TUint());
+			iIrDANicknameBuffer.Append(aChar);
+			}
+		}
+	else if(iTestMode == E_EnterRecvMTU)
+		{
+		if(aChar.IsDigit())
+			{
+			iRecvMTU *= 10;
+			iRecvMTU += aChar.GetNumericValue();
+			iConsole->Printf(_L("%c"), aChar.operator TUint());			
+			if(iRecvMTU >= KObexPacketMaxSize)
+				{
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+			}
+		else
+			{
+			if(aChar == 'm')
+				{
+				// Set max MTU
+				iRecvMTU = KObexPacketMaxSize;
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+			else if(aChar == 'd')
+				{
+				// Set defualt MTU
+				iRecvMTU = 4000;
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+			else if(aChar.IsControl())
+				{
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+
+			iConsole->Printf(_L("\nReceive MTU set to: %d\n\n"), iRecvMTU);
+			}
+		}
+	else if(iTestMode == E_EnterTransmitMTU)
+		{
+		if(aChar.IsDigit())
+			{
+			iTransmitMTU *= 10;
+			iTransmitMTU += aChar.GetNumericValue();
+			iConsole->Printf(_L("%c"), aChar.operator TUint());			
+			if(iTransmitMTU >= KObexPacketMaxSize)
+				{
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+			}
+		else
+			{
+			if(aChar == 'm')
+				{
+				// Set max MTU
+				iTransmitMTU = KObexPacketMaxSize;
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+			else if(aChar == 'd')
+				{
+				// Set defualt MTU
+				iTransmitMTU = 4000;
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+			else if(aChar.IsControl())
+				{
+				// Return to main menu.
+				iTestMode = E_Inactive;
+				}
+
+			iConsole->Printf(_L("\nTransmit MTU set to: %d\n\n"), iTransmitMTU);
+			}
+		}
+#ifdef EMPTY_HEADERS_TEST
+	else if ( iTestMode == E_Empty_Headers_Accept_Test )
+		{
+		switch (aChar)
+			{
+				case '1' : 
+					iObexClientHandler->EmptyHeaderTestL(_L("Name header"), _L8("Type header"), _L("Description header"), _L8("Target header"), _L8("Application param header"));
+				break;
+
+				case '2': 
+					iObexClientHandler->EmptyHeaderTestL(_L(""), _L8(""), _L(""), _L8(""), _L8(""));
+				break;
+				
+				case 's': 
+				 iTestMode = E_Client;
+				break;
+				
+				default :
+					iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
+			}
+		
+		}
+#endif	//EMPTY_HEADERS_TEST	
+
+	else
+		{
+		CActiveScheduler::Stop();
+		return;
+		}
+	RequestCharacter ();
+	return;
+    }
+
+CConsoleBase* CActiveConsole::Console()
+	{
+	return iConsole;
+	}
+
+void CActiveConsole::SetPassword(TDes& aPassword)
+    {
+	iConsole->Printf(_L("\nEnter a password: %S"),&aPassword);
+
+	GetString(aPassword);
+
+	iConsole->Printf(_L("\n"));
+	iConsole->Printf( _L("\n Password size = %d\n"),aPassword.Length());
+    }
+
+
+void CActiveConsole::SetInboxRoot()
+	{
+	iConsole->Printf(_L("\nEnter a path: %S"), &iInboxRoot);
+
+	GetString(iInboxRoot);
+
+	iConsole->Printf(_L("\n"));
+	}
+
+
+TBool CActiveConsole::DisplayHeaders()
+	{
+	return iDisplayHeaders;
+	}
+	
+TBool CActiveConsole::SetNumber(TUint& aNumber)
+ 	{
+ 	TKeyCode code;
+ 	TBuf<1> ch;
+ 	TBuf<64> input;
+ 	TUint oldNumber = aNumber;
+ 
+ 	input.Num(aNumber);
+ 	iConsole->Printf(_L("\nEnter a number: %S"), &input);
+ 
+ 	FOREVER
+ 		{
+ 		code = iConsole->Getch();
+ 		ch.SetLength(0);
+ 		ch.Append(code);
+ 
+ 		iConsole->Printf(_L("%S"), &ch);
+ 
+ 		// If <CR> finish editing string.
+ 		if (code == EKeyEnter)
+ 			{
+ 			break;
+ 			}
+ 
+ 		// If <BS> remove last character.
+ 		if ((code == EKeyBackspace) && (input.Length() != 0))
+ 			{
+ 			input.SetLength((input.Length() - 1));
+ 			}
+ 		else
+ 			{
+ 			input.Append(code);
+ 			}
+ 		}
+ 	iConsole->Printf(_L("\n"));
+ 
+ 	TLex lex(input);
+ 	if (lex.Val(aNumber) != KErrNone)
+ 		{
+ 		iConsole->Printf(_L("\r\nError: You did not enter a number.\r\n"));
+ 		aNumber = oldNumber;
+ 		return EFalse;
+ 		}
+ 		
+ 	return ETrue;
+	}
+ 
+void CActiveConsole::GetString(TDes& aString)
+	{
+	TKeyCode code;
+	TBuf<1> character;
+	
+	FOREVER
+		{
+		code = iConsole->Getch();
+		character.SetLength(0);
+		character.Append(code);
+
+		iConsole->Printf(_L("%S"),&character);
+	
+		// If <CR> finish editing string
+		if (code == EKeyEnter)
+			break;
+		
+		// if <BS> remove last character
+		if ((code == EKeyBackspace) && (aString.Length() != 0))
+			{
+			aString.SetLength((aString.Length()-1));
+			}
+		else if (aString.Length() < aString.MaxLength())
+			{
+			aString.Append(code);
+			}
+		}
+	}
+
+void CActiveConsole::ClientErrored()
+	{
+	iTestMode = E_Inactive;
+	Cancel();
+	RequestCharacter();
+	delete iObexClientHandler;
+	iObexClientHandler = 0;
+	}
+
+TBool CActiveConsole::UseIrdaNickname() const
+	{
+	return (iIrDANicknameBuffer.Length() != 0);
+	}
+	
+const TDesC& CActiveConsole::GetIrdaNickname() const
+	{
+	return iIrDANicknameBuffer;
+	}
+