obex/obexprotocol/obex/test/tobex/TOBEXCON.CPP
changeset 57 f6055a57ae18
parent 0 d0791faffa3f
equal deleted inserted replaced
54:4dc88a4ac6f4 57:f6055a57ae18
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <es_sock.h>
       
    17 #include <ir_sock.h>
       
    18 #include <bautils.h>
       
    19 #include <usbman.h>
       
    20 #include <d32usbc.h>
       
    21 #include <e32keys.h>
       
    22 #include "TOBEXCON.H"
       
    23 #include "clienthandler.h"
       
    24 #include "serverhandlerbase.h"
       
    25 #include "serverhandler.h"
       
    26 #include "serverhandlerfile.h"
       
    27 #include "btextnotifiers.h"
       
    28 
       
    29 #ifdef EMPTY_HEADERS_TEST
       
    30 #include "emptyheaderstest.h"
       
    31 #endif //EMPTY_HEADERS_TEST
       
    32 
       
    33 #define EPOCIDENT _L8("EPOC32 ER5")
       
    34 
       
    35 
       
    36 CActiveConsole::CActiveConsole(CConsoleBase* aConsole) 
       
    37     : CActive(EPriorityNormal),
       
    38       iConsole(aConsole),
       
    39       iTestMode(E_Inactive),
       
    40       iDiscoverySlots(KObexIrdaDefaultDiscoverySlotsToUse),
       
    41       iDiscoveryAttempts(KObexIrdaDefaultDiscoveryAttempts),
       
    42       iRecvMTU(KObexPacketDefaultSize),
       
    43       iTransmitMTU(KObexPacketDefaultSize)
       
    44     {
       
    45 #ifdef EMPTY_HEADERS_TEST
       
    46 	iDisplayHeaders = ETrue;
       
    47 #endif //EMPTY_HEADERS_TEST    
       
    48     }
       
    49 
       
    50 CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole)
       
    51     {
       
    52     CActiveConsole* self = new (ELeave) CActiveConsole(aConsole);
       
    53 	CleanupStack::PushL(self);
       
    54 	self->ConstructL();
       
    55     return self;
       
    56     }
       
    57 
       
    58 void CActiveConsole::ConstructL ()
       
    59     { 
       
    60     iRefHandler = CReferenceHandler::NewL();
       
    61     iConsole->Printf(_L("\r\n"));
       
    62     CActiveScheduler::Add(this);			// Add to active scheduler
       
    63     
       
    64     // Create private path and set default Inbox path
       
    65     RFs fs;
       
    66     User::LeaveIfError(fs.Connect());
       
    67 	fs.CreatePrivatePath(EDriveC);
       
    68 	fs.SetSessionToPrivate(EDriveC);	
       
    69 	fs.SessionPath(iInboxRoot);
       
    70 	fs.Close();
       
    71     }
       
    72 
       
    73 CActiveConsole::~CActiveConsole()
       
    74 	{
       
    75 	// Make sure we're cancelled
       
    76 	Cancel();
       
    77 
       
    78 	// safe to delete NULL
       
    79 	delete iObexClientHandler;
       
    80 	delete iObexServerHandler;
       
    81 	delete iObexServerHandlerFile;
       
    82 	delete iRefHandler;
       
    83 	}
       
    84 
       
    85 void  CActiveConsole::DoCancel()
       
    86     {
       
    87     iConsole->ReadCancel();
       
    88     }
       
    89 
       
    90 void  CActiveConsole::RunL()
       
    91     {
       
    92 	// Save the current test mode in case the next action leaves
       
    93 	TUint oldTestMode = iTestMode;
       
    94     TRAPD(err,ProcessKeyPressL(TChar(iConsole->KeyCode())));
       
    95 	if(err != KErrNone)
       
    96 		{
       
    97 		iConsole->Printf(_L("Failed. Error: %d\r\n"),err);
       
    98 		// Put the test mode back again
       
    99 		iTestMode = oldTestMode;
       
   100 		RequestCharacter();
       
   101 		}
       
   102     }
       
   103 
       
   104 void CActiveConsole::RequestCharacter()
       
   105     {
       
   106     // A request is issued to the CConsoleBase to accept a
       
   107     // character from the keyboard.
       
   108     if (iTestMode == E_Client)
       
   109 		{
       
   110 		iConsole->Printf(_L("Commands :- \r\n"));
       
   111 		iConsole->Printf(_L(" A  -  IrObex Abort\r\n"));
       
   112 		iConsole->Printf(_L(" 1  -  IrObex Connect Menu\r\n"));
       
   113 		iConsole->Printf(_L(" 2  -  IrObex Disconnect\r\n"));
       
   114 		iConsole->Printf(_L(" 3  -  IrObex Put obj 1 : %S\r\n"), &(iObexClientHandler->iFilename1));
       
   115 		iConsole->Printf(_L(" 4  -  IrObex Put Obj 2 : %S\r\n"), &(iObexClientHandler->iFilename2));
       
   116 		iConsole->Printf(_L(" z  -  IrObex Put Obj 3 : %S\r\n"), &(iObexClientHandler->iFilename3));
       
   117 		iConsole->Printf(_L(" y  -  Enter HTTP/App param Test Menu\r\n")); //E_Client_HTTP_Menu
       
   118 		iConsole->Printf(_L(" 5  -  IrObex Get by name\r\n"));
       
   119 		iConsole->Printf(_L(" 6  -  IrObex Get by type\r\n"));
       
   120 		iConsole->Printf(_L(" 7  -  IrObex SetPath\r\n"));
       
   121 		iConsole->Printf(_L(" 8  -  IrObex Put reference object\r\n"));
       
   122 		iConsole->Printf(_L(" 9  -  IrObex Get reference object\r\n"));
       
   123 		iConsole->Printf(_L(" 0  -  IrObex Setup OBEX\r\n"));
       
   124 		iConsole->Printf(_L(" h  -  Toggle display of object headers\r\n"));
       
   125 #ifdef ERROR_RESOLUTION_EXTENSION
       
   126 		iConsole->Printf(_L(" l  -  Display last error\r\n"));
       
   127 #endif
       
   128 #ifdef EMPTY_HEADERS_TEST
       
   129 		iConsole->Printf(_L(" t  -  Empty headers test menu\r\n"));
       
   130 #endif //EMPTY_HEADERS_TEST
       
   131 		iConsole->Printf(_L(" s  -  kill the Obex Client\r\n"));
       
   132 		}
       
   133 	if ( iTestMode == E_Client_HTTP_Menu )
       
   134 		{ 
       
   135 		iConsole->Printf(_L(" 1  -  HTTP Multiple Packets, will all arrive\r\n"));
       
   136 		iConsole->Printf(_L(" 2  -  HTTP Multiple Packets, too many arrive in two parts\r\n"));
       
   137 		iConsole->Printf(_L(" 3  -  HTTP Single Packet too large, nothing will arrive\r\n"));
       
   138 		iConsole->Printf(_L(" 4  -  HTTP Single Packet too large with several smaller packets which will arrive\r\n"));
       
   139 		iConsole->Printf(_L(" 5  -  App parameters test\r\n"));
       
   140 		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
       
   141 		}
       
   142 	if ( iTestMode == E_Client_Connect_Menu )
       
   143 		{
       
   144 		iConsole->Printf(_L(" 0  -  IrObex Disconnect\r\n"));
       
   145 		iConsole->Printf(_L(" 1  -  IrObex Connect\r\n"));
       
   146 		iConsole->Printf(_L(" 2  -  IrObex Connect with Authentication\r\n"));
       
   147 		iConsole->Printf(_L(" 3  -  IrObex Connect with Target Header\r\n"));
       
   148 		iConsole->Printf(_L(" 4  -  IrObex Connect with Authentication AND Target Header\r\n"));
       
   149 		iConsole->Printf(_L(" 5  -  Get remote address\r\n"));
       
   150 		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
       
   151 		}
       
   152 	if ( iTestMode == E_Client_Setup_Menu )
       
   153 		{
       
   154 		iConsole->Printf(_L(" 1  -  Change Put Object 1\r\n"));
       
   155 		iConsole->Printf(_L(" 2  -  Change Put Object 2\r\n"));
       
   156 		iConsole->Printf(_L(" 3  -  Change Obex Get Name : %S\r\n"), &(iObexClientHandler->iObexName));
       
   157 		iConsole->Printf(_L(" 4  -  Change Obex Get Type : %S\r\n"), &(iObexClientHandler->iGetType));
       
   158 		iConsole->Printf(_L(" 5  -  Enable password support (so they can challenge us)\r\n"));
       
   159 		iConsole->Printf(_L(" 6  -  Set challenge password : %S\r\n"), &(iObexClientHandler->iChallengePassword));
       
   160 		iConsole->Printf(_L(" 7  -  Change Authentication Challenge Header\r\n"));
       
   161 		iConsole->Printf(_L(" 8  -  Set Command Time-out\r\n"));
       
   162 		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
       
   163 		iConsole->Printf(_L(" p  -  Set default file path : %S\r\n"), &iInboxRoot);
       
   164 		}
       
   165 	if ( iTestMode == E_Client_Authentication_Header_Menu )
       
   166 		{
       
   167 		iConsole->Printf(_L(" 1  -  Suppress Options Header\r\n"));
       
   168 		iConsole->Printf(_L(" 2  -  Suppress Realm Header\r\n"));
       
   169 		iConsole->Printf(_L(" 3  -  Suppress Options and Realm Headers\r\n"));
       
   170 		iConsole->Printf(_L(" 4  -  Reset to Default Authentication Headers\r\n"));
       
   171 		iConsole->Printf(_L(" 5  -  Attempt Invalid Authentication Headers Value (i)\r\n"));
       
   172 		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
       
   173 		}
       
   174 	if (iTestMode == E_Server)
       
   175 		{
       
   176 		iConsole->Printf(_L(" 1  -  Make OBEX Challenge on all incoming connections\r\n"));
       
   177 		iConsole->Printf(_L(" 2  -  Disable authentication\r\n"));
       
   178 		iConsole->Printf(_L(" 3  -  Enable password support (so they can challenge us)\r\n"));
       
   179 		iConsole->Printf(_L(" 4  -  Set FTP local who (insist on target header\r\n"));
       
   180 		iConsole->Printf(_L(" 5  -  Change challenge password : %S\r\n"), &(iObexServerHandler->iChallengePassword));
       
   181 		iConsole->Printf(_L(" 6  -  Get remote address\r\n"));
       
   182         iConsole->Printf(_L(" 7  -  Set Target Checking to NoChecking\r\n"));
       
   183         iConsole->Printf(_L(" 8  -  Set Target Checking to IfPresent\r\n"));
       
   184         iConsole->Printf(_L(" 9  -  Set Target Checking to Always\r\n"));
       
   185 		iConsole->Printf(_L(" h  -  Toggle display of object headers\r\n"));
       
   186 		iConsole->Printf(_L(" p  -  Set Inbox root directory : %S\r\n"), &iInboxRoot);
       
   187 #ifdef PACKET_ACCESS_EXTENSION
       
   188 		iConsole->Printf(_L(" a  -  Enable displaying of request packets\r\n"));
       
   189 #endif // PACKET_ACCESS_EXTENSION
       
   190 		if(iTransport == EIrda)
       
   191 			{
       
   192 			iConsole->Printf(_L(" o  -  start suppressing IrDA discovery requests\r\n"));
       
   193 			iConsole->Printf(_L(" c  -  stop suppressing IrDA discovery requests\r\n"));
       
   194 			}
       
   195 
       
   196 		iConsole->Printf(_L("press 's' to stop the Obex Server\r\n"));
       
   197 		iConsole->Printf(_L("press 'S' to start the Obex Server\r\n"));
       
   198 		}
       
   199 	if (iTestMode == E_Server_File)
       
   200 		{
       
   201 		iConsole->Printf(_L(" Started Obex server, receiving into file-backed buffer object\r\n"));
       
   202 		iConsole->Printf(_L(" 1  -  Make OBEX Challenge on all incoming connections\r\n"));
       
   203 		iConsole->Printf(_L(" 2  -  Disable authentication\r\n"));
       
   204 		iConsole->Printf(_L(" 3  -  Enable password support (so they can challenge us)\r\n"));
       
   205 		iConsole->Printf(_L(" 4  -  Set FTP local who (insist on target header\r\n"));
       
   206 		iConsole->Printf(_L(" 5  -  Change challenge password : %S\r\n"), &(iObexServerHandlerFile->iChallengePassword));
       
   207 		iConsole->Printf(_L(" 6  -  Get remote address\r\n"));
       
   208 		iConsole->Printf(_L(" 7  -  Toggle buffered file writes\r\n"));
       
   209 		iConsole->Printf(_L(" p  -  Set Inbox root directory : %S\r\n"), &iInboxRoot);
       
   210 		iConsole->Printf(_L("s - Stop the Obex Server\r\n"));
       
   211 		iConsole->Printf(_L("g - Start the Obex Server\r\n"));
       
   212 		iConsole->Printf(_L("press 'k' to kill the Obex Server\r\n"));
       
   213 		}
       
   214 
       
   215     if(iTestMode == E_Inactive)
       
   216 		{
       
   217 		iConsole->Printf(_L("press '1' to start the Obex Client over Bluetooth\r\n"));
       
   218 		iConsole->Printf(_L("press '2' to start the Obex Server over Bluetooth\r\n"));
       
   219 		iConsole->Printf(_L("press '3' to start the Obex Client over Irda\r\n"));
       
   220 		iConsole->Printf(_L("press 'a' to set the number of discovery slots to use in Irda\r\n"));
       
   221  		iConsole->Printf(_L("press 'b' to set the number of discovery attempts to make in Irda\r\n"));
       
   222 		iConsole->Printf(_L("press '4' to start the Obex Server over Irda\r\n"));
       
   223 		iConsole->Printf(_L("press '5' to start the Obex Server over Irda (filename backed buffer object)\r\n"));
       
   224 		iConsole->Printf(_L("press 'r' to start the Obex Server over Irda (RFile backed buffer object)\r\n"));
       
   225 		iConsole->Printf(_L("press '6' to start the Obex Server over USB\r\n"));
       
   226 		iConsole->Printf(_L("press '7' to start the Obex Client over USB\r\n"));
       
   227 		iConsole->Printf(_L("press 'n' to set the IrDA Nickname\r\n"));
       
   228 		iConsole->Printf(_L("press 'm' to set the Obex Recv MTU\r\n"));
       
   229 		iConsole->Printf(_L("press 'M' to set the Obex Transmit MTU\r\n"));
       
   230 		iConsole->Printf(_L("press 'p' to toggle performance logging\r\n"));
       
   231 		}
       
   232 #ifdef EMPTY_HEADERS_TEST
       
   233 	if ( iTestMode == E_Empty_Headers_Accept_Test )
       
   234 		{
       
   235 		iConsole->Printf(_L(" 1  -  Sent a packet with NOT empty following headers:\n\t[ Name, Type, Description, Target, Application Parameters ]\r\n\n"));
       
   236 		iConsole->Printf(_L(" 2  -  Sent a packet with existing but empty following headers:\n\t[ Name, Type, Description, Target, Application Parameters ]\r\n\n"));
       
   237 		iConsole->Printf(_L(" s  -  Back to Client Menu\r\n"));
       
   238 		}
       
   239 #endif //EMPTY_HEADERS_TEST
       
   240 	if(iTestMode == E_GetIrDANickname && iIrDANicknameBuffer.Length() == 0)
       
   241 		{
       
   242 		iConsole->Printf(_L("Enter new IrDA nickname: "));
       
   243 		}
       
   244 	if(iTestMode == E_EnterRecvMTU && iRecvMTU == 0)
       
   245 		{
       
   246 		iConsole->Printf(_L("Enter new Receive MTU value (m=max, d=default): "));
       
   247 		}
       
   248 	if(iTestMode == E_EnterTransmitMTU && iTransmitMTU == 0)
       
   249 		{
       
   250 		iConsole->Printf(_L("Enter new Transmit MTU value (m=max, d=default): "));
       
   251 		}
       
   252 	//if(E_SdpQuery) // no extra options
       
   253 
       
   254     if(iTestMode != E_GetIrDANickname &&
       
   255        iTestMode != E_EnterRecvMTU &&
       
   256        iTestMode != E_EnterTransmitMTU)
       
   257     	{
       
   258     	iConsole->Printf(_L("press Escape to quit\r\n\r\n"));
       
   259     	}
       
   260     iConsole->Read(iStatus); 
       
   261     SetActive();
       
   262     }
       
   263 
       
   264 void CActiveConsole::ProcessKeyPressL(TChar aChar)
       
   265     {
       
   266     if (aChar == EKeyEscape)
       
   267 		{
       
   268 		CActiveScheduler::Stop();
       
   269 		return;
       
   270 		}
       
   271 
       
   272     if(iTestMode ==E_Inactive)
       
   273 		{
       
   274 		switch (aChar)
       
   275 			{
       
   276 		case '1': 
       
   277 			iTestMode = E_SdpQuery;
       
   278 			iTransport = EBluetooth;
       
   279 			iObexClientHandler = CObexClientHandler::NewL(this, EBluetooth);
       
   280 			break;
       
   281 		case'3':
       
   282 			iTestMode = E_Client;
       
   283 			iTransport = EIrda;
       
   284 			iObexClientHandler = CObexClientHandler::NewL(this, EIrda);
       
   285 			break;
       
   286 		case 'a':
       
   287  			SetNumber(iDiscoverySlots);
       
   288  			break;
       
   289  		case 'b':
       
   290  			SetNumber(iDiscoveryAttempts);
       
   291  			break;	
       
   292 		case 'n':
       
   293 			iTestMode = E_GetIrDANickname;
       
   294 			iIrDANicknameBuffer.Zero();
       
   295 			break;
       
   296 		case 'p':
       
   297 			// Toggle the internal state.
       
   298 			iPerformanceLoggingEnabled = !iPerformanceLoggingEnabled;
       
   299 			if(iPerformanceLoggingEnabled)
       
   300 				{
       
   301 				iConsole->Printf(_L("\r\nPerformance logging enabled.\r\n\r\n"));
       
   302 				}
       
   303 			else
       
   304 				{
       
   305 				iConsole->Printf(_L("\r\nPerformance logging disabled.\r\n\r\n"));
       
   306 				}
       
   307 			break;
       
   308 		case '2':
       
   309 			iTestMode = E_Server;
       
   310 			iTransport = EBluetooth;
       
   311 			iObexServerHandler = CObexServerHandler::NewL(this, EBluetooth);
       
   312 			break;
       
   313 		case '4':
       
   314 			iTestMode = E_Server;
       
   315 			iTransport = EIrda;
       
   316 			iObexServerHandler = CObexServerHandler::NewL(this, EIrda);
       
   317 			break;
       
   318 		case '5':
       
   319 			iTestMode = E_Server_File;	// Added test for file-backed buffer object receive
       
   320 			iTransport = EIrda;
       
   321 			iObexServerHandlerFile = CObexServerHandlerFile::NewL(this,EIrda);
       
   322 			break;
       
   323 		case 'r':
       
   324 			iTestMode = E_Server_File;	// Added test for file-backed buffer object receive
       
   325 			iTransport = EIrda;
       
   326 			iObexServerHandlerFile = CObexServerHandlerFile::NewL(this,EIrda,ETrue);
       
   327 			break;
       
   328 		case '6':
       
   329 			{
       
   330 			iTestMode = E_Server;
       
   331 			
       
   332 #ifndef __WINS__
       
   333 			iTransport = EUsb;
       
   334 
       
   335 			// For USB, we unfortunately need to start it, then register our
       
   336 			// interfaces, then do a soft connect.
       
   337 			TInt err = User::LoadLogicalDevice(_L("EUSBC"));
       
   338 			if (err != KErrNone && err != KErrAlreadyExists)
       
   339 				{
       
   340 				User::Leave(err);
       
   341 				}
       
   342 			
       
   343 			RUsb usb;
       
   344 			User::LeaveIfError(usb.Connect());
       
   345 			TRequestStatus status;
       
   346 			usb.TryStart(2, status);
       
   347 			User::WaitForRequest(status);
       
   348 			iConsole->Printf(_L("Starting USB returned %d\n"), status.Int());
       
   349             User::LeaveIfError(status.Int());
       
   350 			usb.Close();
       
   351 			
       
   352 			RDevUsbcClient usbDriver;
       
   353 			User::LeaveIfError(usbDriver.Open(0));
       
   354 			User::LeaveIfError(usbDriver.DeviceDisconnectFromHost());
       
   355 			
       
   356 			iObexServerHandler = CObexServerHandler::NewL(this, EUsb);
       
   357 
       
   358 			User::LeaveIfError(usbDriver.DeviceConnectToHost());
       
   359 			usbDriver.Close();
       
   360 
       
   361 #else
       
   362 
       
   363 			iTransport = EWin32Usb;
       
   364 			iObexServerHandler = CObexServerHandler::NewL(this, EWin32Usb);
       
   365 #endif
       
   366 
       
   367 			}
       
   368 			break;
       
   369 		case '7':
       
   370 			{
       
   371 			iTestMode = E_Client;
       
   372 			
       
   373 #ifdef __WINS__
       
   374 			iTransport = EWin32Usb;
       
   375 			iObexClientHandler = CObexClientHandler::NewL(this, EWin32Usb);
       
   376 			
       
   377 #else
       
   378 
       
   379 			iTransport = EUsb;
       
   380 			
       
   381 			// For USB, we unfortunately need to start it, then register our
       
   382 			// interfaces, then do a soft connect.
       
   383 			TInt loaded = User::LoadLogicalDevice(_L("EUSBC"));
       
   384 			iConsole->Printf(_L("Loading ldd returned %d\n"), loaded);
       
   385 			
       
   386 			RUsb usb;
       
   387 			User::LeaveIfError(usb.Connect());
       
   388 			iConsole->Printf(_L("Connected to USB\n"));
       
   389 			TRequestStatus status;
       
   390 			usb.TryStart(2,status);
       
   391 			User::WaitForRequest(status);
       
   392 			iConsole->Printf(_L("Starting USB returned %d\n"), status.Int());
       
   393 		    User::LeaveIfError(status.Int());
       
   394 			usb.Close();
       
   395 			
       
   396 			RDevUsbcClient usbDriver;
       
   397 			User::LeaveIfError(usbDriver.Open(0));
       
   398 			User::LeaveIfError(usbDriver.DeviceDisconnectFromHost());
       
   399 			
       
   400 			iObexClientHandler = CObexClientHandler::NewL(this, EUsb);
       
   401 
       
   402 			User::LeaveIfError(usbDriver.DeviceConnectToHost());
       
   403 			usbDriver.Close();
       
   404 #endif
       
   405 
       
   406 			}
       
   407 			break;
       
   408 		case 'm':
       
   409 			// Reset MTU value.
       
   410 			iRecvMTU = 0;
       
   411 			iTestMode = E_EnterRecvMTU;
       
   412 			break;
       
   413 
       
   414 		case 'M':
       
   415 			// Reset MTU value.
       
   416 			iTransmitMTU = 0;
       
   417 			iTestMode = E_EnterTransmitMTU;
       
   418 			break;
       
   419 			
       
   420 		default:
       
   421 			break;
       
   422 			}
       
   423 		}
       
   424 
       
   425     else if(iTestMode == E_Server)
       
   426 		{
       
   427 		switch (aChar)
       
   428 			{
       
   429 		case 's': 
       
   430 			iObexServerHandler->Stop();
       
   431 			break;
       
   432 		case 'S':
       
   433 			iObexServerHandler->Start();
       
   434 			break;
       
   435 		case 'g': case 'G':
       
   436 			iObexServerHandler->Start();
       
   437 			break;
       
   438 		case 'h': case 'H':
       
   439 			iDisplayHeaders = !iDisplayHeaders;
       
   440 			break;
       
   441 		case 'k': case 'K':
       
   442 			delete iObexServerHandler;
       
   443 			iObexServerHandler = NULL;
       
   444 			iTestMode = E_Inactive;
       
   445 			break;
       
   446 		case 'o':
       
   447 			if(iTransport == EIrda)
       
   448 				{
       
   449 				iSupp.Open();
       
   450 				}
       
   451 			break;
       
   452 		case 'c':
       
   453 			if(iTransport == EIrda)
       
   454 				{
       
   455 				iSupp.Close();
       
   456 				}
       
   457 			break;
       
   458 		case '1':
       
   459 			iObexServerHandler->EnableAuthentication();
       
   460 			break;
       
   461 		case '2':
       
   462 			iObexServerHandler->DisableAuthentication();
       
   463 			break;
       
   464 		case '3':
       
   465 			iObexServerHandler->EnablePassword();
       
   466 			break;
       
   467 		case '4':
       
   468 			iObexServerHandler->SetLocalWho();
       
   469 			break;
       
   470 		case '5':
       
   471 			iObexServerHandler->ChangeChallengePassword();
       
   472 			break;
       
   473 		case '6':
       
   474 			iObexServerHandler->RemoteAddress();
       
   475 			break;
       
   476         case '7':
       
   477 			iObexServerHandler->SetTargetChecking(CObexServer::ENoChecking);
       
   478 			break;
       
   479 		case '8':
       
   480 			iObexServerHandler->SetTargetChecking(CObexServer::EIfPresent);
       
   481 			break;
       
   482 		case '9':
       
   483             iObexServerHandler->SetTargetChecking(CObexServer::EAlways);
       
   484 			break;
       
   485 		case 'p':
       
   486 			SetInboxRoot();
       
   487 			break;
       
   488 #ifdef PACKET_ACCESS_EXTENSION
       
   489 		case 'a':
       
   490 			iObexServerHandler->PacketAccessUiL(ETrue);
       
   491 			break;
       
   492 #endif // PACKET_ACCESS_EXTENSION
       
   493 		default:
       
   494 			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
       
   495 			break;
       
   496 			}
       
   497 		}
       
   498 
       
   499 	else if(iTestMode == E_Server_File)
       
   500 		{
       
   501 		switch (aChar)
       
   502 			{
       
   503 		case 's': case 'S':
       
   504 			iObexServerHandlerFile->Stop();
       
   505 			delete iObexServerHandlerFile;
       
   506 			iObexServerHandlerFile = NULL;
       
   507 			iTestMode = E_Inactive;
       
   508 			break;
       
   509 		case '1':
       
   510 			iObexServerHandlerFile->EnableAuthentication();
       
   511 			break;
       
   512 		case '2':
       
   513 			iObexServerHandlerFile->DisableAuthentication();
       
   514 			break;
       
   515 		case '3':
       
   516 			iObexServerHandlerFile->EnablePassword();
       
   517 			break;
       
   518 		case '4':
       
   519 			iObexServerHandlerFile->SetLocalWho();
       
   520 			break;
       
   521 		case '5':
       
   522 			iObexServerHandlerFile->ChangeChallengePassword();
       
   523 			break;
       
   524 		case '6':
       
   525 			iObexServerHandlerFile->RemoteAddress();
       
   526 			break;
       
   527 		case '7':
       
   528 			iObexServerHandlerFile->ToggleWriteBuffering();
       
   529 			break;
       
   530 		case 'p':
       
   531 			SetInboxRoot();
       
   532 			break;
       
   533 		
       
   534 		default:
       
   535 			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
       
   536 			break;
       
   537 			}
       
   538 		}
       
   539 	
       
   540 	else if (iTestMode == E_Client_Connect_Menu )
       
   541 		{
       
   542 		switch (aChar)
       
   543 			{
       
   544 		case '0':
       
   545 			iObexClientHandler->Disconnect();
       
   546 			break;
       
   547 		case '1':
       
   548 			iObexClientHandler->Connect();
       
   549 			break;
       
   550 		case '2':
       
   551 			iObexClientHandler->ConnectWithAuthenticationL();
       
   552 			break;
       
   553 		case '3':
       
   554 			iObexClientHandler->ConnectWithTarget();
       
   555 			break;
       
   556 		case '4':
       
   557 			iObexClientHandler->ConnectWithAuthenticationAndTargetL();
       
   558 			break;
       
   559 		case '5':
       
   560 			iObexClientHandler->RemoteAddress();
       
   561 			break;
       
   562 		default:
       
   563 			iTestMode = E_Client;
       
   564 			break;
       
   565 			}
       
   566 		}
       
   567 	else if ( iTestMode == E_Client_HTTP_Menu )
       
   568 		{
       
   569 		switch (aChar)	//tam
       
   570 			{
       
   571 		case '1':	//HTTP Multiple Packets;
       
   572 			iObexClientHandler->HTTPTest1L();
       
   573 			break;
       
   574 		case '2':	//HTTP Multiple Packets, too many, will arrive in two parts
       
   575 			iObexClientHandler->HTTPTest2L();
       
   576 			break;
       
   577 		case '3':	//HTTP Single Packet too large, nothing will arrive
       
   578 			iObexClientHandler->HTTPTest3L();
       
   579 			break;
       
   580 		case '4':	//HTTP Single Packet too large
       
   581 					//with several smaller packets which will arrive
       
   582 			iObexClientHandler->HTTPTest4L();
       
   583 			break;
       
   584 		case '5':	//App parameters test
       
   585 			iObexClientHandler->AppParamsTestL();
       
   586 		default:
       
   587 			iTestMode = E_Client;
       
   588 			break;
       
   589 			}
       
   590 
       
   591 		}
       
   592 	else if (iTestMode == E_Client_Setup_Menu )
       
   593 		{
       
   594 		switch (aChar)
       
   595 			{
       
   596 		case '1': 
       
   597 			iObexClientHandler->SetName(iObexClientHandler->iFilename1);
       
   598 			break;
       
   599 		case '2':
       
   600 			iObexClientHandler->SetName(iObexClientHandler->iFilename2);
       
   601 			break;
       
   602 		case '3':
       
   603 			iObexClientHandler->SetObexName();
       
   604 			break;
       
   605 		case '4': 
       
   606 			iObexClientHandler->SetType();
       
   607 			break;
       
   608 		case '5':
       
   609 			iObexClientHandler->EnablePassword();
       
   610 			break;
       
   611 		case '6':
       
   612 			iObexClientHandler->ChangeChallengePassword();
       
   613 			break;
       
   614 		case '7':
       
   615 			iTestMode = E_Client_Authentication_Header_Menu;
       
   616 			break;
       
   617 		case '8':
       
   618 			iObexClientHandler->SetCommandTimeout();
       
   619 			break;
       
   620 		case 'p':
       
   621 			SetInboxRoot();
       
   622 			break;
       
   623 		default:
       
   624 			iTestMode = E_Client;
       
   625 			break;
       
   626 			}
       
   627 		}
       
   628 	else if(iTestMode == E_Client)
       
   629 		{
       
   630 		switch (aChar)
       
   631 			{
       
   632 		case 'a': case 'A':
       
   633 			iObexClientHandler->Abort();
       
   634 			break;
       
   635 		case '1': 
       
   636 			iTestMode = E_Client_Connect_Menu;
       
   637 			break;
       
   638 		case '2':
       
   639 			iObexClientHandler->Disconnect();
       
   640 			break;
       
   641 		case '3': 
       
   642 			iObexClientHandler->Put(iObexClientHandler->iFilename1);
       
   643 			break;
       
   644 		case '4': 
       
   645 			iObexClientHandler->Put(iObexClientHandler->iFilename2);
       
   646 			break;
       
   647 		case 'y':case 'Y':
       
   648 			iTestMode = E_Client_HTTP_Menu;
       
   649 			break;
       
   650 		case 'z':case 'Z':
       
   651 			iObexClientHandler->Put(iObexClientHandler->iFilename3);
       
   652 			break;
       
   653 		case '5':
       
   654 			iObexClientHandler->GetByNameL();
       
   655 			break;
       
   656 		case '6':
       
   657 			iObexClientHandler->GetByTypeL();
       
   658 			break;
       
   659 		case '7':
       
   660 			iObexClientHandler->SetPath();
       
   661 			break;
       
   662 		case '8':
       
   663 			iObexClientHandler->SetCurrentTestNumber(); 
       
   664 			iObexClientHandler->PutReferenceL(10);
       
   665 			break;
       
   666 		case '9':
       
   667 			iObexClientHandler->SetCurrentTestNumber(); 
       
   668 			iObexClientHandler->GetReferenceL(8);
       
   669 			break;
       
   670 		case '0': 
       
   671 			iTestMode = E_Client_Setup_Menu;
       
   672 			break;
       
   673 		case 'h': case 'H':
       
   674 			iDisplayHeaders = !iDisplayHeaders;
       
   675 			break;
       
   676 #ifdef ERROR_RESOLUTION_EXTENSION
       
   677 		case 'l': case 'L':
       
   678 			iObexClientHandler->LastError();
       
   679 			break;
       
   680 #endif // ERROR_RESOLUTION_EXTENSION
       
   681 
       
   682 #ifdef EMPTY_HEADERS_TEST
       
   683 		case 't': 
       
   684 			iTestMode = E_Empty_Headers_Accept_Test;
       
   685 			break;
       
   686 #endif //EMPTY_HEADERS_TEST
       
   687 
       
   688 		case 's': case 'S':
       
   689 			delete iObexClientHandler;
       
   690 			iObexClientHandler = NULL;
       
   691 			iTestMode = E_Inactive;
       
   692 			break;
       
   693 		default:
       
   694 			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
       
   695 			break;
       
   696 			}
       
   697 		}
       
   698 	else if(iTestMode == E_Client_Authentication_Header_Menu)
       
   699 		{
       
   700 		switch (aChar)
       
   701 			{
       
   702 		case '1':
       
   703 		case '2':
       
   704 		case '3':
       
   705 		case '4':
       
   706 		case '5':
       
   707 			iObexClientHandler->ChangeAuthenticationChallengeHeaders(aChar);
       
   708 			break;
       
   709 		case 's': case 'S':
       
   710 			iTestMode = E_Client_Setup_Menu;
       
   711 			break;
       
   712 		default:
       
   713 			iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
       
   714 			break;
       
   715 			}
       
   716 		}
       
   717 	else if(iTestMode == E_GetIrDANickname)
       
   718 		{
       
   719 		if(aChar.IsControl() ||
       
   720 		   iIrDANicknameBuffer.Length() == iIrDANicknameBuffer.MaxSize())
       
   721 			{
       
   722 			// Return to main menu.
       
   723 			iTestMode = E_Inactive;
       
   724 			iConsole->Printf(_L("\nNickname set to: %S\n\n"), &iIrDANicknameBuffer);
       
   725 			}
       
   726 		else
       
   727 			{
       
   728 			iConsole->Printf(_L("%c"), aChar.operator TUint());
       
   729 			iIrDANicknameBuffer.Append(aChar);
       
   730 			}
       
   731 		}
       
   732 	else if(iTestMode == E_EnterRecvMTU)
       
   733 		{
       
   734 		if(aChar.IsDigit())
       
   735 			{
       
   736 			iRecvMTU *= 10;
       
   737 			iRecvMTU += aChar.GetNumericValue();
       
   738 			iConsole->Printf(_L("%c"), aChar.operator TUint());			
       
   739 			if(iRecvMTU >= KObexPacketMaxSize)
       
   740 				{
       
   741 				// Return to main menu.
       
   742 				iTestMode = E_Inactive;
       
   743 				}
       
   744 			}
       
   745 		else
       
   746 			{
       
   747 			if(aChar == 'm')
       
   748 				{
       
   749 				// Set max MTU
       
   750 				iRecvMTU = KObexPacketMaxSize;
       
   751 				// Return to main menu.
       
   752 				iTestMode = E_Inactive;
       
   753 				}
       
   754 			else if(aChar == 'd')
       
   755 				{
       
   756 				// Set defualt MTU
       
   757 				iRecvMTU = 4000;
       
   758 				// Return to main menu.
       
   759 				iTestMode = E_Inactive;
       
   760 				}
       
   761 			else if(aChar.IsControl())
       
   762 				{
       
   763 				// Return to main menu.
       
   764 				iTestMode = E_Inactive;
       
   765 				}
       
   766 
       
   767 			iConsole->Printf(_L("\nReceive MTU set to: %d\n\n"), iRecvMTU);
       
   768 			}
       
   769 		}
       
   770 	else if(iTestMode == E_EnterTransmitMTU)
       
   771 		{
       
   772 		if(aChar.IsDigit())
       
   773 			{
       
   774 			iTransmitMTU *= 10;
       
   775 			iTransmitMTU += aChar.GetNumericValue();
       
   776 			iConsole->Printf(_L("%c"), aChar.operator TUint());			
       
   777 			if(iTransmitMTU >= KObexPacketMaxSize)
       
   778 				{
       
   779 				// Return to main menu.
       
   780 				iTestMode = E_Inactive;
       
   781 				}
       
   782 			}
       
   783 		else
       
   784 			{
       
   785 			if(aChar == 'm')
       
   786 				{
       
   787 				// Set max MTU
       
   788 				iTransmitMTU = KObexPacketMaxSize;
       
   789 				// Return to main menu.
       
   790 				iTestMode = E_Inactive;
       
   791 				}
       
   792 			else if(aChar == 'd')
       
   793 				{
       
   794 				// Set defualt MTU
       
   795 				iTransmitMTU = 4000;
       
   796 				// Return to main menu.
       
   797 				iTestMode = E_Inactive;
       
   798 				}
       
   799 			else if(aChar.IsControl())
       
   800 				{
       
   801 				// Return to main menu.
       
   802 				iTestMode = E_Inactive;
       
   803 				}
       
   804 
       
   805 			iConsole->Printf(_L("\nTransmit MTU set to: %d\n\n"), iTransmitMTU);
       
   806 			}
       
   807 		}
       
   808 #ifdef EMPTY_HEADERS_TEST
       
   809 	else if ( iTestMode == E_Empty_Headers_Accept_Test )
       
   810 		{
       
   811 		switch (aChar)
       
   812 			{
       
   813 				case '1' : 
       
   814 					iObexClientHandler->EmptyHeaderTestL(_L("Name header"), _L8("Type header"), _L("Description header"), _L8("Target header"), _L8("Application param header"));
       
   815 				break;
       
   816 
       
   817 				case '2': 
       
   818 					iObexClientHandler->EmptyHeaderTestL(_L(""), _L8(""), _L(""), _L8(""), _L8(""));
       
   819 				break;
       
   820 				
       
   821 				case 's': 
       
   822 				 iTestMode = E_Client;
       
   823 				break;
       
   824 				
       
   825 				default :
       
   826 					iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
       
   827 			}
       
   828 		
       
   829 		}
       
   830 #endif	//EMPTY_HEADERS_TEST	
       
   831 
       
   832 	else
       
   833 		{
       
   834 		CActiveScheduler::Stop();
       
   835 		return;
       
   836 		}
       
   837 	RequestCharacter ();
       
   838 	return;
       
   839     }
       
   840 
       
   841 CConsoleBase* CActiveConsole::Console()
       
   842 	{
       
   843 	return iConsole;
       
   844 	}
       
   845 
       
   846 void CActiveConsole::SetPassword(TDes& aPassword)
       
   847     {
       
   848 	iConsole->Printf(_L("\nEnter a password: %S"),&aPassword);
       
   849 
       
   850 	GetString(aPassword);
       
   851 
       
   852 	iConsole->Printf(_L("\n"));
       
   853 	iConsole->Printf( _L("\n Password size = %d\n"),aPassword.Length());
       
   854     }
       
   855 
       
   856 
       
   857 void CActiveConsole::SetInboxRoot()
       
   858 	{
       
   859 	iConsole->Printf(_L("\nEnter a path: %S"), &iInboxRoot);
       
   860 
       
   861 	GetString(iInboxRoot);
       
   862 
       
   863 	iConsole->Printf(_L("\n"));
       
   864 	}
       
   865 
       
   866 
       
   867 TBool CActiveConsole::DisplayHeaders()
       
   868 	{
       
   869 	return iDisplayHeaders;
       
   870 	}
       
   871 	
       
   872 TBool CActiveConsole::SetNumber(TUint& aNumber)
       
   873  	{
       
   874  	TKeyCode code;
       
   875  	TBuf<1> ch;
       
   876  	TBuf<64> input;
       
   877  	TUint oldNumber = aNumber;
       
   878  
       
   879  	input.Num(aNumber);
       
   880  	iConsole->Printf(_L("\nEnter a number: %S"), &input);
       
   881  
       
   882  	FOREVER
       
   883  		{
       
   884  		code = iConsole->Getch();
       
   885  		ch.SetLength(0);
       
   886  		ch.Append(code);
       
   887  
       
   888  		iConsole->Printf(_L("%S"), &ch);
       
   889  
       
   890  		// If <CR> finish editing string.
       
   891  		if (code == EKeyEnter)
       
   892  			{
       
   893  			break;
       
   894  			}
       
   895  
       
   896  		// If <BS> remove last character.
       
   897  		if ((code == EKeyBackspace) && (input.Length() != 0))
       
   898  			{
       
   899  			input.SetLength((input.Length() - 1));
       
   900  			}
       
   901  		else
       
   902  			{
       
   903  			input.Append(code);
       
   904  			}
       
   905  		}
       
   906  	iConsole->Printf(_L("\n"));
       
   907  
       
   908  	TLex lex(input);
       
   909  	if (lex.Val(aNumber) != KErrNone)
       
   910  		{
       
   911  		iConsole->Printf(_L("\r\nError: You did not enter a number.\r\n"));
       
   912  		aNumber = oldNumber;
       
   913  		return EFalse;
       
   914  		}
       
   915  		
       
   916  	return ETrue;
       
   917 	}
       
   918  
       
   919 void CActiveConsole::GetString(TDes& aString)
       
   920 	{
       
   921 	TKeyCode code;
       
   922 	TBuf<1> character;
       
   923 	
       
   924 	FOREVER
       
   925 		{
       
   926 		code = iConsole->Getch();
       
   927 		character.SetLength(0);
       
   928 		character.Append(code);
       
   929 
       
   930 		iConsole->Printf(_L("%S"),&character);
       
   931 	
       
   932 		// If <CR> finish editing string
       
   933 		if (code == EKeyEnter)
       
   934 			break;
       
   935 		
       
   936 		// if <BS> remove last character
       
   937 		if ((code == EKeyBackspace) && (aString.Length() != 0))
       
   938 			{
       
   939 			aString.SetLength((aString.Length()-1));
       
   940 			}
       
   941 		else if (aString.Length() < aString.MaxLength())
       
   942 			{
       
   943 			aString.Append(code);
       
   944 			}
       
   945 		}
       
   946 	}
       
   947 
       
   948 void CActiveConsole::ClientErrored()
       
   949 	{
       
   950 	iTestMode = E_Inactive;
       
   951 	Cancel();
       
   952 	RequestCharacter();
       
   953 	delete iObexClientHandler;
       
   954 	iObexClientHandler = 0;
       
   955 	}
       
   956 
       
   957 TBool CActiveConsole::UseIrdaNickname() const
       
   958 	{
       
   959 	return (iIrDANicknameBuffer.Length() != 0);
       
   960 	}
       
   961 	
       
   962 const TDesC& CActiveConsole::GetIrdaNickname() const
       
   963 	{
       
   964 	return iIrDANicknameBuffer;
       
   965 	}
       
   966