diff -r 866b4af7ffbe -r 4dc88a4ac6f4 obex/obexprotocol/obex/test/tobex/clienthandler.cpp --- 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 -#include -#include -#include -#include -#include -#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 (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(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 finish editing string - if (aCode == EKeyEnter) - break; - - // if 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