--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPProfileITCReceiver.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,278 @@
+// Copyright (c) 2007-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:
+// Name : sipprofileitcreceiver
+// Part of : SIP Profile Client
+// implementation
+// Version : 1.0
+// INCLUDE FILES
+//
+
+
+
+#include <s32mem.h>
+#include <eikenv.h>
+
+#include "SIPProfileITCReceiver.h"
+#include "SIPRemoteProfile.h"
+#include "sipconcreteprofile.h"
+#include "sipconcreteprofileobserver.h"
+#include "sipprofileslots.h"
+#include "sipprofilealrobserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITCReceiver* CSIPProfileITCReceiver::NewL(
+ RSIPProfile& aSipProfile, MSIPConcreteProfileObserver& aObserver)
+ {
+ CSIPProfileITCReceiver* self =
+ CSIPProfileITCReceiver::NewLC(aSipProfile, aObserver);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITCReceiver* CSIPProfileITCReceiver::NewLC(
+ RSIPProfile& aSipProfile, MSIPConcreteProfileObserver& aObserver)
+ {
+ CSIPProfileITCReceiver* self = new (ELeave)
+ CSIPProfileITCReceiver(aSipProfile, aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::CSIPProfileITCReceiver
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITCReceiver::CSIPProfileITCReceiver(
+ RSIPProfile& aSipProfile, MSIPConcreteProfileObserver& aObserver)
+ : CActive(EPriorityStandard),
+ iSip(aSipProfile),
+ iObserver(aObserver)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITCReceiver::ConstructL()
+ {
+ iITCMsgArgs.Set(ESipProfileItcArgSlots, &iIdsPckg);
+ Receive();
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::~CSIPProfileITCReceiver
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITCReceiver::~CSIPProfileITCReceiver()
+ {
+ CActive::Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::Receive
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITCReceiver::Receive()
+ {
+ if (!IsActive())
+ {
+ iSip.Receive(iITCMsgArgs, iStatus);
+ SetActive();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::RunL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITCReceiver::RunL()
+ {
+ TInt err = iStatus.Int();
+ TSIPProfileSlots ids = iIdsPckg();
+
+ if (err == KErrServerTerminated)
+ {
+ User::LeaveIfError(iSip.Connect());
+ }
+
+ Receive();
+
+ if (err == KErrNone)
+ {
+ IncomingEventL(ids);
+ }
+ else
+ {
+ ErrorOccuredL(err,ids);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CSIPProfileITCReceiver::RunError(TInt aError)
+ {
+ if (aError == KErrServerTerminated)
+ {
+ // to avoid infinite loop
+ return aError;
+ }
+ Receive();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITCReceiver::DoCancel()
+ {
+ iSip.CancelReceive();
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::IncomingEventL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITCReceiver::IncomingEventL(TSIPProfileSlots& aIds)
+ {
+ switch (aIds.iEventId)
+ {
+ case ESipProfileItcOpRegistered:
+ iObserver.RegistrationStatusChangedL(
+ aIds.iProfileId,
+ CSIPConcreteProfile::ERegistered,
+ aIds.iSlot1);
+ break;
+ case ESipProfileItcOpRegistrationError:
+ iObserver.ErrorOccurredL(
+ aIds.iProfileId,
+ CSIPConcreteProfile::ERegistrationInProgress,
+ aIds.iSlot1);
+ break;
+ case ESipProfileItcOpUnregistrationError:
+ iObserver.ErrorOccurredL(
+ aIds.iProfileId,
+ CSIPConcreteProfile::EUnregistrationInProgress,
+ aIds.iSlot1);
+ break;
+ case ESipProfileItcOpDeregistered:
+ iObserver.RegistrationStatusChangedL(
+ aIds.iProfileId,
+ CSIPConcreteProfile::EUnregistered,
+ 0);
+ break;
+ case ESipProfileItcOpProfileAdded:
+ case ESipProfileItcOpProfileAddedDefault:
+ iObserver.AddedL(aIds.iProfileId);
+ break;
+ case ESipProfileItcOpProfileUpdated:
+ iObserver.UpdatedL(aIds.iProfileId, aIds.iSlot1);
+ break;
+ case ESipProfileItcOpProfileRemoved:
+ iObserver.RemovedL(aIds.iProfileId);
+ break;
+ case ESipProfileItcOpIapAvailable:
+ if (iALRObserver)
+ {
+ iALRObserver->AlrEvent(
+ MSipProfileAlrObserver::EIapAvailable,
+ aIds.iProfileId,
+ aIds.iSlot1,
+ aIds.iSlot2);
+ }
+ break;
+ case ESipProfileItcOpMigrationStarted:
+ if (iALRObserver)
+ {
+ iALRObserver->AlrEvent(
+ MSipProfileAlrObserver::EMigrationStarted,
+ aIds.iProfileId,
+ aIds.iSlot1,
+ aIds.iSlot2);
+ }
+ break;
+ case ESipProfileItcOpMigrationCompleted:
+ if (iALRObserver)
+ {
+ iALRObserver->AlrEvent(
+ MSipProfileAlrObserver::EMigrationCompleted,
+ aIds.iProfileId,
+ aIds.iSlot1,
+ aIds.iSlot2);
+ }
+ break;
+ case ESipProfileItcOpALRError:
+ if (iALRObserver)
+ {
+ iALRObserver->AlrError(
+ aIds.iError,
+ aIds.iProfileId,
+ aIds.iSlot1,
+ aIds.iSlot2);
+ }
+ break;
+ case ESipProfileItcOpProfileForciblyDisabled:
+ {
+ iObserver.RegistrationStatusChangedL(
+ aIds.iProfileId,
+ CSIPConcreteProfile::EUnregistered,
+ aIds.iEventId);
+ break;
+ }
+ default:
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::ErrorOccuredL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITCReceiver::ErrorOccuredL(TInt aError, TSIPProfileSlots& aIds)
+ {
+ iObserver.ErrorOccurredL(aIds.iProfileId,
+ CSIPConcreteProfile::ERegistrationInProgress,
+ aError);
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITCReceiver::SetALRObserver
+// -----------------------------------------------------------------------------
+//
+TInt
+CSIPProfileITCReceiver::SetALRObserver(MSipProfileAlrObserver* aALRObserver)
+ {
+ if (aALRObserver && iALRObserver)
+ {
+ return KErrAlreadyExists;
+ }
+ iALRObserver = aALRObserver;
+ return KErrNone;
+ }