--- a/obex/obexprotocol/obex/test/tobex/clienthandler.cpp Tue Sep 28 20:14:08 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1087 +0,0 @@
-// 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 <es_sock.h>
-#include <ir_sock.h>
-#include <bautils.h>
-#include <usbman.h>
-#include <d32usbc.h>
-#include <e32keys.h>
-#include "clienthandler.h"
-#include "TOBEXCON.H"
-#include "btextnotifiers.h"
-#include "obexconstantsinternal.h"
-
-#define EPOCIDENT _L8("EPOC32 ER5")
-
-
-
-CObexClientHandler::CObexClientHandler(CActiveConsole* aParent)
- : CActive(EPriorityNormal), iParent(aParent), iState(EIdle)
- {
- }
-
-CObexClientHandler* CObexClientHandler::NewL(CActiveConsole* aParent, TTransport aTransport)
- {
- CObexClientHandler* self = new (ELeave) CObexClientHandler(aParent);
-
- CleanupStack::PushL (self);
- self->ConstructL(aTransport);
- CActiveScheduler::Add (self);
- CleanupStack::Pop ();
- return (self);
- }
-
-void CObexClientHandler::ConstructL(TTransport aTransport)
- {
- if (aTransport == EBluetooth)
- {
- // Check if an address has been provided on the cmd line.
- TBuf<20> cmdline;
- User::CommandLine(cmdline);
-
- TInt ret = iDevAddr.SetReadable(cmdline);
- if (ret < KErrNone)
- {
- iParent->Console()->Printf(_L("\nNo address found on command line\n"));
-
- //Ask user which device address we should connect to...
- RNotifier notify;
- User::LeaveIfError(notify.Connect());
- TBTDeviceSelectionParamsPckg pckg;
- TBTDeviceResponseParamsPckg resPckg;
- TRequestStatus stat;
- notify.StartNotifierAndGetResponse(stat, KDeviceSelectionNotifierUid, pckg, resPckg);
- User::WaitForRequest(stat);
- notify.CancelNotifier(KDeviceSelectionNotifierUid);
- notify.Close();
- User::LeaveIfError(stat.Int());
-
- iDevAddr = resPckg().BDAddr();
- }
-
- // Find UUID to search for
- iParent->Console()->Printf(_L("\nPress F: FTP, Any other key: OPP"));
- TChar code (iParent->Console()->Getch());
- TUUID searchUUID;
- switch(code)
- {
- case 'f': case 'F':
- searchUUID = TUUID(0x1106); //FTP
- break;
- case 'o': case 'O':
- default:
- searchUUID = TUUID(0x1105); //OPP
- }
-
- //start the SDP Query
- delete iSdpServiceFinder;
- iSdpServiceFinder=0;
- iSdpServiceFinder = CRFCOMMServiceFinder::NewL(searchUUID, iDevAddr, *this);
- iSdpServiceFinder->FindPortL();
- iParent->Console()->Printf(_L("\nSearching for SDP service....\n"));
-
- // For bluetooth the client is created in SearchResult().
- }
- else if (aTransport == EIrda)
- {
- TObexIrProtocolInfo aInfo;
- aInfo.iTransport= KObexIrTTPProtocolV2;
- aInfo.iClassName = _L8("OBEX"); //same for unicode and narrow builds
- aInfo.iAttributeName = _L8("IrDA:TinyTP:LsapSel");
- aInfo.iDiscoverySlots = iParent->iDiscoverySlots;
- aInfo.iDiscoveryAttempts = iParent->iDiscoveryAttempts;
- //now create the obex client...
- iClient = CObexClient::NewL (aInfo);
- iClient->SetFinalPacketObserver(this);
-#ifdef ERROR_RESOLUTION_EXTENSION
- iClientErrorResolver = CObexClientErrorResolver::NewL(*iClient);
-#endif // ERROR_RESOLUTION_EXTENSION
- }
- else if (aTransport == EUsb)
- {
- TObexUsbProtocolInfo aInfo;
- aInfo.iTransport = KObexUsbProtocol;
- aInfo.iInterfaceStringDescriptor = _L("TOBEX Client Interface");
- //now create the obex client...
- iClient = CObexClient::NewL (aInfo);
- iClient->SetFinalPacketObserver(this);
-#ifdef ERROR_RESOLUTION_EXTENSION
- iClientErrorResolver = CObexClientErrorResolver::NewL(*iClient);
-#endif // ERROR_RESOLUTION_EXTENSION
- }
- else if (aTransport == EWin32Usb)
- {
- TObexUsbProtocolInfo aInfo;
- aInfo.iTransport = _L("Win32Usb");
- //now create the obex client...
- iClient = CObexClient::NewL (aInfo);
- iClient->SetFinalPacketObserver(this);
-#ifdef ERROR_RESOLUTION_EXTENSION
- iClientErrorResolver = CObexClientErrorResolver::NewL(*iClient);
-#endif // ERROR_RESOLUTION_EXTENSION
- }
- else
- {
- User::Invariant();
- }
-
-#ifdef EMPTY_HEADERS_TEST
- iObexEmptyHeaderTest = CObexEmptyHeaderTest::NewL();
-#endif //EMPTY_HEADERS_TEST
- iFileObject = CObexFileObject::NewL();
- iObjectBuffer = CBufFlat::NewL(8);
- iObject = CObexBufObject::NewL(iObjectBuffer);
- iObexName = _L("");
- iGetType = _L("text/x-vcard");
-
- iFilename1 = _L("Contacts.vcf");
- iFilename2 = _L("Contacts2.vcf");
- iFilename3 = _L("Contacts3.vcf");
-
- iChallengePassword = _L("SecretPassword");
- iResponsePassword = _L("SecretPassword");
-
- iTargetHeaderObject = CObexNullObject::NewL();
- iTargetHeaderObject->SetTargetL(KRefTarget);
- iTargetHeaderObject->SetHeaderMask(KObexHdrTarget);
- }
-
-
-void CObexClientHandler::SearchResult(TInt aError, TUint8 aPort, TInt aProfileVersion)
- {
- if (aError != KErrNone)
- {
- iParent->Console()->Printf(_L("\r\n Could not find SDP service in remote device : error %d \r\n"),aError);
- iParent->ClientErrored();
- return;
- }
-
- if (aProfileVersion >= 0)
- {
- iParent->Console()->Printf(_L("\nProfile Version 0x%04x\n"), aProfileVersion);
- }
- else
- {
- iParent->Console()->Printf(_L("\nProfile Version not supplied\n"));
- }
- iParent->Console()->Printf(_L("RFCOMM Port %d\n"), aPort);
-
- TObexBluetoothProtocolInfo aInfo;
- aInfo.iAddr.SetBTAddr(iDevAddr);
- aInfo.iAddr.SetPort(aPort);
- aInfo.iTransport = KObexRfcommProtocol;
-
- TObexProtocolPolicy policy;
- policy.SetReceiveMtu(iParent->iRecvMTU);
- policy.SetTransmitMtu(iParent->iTransmitMTU);
-
- //now create the obex client...
- TRAP(aError, iClient = CObexClient::NewL(aInfo, policy));
- if (aError)
- {
- iParent->Console()->Printf(_L("\r\n Could not create client! : error %d \r\n"),aError);
- iParent->ClientErrored();
- return;
- }
- iClient->SetFinalPacketObserver(this);
-#ifdef ERROR_RESOLUTION_EXTENSION
- TRAP(aError,iClientErrorResolver = CObexClientErrorResolver::NewL(*iClient));
- if (aError != KErrNone)
- {
- iParent->Console()->Printf(_L("\r\n Could not create client error resolver! : error %d \r\n"),aError);
- iParent->ClientErrored();
- return;
- }
-#endif // ERROR_RESOLUTION_EXTENSION
- iParent->Console()->Printf(_L("\nSDP search complete OK!\n"));
- iParent->iTestMode = E_Client;
-
- iParent->Cancel(); // cancel request for key
- iParent->RequestCharacter(); // re-request, to re-display menu
- }
-
-void CObexClientHandler::SetCurrentTestNumber()
-{
- iCurrentTestNumber = 1;
-}
-
-void CObexClientHandler::ResetCurrentTestNumber()
-{
- iCurrentTestNumber = 0;
-}
-
-void CObexClientHandler::MofpoFinalPacketStarted()
- {
- iParent->Console()->Printf(_L("\nFinal packet started\n"));
- }
-
-void CObexClientHandler::MofpoFinalPacketFinished()
- {
- iParent->Console()->Printf(_L("\nFinal packet finished\n"));
- }
-
-CObexClientHandler::~CObexClientHandler()
- {
- Cancel();
-#ifdef EMPTY_HEADERS_TEST
- delete iObexEmptyHeaderTest;
-#endif //EMPTY_HEADERS_TEST
- delete iObject;
- delete iFileObject;
- delete iClient;
-#ifdef ERROR_RESOLUTION_EXTENSION
- delete iClientErrorResolver;
-#endif // ERROR_RESOLUTION_EXTENSION
-
- delete iObjectBuffer;
- delete iTargetHeaderObject;
- delete iSdpServiceFinder;
- }
-
-void CObexClientHandler::Abort()
- {
- if((iState != EPutting)&&(iState != EGetting))
- iParent->Console()->Printf(_L("\r\n NOTE: Wrong Obex state for issuing abort\r\n"));
- iClient->Abort();
- }
-
-
-
-void CObexClientHandler::Connect()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- TObexConnectInfo iLocalInfo = iClient->LocalInfo();
- iLocalInfo.iWho = _L8("");
- iLocalInfo.iWho = EPOCIDENT;
- iLocalInfo.iWho.Append(_L8(" EikIrOBEXFile "));
-
- iClient->Connect(iStatus);
- SetActive();
- iState = EConnecting;
- }
-
-void CObexClientHandler::RemoteAddress()
- {
- TSockAddr aAddr;
- iClient->RemoteAddr( aAddr);
- TBTDevAddr addr = static_cast <TBTSockAddr>(aAddr).BTAddr();
-
- TChar aChar;
-
- iParent->Console()->Printf(_L("Remote Address = "));
- for(TInt count = 0; count < addr.Des().Length(); count++)
- {
- aChar = (addr.Des()[count] & 0xf0)>>4;
- if (aChar <= 9)
- aChar += 0x30;
- else if ((aChar >= 0x0a) && (aChar <= 0x0f))
- aChar += 'A' - 0x0a;
- iParent->Console()->Printf(_L("%C"),(TUint)aChar);
-
- aChar = (addr.Des()[count] & 0x0f);
- if (aChar <= 9)
- aChar += 0x30;
- else if ((aChar >= 0x0a) && (aChar <= 0x0f))
- aChar += 'A' - 0x0a;
- iParent->Console()->Printf(_L("%C"),(TUint)aChar);
- }
- iParent->Console()->Printf(_L("\r\n"));
-
- }
-
-void CObexClientHandler::Disconnect()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iClient->Disconnect(iStatus);
- SetActive();
- iState = EDisconnecting;
- }
-
-void CObexClientHandler::GetByNameL()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iObject->Reset ();
- SetName(iObexName);
- iObject->SetNameL (iObexName);
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
- }
-
-
-void CObexClientHandler::GetByTypeL()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iObject->Reset ();
- TBuf8<300> buf;
- buf.Copy(iGetType);
- buf.Append(0);
- iObject->SetTypeL (buf);
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
-
- }
-
-void CObexClientHandler::Put(TDes& aFilename)
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- TInt err;
-
- err = SetUpObject (aFilename);
-
- if( err != KErrNone)
- {
- iParent->Console()->Printf(_L("\r\n Couldnt set up object : error %d \r\n"),err);
- return;
- }
-
- // Start the timer.
- iStartTime.HomeTime();
-
- iClient->Put(*iFileObject,iStatus);
- SetActive();
- iState = EPutting;
- }
-
-void CObexClientHandler::GetReferenceL(TInt aReferenceId)
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
- iParent->iRefHandler->CreateReferenceL(*iObject, *iObjectBuffer, aReferenceId, iParent->iTransport);
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGettingReference;
- }
-
-
-//multiple HTTP packets sent in a single Obex packet
-void CObexClientHandler::HTTPTest1L() //tam
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iObject->Reset ();
- SetName(iObexName);
- iObject->SetNameL (iObexName);
-
- //now add in the HTTP headers
-
- iObject->AddHttpL(_L8("Test 1 HTTP header 1\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 2\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 3\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 4\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 5\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 6\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 7\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 8\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 9\r\n"));
- iObject->AddHttpL(_L8("Test 1 HTTP header 10\r\n"));
-
-
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
- }
-
-//multiple HHTP packets sent in multiple Obex packets
-void CObexClientHandler::HTTPTest2L()
- {
-
-
- TBuf8<520> localBuf;
-
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
-
- iObject->Reset ();
- SetName(iObexName);
- iObject->SetNameL (iObexName);
-
- for ( TUint x = 0; x < 10; x++ ) //should be 10*512 HTTP packets,
- { // which is in excess of the 4K Tranport size
- localBuf = _L8("Test 2 HTTP Header");
- localBuf.AppendFill(TUint(x + '1'), 500);
-
- iObject->AddHttpL(localBuf);
- }
-
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
- }
-
-//single HHTP packet too large for an Obex packet will not go
-void CObexClientHandler::HTTPTest3L()
- {
- HBufC8* localBuf = HBufC8::NewL(5020);
-
-
- TPtr8 ptr = localBuf->Des();
-
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iObject->Reset ();
- SetName(iObexName);
- iObject->SetNameL (iObexName);
-
-
- ptr = _L8("Test 3 HTTP Header ");
- ptr.AppendFill(TUint('A'), 5000);
-
- iObject->AddHttpL(ptr);
-
-
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
- }
-
-//a single (too) large HTTP packet, with multiple HTTP packets
-//large one ignored, multiple smaller should all go
-void CObexClientHandler::HTTPTest4L()
- {
- HBufC8* localBuf = HBufC8::NewL(5020);
-
- TPtr8 ptr = localBuf->Des();
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iObject->Reset ();
- SetName(iObexName);
- iObject->SetNameL (iObexName);
-
-
- ptr = _L8("Test 4 HTTP header 1");
- iObject->AddHttpL(ptr);
-
- //now for the excessively large header
- ptr = _L8("Test 4 HTTP header 2");
- ptr.AppendFill(TUint('B'), 5000);
- iObject->AddHttpL(ptr);
-
- //and a reasonable header again
-
- ptr = _L8("Test 4 HTTP header 3");
- iObject->AddHttpL(ptr);
-
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
- }
-
-
-void CObexClientHandler::AppParamsTestL()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iObject->Reset ();
- SetName(iObexName);
- iObject->SetNameL (iObexName);
-
- TBuf8<40> param;
- param.Copy(_L("\x04"));
- param.Append(_L("\x03"));
- param.Append(_L("App params 123"));
- iObject->SetAppParamL(param);
-
-
- iClient->Get(*iObject, iStatus);
- SetActive();
- iState = EGetting;
-
-
- }
-
-void CObexClientHandler::ChangeAuthenticationChallengeHeaders(TChar aChar)
- {
- switch(aChar)
- {
- case '1':
- // Suppress 'Options'
- iClient->SuppressAuthenticationHeaderElements(CObex::EObexSuppressChallengeOptionsAuthElement);
- break;
- case '2':
- // Suppress 'Realm'
- iClient->SuppressAuthenticationHeaderElements(CObex::EObexSuppressRealmAuthElement);
- break;
- case '3':
- // Supress both
- iClient->SuppressAuthenticationHeaderElements(CObex::EObexSuppressAllAuthElements);
- break;
- case '4':
- // Reset to default
- iClient->SuppressAuthenticationHeaderElements(CObex::EObexNoSuppressedAuthElements);
- break;
- case '5':
- // Invalid enum (magic number)
- iClient->SuppressAuthenticationHeaderElements(static_cast<CObex::TObexSuppressedAuthElements>(0x08));
- break;
- default:
- break;
- }
- }
-
-void CObexClientHandler::PutReferenceL(TInt aReferenceId)
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iParent->iRefHandler->CreateReferenceL(*iObject, *iObjectBuffer, aReferenceId, iParent->iTransport);
- iClient->Put(*iObject,iStatus);
- SetActive();
- iState = EPuttingReference;
- }
-
-TInt CObexClientHandler::SetUpObject(TDes& filename)
- {
-// iFileObject->SetDataFileL(KNullDesC);
- TRAPD (err, iFileObject->InitFromFileL (filename));
-
- if (err != KErrNone)
- {
- RFs fs;
- RFile f;
- if ((fs.Connect () != KErrNone) ||
- (f.Create (fs, filename, EFileShareExclusive | EFileWrite) != KErrNone))
- iParent->Console()->Printf(_L("\r\nError reading '%s'.\r\nI tried to create this file for you, but failed to do that too. Sorry.\r\n\r\n"), filename.PtrZ ());
- else
- {
- f.Write (_L8("Test file for sending from EPOC\r\n\r\nLooks like obex is sending OK!!\r\n"));
- f.Close ();
- iParent->Console()->Printf(_L("\r\nFile '%s' did not exist, so I've created one.\r\nPlease try again.\r\n\r\n"), filename.PtrZ ());
- }
- fs.Close ();
- }
-
- //iFileObject->SetNameL(iObexName);
-
- return err;
- }
-
-
-void CObexClientHandler::RunL ()
- {
- if (iStatus != KErrNone)
- {// Handle error
- }
-
- switch (iState)
- {
- case EConnecting:
- iParent->Console()->Printf(_L("\r\nConnect completed with error code: %d\r\n\r\n"),iStatus.Int());
- iState = EConnected;//may not be connected actually
- break;
-
- case EPutting:
- {
- TTime finishTime;
- finishTime.HomeTime();
- TTimeIntervalMicroSeconds diff = finishTime.MicroSecondsFrom(iStartTime);
-
- iParent->Console()->Printf(_L("\nObject Sent in %d"), diff.Int64());
-
- iState = EConnected;
- iParent->Console()->Printf(_L("\r\nPut completed with error code: %d\r\n\r\n"),iStatus.Int());
- }
- break;
-
- case EGetting:
- iState = EConnected;
- iParent->Console()->Printf(_L("\r\nGet completed with error code: %d\r\n\r\n"),iStatus.Int());
- DisplayObjectL();
- SaveObject();
- iObject->Reset ();
- break;
-
- case EGettingReference:
- {
- iState = EConnected;
- iParent->Console()->Printf(_L("\r\nGet completed with error code: %d\r\n\r\n"),iStatus.Int());
- if(iStatus == KErrNone)
- {
- DisplayObjectL();
- TInt objComp = iParent->iRefHandler->CompareObjectToReferenceL(*iObject, *iObjectBuffer, iParent->iTransport);
- ASSERT(objComp == 0); // Make sure what we sent (the ref obj) matches what we got
- (void) objComp; // avoid build warning
- // iParent->Console()->Printf(_L("\r\nReference Object Comparison Result: %d\r\n\r\n"), objComp);
- iParent->Console()->Printf(_L("\r\nReference Object Comparison OK\r\n\r\n"));
- }
- else
- {
- iParent->Console()->Printf(_L("GET REFERENCE OBJECT FAILED\n"));
- }
- iObject->Reset();
-
- if (iCurrentTestNumber < KMaxNumOfTests)
- GetReferenceL(++iCurrentTestNumber);
- else
- {
- iParent->Console()->Printf(_L("All GET tests completed\n"));
- ResetCurrentTestNumber();
- }
- break;
- }
- case EPuttingReference:
- iState = EConnected;
- iParent->Console()->Printf(_L("\r\nReference Put completed with error code: %d\r\n\r\n"),iStatus.Int());
- if(iStatus != KErrNone)
- {
- iParent->Console()->Printf(_L("PUT REFERENCE OBJECT FAILED\n"));
- }
- if (iCurrentTestNumber < KMaxNumOfTests)
- PutReferenceL(++iCurrentTestNumber);
- else
- {
- iParent->Console()->Printf(_L("All PUT tests completed\n"));
- ResetCurrentTestNumber();
- }
-
- break;
-
- case EDisconnecting:
- iParent->Console()->Printf(_L("\r\nDisconnect completed with error code: %d\r\n\r\n"),iStatus.Int());
- iState = EIdle;
- break;
- case ESettingPath:
- iParent->Console()->Printf(_L("\r\nSetPath completed with error code: %d\r\n\r\n"),iStatus.Int());
- iState = EConnected;
- break;
- default:
- iParent->Console()->Printf(_L("\r\nTest Code is in an incorrect state: %d\r\n\r\n"),iState);
- }
- }
-
-void CObexClientHandler::DoCancel()
- {
- delete iClient;
- iClient = NULL;
-#ifdef ERROR_RESOLUTION_EXTENSION
- delete iClientErrorResolver;
- iClientErrorResolver = NULL;
-#endif // ERROR_RESOLUTION_EXTENSION
- }
-
-void CObexClientHandler::DisplayObjectL()
- {
- // Display Contents of CBufFlat data on current console
- // This size is wrong if we abort, due to size being pre-allocated! DOH!
-
- iParent->Console()->Printf(_L("Size of received object = %d\n"),iObjectBuffer->Size());
-
- TInt err = KErrNone;
- if (iParent->DisplayHeaders())
- {
- CObexHeader* header = CObexHeader::NewL();
- CleanupStack::PushL(header);
-
- iObject->HeaderSet().SetMask(NULL);
- iObject->HeaderSet().First();
-
- while (err == KErrNone)
- {
- err = iObject->HeaderSet().This(header);
-
- switch (header->Type())
- {
- case (0x00): //Unicode
- {
- HBufC16* buf = NULL;
- TRAPD(err, buf = HBufC16::NewL((header->AsUnicode()).Size()));
- if (err)
- {
- iParent->iConsole->Printf(_L("Unicode Header (0x%x)- Error allocating memory to display\r\n"), header->HI());
- }
- else
- {
- TPtr16 type(buf->Des());
- type.Copy(header->AsUnicode());
-
- iParent->iConsole->Printf(_L("Unicode Header (0x%x) = : \"%S\"\r\n"), header->HI(), &type);
- }
- delete buf;
- break;
- }
- case (0x01): // ByteSeq
- {
- HBufC16* buf = NULL;
- TRAPD(err, buf = HBufC16::NewL((header->AsByteSeq()).Size()));
- if (err)
- {
- iParent->iConsole->Printf(_L("ByteSeq Header (0x%x)- Error allocating memory to display\r\n"), header->HI());
- }
- else
- {
- TPtr16 type(buf->Des());
- type.Copy(header->AsByteSeq());
-
- iParent->iConsole->Printf(_L("ByteSeq Header (0x%x) = : \"%S\"\r\n"), header->HI(), &type);
- }
- delete buf;
- break;
- }
- case (0x02): // Byte
- {
- iParent->iConsole->Printf(_L("Byte Header (0x%x) = : 0x%x\r\n"), header->HI(), header->AsByte());
- break;
- }
- case (0x03): //FourByte
- {
- iParent->iConsole->Printf(_L("FourByte Header (0x%x) = : 0x%x\r\n"), header->HI(), header->AsFourByte());
- break;
- }
- default : {break;}
- }
-
- err = iObject->HeaderSet().Next();
- }
-
- CleanupStack::Pop(header);
- delete header;
- }
-
- TDateTime dt = iObject->Time().DateTime();
- iParent->Console()->Printf(_L("\r\nTimestamp: %d/%d/%d, %d:%d:%d\r\n\r\n"),
- dt.Day()+1, dt.Month()+1, dt.Year(), dt.Hour(), dt.Minute(), dt.Second());
-
- TBuf8<1024> tempBuffer;
-// iObjectBuffer->Read(0, tempBuffer, iObjectBuffer->Size());
- iObjectBuffer->Read(0, tempBuffer, tempBuffer.MaxSize() < iObjectBuffer->Size() ? tempBuffer.MaxSize() : iObjectBuffer->Size());
- // Printf fails with Descriptor bigger than X hundred bytes so write byte at a time
- for(TInt count = 0; count < tempBuffer.Size(); count++)
- {
- iParent->Console()->Printf(_L("%C"),tempBuffer[count]);
- }
- }
-
-void CObexClientHandler::SaveObject()
- {
-
- TFileName name;
- TParse parser;
- TBool bIsFullPath = EFalse;
-
- _LIT(KDrive, "");
- TBufC<10> drive(KDrive);
-
- TPtr pDrive(drive.Des());
-
- TInt ret = parser.Set(iObject->Name() ,0,0);
-
- if(KErrNone == ret)
- {
- pDrive = parser.Drive();
-
- if(pDrive.Length() != 0) // if == 0, relative path
- {
- bIsFullPath = ETrue;
- }
- }
- // the case ret != KErrNone is kept for legacy purpose, TODO cope with return codes
-
- if(!bIsFullPath)
- {
- name = iParent->iInboxRoot;
- }
-
- name.Append(iObject->Name());
-
- TInt err = iObject->WriteToFile(name);
- if (err == KErrAlreadyExists)
- {
- iParent->Console()->Printf(_L("\r\nWrite failed, File Already Exists\n"));
- }
- }
-
-
-void CObexClientHandler::SetPath()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- CObex::TSetPathInfo info;
- iParent->Console()->Printf(_L("Please enter path name ('..' = parent, '!' = Create, ' ' = empty name):\n"));
- info.iNamePresent = ETrue;
- SetName(info.iName);
- info.iFlags |= 2; // Set "Don't Create" flag as default.
-
- // Parent
- if (info.iName.Length() >= 2 && info.iName[0] == '.' && info.iName[1] == '.')
- {
- info.iName.Delete(0, 2);
- info.iFlags |= 1;
- }
- // Create
- if (info.iName.Length() >= 1 && info.iName[0] == '!')
- {
- info.iName.Delete(0, 1);
- info.iFlags &= ~(2); // Clear the "Don't Create" bit
- }
- // Empty Name
- if (info.iName.Length() >= 1 && info.iName[0] == ' ')
- {
- info.iName.Delete(0, 1);
- }
- else if (info.iName.Length() <= 0)
- info.iNamePresent = EFalse;
- iClient->SetPath(info,iStatus);
- SetActive();
- iState = ESettingPath;
- }
-
-void CObexClientHandler::SetObexName()
- {
- SetName(iObexName);
- }
-
-void CObexClientHandler::SetType()
- {
- iParent->Console()->Printf(_L("\nEnter Mime type, or 1 for text/x-vcard, 2 for x-obex/folder-listing"));
- SetName(iGetType);
- if (iGetType == _L("1"))
- iGetType = _L("text/x-vcard");
- else if (iGetType == _L("2"))
- iGetType = _L("x-obex/folder-listing");
- }
-
-
-void CObexClientHandler::SetName(TDes& aName)
- {
- TBuf<64> oldName;
- oldName = aName;
-
- TKeyCode aCode;
- TBuf<1> aChar;
- iParent->Console()->Printf(_L("\nEnter a name: %S"),&aName);
- FOREVER
- {
- aCode = iParent->Console()->Getch();
- aChar.SetLength(0);
- aChar.Append(aCode);
-
- iParent->Console()->Printf(_L("%S"),&aChar);
-
- // If <CR> finish editing string
- if (aCode == EKeyEnter)
- break;
-
- // if <BS> remove last character
- if ((aCode == EKeyBackspace)&&(aName.Length() != 0))
- aName.SetLength((aName.Length()-1));
- else
- aName.Append(aCode);
- }
- iParent->Console()->Printf(_L("\n"));
-// if (aName.Length()>0)
-// iParent->Console()->Printf( _L("\n name size = %d\n"),aName.Length());
-// else
-// {
-// iParent->Console()->Printf(_L("\nERROR: name of length zero, name unchanged!\n"),aName.Length());
-// aName = oldName;
-// }
-
- }
-
-void CObexClientHandler::ConnectWithAuthenticationL()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
-
- iClient->ConnectL(iChallengePassword, iStatus);
- SetActive();
- iState = EConnecting;
- }
-
-void CObexClientHandler::ConnectWithTarget()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
- iClient->Connect(*iTargetHeaderObject, iStatus);
- SetActive();
- iState = EConnecting;
- }
-
-void CObexClientHandler::ConnectWithAuthenticationAndTargetL()
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
- iClient->ConnectL(*iTargetHeaderObject, iChallengePassword, iStatus);
- SetActive();
- iState = EConnecting;
- }
-
-
-void CObexClientHandler::EnablePassword()
- {
- iClient->SetCallBack(*this);
- }
-
-void CObexClientHandler::ChangeChallengePassword()
- {
- iParent->SetPassword(iChallengePassword);
- }
-
-void CObexClientHandler::SetCommandTimeout()
- {
- TUint timeout = 0;
- if (iParent->SetNumber(timeout))
- {
- const TTimeIntervalMicroSeconds32 temp = timeout;
- iClient->CObexClient::SetCommandTimeOut(temp);
- iParent->Console()->Printf(_L("\r\nCommand Sucessful\r\n"));
- }
- }
-
-void CObexClientHandler::ChangeResponsePassword()
- {
- iParent->Cancel();
- iParent->SetPassword(iResponsePassword);
- iParent->RequestCharacter();
- }
-
-void CObexClientHandler::GetUserPasswordL(const TDesC& aUserID)
- {
- iParent->Console()->Printf(_L("\r\nClient has been challenged by %S"), &aUserID);
- ChangeResponsePassword(); //get the password from user
-// iParent->Console()->Printf(_L("\r\nUser Password requested for %S"), &aUserID);
- iClient->UserPasswordL(iResponsePassword);
- }
-
-#ifdef ERROR_RESOLUTION_EXTENSION
-void CObexClientHandler::LastError()
- {
- if (iClientErrorResolver == NULL)
- {
- iParent->Console()->Printf(_L("Client not started\r\n"));
- }
- else
- {
- switch (iClientErrorResolver->LastError())
- {
- case EObexNoExtendedError:
- {
- iParent->Console()->Printf(_L("No extended error\r\n"));
- }
- break;
- case EObexRequestAccepted:
- {
- iParent->Console()->Printf(_L("Request accepted\r\n"));
- }
- break;
- case EObexRequestNotAccepted:
- {
- iParent->Console()->Printf(_L("Request not accepted\r\n"));
- }
- break;
- case EObexRequestTimeout:
- {
- iParent->Console()->Printf(_L("Request timeout\r\n"));
- }
- break;
- case EObexRequestLocalInterruption:
- {
- iParent->Console()->Printf(_L("Request local interruption\r\n"));
- }
- break;
- case EObexRequestLinkInterruption:
- {
- iParent->Console()->Printf(_L("Request link interruption\r\n"));
- }
- break;
- default:
- {
- iParent->Console()->Printf(_L("Last Error value returned from client not recognised\r\n"));
- }
- }
- }
- }
-#endif // ERROR_RESOLUTION_EXTENSION
-
-#ifdef EMPTY_HEADERS_TEST
-void CObexClientHandler::EmptyHeaderTestL(TPtrC aName, TPtrC8 aType, TPtrC aDesc, TPtrC8 aTarget, TPtrC8 aAppParam)
- {
- if(IsActive())
- {
- iParent->Console()->Printf(_L("\r\nError: Client handler already active\r\n"));
- return;
- }
- iObexEmptyHeaderTest->SetHeadersL(aName, aType, aDesc, aTarget, aAppParam);
- iClient->Put(*(iObexEmptyHeaderTest->ObexObject()),iStatus);
- SetActive();
- iState = EPutting;
- }
-#endif //EMPTY_HEADERS_TEST