--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/src/ncdcreateaccesspointoperationimpl.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,343 @@
+/*
+* Copyright (c) 2006-2008 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:
+*
+*/
+
+
+#include "ncdcreateaccesspointoperationimpl.h"
+
+#include <s32mem.h>
+#include <apmstd.h>
+
+#include "catalogsbasemessage.h"
+#include "catalogsutils.h"
+#include "catalogscontext.h"
+#include "catalogsaccesspointmanager.h"
+#include "ncdproviderdefines.h"
+#include "ncdparserfactory.h"
+#include "ncdparser.h"
+
+#include "ncd_cp_query.h"
+#include "ncd_cp_queryelement.h"
+#include "ncd_cp_queryoption.h"
+#include "ncd_cp_detail.h"
+#include "ncd_cp_clientconfiguration.h"
+#include "ncd_cp_error.h"
+#include "ncd_cp_serverdetails.h"
+#include "ncd_cp_actionrequest.h"
+#include "ncd_cp_queryresponseimpl.h"
+#include "ncdparserimpl.h"
+#include "ncd_parser_cp_clientconfiguration.h"
+#include "ncdgeneralmanager.h"
+
+#include "catalogsdebug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CNcdCreateAccessPointOperation* CNcdCreateAccessPointOperation::NewL(
+ HBufC* aAccessPointData,
+ MNcdOperationRemoveHandler& aRemoveHandler,
+ CNcdGeneralManager& aGeneralManager,
+ MCatalogsSession& aSession )
+ {
+ CNcdCreateAccessPointOperation* self =
+ new( ELeave ) CNcdCreateAccessPointOperation(
+ aRemoveHandler,
+ aGeneralManager,
+ aSession );
+
+ CleanupClosePushL( *self );
+ self->ConstructL( aAccessPointData );
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CNcdCreateAccessPointOperation::~CNcdCreateAccessPointOperation()
+ {
+ DLTRACEIN(( "" ));
+ delete iParser;
+ delete iAccessPointData;
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// Cancel
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::Cancel()
+ {
+ DLTRACEIN(( "" ));
+ if ( iParser )
+ {
+ iParser->CancelParsing();
+ }
+ iOperationState = EStateCancelled;
+
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::ParseError( TInt aErrorCode )
+ {
+ DLTRACEIN(("error:%d", aErrorCode ));
+
+ // Handle error only if not handling an error already
+ // (cancellation of parsing may cause an unnecessary call to this function).
+ if( iError == KErrNone )
+ {
+ iError = aErrorCode;
+
+ if ( iParser )
+ {
+ iParser->CancelParsing();
+ }
+
+ iOperationState = EStateComplete;
+ RunOperation();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::ParseCompleteL( TInt aError )
+ {
+ DLTRACEIN(("error: %d", aError ));
+
+ if ( aError == KErrNone )
+ {
+ ParseAccessPointDataL();
+ }
+
+ delete iParser;
+ iParser = NULL;
+
+ iOperationState = EStateComplete;
+ iError = aError;
+
+ RunOperation();
+ }
+
+
+// ---------------------------------------------------------------------------
+// RunOperation
+// ---------------------------------------------------------------------------
+//
+TInt CNcdCreateAccessPointOperation::RunOperation()
+ {
+ DLTRACEIN(( "Pending message: %X", iPendingMessage ));
+
+ if ( !iPendingMessage )
+ {
+ DLTRACE(("No pending message"));
+ return KErrNotReady;
+ }
+
+ // One trap to rule them all
+ TRAPD( err, HandleStateL() );
+
+ HandleError( err );
+ DLTRACEOUT(("err: %d", err));
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::HandleStateL()
+ {
+ DLTRACEIN((""));
+ switch( iOperationState )
+ {
+ case EStateRunning:
+ {
+ StartParsingL();
+ break;
+ }
+
+
+ case EStateComplete:
+ {
+ if ( !iError && !iAccessPoint )
+ {
+ DLERROR(("No accesspoint was created, error KErrNotFound"));
+ iError = KErrNotFound;
+ }
+
+ // Returns false if there was no error
+ if ( !HandleError( iError ) )
+ {
+ DLTRACE(("Completing the operation"));
+ iProgress.iProgress = iAccessPoint;
+ CNcdBaseOperation::CompleteMessage(
+ iPendingMessage,
+ ENCDOperationMessageCompletionComplete,
+ iProgress,
+ KErrNone );
+ }
+ break;
+ }
+
+ default:
+ {
+ DLTRACE(("Default"));
+ break;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool CNcdCreateAccessPointOperation::HandleError( TInt aError )
+ {
+ DLTRACEIN(("aError: %d", aError ));
+ if ( aError != KErrNone )
+ {
+ DLERROR(("Error %d occurred", aError ));
+ iError = aError;
+ iOperationState = EStateCancelled;
+ Cancel();
+ if ( iPendingMessage )
+ {
+ // ignoring error because operation already failed
+ CNcdBaseOperation::CompleteMessage( iPendingMessage,
+ ENCDOperationMessageCompletionError, iError );
+ }
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::StartParsingL()
+ {
+ DLTRACEIN((""));
+ // create parser
+ delete iParser;
+ iParser = NULL;
+ iParser = NcdParserFactory::CreateParserL( NULL );
+
+ MNcdParserObserverBundle& observers = iParser->Observers();
+ observers.SetParserObserver( this );
+
+
+ iSubParser =
+ CNcdConfigurationProtocolClientConfigurationParser::NewL(
+ observers, *static_cast<CNcdParserImpl*>( iParser ), 0 );
+
+ iParser->BeginAsyncL( iSubParser ); // ownership is transferred
+
+ DLTRACE(("Start parsing the data"));
+ iParser->ParseL( *iAccessPointData );
+ // Inform parser that no more data will be sent
+ iParser->EndL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::ParseAccessPointDataL()
+ {
+ DLTRACEIN((""));
+ // Ownership is transferred here
+ MNcdConfigurationProtocolClientConfiguration* configuration =
+ iSubParser->ClientConfiguration();
+
+ if ( !configuration )
+ {
+ DLTRACEOUT(("No configuration"));
+ return;
+ }
+
+ CleanupDeletePushL( configuration );
+ DASSERT( iPendingMessage );
+
+ RArray<TUint32> accesspoints;
+ CleanupClosePushL( accesspoints );
+ // Parse access point data from client configuration response.
+ iGeneralManager.AccessPointManager().ParseAccessPointDataFromClientConfL(
+ *configuration,
+ iPendingMessage->Session().Context().FamilyId(),
+ ETrue,
+ &accesspoints );
+
+ iAccessPoint = 0;
+
+ if ( accesspoints.Count() )
+ {
+ DLTRACE(("%d accesspoints were created", accesspoints.Count() ));
+ iAccessPoint = accesspoints[0];
+ DLTRACE(("iAccessPoint: %d", iAccessPoint ));
+ }
+
+ CleanupStack::PopAndDestroy( 2, configuration ); // accesspoints, aConfiguration
+ }
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CNcdCreateAccessPointOperation::CNcdCreateAccessPointOperation(
+ MNcdOperationRemoveHandler& aRemoveHandler,
+ CNcdGeneralManager& aGeneralManager,
+ MCatalogsSession& aSession )
+ :
+ CNcdBaseOperation( aGeneralManager, &aRemoveHandler, ECreateAccessPointOperation,
+ aSession )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNcdCreateAccessPointOperation::ConstructL(
+ HBufC* aAccessPointData )
+ {
+ DLTRACEIN( ( "" ) );
+
+ // Call ConstructL for the base class
+ CNcdBaseOperation::ConstructL();
+
+ iAccessPointData = aAccessPointData;
+
+ }