diff -r 26673e532f65 -r 159fc2f68139 ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtsoapcodec.cpp --- a/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtsoapcodec.cpp Tue May 25 12:42:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1377 +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: Defines the CBtSoapCodec class to create and read SOAP-encoded messages. -* -*/ - - -#include "cxmlhandler.h" -#include "cbtsoapcodec.h" -#include "imageprint.h" -#include "clog.h" -#include "tbtmapper.h" -#include "rsutils.h" - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::NewL -// -//-------------------------------------------------------------------------------------------- -CBtSoapCodec* CBtSoapCodec::NewL() - { - CBtSoapCodec *self = NewLC(); - CleanupStack::Pop(); // self - - return self; - } - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::NewLC -// -//-------------------------------------------------------------------------------------------- -CBtSoapCodec* CBtSoapCodec::NewLC() - { - CBtSoapCodec *self = new (ELeave) CBtSoapCodec(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::~CBtSoapCodec -// -//-------------------------------------------------------------------------------------------- -CBtSoapCodec::~CBtSoapCodec() -{ - if(iXmlHandler) - delete iXmlHandler; - iXmlHandler = NULL; - - if(iActionBuffer) - delete iActionBuffer; - iActionBuffer = NULL; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ConstructL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::ConstructL() -{ - LOG("[CBtSoapCodec::ConstructL]\t"); - iXmlHandler = CXmlHandler::NewL(); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::Reset -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::Reset() -{ - LOG("[CBtSoapCodec::Reset]\t"); - - if(iXmlHandler) - delete iXmlHandler; - iXmlHandler = NULL; - - if(iActionBuffer) - delete iActionBuffer; - iActionBuffer = NULL; - -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CreateSoapL -// -//-------------------------------------------------------------------------------------------- -TPtrC8 CBtSoapCodec::CreateSoapL(const TInt aAction, const TInt aJobId) -{ - LOG1("[CBtSoapCodec::CreateSoapL]\t action: %d", aAction); - // Open the template file and read it into buffer - - TPtrC8 soap(KNullDesC8); - TBtIntString8 jobId; - jobId.AppendNum(aJobId); - - if(iActionBuffer) - delete iActionBuffer; - iActionBuffer = NULL; - - switch(aAction) - { - case EBtCreateJob: - CreateJobSoapL(aJobId); - break; - case EBtGetPrinterAttributes: - GetPrinterAttributesSoapL(); - break; - case EBtGetPrinterState: - GetPrinterStateSoapL(); - break; - case EBtGetPrinterCapabilities: - GetCapabilitiesSoapL(); - break; - case EBtCancelJob: - CancelJobSoapL(jobId); - break; - case EBtGetJobAttributes: - GetJobAttributesSoapL(jobId); - break; - case EBtGetEvent: - GetEventSoapL(jobId); - break; - default: - break; - } - - TInt offset; - TPtrC8 ptr = iXmlHandler->GetDataL(KBtBodyStartTag, KBtBodyEndTag, offset); - iXmlHandler->ComposeDataL(ptr.Length(), KBtBytesInBody()); - - return iXmlHandler->FinalizeBufferL(KBtEnvelopeEndTag()); - -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ReadSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::ReadSoapL(const TDesC8& aSoapBuffer) -{ - LOG("[CBtSoapCodec::ReadSoapL(TDesC8&)]\t "); - // Open the template file and read it into buffer - - TInt action = 0; - ReadSoapL(action, aSoapBuffer); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ReadSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::ReadSoapL(const CBufBase& aSoapBuffer) -{ - LOG("[CBtSoapCodec::ReadSoapL(CBufBase&)]\t "); - // Open the template file and read it into buffer - - TInt action = 0; - ReadSoapL(action, aSoapBuffer); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ReadSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::ReadSoapL(TInt& aAction, const CBufBase& aSoapBuffer) -{ - LOG("[CBtSoapCodec::ReadSoapL(TInt&, CBufBase&)]\t "); - // Open the template file and read it into buffer - - if(iActionBuffer) - delete iActionBuffer; - iActionBuffer = NULL; - - iActionBuffer = static_cast(User::LeaveIfNull(HBufC8::NewL(aSoapBuffer.Size()))); - TPtr8 ptr = iActionBuffer->Des(); - aSoapBuffer.Read(0, ptr, aSoapBuffer.Size()); - - ReadSoapL(aAction, iActionBuffer->Des()); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ReadSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::ReadSoapL(TInt& aAction, const TDesC8& aSoapBuffer) -{ - LOG("[CBtSoapCodec::ReadSoapL(TInt&, TDesC8&)]\t "); - // Open the template file and read it into buffer - -#ifdef _DEBUG - TInt len = aSoapBuffer.Length() < 50 ? aSoapBuffer.Length() : 50; - TPtrC8 p = aSoapBuffer.Mid(0, len); - -#endif - - if(!iXmlHandler) - iXmlHandler = CXmlHandler::NewL(); - iXmlHandler->InitFromBufferL(aSoapBuffer); - - if(iActionBuffer) - delete iActionBuffer; - iActionBuffer = NULL; - - TInt offset = 0; - - TPtrC8 ptr = iXmlHandler->GetDataL(KBtBodyStartTag, KBtBodyEndTag, offset); - - iActionBuffer = static_cast(User::LeaveIfNull(ptr.AllocL())); - - aAction = SoapAction(); - - iXmlHandler->Reset(); - iXmlHandler->InitFromBufferL(iActionBuffer->Des(), aAction); -} - -//------------------------------ -// Responses -//------------------------------ -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CreateJobResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::CreateJobResponseL(TInt& aJobId, TInt& aErrorCode) -{ - LOG("[CBtSoapCodec::CreateJobResponseL]\t "); - - if(EBtCreateJobResponse != SoapAction()) - { - User::Leave(KErrInvalidSequence); - } - - TBtIntString8 jobId; - jobId.Zero(); - TInt status = OperationStatusL(); - - aErrorCode = KErrNotFound; - GetAttributeL(KBtJobId(), jobId, aErrorCode); - LOG82("[CBtSoapCodec::CreateJobResponseL]\t %S: %S",&KBtJobId(), &jobId); - LOG2("[CBtSoapCodec::CreateJobResponseL]\t opStatus: %d, err %d",status, aErrorCode); - if(aErrorCode == KErrNone) - aErrorCode = status; - - aJobId = TBtMapper::Int(jobId); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetPrinterAttributesResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetPrinterAttributesResponseL(TInt& aState, TInt& aStateReasons, - RArray& aCapabilities, - TInt& aOperationStatus) -{ - LOG("[CBtSoapCodec::GetPrinterAttributesResponseL]\t"); - - // same operationStatus got twce but no matter. - GetPrinterStateResponseL(aState, aStateReasons, aOperationStatus); - GetPrinterCapabilitiesResponseL(aCapabilities, aOperationStatus); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetPrinterStateResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetPrinterStateResponseL(TInt& aState, TInt& aStateReasons, TInt& aOperationStatus) -{ - LOG("[CBtSoapCodec::GetPrinterStateResponseL]\t"); - - if(EBtGetPrinterAttributesResponse != SoapAction()) - { - User::Leave(KErrInvalidSequence); - } - - aState = EBtStateUnknown; - aStateReasons = EPbCheckPrinter; - aOperationStatus = OperationStatusL(); - - /*get attribute*/ - TBtAttrString8 value(KNullDesC8()); - - /* Get printer status and reason */ - TInt err = KErrNotFound; - GetAttributeL(KBtPrinterState(), value, err); - LOG82("[CBtSoapCodec::GetPrinterStateResponseL]\t ** %S: %S",&KBtPrinterState(), &value); - if(KErrNone == err) - { - aState = TBtMapper::State(value); - GetAttributeL(KBtPrinterStateReasons(), value, err); - LOG82("[CBtSoapCodec::GetPrinterStateResponseL]\t ** %S: %S",&KBtPrinterStateReasons(), &value); - if(KErrNone == err) - { - aStateReasons = TBtMapper::PrintError(value); - } - } -} - - - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetCapabilitiesResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetPrinterCapabilitiesResponseL(RArray& aCapabilities, - TInt& aOperationStatus) -{ - LOG("[CBtSoapCodec::GetPrinterCapabilitiesResponseL]\t"); - - if(EBtGetPrinterAttributesResponse != SoapAction()) - { - User::Leave(KErrInvalidSequence); - } - - aOperationStatus = OperationStatusL(); - aCapabilities.Reset(); - - aCapabilities.Append(ParseLayoutL()); - aCapabilities.Append(ParseQualityL()); - aCapabilities.Append(ParsePaperSizeL()); - -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetJobAttributesResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetJobAttributesResponseL(const TInt aJobId, TInt& aJobState, TBtAttrString8& aJobName, - TBtAttrString8& aOriginator, TInt& aSheetsCompleted, - TInt& aPendingJobs, TInt& aErrorCode ) - -{ - LOG("[CBtSoapCodec::GetJobAttributesResponseL]\t"); - if(EBtGetJobAttributesResponse != SoapAction()) - { - User::Leave(KErrInvalidSequence); - } - - aJobState = EBtStateUnknown; - aJobName = KNullDesC8(); - aOriginator = KNullDesC8(); - aSheetsCompleted = KErrNotFound; - aPendingJobs = KErrNotFound; - aErrorCode = KErrNotFound; - - TBtAttrString8 value(KNullDesC8()); - TInt status = OperationStatusL(); - - GetAttributeL(KBtJobId(), value, aErrorCode); - LOG82("[CBtSoapCodec::GetJobAttributesResponseL]\t %S: %S",&KBtJobId(), &value); - LOG2("[CBtSoapCodec::GetJobAttributesResponseL]\t opStatus: %d, err %d",status, aErrorCode); - if(aErrorCode == KErrNone) - { - if( TBtMapper::Int(value) != aJobId) - aErrorCode = KErrArgument; - else - aErrorCode = status; - } - - // then just get the rest of the arguments. Success or fails, just continue. - GetAttributeL(KBtJobState(), value, status); - if(KErrNone == status) - aJobState = TBtMapper::State(value); - else - { - LOG82("[CBtSoapCodec::GetJobAttributesResponseL]\t %S: %S",&KBtJobState(), &value); - LOG1("[CBtSoapCodec::GetJobAttributesResponseL]\t err %d",status); - } - - GetAttributeL(KBtJobMediaSheetsCompleted(), value, status); - if(KErrNone == status) - aSheetsCompleted = TBtMapper::Int(value); - else - { - LOG82("[CBtSoapCodec::GetJobAttributesResponseL]\t %S: %S",&KBtJobMediaSheetsCompleted(), &value); - LOG1("[CBtSoapCodec::GetJobAttributesResponseL]\t err %d",status); - } - - GetAttributeL(KBtJobPending(), value, status); - if(KErrNone == status) - aPendingJobs = TBtMapper::Int(value); - else - { - LOG82("[CBtSoapCodec::GetJobAttributesResponseL]\t %S: %S",&KBtJobPending(), &value); - LOG1("[CBtSoapCodec::GetJobAttributesResponseL]\t err %d",status); - } - - GetAttributeL(KBtJobName(), aJobName, status); - if(KErrNone != status) - { - LOG82("[CBtSoapCodec::GetJobAttributesResponseL]\t %S: %S",&KBtJobName(), &aJobName); - LOG1("[CBtSoapCodec::GetJobAttributesResponseL]\t err %d",status); - } - - GetAttributeL(KBtJobOriginatingUserName(), aOriginator, status); - if(KErrNone != status) - { - LOG82("[CBtSoapCodec::GetJobAttributesResponseL]\t %S: %S",&KBtJobOriginatingUserName(), &aOriginator); - LOG1("[CBtSoapCodec::GetJobAttributesResponseL]\t err %d",status); - } -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CancelJobResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::CancelJobResponseL(const TInt aJobId, TInt& aErrorCode) -{ - LOG("[CBtSoapCodec::CancelJobResponseL]\t"); - TBtIntString8 jobId; - jobId.Append(aJobId); - - if(EBtCancelJobResponse != SoapAction()) - { - User::Leave(KErrInvalidSequence); - } - - TBuf8 respJobId; - TInt status = OperationStatusL(); - - aErrorCode = KErrNotFound; - GetAttributeL(KBtJobId(), respJobId, aErrorCode); - LOG82("[CBtSoapCodec::CancelJobResponseL]\t %S: %S",&KBtJobId(), &respJobId); - LOG2("[CBtSoapCodec::CancelJobResponseL]\t opStatus: %d, err %d",status, aErrorCode); - if(aErrorCode == KErrNone) - { - if(TBtMapper::Int(respJobId) != aJobId) - aErrorCode = KErrArgument; - else - aErrorCode = status; - } -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetEventResponseL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetEventResponseL(const TInt aJobId, - TInt& aJobState, - TInt& aPrinterState, - TInt& aStateReasons, - TInt& aErrorCode) -{ - LOG("[CBtSoapCodec::GetEventResponseL]\t"); - if(EBtGetEventResponse != SoapAction()) - { - User::Leave(KErrInvalidSequence); - } - - aJobState = EBtStateUnknown; - aPrinterState = KErrNotFound; - aStateReasons = KErrNotFound; - aErrorCode = KErrNotSupported; - - TBtAttrString8 value(KNullDesC8()); - TInt status = OperationStatusL(); - - GetAttributeL(KBtJobId(), value, aErrorCode); - LOG82("[CBtSoapCodec::GetEventResponseL]\t %S: %S",&KBtJobId(), &value); - LOG2("[CBtSoapCodec::GetEventResponseL]\t opStatus: %d, err %d",status, aErrorCode); - if(aErrorCode == KErrNone) - { - if(TBtMapper::Int(value) != aJobId) - aErrorCode = KErrArgument; - else - aErrorCode = status; - } - - // then just get the rest of the arguments. Success or fails, just continue. - GetAttributeL(KBtJobState(), value, status); - LOG82("[CBtSoapCodec::GetEventResponseL]\t %S: %S",&KBtJobState(), &value); - LOG1("[CBtSoapCodec::GetEventResponseL]\t err %d",status); - if(KErrNone == status) - aJobState = TBtMapper::Int(value); - - GetAttributeL(KBtPrinterState(), value, status); - LOG82("[CBtSoapCodec::GetEventResponseL]\t %S: %S",&KBtPrinterState(), &value); - LOG1("[CBtSoapCodec::GetEventResponseL]\t err %d",status); - if(KErrNone == status) - aPrinterState = TBtMapper::Int(value); - - GetAttributeL(KBtPrinterStateReasons(), value, status); - LOG82("[CBtSoapCodec::GetEventResponseL]\t %S: %S",&KBtPrinterStateReasons(), &value); - LOG1("[CBtSoapCodec::GetEventResponseL]\t err %d",status); - if(KErrNone == status) - aStateReasons = TBtMapper::Int(value); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::OperationStatusL -// -//-------------------------------------------------------------------------------------------- -TInt CBtSoapCodec::OperationStatusL() -{ - LOG("[CBtSoapCodec::GetOperationStatus]\t"); - - /* Get operation status. If NOK or not found, no reason to continue */ - TBtAttrString8 value(KNullDesC8()); - TInt status = KErrNotFound; - - GetAttributeL(KBtOperationStatus(), value, status); - LOG82("[CBtSoapCodec::GetOperationStatus]\t %S: %S",&KBtOperationStatus(), &value); - - status = TBtMapper::OperationStatus(value); - - LOG1("[CBtSoapCodec::GetOperationStatus]\t return status %d",status); - return status; -} - -//------------------------------ - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetAttributeL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetAttributeL(const TDesC8& aName, TDes8& aValue, TInt& aError) -{ - LOG("[CBtSoapCodec::GetAttributeL()]\t "); - - if(KErrNotFound == iXmlHandler->BufferId()) - User::Leave(KErrInvalidSequence); - - aError = KErrNotFound; - - TBtAttrString8 startTag; - TBtAttrString8 endTag; - - startTag.Format(KBtStartTag(), &aName); - endTag.Format(KBtEndTag(), &aName); - - TInt offset = KErrNotFound; - TPtrC8 ptr = iXmlHandler->GetDataL(startTag, endTag, offset); - - if(0 < ptr.Length()) - { - aError = KErrNone; - aValue.Copy(ptr); - } - LOG("[CBtSoapCodec::GetAttributeL]\t end"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetAttributeListL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetAttributeListL(const TDesC8& aName, CDesC8ArrayFlat& aList, TInt& aError) -{ - LOG("[CBtSoapCodec::GetAttributeL()]\t "); - - if(KErrNotFound == iXmlHandler->BufferId()) - User::Leave(KErrInvalidSequence); - - aError = KErrNotFound; - aList.Reset(); - - // Read the list of tag aName - TInt offset = KErrNotFound; - HBufC8* listData = HBufC8::NewLC(iXmlHandler->Buffer().Length()); - TPtr8 dataPtr = listData->Des(); - GetAttributeL(aName, dataPtr, offset); - if(0 >= dataPtr.Length()) - { - aError = KErrNotFound; - CleanupStack::PopAndDestroy(listData); - return; - } - - CXmlHandler* tmpHandler = CXmlHandler::NewLC(); - tmpHandler->InitFromBufferL(dataPtr); - - // Now find the first tag data to identify the tag of the entry in the list - TPtrC8 newNamePtr = tmpHandler->GetDataL(KBtLessThan(), KBtGreaterThan(), offset); - - TBtAttrString8 startTag; - TBtAttrString8 endTag; - - startTag.Format(KBtStartTag(), &newNamePtr); - endTag.Format(KBtEndTag(), &newNamePtr); - - tmpHandler->GetDataListL(startTag, endTag, aList); - CleanupStack::PopAndDestroy(2); //listData, tmpHandler - - if(0 < aList.Count()) - { - aError = KErrNone; - } -} - - -// PRIVATE -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CreateSoapTemplateL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::CreateSoapTemplateL(const TDesC8& aStartTag, const TDesC8& aEndTag) -{ - LOG("[CBtSoapCodec::CreateSoapTemplateL]\t"); - - // Open the template file and read it into buffer - iXmlHandler->Reset(); - iXmlHandler->InitFromFileL(KBtXmlTemplate()); - - // Separate the template element from the template buffer - if(iActionBuffer) - delete iActionBuffer; - iActionBuffer = NULL; - - TInt offset = 0; - - TPtrC8 ptr = iXmlHandler->GetDataL(aStartTag, aEndTag, offset); - - iActionBuffer = static_cast(User::LeaveIfNull(ptr.AllocL())); - - iXmlHandler->DeleteBufferData(offset, iActionBuffer->Length()+aStartTag.Length()+aEndTag.Length()); - iXmlHandler->ComposeDataL(iActionBuffer->Des(), KBtActionData()); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CreateJobSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::CreateJobSoapL(const TInt aJobId) -{ - LOG("[CBtSoapCodec::CreateJobSoapL]\t"); - CreateSoapTemplateL(KBtCreateJobStart(), KBtCreateJobEnd()); - - TBuf8 filename; - filename.Format(KXHTMLFileName8(), aJobId); - - TBtAttrString8 nameTempl, userNameTempl; - nameTempl.Format(KBtValueTemplate(), &KBtJobName()); - userNameTempl.Format(KBtValueTemplate(), &KBtJobOriginatingUserName()); - nameTempl.Format(KBtValueTemplate(), &KBtJobName()); - - iXmlHandler->ComposeDataL(KBtCreateJob(), KBtAction()); - iXmlHandler->ComposeDataL(filename, nameTempl); - - TBuf8<0x100> name; - RsUtils::GetLocalBTNameL(name); - iXmlHandler->ComposeDataL(name, userNameTempl); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetCapabilitiesSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetCapabilitiesSoapL() -{ - LOG("[CBtSoapCodec::GetCapabilitiesSoapL]\t"); - CreateSoapTemplateL(KBtGetPrinterCapabilitiesStart(), KBtGetPrinterCapabilitiesEnd()); - - iXmlHandler->ComposeDataL(KBtGetPrinterAttributes(), KBtAction()); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetPrinterStateSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetPrinterStateSoapL() -{ - LOG("[CBtSoapCodec::GetPrinterStateSoapL]\t"); - CreateSoapTemplateL(KBtGetPrinterStateStart(), KBtGetPrinterStateEnd()); - - iXmlHandler->ComposeDataL(KBtGetPrinterAttributes(), KBtAction()); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetPrinterAttributesSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetPrinterAttributesSoapL() -{ - LOG("[CBtSoapCodec::GetPrinterAttributesSoapL]\t"); - CreateSoapTemplateL(KBtGetPrinterAttributesAllStart(), KBtGetPrinterAttributesAllEnd()); - - iXmlHandler->ComposeDataL(KBtGetPrinterAttributes(), KBtAction()); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetJobAttributesSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetJobAttributesSoapL(const TDesC8& aJobId) -{ - LOG("[CBtSoapCodec::GetJobAttributesSoapL]\t"); - CreateSoapTemplateL(KBtJobIdStart(), KBtJobIdEnd()); - - iXmlHandler->ComposeDataL(KBtGetJobAttributes(), KBtAction()); - - TBtAttrString8 templ; - templ.Format(KBtValueTemplate(), &KBtJobId()); - - iXmlHandler->ComposeDataL(aJobId, templ); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CancelJobSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::CancelJobSoapL(const TDesC8& aJobId) -{ - LOG("[CBtSoapCodec::CancelJobSoapL]\t"); - CreateSoapTemplateL(KBtJobIdStart(), KBtJobIdEnd()); - - iXmlHandler->ComposeDataL(KBtCancelJob(), KBtAction()); - - TBtAttrString8 templ; - templ.Format(KBtValueTemplate(), &KBtJobId()); - - iXmlHandler->ComposeDataL(aJobId, templ); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetEventSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetEventSoapL(const TDesC8& aJobId) -{ - LOG("[CBtSoapCodec::GetEventSoapL]\t"); - CreateSoapTemplateL(KBtJobIdStart(), KBtJobIdEnd()); - - iXmlHandler->ComposeDataL(KBtGetEvent(), KBtAction()); - - TBtAttrString8 templ; - templ.Format(KBtValueTemplate(), &KBtJobId()); - - iXmlHandler->ComposeDataL(aJobId, templ); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::GetMarginsSoapL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::GetMarginsSoapL() -{ - LOG("[CBtSoapCodec::GetMarginsSoapL]\t NOT SUPPORTED -> leave"); - User::Leave(KErrNotSupported); - - CreateSoapTemplateL(KBtGetMarginsStart(), KBtGetMarginsEnd()); - - iXmlHandler->ComposeDataL(KBtGetMargins(), KBtAction()); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::SoapAction -// -//-------------------------------------------------------------------------------------------- -TInt CBtSoapCodec::SoapAction() -{ - LOG1("[CBtSoapCodec::SoapAction()]\t iActionBuffer: %d", iActionBuffer); - if(!iActionBuffer || 0 >= iActionBuffer->Length()) - return EBtUnknownAction; - - TInt len = iActionBuffer->Length() < 50 ? iActionBuffer->Length() : 50; - TPtrC8 ptr = iActionBuffer->Mid(0, len); - LOG81("[CBtSoapCodec::SoapAction()]\t ptr: \"%S\"", &ptr); - - /* read action name - the order in list below matters: - be aware the substrings (as CreateJob is for CreateJobResponse) aren't found!*/ - if(KErrNotFound < ptr.Find(KBtCreateJobResponse())) - { - return EBtCreateJobResponse; - } - else if(KErrNotFound < ptr.Find(KBtCreateJob())) - { - return EBtCreateJob; - } - else if(KErrNotFound < ptr.Find(KBtGetPrinterAttributesResponse())) - { - return EBtGetPrinterAttributesResponse; - } - else if(KErrNotFound < ptr.Find(KBtGetPrinterAttributes())) - { - return EBtGetPrinterAttributes; - } - else if(KErrNotFound < ptr.Find(KBtGetJobAttributesResponse())) - { - return EBtGetJobAttributesResponse; - } - else if(KErrNotFound < ptr.Find(KBtGetJobAttributes())) - { - return EBtGetJobAttributes; - } - else if(KErrNotFound < ptr.Find(KBtCancelJobResponse())) - { - return EBtCancelJobResponse; - } - else if(KErrNotFound < ptr.Find(KBtCancelJob())) - { - return EBtCancelJob; - } - else if(KErrNotFound < ptr.Find(KBtGetEventResponse())) - { - return EBtGetEventResponse; - } - else if(KErrNotFound < ptr.Find(KBtGetEvent())) - { - return EBtGetEvent; - } - else if(KErrNotFound < ptr.Find(KBtGetMarginsResponse())) - { - return EBtGetMarginsResponse; - } - else if(KErrNotFound < ptr.Find(KBtGetMargins())) - { - return EBtGetMargins; - } - - return EBtUnknownAction; - -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::CBtSoapCodec -// -//-------------------------------------------------------------------------------------------- -CBtSoapCodec::CBtSoapCodec() -{ -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ParseLayout -// -//-------------------------------------------------------------------------------------------- -TPrintCapability CBtSoapCodec::ParseLayoutL() -{ - LOG("[CBtSoapCodec::ParseLayout]\t"); - - TPrintCapability layout; - layout.iCapabilityID = EPrintCapabLayout; - layout.iType = TPrintCapability::Enum; - layout.iLow = 0; - layout.iHigh = 0; - layout.iEnumCount = 0; - - /* Get layout(s) */ - TBtAttrString8 value(KNullDesC8()); - TInt err = KErrNotFound; - GetAttributeL(KBtNumberUpSupported(), value, err); - LOG82("[CBtSoapCodec::ParseLayout]\t %S: %S",&KBtNumberUpSupported(), &value); - LOG1("[CBtSoapCodec::ParseLayout]\t error: %d",err); - if(KErrNone != err) - { - layout.iEnumCodes[0] = EPrintCapabLayout1UpBorderless; - layout.iEnumCount = 1; - } - else - { - LOG("[CBtSoapCodec::ParseLayout]\t get layout values..."); - RArray arr; - TBtMapper::Layout(value, arr); - LOG1("[CBtSoapCodec::ParseLayout]\t layout count: %d", arr.Count()); - for(TInt i = 0; i < arr.Count(); ++i) - { - LOG2("[CBtSoapCodec::ParseLayout]\t arr[%d]: %d", i, arr[i]); - layout.iEnumCodes[i] = arr[i]; - } - layout.iEnumCount = arr.Count(); - arr.Close(); - } - - RArray tmpArr; - tmpArr.Append(EPrintCapabLayout1UpBorderless); - tmpArr.Append(EPrintCapabLayout1UpBorder); - tmpArr.Append(EPrintCapabLayout2Up); - tmpArr.Append(EPrintCapabLayout4Up); - tmpArr.Append(EPrintCapabLayout6Up); - tmpArr.Append(EPrintCapabLayout9Up); - tmpArr.Append(EPrintCapabLayout12Up); - tmpArr.Append(EPrintCapabLayout16Up); - - for(TInt i = 0; i < tmpArr.Count(); ++i) - { - TInt ix = ValuePosition(layout, tmpArr[i]); - if(KErrNotFound == ix) - { - layout.iEnumCodes[layout.iEnumCount] = tmpArr[i]; - ++layout.iEnumCount; - } - } - tmpArr.Close(); - - layout.iDefaultValue = layout.iEnumCodes[0]; - - TInt ix = ValuePosition(layout, EPrintCapabLayout1UpBorderless); - if(KErrNotFound < ix) - layout.iDefaultValue = layout.iEnumCodes[ix]; - - LOG1("[CBtSoapCodec::ParseLayout]\t return default: %d", layout.iDefaultValue); - return layout; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ParseQuality -// -//-------------------------------------------------------------------------------------------- -TPrintCapability CBtSoapCodec::ParseQualityL() -{ - LOG("[CBtSoapCodec::ParseQuality]\t"); - - TPrintCapability quality; - quality.iCapabilityID = EPrintCapabQuality; - quality.iType = TPrintCapability::Enum; - quality.iLow = 0; - quality.iHigh = 0; - quality.iDefaultValue = EPrintCapabQualityDefault; - quality.iEnumCodes[0] = EPrintCapabQualityDefault; - quality.iEnumCount = 1; - - /* Get quality(s) */ - CDesC8ArrayFlat *qualities = new (ELeave) CDesC8ArrayFlat(10); - CleanupStack::PushL(qualities); - - TInt err = KErrNotFound; - GetAttributeListL(KBtPrintQualitySupported(), *qualities, err); - LOG82("[CBtSoapCodec::ParseQuality]\t %S: count: %d",&KBtPrintQualitySupported(), qualities->MdcaCount()); - if(KErrNone != err) - { - LOG1("[CBtSoapCodec::ParseQuality]\t return with error %d",err); - return quality; - } - - for(TInt i = 0; i < qualities->MdcaCount(); ++i) - { - TInt tmp = TBtMapper::Quality( qualities->MdcaPoint(i) ); - LOG2("[CBtSoapCodec::ParseQuality]\t qualities[%2d]: %d",i, tmp); - if(KErrNotSupported != tmp) - { - quality.iEnumCodes[quality.iEnumCount] = tmp; - ++quality.iEnumCount; - } - if(KMaxEnumAmount < quality.iEnumCount) - { - LOG1("[CBtSoapCodec::ParseQuality]\t max enum count reached: %d",quality.iEnumCount); - --quality.iEnumCount; - break; - } - } - CleanupStack::PopAndDestroy(qualities); - - LOG1("[CBtSoapCodec::ParseQuality]\t return default: %d", quality.iDefaultValue); - return quality; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ParsePaperSize -// -//-------------------------------------------------------------------------------------------- -TPrintCapability CBtSoapCodec::ParsePaperSizeL() -{ - LOG("[CBtSoapCodec::ParsePaperSize]\t"); - - TPrintCapability size; - size.iCapabilityID = EPrintCapabPaperSize; - size.iType = TPrintCapability::Enum; - size.iLow = 0; - size.iHigh = 0; - size.iDefaultValue = EPrintCapabPaperSize4x6; - - /* Get size(s) */ - CDesC8ArrayFlat *sizes = new (ELeave) CDesC8ArrayFlat(10); - CleanupStack::PushL(sizes); - - TInt err = KErrNotFound; - GetAttributeListL(KBtMediaSizesSupported(), *sizes, err); - LOG82("[CBtSoapCodec::ParsePaperSize]\t %S: count %d",&KBtMediaSizesSupported(), sizes->MdcaCount()); - if(KErrNone != err) - { - size.iEnumCodes[0] = size.iDefaultValue; - size.iEnumCount = 1; - return size; - } - - TInt enumPos = 0; - for(TInt i = 0; i < sizes->MdcaCount(); ++i) - { -// LOG82("[CBtSoapCodec::ParsePaperSize]\t sizes[%2d]: %S",i, &sizes[i]); - TInt tmp = TBtMapper::Size(sizes->MdcaPoint(i)); - if(KErrNotSupported != tmp) - { - LOG2("[CBtSoapCodec::ParsePaperSize]\t sizes[%2d]: %d",i, tmp); - size.iEnumCodes[enumPos] = tmp; - size.iEnumCount = ++enumPos; - } - if(KMaxEnumAmount < enumPos) - { - LOG1("[CBtSoapCodec::ParsePaperSize]\t max enum count reached: %d",enumPos); - break; - } - } - CleanupStack::PopAndDestroy(sizes); - - // Get default value from loaded media - ParseDefaultSizeL(size, enumPos); - - // Sort the paper sizes in order 'smallest to biggest' - RArray tmpArr; - tmpArr.Append(EPrintCapabPaperSizeAuto); - tmpArr.Append(EPrintCapabPaperSize4x6); - tmpArr.Append(EPrintCapabPaperSize5x7); - tmpArr.Append(EPrintCapabPaperSizeA6); - tmpArr.Append(EPrintCapabPaperSizeA4); - tmpArr.Append(EPrintCapabPaperSizeLetter); - - for(TInt s = 0; s < tmpArr.Count(); ++s) - { - TInt ix = ValuePosition(size,tmpArr[s]); - if(KErrNotFound == ix) - tmpArr.Remove(s); - } - - // Move back to enum array - for(TInt s2 = 0; s2 < tmpArr.Count(); ++s2) - { - size.iEnumCodes[s2] = tmpArr[s2]; - } - tmpArr.Close(); - -#ifdef ENABLE_LOGGING - _LIT(KTab, "|"); - TFileName tmp(KTab); - - for(TInt l = 0; l < size.iEnumCount; ++l) - { - tmp.AppendNum(size.iEnumCodes[l]); - tmp.Append(KTab); - } - LOG1("[CBtSoapCodec::ParsePaperSizeL]\t order: %S", &tmp); -#endif - - return size; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ParseDefaultSizeL -// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::ParseDefaultSizeL(TPrintCapability& aSize, TInt& aPos) -{ - LOG("[CBtSoapCodec::ParseDefaultSizeL]\t"); - - //reserve more space for this: there are several long text lines - TBuf8 value(KNullDesC8()); - TInt err = KErrNotFound; - - GetAttributeL(KBtMediaLoaded(), value, err); - -#ifdef ENABLE_LOGGING - TInt len = value.Length() < 50 ? value.Length() : 50; - TPtrC8 p = value.Mid(0, len); - LOG82("[CBtSoapCodec::ParseDefaultValues]\t %S: ptr: \"%S\"",&KBtMediaLoaded(), &p); -#endif - - if(KErrNone != err) - { - LOG82("[CBtSoapCodec::ParseDefaultSizeL]\t %S not found. Error: %d. Return.",&KBtMediaLoaded(), err); - return; - } - - CXmlHandler* tmpHandler = CXmlHandler::NewLC(); - tmpHandler->InitFromBufferL(value); - TBtAttrString8 start; - TBtAttrString8 end; - start.Format(KBtStartTag(), &KBtLoadedMediumSize()); - end.Format(KBtEndTag(), &KBtLoadedMediumSize()); - - TPtrC8 defValue = tmpHandler->GetDataL(start, end, err); - TInt tmpDefault = TBtMapper::Size(defValue); - - CleanupStack::PopAndDestroy(tmpHandler); - - if(KErrNotSupported != tmpDefault) - { - aSize.iDefaultValue = tmpDefault; - } - - // Check the default value exists... - for(TInt i = 0; i < aSize.iEnumCount; ++i) - { - if(aSize.iDefaultValue == aSize.iEnumCodes[i]) - { - return; - } - } - - // ...if not, append it. - if(KMaxEnumAmount < aPos) - { - --aPos; - } - aSize.iEnumCodes[aPos] = aSize.iDefaultValue; - aSize.iEnumCount = ++aPos; - - LOG1("[CBtSoapCodec::ParseDefaultSizeL]\t return default: %d", aSize.iDefaultValue); -} - - -//-------------------------------------------------------------------------------------------- -// -// CBtSoapCodec::ValuePosition -// -//-------------------------------------------------------------------------------------------- -TInt CBtSoapCodec::ValuePosition(TPrintCapability aCapab, TInt aValue) -{ - TInt pos = KErrNotFound; - for(TInt i = 0; i < aCapab.iEnumCount; ++i) - if(aValue == aCapab.iEnumCodes[i]) - pos = i; - - return pos; -} - -////// TEST METHODS /////////// -//-------------------------------------------------------------------------------------------- -void CBtSoapCodec::TestMeL() -{ - - _LIT8(KSepar, "\n-------------------------\n"); - _LIT8(KKErrNotFound, "KErrNotFound"); - _LIT8(KLF, "\n%d\n"); - - RFs fs; - CleanupClosePushL(fs); - User::LeaveIfError(fs.Connect()); - - /*create*/ - CBtSoapCodec* codec = CBtSoapCodec::NewL(); - TPtrC8 ptr = codec->CreateSoapL(EBtGetPrinterAttributes); - - _LIT(KTstFile, "c:\\data\\tst.txt"); - RFile f; - CleanupClosePushL(f); - f.Replace(fs,KTstFile, EFileWrite); - f.Write(ptr); - f.Write(KSepar()); - - /*read*/ - TInt act; - CBufFlat* data = CBufFlat::NewL(8); - data->InsertL(0, GetPrinterAttributesResponseTestSoap()); - - codec->ReadSoapL(act, *data); - - /*get attribute*/ - TBtAttrString8 val, errStr; - _LIT8(KPrinterState, "PrinterState"); - _LIT8(KPrinterStateReasons, "PrinterStateReasons"); - TInt err = KErrNoMemory; - - codec->GetAttributeL(KPrinterState(), val, err); - TInt s; - errStr.Format(KLF(), err); - f.Size(s); - f.Write(s+1, KPrinterState); - f.Write(errStr); - f.Write(val); - f.Write(KSepar()); - - codec->GetAttributeL(KPrinterStateReasons(), val, err); - errStr.Format(KLF(), err); - f.Size(s); - f.Write(s+1, KPrinterStateReasons); - f.Write(errStr); - f.Write(val); - f.Write(KSepar()); - - codec->GetAttributeL(KKErrNotFound(), val, err); - errStr.Format(KLF(), err); - f.Size(s); - f.Write(s+1, KKErrNotFound); - f.Write(errStr); - f.Write(val); - f.Write(KSepar()); - - CleanupStack::PopAndDestroy(2); // f, fs - -} - - -TPtrC8 CBtSoapCodec::CreateJobResponseTestSoap() -{ - _LIT8(KTestSoap, "CONTENT-LENGTH:200\nCONTENT-TYPE:text/xml; charset=\"utf-8\"" - "" - "" - "" - "12345" - "0x0001" - "" - "" - ""); - - TPtrC8 response = KTestSoap(); - return response; -} -TPtrC8 CBtSoapCodec::CancelJobResponseTestSoap() -{ - _LIT8(KTestSoap, "CONTENT-LENGTH:200\nCONTENT-TYPE:text/xml; charset=\"utf-8\"" - "" - "" - "" - "12345" - "0x0406" - "" - "" - ""); - - TPtrC8 response = KTestSoap(); - return response; -} -TPtrC8 CBtSoapCodec::GetPrinterAttributesResponseTestSoap() -{ - _LIT8(KTestSoap, "CONTENT-LENGTH:200\nCONTENT-TYPE:text/xml; charset=\"utf-8\"" - "" - "" - "" - "MyPrinter" - "MyLocation" - "idle" - "none" - "" - "" - " application/vnd.pwg-xhtml-print+xml:0.95 " - " application/vnd.hp-PCL:5E" - " text/plain" - " application/PostScript:3" - "" - "" - "image/jpeg" - "image/gif" - "" - "true" - "1" - "" - " one-sided" - " two-sided-long-edge" - " two-sided-short-edge" - "" - "4" - "" - "portrait" - "landscape" - "" - "" - "iso_a4_210x297mm" - "iso_a3_297x420mm" - "" - "" - "stationery" - "photographic" - "cardstock" - "" - "" - "" - " iso_a4_210x297mm" - "stationery" - "" - "" - " iso_a4_210x297mm" - "photographic" - "" - "" - "" - "draft" - "normal" - "fine" - "" - "1" - "0x0000" - ""); - - TPtrC8 response = KTestSoap(); - return response; -} -TPtrC8 CBtSoapCodec::GetJobAttributesResponseTestSoap() -{ - _LIT8(KTestSoap, "CONTENT-LENGTH:200\nCONTENT-TYPE:text/xml; charset=\"utf-8\"" - "" - "" - "" - "12345" - "printing" - "MyExpenseReport" - "mailto:MyEmail" - "2" - "0" - "0x0000" - "" - "" - ""); - - TPtrC8 response = KTestSoap(); - return response; -} -TPtrC8 CBtSoapCodec::GetEventsResponseTestSoap() -{ - _LIT8(KTestSoap, "CONTENT-LENGTH:200\nCONTENT-TYPE:text/xml; charset=\"utf-8\"" - "" - "" - "" - "12345" - "stopped" - "stopped" - "media-empty" - "0x0000" - "" - "" - ""); - - TPtrC8 response = KTestSoap(); - return response; -} -TPtrC8 CBtSoapCodec::GetMarginsResponseTestSoap() -{ - _LIT8(KTestSoap, "CONTENT-LENGTH:200\nCONTENT-TYPE:text/xml; charset=\"utf-8\"" - "" - "" - "" - " .25in,.25in,0in,.25in" - " 0x0000" - "" - "" - ""); - - TPtrC8 response = KTestSoap(); - return response; -} - -// End of file