diff -r 000000000000 -r 95b198f216e5 omadrm/drmengine/roap/src/RightsReq.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmengine/roap/src/RightsReq.cpp Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,254 @@ +/* +* Copyright (c) 2002-2004 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: ?Description +* +*/ + + + +// INCLUDE FILES +#include +#include "base64.h" +#include "RightsReq.h" + +using namespace Roap; + +// LOCAL CONSTANTS AND MACROS +_LIT8(KReqHeader, ""); +_LIT8(KReqNonce, ""); +_LIT8(KReqNonceEnd, ""); +_LIT8(KReqTime, ""); +_LIT8(KReqDeviceId, ""); +_LIT8(KReqDeviceIdEnd, ""); +_LIT8(KReqRiId, ""); +_LIT8(KReqRiIdEnd, ""); +_LIT8(KReqRoInfo, ""); +_LIT8(KReqRoInfoEnd, ""); +_LIT8(KReqRoId, ""); +_LIT8(KReqRoIdEnd, ""); +_LIT8(KReqDomainId, ""); +_LIT8(KReqDomainIdEnd, ""); +_LIT8(KReqCertChain, ""); +_LIT8(KReqCert, ""); +_LIT8(KReqCertEnd, ""); +_LIT8(KReqCertChainEnd, ""); +_LIT8(KReqExtensions, ""); +_LIT8(KReqExtensionsEnd, ""); +_LIT8(KReqPeerKey, "\ +"); +_LIT8(KReqPeerKeyEnd, ""); +_LIT8(KReqNoOcspResponse, ""); +_LIT8(KReqOcspResponderKeyId, "\ +"); +_LIT8(KReqOcspResponderKeyIdEnd, ""); +_LIT8(KReqTransactionContentId, ""); + _LIT8(KReqTransactionContentIdEnd, ""); + _LIT8(KReqTransactionId, ""); +_LIT8(KReqTransactionIdEnd, ""); +_LIT8(KReqSig, ""); +_LIT8(KReqSigEnd, ""); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CRightsReq::CRightsReq +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CRightsReq::CRightsReq(): + iDomainId(NULL), + iNonce(NULL), + iSignature(NULL), + iDcfHash(NULL), + iOcspResponderKeyId(NULL), + iTriggerNonce(NULL) + { + } + +// ----------------------------------------------------------------------------- +// CRightsReq::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CRightsReq::ConstructL() + { + iDcfHash.SetLength(0); + iTime.UniversalTime(); + iPeerKeyIdentifier.SetLength(0); + iOcspInfoStored = EFalse; + } + +// ----------------------------------------------------------------------------- +// CRightsReq::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CRightsReq* CRightsReq::NewL() + { + CRightsReq* self = new( ELeave ) CRightsReq; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CRightsReq::~CRightsReq() + { + iRoIdList.ResetAndDestroy(); + iCertificateChain.ResetAndDestroy(); + iTransTrackIDs.ResetAndDestroy(); + iContentIDs.ResetAndDestroy(); + delete iDomainId; + delete iSignature; + delete iTriggerNonce; + delete iOcspResponderKeyId; + } + + +// ----------------------------------------------------------------------------- +// CRightsReq::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +HBufC8* CRightsReq::MessageAsXmlL(void) + { + HBufC8* r = NULL; + CBufFlat* b = NULL; + TInt i; + + b = CBufFlat::NewL(128); + CleanupStack::PushL(b); + b->InsertL(0, KReqHeader); + if (iTriggerNonce) + { + BufAppendL(b, KReqNonceTrigger); + BufAppendL(b, *iTriggerNonce); + BufAppendL(b, KReqNonceTriggerEnd); + } + BufAppendL(b, KReqHeaderEnd); + + BufAppendL(b, KReqDeviceId); + BufAppendBase64L(b, iDeviceId); + BufAppendL(b, KReqDeviceIdEnd); + + if (iDomainId) + { + BufAppendL(b, KReqDomainId); + BufAppendL(b, *iDomainId); + BufAppendL(b, KReqDomainIdEnd); + } + + BufAppendL(b, KReqRiId); + BufAppendBase64L(b, iRiId); + BufAppendL(b, KReqRiIdEnd); + + BufAppendL(b, KReqNonce); + BufAppendBase64L(b, iNonce); + BufAppendL(b, KReqNonceEnd); + + BufAppendL(b, KReqTime); + BufAppendTimeL(b, iTime); + BufAppendL(b, KReqTimeEnd); + + BufAppendL(b, KReqRoInfo); + for (i = 0; i < iRoIdList.Count(); i++) + { + BufAppendL(b, KReqRoId); + BufAppendL(b, *iRoIdList[i]); + BufAppendL(b, KReqRoIdEnd); + } + BufAppendL(b, KReqRoInfoEnd); + + if (iCertificateChain.Count() > 0) + { + BufAppendL(b, KReqCertChain); + for (i = 0; i < iCertificateChain.Count(); i++) + { + BufAppendL(b, KReqCert); + BufAppendBase64L(b, *iCertificateChain[i]); + BufAppendL(b, KReqCertEnd); + } + BufAppendL(b, KReqCertChainEnd); + } + + if (iTransTrackIDs.Count() || + iPeerKeyIdentifier.Length() || + iOcspResponderKeyId || + iOcspInfoStored) + { + BufAppendL(b, KReqExtensions); + } + + if (iPeerKeyIdentifier.Length()) + { + BufAppendL(b, KReqPeerKey); + BufAppendBase64L(b, iPeerKeyIdentifier); + BufAppendL(b, KReqPeerKeyEnd); + } + + if (iOcspInfoStored) + { + BufAppendL(b, KReqNoOcspResponse); + } + + if (iOcspResponderKeyId) + { + BufAppendL(b, KReqOcspResponderKeyId); + BufAppendBase64L(b, *iOcspResponderKeyId); + BufAppendL(b, KReqOcspResponderKeyIdEnd); + } + + for ( TInt i = 0; i < iTransTrackIDs.Count() && i < iContentIDs.Count(); i++ ) + { + BufAppendL(b, KReqTransactionContentId); + BufAppendL(b, *iContentIDs[i]); + BufAppendL(b, KReqTransactionContentIdEnd); + BufAppendL(b, KReqTransactionId); + BufAppendL(b, *iTransTrackIDs[i]); + BufAppendL(b, KReqTransactionIdEnd); + } + + if (iTransTrackIDs.Count() || + iPeerKeyIdentifier.Length() || + iOcspResponderKeyId || + iOcspInfoStored) + { + BufAppendL(b, KReqExtensionsEnd); + } + + BufAppendL(b, KReqSig); + BufAppendL(b, KReqSigEnd); + + r = b->Ptr(0).AllocL(); + CleanupStack::PopAndDestroy(b); + return r; + } + +// End of File