diff -r 26673e532f65 -r 159fc2f68139 ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtjobchannel.cpp --- a/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtjobchannel.cpp Tue May 25 12:42:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1040 +0,0 @@ -/* -* Copyright (c) 2004-2007 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: -* -*/ - - -/** - * @file CBtJobChannel.h - * @brief Defines the CBtJobChannel class. - */ - -#include - -#include "crsbtdevice.h" -#include "cbtjobchannel.h" -#include "cbtsoapcodec.h" -#include "clog.h" -#include "tbtmapper.h" -#include "cbtdiscover.h" -#include "printmessagecodes.h" -#include "cbtstatuschannel.h" -#include "rsutils.h" -#include "cbttimer.h" -#include "btprotocolconsts.h" - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::NewL -// -//-------------------------------------------------------------------------------------------- -CBtJobChannel* CBtJobChannel::NewL(MBtPCObserver& aObs) -{ - CBtJobChannel *self = NewLC(aObs); - CleanupStack::Pop(); // self - - return self; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::NewLC -// -//-------------------------------------------------------------------------------------------- -CBtJobChannel* CBtJobChannel::NewLC(MBtPCObserver& aObs) -{ - CBtJobChannel *self = new (ELeave) CBtJobChannel(aObs); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CBtJobChannel -// -//-------------------------------------------------------------------------------------------- -CBtJobChannel::CBtJobChannel(MBtPCObserver& aObs): - CBtChannelBase(aObs), - iJobFile(KNullDesC8()), - iJobFileNum(0), - iImageCount(0), - iFileObjectSize(0), - iObexFileObject(NULL), - iPercents(0), - iTimer(NULL), - iStatusChannel(NULL) -{ - LOG("[CBtJobChannel::CBtJobChannel]\t"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::~CBtJobChannel -// -//-------------------------------------------------------------------------------------------- -CBtJobChannel::~CBtJobChannel() -{ - LOG("[CBtJobChannel::~CBtJobChannel]\t"); - Stop(); - - // ignore leave: if cleaning fails, no can do. - TRAP_IGNORE(CleanXhtmlDirL()) - - if(iObexFileObject) - delete iObexFileObject; - - if(iTimer) - delete iTimer; - - if(iStatusChannel) - { - delete iStatusChannel; - iStatusChannel = NULL; - } - - // deleting iChannel here because review-x report error. - if(iChannel) - { - delete iChannel; - iChannel = NULL; - } - - iImageList.Reset(); - iImageList.Close(); - - if (iUpdateProgress) - { - delete iUpdateProgress; - iUpdateProgress = NULL; - } - - LOG("[CBtJobChannel::~CBtJobChannel]\t out"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::ConstructL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::ConstructL() -{ - LOG("[CBtJobChannel::ConstructL]\t begin"); - - CBtChannelBase::ConstructL(); - - iObexFileObject = CObexFileObject::NewL(); - iStatusChannel = CBtStatusChannel::NewL(iObs); - - iState = EStateNone; - iPercents = 0; - iImageCount = 0; - - // Create periodic timer to update progress of printing. - iUpdateProgress = CPeriodic::NewL( CActive::EPriorityStandard ); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::RunL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::RunL() -{ - LOG2("[CBtJobChannel::RunL]\t BEGIN iStatus %d at state %d", iStatus.Int(), iState); - - //Finish if required - if( EStateFinish == iState ) - { - ClearConnection(); - return; - } - - // leave if "not allowed" error - DoLeaveL( iStatus.Int() ); - - switch( iState ) - { - case EStateConnecting: - RemoveObexCmdTimeOut(); - iObexNullObject->Reset(); - LOG("[CBtJobChannel::RunL]\t EStateConnecting"); - StopWaiting(); - break; - case EStateDisconnecting: - StopWaiting(); - // Go to disconnection again in case it is not finished yet... - Disconnect(); - break; - case EStateGettingCapabilities: - GetSoapResponseL(); - GetPrinterCapabilitiesResponseL(); - - StopWaiting(); - - iState = EStateNone; - break; - case EStateGettingPrinterState: - GetSoapResponseL(); - GetPrinterStateResponseL(); - - iState = EStateNone; - break; - case EStateCreatingJob: - { - GetSoapResponseL(); - TInt res = CreateJobResponseL(); - StopWaiting(); - // No reason to send doc in error case - if(KErrNone == res) - { - LOG("[CBtJobChannel::RunL]\t CreateJobResponseL() returns %d"); - SendXhtmlDocumentL(); - } - } - break; - case EStateCancellingJob: - GetSoapResponseL(); - CancelJobResponseL(); - - iDevice = NULL; - iState = EStateNone; - break; - case EStateGettingJobAttributes: - GetSoapResponseL(); - GetJobAttributesResponseL(); - - iState = EStateNone; - break; - case EStateSendingXhtml: - iState = EStateNone; - iObexBufObject->Reset(); - iObs.GetEventResponse(iJobId, EBtStateSending, EBtStatePrinting, ENoMessage, iStatus.Int()); - break; - case EStateSendingOPP: - SendOPPL(); - break; - default: - break; - } - LOG("[CBtJobChannel::RunL]\t out"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::RunError -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::RunError(TInt aError) - { - LOG1("[CBtJobChannel::RunError]\t state %d", iState); - LOG2("[CBtJobChannel::RunError]\t error %d, iStatus %d", aError, iStatus.Int() ); - - TInt id = KErrNotFound; - - StopWaiting(); - - switch ( iState ) - { - case EStateGettingPrinterState: - if(iDevice) - id = iDevice->DeviceId(); - - iState = EStateFinish; - iObs.GetPrinterStateResponse(EBtStateIdle, ENoMessage, aError, id); - break; - case EStateCreatingJob: - iState = EStateFinish; - iObs.CreateJobResponse(KErrNotFound, aError); - break; - case EStateCancellingJob: - iState = EStateFinish; - iObs.CancelJobResponse(aError); - break; - case EStateGettingJobAttributes: - iState = EStateFinish; - iObs.GetJobAttributesResponse(iJobId, KNullDesC8(), KNullDesC8(), KErrNotFound, KErrNotFound, aError); - break; - case EStateSendingXhtml: - case EStateSendingOPP: - default: - iState = EStateFinish; - iObs.GetEventResponse(KErrNotFound, KErrNotFound, KErrNotFound, KErrNotFound, aError); - LOG("[CBtJobChannel::RunError]\t GetEventResponse sent" ); - break; - } - - iResponseError = aError; - return KErrNone; // othervise error returns to CActive: that's what we don't want. - } - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::DoCancel -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::DoCancel() -{ - LOG2("[CBtJobChannel::DoCancel]\t at state %d, iStatus 0x%X", iState, iStatus.Int()); - - StopWaiting(); - - iState = EStateNone; - - CBtChannelBase::DoCancel(); - iStatusChannel->Cancel(); - LOG1("[CBtJobChannel::DoCancel]\t out iStatus 0x%X", iStatus.Int()); -} - -//------------------------------ -// InCalls -//------------------------------ - - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::HandleTimeoutL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::HandleTimeoutL() -{ - LOG1("[CBtJobChannel::HandleTimeoutL]\t at state %d", iState); - - if(EStateSendingOPP != iState) - return; - - TInt state(EBtStateSending); - if( 100 == iPercents ) - { - state = EBtStateCompleted; - } - else if(iTimer) - iTimer->Start(KSentPercentsDelay); - - iObs.GetEventResponse(iJobId, state, EBtStatePrinting, KErrNone, KErrNone); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetPercentSent -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::GetPercentSent() -{ - LOG1("[CBtJobChannel::GetPercentSent]\t at state %d", iState); - - iPercents = 100; - - if(EStateSendingOPP == iState) - { - // Store current bytes sent. - TReal32 bytesSent = iObexFileObject->BytesSent(); - - TInt temp = iProgressOfFullImages - iFileObjectSize; - iPercents = ( 100 * ( ( temp + bytesSent ) / iJobSize) ); - - LOG2("[CBtJobChannel::GetPercentSent]\t iJobId %d, iImageCount: %d", iJobId, iImageCount); - LOG2("[CBtJobChannel::GetPercentSent]\t BytesSent %d, iFileObjectSize %d", iObexFileObject->BytesSent(), iFileObjectSize); - } - - LOG1("[CBtJobChannel::GetPercentSent]\t at state %d", iPercents); - return iPercents; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CreateJobL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::CreateJobL(CPrintJob& aJob) - { - LOG("[CBtJobChannel::CreateJob]\t begin"); - - if(!IsConnected()) - User::Leave( KErrDisconnected ); - - Cancel(); - - iProgressOfFullImages = 0; - - ++iJobFileNum; - iJobFile.Format(KXHTMLFileName8(), iJobFileNum); - aJob.GetPrintFileL(iJobFile); - - iImageList.Reset(); - aJob.Images(iImageList); - - iJobSize = CalculateJobSizeL(); - - iImageCount = iImageList.Count(); - LOG1("[CBtJobChannel::CreateJob]\t iImageList.Count(): %d", iImageList.Count()); - - iJobId = KErrNotFound; - iResponseError = KErrNone; - - LOG1("[CBtJobChannel::CreateJob]\t aDevice.UsedProtocol() %d", iDevice->UsedProtocol()); - if(KImagePrint_PrinterProtocol_BPP == iDevice->UsedProtocol()) - { - iState = EStateCreatingJob; - SendSoapRequestL(EBtCreateJob, iJobFileNum); - // do asynchronously to indicate to start the object server - WaitL(); - } - else - { - iState = EStateSendingOPP; - iJobId = 1; - SendOPPL(); - Activate(); - } - - LOG1("[CBtJobChannel::CreateJob]\t Request sent. iResponseError: %d", iResponseError); - if( KErrNone != iResponseError ) - { - User::Leave( iResponseError ); - } - LOG("[CBtJobChannel::CreateJob]\t out"); - } - - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetCapabilitiesL -// -// Fully independent and synchronous method. Does not require any existing -// connections and all connections will be deleted after execution. -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::GetCapabilitiesL(CRsBtDevice& aDevice) -{ - LOG("[CBtJobChannel::GetCapabilitiesL]\t"); - Cancel(); - - if( KImagePrint_PrinterProtocol_BPP != aDevice.UsedProtocol() ) - User::Leave(KErrNotSupported); - - if( !RsUtils::IsBluetoothOn() ) - User::Leave(KErrCancel); - - CRsBtDevice* tmpDevice = iDevice; - iDevice = &aDevice; - TBool connected = IsConnected(); - iResponseError = KErrNone; - - ConnectL(); - WaitL(); - - LOG1("[CBtJobChannel::GetCapabilitiesL]\t ConnectL done: %d", IsConnected()); - - iState = EStateGettingCapabilities; - SendSoapRequestL(EBtGetPrinterAttributes); - LOG1("[CBtJobChannel::GetCapabilitiesL]\t SendSoapRequestL done: %d", IsConnected()); - - WaitL(); - - if(!connected) - { - ClearConnection(); - } - iDevice = tmpDevice; - tmpDevice = NULL; - - LOG("[CBtJobChannel::GetCapabilitiesL]\t OUT"); - User::LeaveIfError(iResponseError); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetPrinterStateL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::GetPrinterStateL() -{ - LOG1("[CBtJobChannel::GetPrinterStateL]\t begin for protocol %d", iDevice->UsedProtocol()); - if(KImagePrint_PrinterProtocol_BPP != iDevice->UsedProtocol()) - { - iObs.GetPrinterStateResponse(EBtStatePrinting, ENoMessage, KErrNone, iDevice->DeviceId()); - return; - } - - if(!IsConnected()) - User::Leave(KErrDisconnected); - - iStatusChannel->StartL(*iDevice); - iStatusChannel->GetPrinterStateL(); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetJobAttributesL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::GetJobAttributesL(TInt aJobId) -{ - LOG("[CBtJobChannel::GetJobAttributesL]\t begin"); - - if(!iDevice) - { - User::Leave(KErrDisconnected); - } - - LOG1("[CBtJobChannel::GetJobAttributesL]\t begin for protocol %d", iDevice->UsedProtocol()); - if(KImagePrint_PrinterProtocol_BPP != iDevice->UsedProtocol()) - { - TInt state(EBtStateSending), completed(0); - if(100 == iPercents) - { - state = EBtStateCompleted; - completed = iImageCount; - } - - iObs.GetJobAttributesResponse(state, KNullDesC8(), KNullDesC8(), completed, 0, KErrNone); - return; - } - - if(!IsConnected()) - User::Leave(KErrDisconnected); - - LOG("[CBtJobChannel::GetJobAttributesL]\t start status channel if required"); - if(!iStatusChannel->IsConnected()) - iStatusChannel->StartL(*iDevice); - - LOG1("[CBtJobChannel::GetJobAttributesL]\t iStatusChannel->GetJobAttributesL(%d)", iJobId); - iStatusChannel->GetJobAttributesL(aJobId); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetEventL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::GetEventL(TInt aJobId) -{ - LOG("[CBtJobChannel::GetJobAttributesL]\t begin"); - if(KImagePrint_PrinterProtocol_BPP != iDevice->UsedProtocol()) - { - TInt state(EBtStateSending); - if(100 == iPercents) - { - state = EBtStateCompleted; - } - - iObs.GetEventResponse(iJobId, state, EBtStatePrinting, KErrNone, KErrNone); - return; - } - - if(!IsConnected()) - User::Leave(KErrDisconnected); - - iStatusChannel->StartL(*iDevice); - iStatusChannel->GetEventL(aJobId); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CancelJobL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::CancelJobL(TInt aJobId) -{ - LOG("[CBtJobChannel::CancelJob(TInt)]\t begin"); - - if(!IsConnected()) - User::Leave(KErrDisconnected); - - Cancel(); - - iJobId = aJobId; - - iState = EStateCancellingJob; - SendSoapRequestL(EBtCancelJob, iJobId); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::SendOPPL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::SendOPPL() - { - LOG("[CBtJobChannel::SendOPPL]\t begin"); - TInt tmpNumberOfCopies(0); - // Delete file object - iObexFileObject->Reset(); - - if(iTimer) - iTimer->Cancel(); - - // all sent - if(0 >= iImageList.Count()) - { - LOG1("[CBtJobChannel::SendOPPL]\t Finishing... iImageList.Count(): %d", iImageList.Count()); - - iJobFile.Zero(); - iImageList.Reset(); - - iState = EStateNone; - - ClearConnection(); - - iObs.GetEventResponse(iJobId, EBtStateCompleted, EBtStateIdle, KErrNone, KErrNone); - iJobId = KErrNotFound; - - if(iTimer) - delete iTimer; - iTimer = NULL; - - return; - } - - LOG2("[CBtJobChannel::SendOPPL]\t iChannel: %d, iChannel->IsConnected(): %d", iChannel, iChannel->IsConnected()); - if(!IsConnected()) - User::Leave(KErrDisconnected); - - iState = EStateSendingOPP; - - TFileName fn; - iImageList[0].GetFilePathL(fn); - tmpNumberOfCopies = iImageList[0].Copies(); - - LOG1("[CBtJobChannel::SendOPPL]\t init file object with \"%S\"", &fn); - iObexFileObject->InitFromFileL(fn); - // check that does user wants print more than one copy of the currently printing picture. - if(tmpNumberOfCopies > 1) - { - tmpNumberOfCopies--; - iImageList[0].SetCopies(tmpNumberOfCopies); - } - else - { - iImageList.Remove(0); - } - - LOG81("[CBtJobChannel::SendOPPL]\t set type \"%S\"...", &KBtMimeTypeJpeg()); - iObexFileObject->SetTypeL(KBtMimeTypeJpeg()); - - LOG1("[CBtJobChannel::SendOPPL]\t ...and name \"%S\"", &fn); - iObexFileObject->SetNameL(fn); - - iFileObjectSize = iObexFileObject->Length(); - - if(!iTimer) - iTimer = CBtTimer::NewL(*this); - - iTimer->Start(KSentPercentsDelay); - - LOG("[CBtJobChannel::SendOPPL]\t put"); - iChannel->Put(*iObexFileObject, iStatus); - - iProgressOfFullImages = iProgressOfFullImages + iFileObjectSize; - - if (iUpdateProgress) - { - iUpdateProgress->Cancel(); - } - - // Start periodic timer to track data transfer process. - // Event interval is setup to 1 second. - iUpdateProgress->Start(5000, KProgressUpdateInterval, TCallBack( CheckProgress, this )); - - iObs.GetEventResponse(iJobId, EBtStateSending, EBtStatePrinting, KErrNone, KErrNone); - - Activate(); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CheckProgress -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::CheckProgress( TAny *aObj ) - { - CBtJobChannel* obj = (CBtJobChannel*)aObj; - obj->UpdateProgress(); - return 1; - } -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::UpdateProgress -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::UpdateProgress() - { - TInt percentBuffer = GetPercentSent(); - - // If all data has been sent, it's OK to stop timer - if ( percentBuffer == 100 ) - { - iUpdateProgress->Cancel(); - } - - // Update progress bar using MBtPCObserver. - iObs.OPPSendProgress(percentBuffer); - } - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::SendXhtmlDocumentL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::SendXhtmlDocumentL() - { - LOG("[CBtJobChannel::SendXhtmlDocumentL]\t begin"); - - if( !iDevice || !iChannel || !iChannel->IsConnected() ) - User::Leave( EObexConnectError ); - - iState = EStateSendingXhtml; - - TFileName fn; - fn.Copy( iJobFile ); - - iObexFileObject->Reset(); - - LOG("[CBtJobChannel::SendXhtmlDocumentL]\t fill in iObexBufObject"); - iObexFileObject->InitFromFileL( fn ); - - TBuf8<50> mime; - mime.Copy( KBtMimeTypeXhtml() ); - mime.ZeroTerminate(); - iObexFileObject->SetTypeL( mime ); - - // name initialized automatically... - - // Job ID (application parameters) - TUint32 jobId = iJobId; - TBuf8<20> triplet; - - triplet.Zero(); - triplet.Append((TChar)KBtObexTagJobId); - triplet.Append((TChar)KBtDataLength4); - //append value - triplet.Append((TChar) ((jobId & 0xFF000000) >> 24) ); - triplet.Append((TChar) ((jobId & 0xFF0000) >> 16) ); - triplet.Append((TChar) ((jobId & 0xFF00) >> 8) ); - triplet.Append((TChar) (jobId & 0xFF) ); - triplet.ZeroTerminate(); - -#ifdef _DEBUG - const TUint8* aPtr = triplet.Ptr(); - _LIT(KBTHexFormatString,"%02x"); - TBuf<50> line; - for (TInt j=0; jSetAppParamL(triplet); - - LOG("[CBtJobChannel::SendXhtmlDocumentL]\t putting..."); - - iChannel->Put(*iObexFileObject, iStatus); - - Activate(); - LOG("[CBtJobChannel::SendXhtmlDocumentL]\t end"); -} - -//------------------------------ -// Responses -//------------------------------ -TInt CBtJobChannel::CreateJobResponseL() -{ - LOG("[CBtJobChannel::CreateJobResponseL]\t "); - User::LeaveIfNull(iSoapCodec); - - iJobId = KErrNotFound; - TInt err = KErrGeneral; - - iSoapCodec->CreateJobResponseL(iJobId, err); - iResponseError = err; - - iObs.CreateJobResponse(iJobId, err); - LOG("[CBtJobChannel::CreateJobResponseL]\t out"); - return err; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetPrinterStateResponseL -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::GetPrinterStateResponseL() -{ - LOG("[CBtJobChannel::GetPrinterStateResponseL]\t"); - User::LeaveIfNull(iSoapCodec); - - TInt state = EBtStateUnknown; - TInt reasons = EPbCheckPrinter; - TInt opStatus = KErrGeneral; - - iSoapCodec->GetPrinterStateResponseL(state, reasons, opStatus); - iObs.GetPrinterStateResponse(state, reasons, opStatus, iDevice->DeviceId()); - - LOG("[CBtJobChannel::GetPrinterAttributesResponseL]\t out"); - return opStatus; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetPrinterCapabilitiesResponseL -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::GetPrinterCapabilitiesResponseL() -{ - LOG("[CBtJobChannel::GetPrinterCapabilitiesResponseL]\t"); - User::LeaveIfNull(iSoapCodec); - - RArray capab; - CleanupClosePushL(capab); - TInt opStatus = KErrGeneral; - - iSoapCodec->GetPrinterCapabilitiesResponseL(capab, opStatus); - - if(iDevice) - { - for(TInt i = 0; i < capab.Count(); ++i) - { - iDevice->AddCapability(capab[i]); - } - LOG("[CBtJobChannel::GetPrinterCapabilitiesResponseL]\t returning to iObs..."); - } - else - { - opStatus = KErrNotFound; - } - - CleanupStack::PopAndDestroy(&capab); - LOG("[CBtJobChannel::GetPrinterCapabilitiesResponseL]\t out"); - return opStatus; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::GetJobAttributesResponseL -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::GetJobAttributesResponseL() -{ - LOG("[CBtJobChannel::GetJobAttributesResponseL]\t"); - User::LeaveIfNull(iSoapCodec); - - TInt state, sheets, pendingJobs, opStatus; - TBtAttrString8 jobName; - TBtAttrString8 originator; - - iSoapCodec->GetJobAttributesResponseL( iJobId, state, jobName, originator,sheets, pendingJobs, opStatus); - iObs.GetJobAttributesResponse(state, jobName, originator,sheets, pendingJobs, opStatus); - - return opStatus; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CancelJobResponseL -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::CancelJobResponseL() -{ - LOG("[CBtJobChannel::CancelJobResponseL]\t"); - User::LeaveIfNull(iSoapCodec); - - TInt err = KErrNotFound; - iSoapCodec->CancelJobResponseL(iJobId, err); - - LOG1("[CBtJobChannel::CancelJobResponseL]\t err %d", err); - iObs.CancelJobResponse(err); - - return err; -} - -/////////////////////////////// -// Private -/////////////////////////////// -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::ConnectL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::ConnectL() - { - LOG("[CBtJobChannel::ConnectL]\t"); - - User::LeaveIfNull( iDevice ); - - if( IsConnected() ) - { - LOG1("[CBtJobChannel::ConnectL]\t return isConnected: %d", IsConnected()); - return; - } - - // delete old if exists - if ( iChannel ) - { - delete iChannel; - iChannel = NULL; - } - - iState = EStateConnecting; - - // set common parts of protocol info - TObexBluetoothProtocolInfo protocolInfo; - protocolInfo.iTransport.Copy( KRFCOMMDesC ); - protocolInfo.iAddr.SetBTAddr( iDevice->BDAddr() );//Address of server bt device - - // connect profile specifically - LOG1("[CBtJobChannel::ConnectL]\t aDevice.UsedProtocol(): %d", iDevice->UsedProtocol()); - if( KImagePrint_PrinterProtocol_BPP == iDevice->UsedProtocol() ) - { - LOG("[CBtJobChannel::ConnectL]\t connect BPP"); - protocolInfo.iAddr.SetPort( iDevice->BPPPort() );//Service channel of server rfcomm - - TUUID uuid( KBTSDPDirectPrinting ); - iObexNullObject->Reset(); - iObexNullObject->SetTargetL( uuid.Des() ); - - // create channel - iChannel = CObexClient::NewL( protocolInfo ); - iChannel->SetCallBack( *this ); - iChannel->Connect( *iObexNullObject, iStatus ); - } - else - { - LOG("[CBtJobChannel::ConnectL]\t connect OPP"); - protocolInfo.iAddr.SetPort(iDevice->OPPPort()); - - // create channel - iChannel = CObexClient::NewL( protocolInfo ); - iChannel->SetCallBack(*this); - iChannel->SetCommandTimeOut(KObexCmdTimeOut); - iChannel->Connect(iStatus); - } - - Activate(); - - LOG("[CBtJobChannel::ConnectL]\t out."); - return; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::IsError -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::DoLeaveL(TInt aError) -{ - LOG2("[CBtJobChannel::DoLeaveL]\t aError %d at state %d", aError, iState); - - if(KErrNone == aError) - return; - - if(EStateDisconnecting == iState) - return; - - // obex connection objects returns 'KErrCompletion' at destructor. Ignore. - if(KErrCompletion == aError) - return; - - LOG("[CBtJobChannel::DoLeaveL]\t Leave"); - User::Leave(aError); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::ClearConnection -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::ClearConnection() -{ - LOG1("[CBtJobChannel::ClearConnection]\t iState %d", iState); - - if(iStatusChannel) - { - LOG("[CBtJobChannel::ClearConnections]\t **** iStatusChannel stop"); - iStatusChannel->Stop(); - } - - CBtChannelBase::ClearConnection(); - - iObexFileObject->Reset(); - - iState = EStateNone; - - iUpdateProgress->Cancel(); - - iImageCount = 0; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CleanXhtmlDirL -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::CleanXhtmlDirL() -{ - LOG1("[CBtJobChannel::CleanXhtmlDirL]\t iJobFileNum %d", iJobFileNum); - - RFs fs; - CleanupClosePushL(fs); - User::LeaveIfError(fs.Connect()); - - CFileMan* fm = CFileMan::NewL(fs); - CleanupStack::PushL(fm); - - while(0 < iJobFileNum) - { - TFileName fn; - fn.Format(KXHTMLFileName, iJobFileNum); - TInt err = fm->Delete(fn); - LOG2("[CBtJobChannel::CleanXhtmlDirL]\t delete file %S, err %d", &fn, err); - --iJobFileNum; - } - - CleanupStack::PopAndDestroy( 2 ); // fm, fs -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::RemoveObexCmdTimeOut -// -//-------------------------------------------------------------------------------------------- -void CBtJobChannel::RemoveObexCmdTimeOut() -{ - iChannel->SetCommandTimeOut(0); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtJobChannel::CalculateJobSizeL -// -//-------------------------------------------------------------------------------------------- -TInt CBtJobChannel::CalculateJobSizeL() - { - - TInt imgCount= iImageList.Count(); - TInt size = 0; - - for (TInt i = 0; iInitFromFileL(fn); - TInt tempSize = iObexFileObject->Length(); - iObexFileObject->Reset(); - size = size + tempSize; - } - return size; - } - -// End of File