diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderCodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderCodec.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,241 @@ +// Copyright (c) 2001-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: +// + +// User Includes +#include "cwspheadercodec.h" +#include "cwspheaderwriter.h" +#include "cwspheaderreader.h" + +// System Includes +#include +#include +#include +#include +#include +#include +#include +#include + +CWspHeaderCodec* CWspHeaderCodec::NewL(RStringPool aStrPool, const TStringTable& aStrTable) + { + CWspHeaderCodec* self = new(ELeave)CWspHeaderCodec(aStrPool, aStrTable); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CWspHeaderCodec::~CWspHeaderCodec() + { + } + +TBool CWspHeaderCodec::CanEncode(RStringF aHeaderField) const + { + TBool encode = EFalse; + switch( aHeaderField.Index(iStrTable) ) + { + // List headers in reverse order of encoding version + // No v1.4 headers + // v1.3 + case WSP::EEncodingVersion: + case WSP::ECookie: + case WSP::ETrailer: + case WSP::ETE: + case WSP::EExpect: + { + // These are v1.3 headers so if the WSP version is less then do not encode + if( iWspVersion < EVersion1_3 ) + break; // use defaul return of EFalse + // Drop through... + } + + //v1.2 + case WSP::EProfile: + case WSP::EProfileDiff: + case WSP::EXWapApplicationId: + { + // These are v1.2 headers so if the WSP version is less then do not encode + if( iWspVersion < EVersion1_2 ) + break; // use defaul return of EFalse + // Drop through... + } + + //v1.1 + case WSP::EAccept: + case WSP::EAcceptCharset: + case WSP::EAcceptCharsetDep: + case WSP::EAcceptEncoding: + case WSP::EAcceptEncodingDep: + case WSP::EAcceptLanguage: + case WSP::EAllow: + case WSP::EAuthorization: + case WSP::EContentEncoding: + case WSP::EContentLanguage: + case WSP::EContentLocation: + case WSP::EContentMD5: + case WSP::EContentRange: + case WSP::EContentRangeDep: + case WSP::EContentType: + case WSP::EDate: + case WSP::EFrom: + case WSP::ELastModified: + case WSP::EPragma: + case WSP::ERange: + case WSP::EReferer: + case WSP::EUpgrade: + case WSP::EUserAgent: + case WSP::EVia: + case WSP::EWarning: + { + encode = ETrue; + } break; + } + return encode; + } + +TBool CWspHeaderCodec::CanDecode(RStringF aHeaderField) const + { + TBool decode = EFalse; + switch( aHeaderField.Index(iStrTable) ) + { + case WSP::EContentType: + case WSP::EDate: + case WSP::ELastModified: + case WSP::EPragma: + case WSP::EVary: + case WSP::EWWWAuthenticate: + case WSP::ESetCookie: + case WSP::EContentLocation: + case WSP::ELocation: + case WSP::EEncodingVersion: + case WSP::EAcceptRanges: + case WSP::EContentEncoding: + case WSP::EContentLanguage: + case WSP::EContentMD5: + case WSP::EProxyAuthenticate: + case WSP::EServer: + case WSP::ERetryAfter: + case WSP::EVia: + case WSP::ETrailer: + case WSP::EContentRange: + case WSP::EContentRangeDep: + case WSP::EXWapApplicationId: + case WSP::EXWapInitiatorURI: + case WSP::EPushFlag: + case WSP::EAllow: + case WSP::EUpgrade: + case WSP::EWarning: + case WSP::EProfileWarning: + case WSP::EProfileWarningDep: + { + decode = ETrue; + } break; + } + return decode; + } + +CHeaderCodec* CWspHeaderCodec::FindDelegateCodecL(RStringF /*aHeaderField*/) const + { + // Create and return the WSP default header codec + return CWspDefaultHeaderCodec::NewL(iStrPool);; + } + +CWspHeaderCodec::CWspHeaderCodec(RStringPool aStrPool, const TStringTable& aStrTable) + : CHeaderCodec(), iStrPool(aStrPool), iStrTable(aStrTable), iWspVersion(EVersion1_2) + { + } + +void CWspHeaderCodec::ConstructL() + { + // Add the well known parameter values string table + iStrPool.OpenL(WSPParam::Table); + iStrPool.OpenL(WSPContentTypes::Table); + iStrPool.OpenL(WSPRegContentTypes::Table); + iStrPool.OpenL(WSPCharacterSets::Table); + iStrPool.OpenL(WSPStdConstants::Table); + iStrPool.OpenL(WSPLanguages::Table); + iStrPool.OpenL(WSPTypeConstants::Table); + + // First do 2nd phase construction of the base class + CHeaderCodec::ConstructL(); + + // Create the header writer and reader objects on behalf of the base class + iWriter = CWspHeaderWriter::NewL(iStrPool, iStrTable, *this); + iReader = CWspHeaderReader::NewL(iStrPool, iStrTable, *this); + } + +CWspHeaderCodec::TWspVersion CWspHeaderCodec::GetWspVersion() const + { + return iWspVersion; + } + +void CWspHeaderCodec::SetWspVersion(TWspVersion aWspVersion) + { + iWspVersion = aWspVersion; + } + +TInt CWspHeaderCodec::EncodeFieldName(RStringF aFieldName) const + { + return (STATIC_CAST(CWspHeaderWriter*, iWriter))->EncodeFieldName(aFieldName); + } + +// Implementation of Default WSP Header Codec +//------------------------------------------------------------------------- + +CWspDefaultHeaderCodec* CWspDefaultHeaderCodec::NewL(RStringPool aStrPool) + { + CWspDefaultHeaderCodec* me = new(ELeave)CWspDefaultHeaderCodec(aStrPool); + CleanupStack::PushL(me); + me->ConstructL(); + CleanupStack::Pop(me); + return me; + } + +CWspDefaultHeaderCodec::~CWspDefaultHeaderCodec() + { + } + +TBool CWspDefaultHeaderCodec::CanEncode(RStringF /*aHeaderField*/) const + { + // the default codec handles anything else that slips through, hence return True - it can handle the field. + return ETrue; + } + +TBool CWspDefaultHeaderCodec::CanDecode(RStringF /*aHeaderField*/) const + { + // the default codec handles anything else that slips through, hence return True - it can handle the field. + return ETrue; + } + +CHeaderCodec* CWspDefaultHeaderCodec::FindDelegateCodecL(RStringF /*aHeaderField*/) const + { + // the default codec cannot delegate, hence no delegated codec is created and return NULL + return NULL; + } + +CWspDefaultHeaderCodec::CWspDefaultHeaderCodec(RStringPool aStrPool) + : CHeaderCodec(), iStrPool(aStrPool) + { + } + +void CWspDefaultHeaderCodec::ConstructL() + { + // First do 2nd phase construction of the base class + CHeaderCodec::ConstructL(); + + // Create the header writer and reader objects on behalf of the base class + iWriter = CWspDefaultHdrWriter::NewL(iStrPool); + iReader = CWspDefaultHdrReader::NewL(iStrPool); + }