diff -r 000000000000 -r dd21522fd290 codhandler/codeng/src/CodEng.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/codeng/src/CodEng.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Implementation of class CCodEng. +* +* +*/ + + +// INCLUDE FILES + +#include "CodEng.h" +#include "CodData.h" +#include "CodError.h" +#include "CodPanic.h" +#include "CodStatus.h" +#include "CodParser.h" +#include "CodLogger.h" +#include "CodSaver.h" +#include + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CCodEng::NewL() +// --------------------------------------------------------- +// +EXPORT_C CCodEng* CCodEng::NewL +( CEikProcess* aProcess, MCodLoadObserver* aObserver ) + { + CCodEng* model = new (ELeave) CCodEng( aObserver ); + CleanupStack::PushL( model ); + model->ConstructL( aProcess ); + CleanupStack::Pop( model ); + return model; + } + +// --------------------------------------------------------- +// CCodEng::~CCodEng() +// --------------------------------------------------------- +// +EXPORT_C CCodEng::~CCodEng() + { + CLOG(( ECodEng, 2, _L("CCodEng::~CCodEng") )); + } + +// --------------------------------------------------------- +// CCodEng::CCodEng() +// --------------------------------------------------------- +// +CCodEng::CCodEng( MCodLoadObserver* aObserver ): CCodEngBase( aObserver ) + { + CLOG(( ECodEng, 2, _L("CCodEng::CCodEng") )); + } + +// --------------------------------------------------------- +// CCodEng::CheckDataL() +// --------------------------------------------------------- +// +void CCodEng::CheckDataL() + { + CLOG(( ECodEng, 2, _L("-> CCodEng::CheckDataL") )); + if( !iData->IsValid() ) + { + // Syntactically OK, but mandatory attributes are missing. + User::Leave( KErrCodInvalidDescriptor ); + } + CLOG(( ECodEng, 4, _L("CCodEng::CheckDataL: data valid") )); + CLOG(( ECodEng, 2, _L("<- CCodEng::CheckDataL") )); + } + +// --------------------------------------------------------- +// CCodEng::ParseDataL() +// --------------------------------------------------------- +// +void CCodEng::ParseDataL() + { + CLOG(( ECodEng, 2, _L("-> CCodEng::ParseDataL") )); + + __ASSERT_DEBUG( iCodBuf, CodPanic( ECodInternal ) ); + __ASSERT_DEBUG( iData, CodPanic( ECodInternal ) ); + + TCodParser parser; + parser.ParseL( *iCodBuf, *iData ); + CLOG(( ECodEng, 4, _L("CCodEng::SetL: parsed OK") )); + CLOG(( ECodEng, 2, _L("<- CCodEng::ParseDataL") )); + } + +// --------------------------------------------------------- +// CCodEng::StatusCode +// --------------------------------------------------------- +// +TInt CCodEng::StatusCode( TInt aError, TState aState ) const + { + // Meaningless to fiddle with statuses after we are done. + __ASSERT_DEBUG( aState <= ENotify, CodPanic( ECodInternal ) ); + + TInt code( KHttp924LoaderError ); + + switch( aError ) + { + case KErrNone: + { + code = KHttp900Success; + break; + } + + case KErrNoMemory: + case KErrDiskFull: + { + code = KHttp910NoMemory; + break; + } + + case KErrCodInsufficientSpace: + { + code = KHttp901InsufficientMemory; + break; + } + + case KErrCancel: + case KErrAbort: + { + code = aState == EReady ? + KHttp921UserAborted : // EReady -> COD rejected by user. + KHttp902UserCancelled; // other -> something is cancelled. + break; + } + + case KErrCodInvalidDescriptor: + case KErrCodUnsupportedVersion: + { + code = KHttp906InvalidDescriptor; + break; + } + + case KErrCodAttributeMismatch: + { + code = KHttp905AttributeMismatch; + break; + } + + case KErrCodInvalidType: + { + code = KHttp907InvalidType; + break; + } + + case KBadMimeType: + case KMimeNotSupported: + { + code = iState == ESet ? + KHttp922DeviceAborted : // ESet -> COD MIME bad. + KHttp923NonAcceptableContent;// EFetch -> content MIME bad. + break; + } + + case KErrTimedOut: + case KErrCodHttpCommsFailed: + case KErrCodHttpNoResponse: + { + code = KHttp903LossOfService; + break; + } + + default: + { + code = KHttp924LoaderError; + break; + } + } + return code; + } + +// --------------------------------------------------------- +// CCodEng::StatusText() +// --------------------------------------------------------- +// +const TDesC8& CCodEng::StatusText( TInt aCode ) const + { + switch ( aCode ) + { + case KHttp900Success: return KText900Success; + case KHttp901InsufficientMemory: return KText901InsufficientMemory; + case KHttp902UserCancelled: return KText902UserCancelled; + case KHttp903LossOfService: return KText903LossOfService; + case KHttp905AttributeMismatch: return KText905AttributeMismatch; + case KHttp906InvalidDescriptor: return KText906InvalidDescriptor; + case KHttp907InvalidType: return KText907InvalidType; + case KHttp921UserAborted: return KText921UserAborted; + case KHttp922DeviceAborted: return KText922DeviceAborted; + case KHttp923NonAcceptableContent: return KText923NonAcceptableContent; + case KHttp924LoaderError: return KText924LoaderError; + case KHttp910NoMemory: return KText910NoMemory; + default: CodPanic( ECodInternal ); + } + return KNullDesC8; /* NOTREACHED */ + }