diff -r 613943a21004 -r 9386f31cc85b btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPController.cpp --- a/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBPPController.cpp Tue Aug 31 15:25:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,420 +0,0 @@ -/* -* Copyright (c) 2002-2010 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: Basic printing profile implementation -* -*/ - - - -// INCLUDE FILES -#include "BTServiceUtils.h" -#include "BTSBPPController.h" -#include "BTSUDebug.h" - -#include - -// CONSTANTS -_LIT8( KBTSDirectPrintingUUID, "\x00\x00\x11\x18\x00\x00\x10\x00\x80\x00\x00\x80\x5F\x9B\x34\xFB" ); -_LIT8( KBTSXHTMLPrintType, "application/vnd.pwg-xhtml-print+xml\0" ); - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CBTSBPPController::CBTSBPPController -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CBTSBPPController::CBTSBPPController( MBTServiceObserver* aObserver, - const CBTServiceParameterList* aList ) : - iServerState( EBTSBPPSrvIdle ), - iClientDone( EFalse ), - iObserverPtr( aObserver ), - iListPtr( aList ) - { - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ConstructL( const TBTDevAddr& aRemoteDevice, - const TUint aRemotePort, - CBTEngDiscovery* aBTConnectionPtr ) - { - FLOG(_L("[BTSU]\t CBTSBPPController::ConstructL()")); - - // Create an array of obex headers - // - RArray headers; - CleanupClosePushL( headers ); - - CObexHeader* targetHdr = CObexHeader::NewL(); - CleanupStack::PushL( targetHdr ); - targetHdr->SetByteSeqL( KBTSUTargetHeader, KBTSDirectPrintingUUID ); - headers.Append( targetHdr ); - - // Create obex client - // - CreateClientL ( this, aRemoteDevice, aRemotePort, headers ); - - CleanupStack::Pop( 2 ); // targetHdr, headers - headers.Close(); - - // Start the object server if there were referenced objects - // - if ( iListPtr->HasAnyReferencedObjects() ) - { - iServer = CBTSBPPObjectServer::NewL( this, - aBTConnectionPtr, - aRemoteDevice ); - } - - FLOG(_L("[BTSU]\t CBTSBPPController::ConstructL() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CBTSBPPController* CBTSBPPController::NewL( MBTServiceObserver* aObserver, - const TUint aRemotePort, - const TBTDevAddr& aRemoteDevice, - const CBTServiceParameterList* aList, - CBTEngDiscovery* aBTConnectionPtr ) - { - CBTSBPPController* self = new( ELeave ) CBTSBPPController( aObserver, aList ); - CleanupStack::PushL( self ); - self->ConstructL( aRemoteDevice, aRemotePort, aBTConnectionPtr ); - CleanupStack::Pop(self); - return self; - } - - -// Destructor -CBTSBPPController::~CBTSBPPController() - { - if ( iServer ) - { - delete iServer; - iServer = NULL; - } - if ( iServerWait ) - { - delete iServerWait; - iServerWait = NULL; - } - } - - -// ----------------------------------------------------------------------------- -// CBTSBPPController::ConnectCompleted -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ConnectCompleted( TInt aStatus ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::ConnectCompleted() %d"), aStatus )); - - if ( aStatus ) - { - // The connect operation failed. - // - iObserverPtr->ControllerComplete( EBTSConnectingFailed ); - } - else - { - TRAPD( error, SelectAndSendL() ); - - if ( error ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() leaved with %d"), error )); - iObserverPtr->ControllerComplete( EBTSPuttingFailed ); - } - } - - FLOG(_L("[BTSU]\t CBTSBPPController::ConnectCompleted() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::PutCompleted -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::PutCompleted( TInt aStatus, const CObexHeaderSet* /*aPutResponse*/ ) - { - FLOG(_L("[BTSU]\t CBTSBPPController::PutCompleted()")); - - if ( aStatus ) - { - // The put operation failed. - // - iObserverPtr->ControllerComplete( aStatus ); - } - else - { - iClientDone = ETrue; - - if ( iServer == NULL || // Server was not needed at all or - !iServer->HasReferencedObjects() || // no referenced objects in current file or - iServerState == EBTSBPPSrvDone ) // server is done. - { - // Object sent and server done, check if there are - // more files to send. - // - TRAPD( error, SelectAndSendL() ); - - if ( error ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() leaved with %d"), error )); - iObserverPtr->ControllerComplete( EBTSPuttingFailed ); - } - } - else if ( iServerState == EBTSBPPSrvIdle ) - { - __ASSERT_DEBUG( iServerWait == NULL, BTSUPanic( EBTSUPanicExistingObject ) ); - - // Object sent but server isn't serving yet. - // Wait for a connection attempt. - // - - TRAPD(error, iServerWait = CBTSBPPServerWait::NewL( this )); - - if ( error ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPServerWait::NewL() leaved with %d"), error )); - iObserverPtr->ControllerComplete( EBTSPuttingFailed ); - } - - } - } - - FLOG(_L("[BTSU]\t CBTSBPPController::PutCompleted() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::GetCompleted -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::GetCompleted( TInt /*aStatus*/, CObexBufObject* /*aGetResponse*/ ) - { - FLOG(_L("[BTSU]\t CBTSBPPController::GetCompleted() ERROR: unsolicited callback")); - __ASSERT_DEBUG( EFalse, BTSUPanic( EBTSUPanicInternalError ) ); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::ClientConnectionClosed -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ClientConnectionClosed() - { - FLOG(_L("[BTSU]\t CBTSBPPController::ClientConnectionClosed()")); - - // Everything is now ready. - // - iObserverPtr->ControllerComplete( EBTSNoError ); - - FLOG(_L("[BTSU]\t CBTSBPPController::ClientConnectionClosed() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::ServerError -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ServerError( TInt aError ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::ServerError() %d"), aError ) ); - - // Mark server as ready and if client is ready, complete the controller. - // - iServerState = EBTSBPPSrvDone; - - if ( iClientDone ) - { - iObserverPtr->ControllerComplete( aError ); - } - else - { - // Server ready, no need to wait anymore - // - if ( iServerWait ) - { - delete iServerWait; - iServerWait = NULL; - } - } - - FLOG(_L("[BTSU]\t CBTSBPPController::ServerError() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::ServerConnectionEstablished -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ServerConnectionEstablished() - { - FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionEstablished()")); - - iServerState = EBTSBPPSrvServing; - - if ( iServerWait ) - { - // The wait for server connection can now be stopped. - // - delete iServerWait; - iServerWait = NULL; - } - - FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionEstablished() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::ServerConnectionClosed -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ServerConnectionClosed() - { - FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionClosed()")); - - iServerState = EBTSBPPSrvDone; - - if ( iClientDone ) - { - // The client was waiting for server, but now another object - // can be sent. - // - TRAPD( error, SelectAndSendL() ); - - if ( error ) - { - iObserverPtr->ControllerComplete( error ); - } - } - - FLOG(_L("[BTSU]\t CBTSBPPController::ServerConnectionClosed() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::WaitComplete -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::WaitComplete() - { - FLOG(_L("[BTSU]\t CBTSBPPController::WaitComplete()")); - - // For some reason the printer didn't establish server connection although - // there were referenced objects - // - if ( iServerWait ) - { - delete iServerWait; - iServerWait = NULL; - } - - // The client was waiting for server, but now another object - // can be sent. - // - TRAPD( error, SelectAndSendL() ); - - if ( error ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() leaved with %d"), error )); - iObserverPtr->ControllerComplete( EBTSPuttingFailed ); - } - - FLOG(_L("[BTSU]\t CBTSBPPController::WaitComplete() completed")); - } - -// ----------------------------------------------------------------------------- -// CBTSBPPController::SelectAndSendL -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::SelectAndSendL() - { - FLOG(_L("[BTSU]\t CBTSBPPController::SelectAndSendL()")); - - TBTSUXhtmlParam param; - param.iFileName = NULL; - param.iRefObjectList = NULL; - - if ( iListPtr->XhtmlCount() > 0 && iSendIndex < iListPtr->XhtmlCount() ) - { - // Get next xhtml parameter - // - param = iListPtr->XhtmlAt( iSendIndex ); - iSendIndex++; - } - - if ( param.iFileName != NULL ) - { - FTRACE(FPrint(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() fileName='%S'"), param.iFileName )); - - if ( iServer ) - { - // Pass the list of referenced objects in the file to object server. - // - iServer->SetReferencedObjectList( param.iRefObjectList ); - } - - // Create an array of obex headers - // - RArray headers; - CleanupClosePushL( headers ); - - CObexHeader* typeHdr = CObexHeader::NewL(); - CleanupStack::PushL( typeHdr ); - typeHdr->SetByteSeqL( KBTSUTypeHeader, KBTSXHTMLPrintType ); - headers.Append( typeHdr ); - - // Send object. - // - iClient->PutObjectL( headers, *param.iFileName ); - - CleanupStack::Pop( 2 ); // typeHdr, headers - headers.Close(); - - // A new object is being sent. Reset states. - // - iClientDone = EFalse; - iServerState = EBTSBPPSrvIdle; - } - else - { - FLOG(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() all objects sent, closing connection")); - - // All objects sent, close client connection. - // - iClient->CloseClientConnection(); - } - - FLOG(_L("[BTSU]\t CBTSBPPController::SelectAndSendL() completed")); - } - -//----------------------------------------------------------------------------- -// void CBTSBPPController::ResetFileHandleL -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ResetFileHandleL() - { - } - -//----------------------------------------------------------------------------- -// void CBTSBPPController::ConnectTimedOut() -// ----------------------------------------------------------------------------- -// -void CBTSBPPController::ConnectTimedOut() - { - iObserverPtr->ConnectTimedOut(); - } -// End of File