--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcesipmanager.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,318 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+
+
+
+#ifndef CMCESIPMANAGER_H
+#define CMCESIPMANAGER_H
+
+#include "mcesrv.h"
+#include "mceclientserver.h"
+#include "mcemediaobserver.h"
+#include "mceclientresolver.h"
+#include <es_sock.h>
+#include <sipobserver.h>
+#include <sipprofileregistryobserver.h>
+#include <e32base.h>
+
+// FORWARD DECLARATION
+class CSIP;
+class CSIPProfile;
+class CSIPHttpDigest;
+class CMceServerCore;
+class CMceSipConnection;
+class CMceCsSubSession;
+class CMceCsSessionImplementation;
+class CMceCsSession;
+class CMceMediaManager;
+class TMceIds;
+class CSIPProfileRegistry;
+class CSIPServerTransaction;
+class CSIPClientTransaction;
+class CSIPInviteDialogAssoc;
+class CSIPNotifyDialogAssoc;
+class CMceSipStateMachine;
+class CMceTimerManager;
+
+/**
+* This class provides life-cycle management of
+* SIP sessions and SIP events. It also acts as an
+* observer for SIP API, SIP Client resolver and
+* Media Mananger.
+*
+* @lib
+* @since
+*/
+class CMceSipManager : public CBase,
+ public MSIPObserver,
+ public MSIPProfileRegistryObserver,
+ public MMceMediaGeneralObserver,
+ public MMceClientResolverObserver
+ {
+public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aServerCore, reference to server core.
+ */
+ static CMceSipManager* NewL( CMceServerCore& aServerCore );
+
+ /**
+ * Two-phased constructor.
+ * @param aServerCore, reference to server core.
+ */
+ static CMceSipManager* NewLC( CMceServerCore& aServerCore );
+
+ /**
+ * Destructor.
+ */
+ ~CMceSipManager();
+
+public: // from MSIPObserver
+
+ /**
+ * A SIP request has been received from the network.
+ * @pre aTransaction != 0
+ * @param aIapId The IapId from which the SIP request was received.
+ * @param aTransaction contains local address, remote address of a SIP
+ * message, as well as optional SIP message method, headers and
+ * body. The ownership is transferred.
+ */
+ void IncomingRequest(TUint32 aIapId,
+ CSIPServerTransaction* aTransaction);
+
+ /**
+ * The received SIP request time-outed and it is invalid i.e. cannot be used
+ * anymore.
+ * This will be called if the user fails to create a SIP connection
+ * and does not send an appropriate SIP response.
+ * @param aTransaction The time-outed transaction.
+ */
+ void TimedOut(CSIPServerTransaction& aTransaction);
+
+
+public: // from MMceClientResolverObserver
+
+
+ /**
+ * Called when client discovery subsystem has resolved
+ * the client the transaction should go to
+ *
+ * @param aClientUid Client's uid
+ * @param aConnection the connection used
+ * @param aRequest the transaction
+ */
+ void IncomingResolvedRequest( TUid aClientUid,
+ CMceSipConnection& aConnection,
+ CSIPServerTransaction* aRequest );
+
+
+public: //from MSIPProfileRegistryObserver
+
+ /**
+ * An event related to SIP Profile has accorred
+ * @param aProfileId a profile Id
+ * @param aEvent an occurred event
+ **/
+ void ProfileRegistryEventOccurred(
+ TUint32 aProfileId,
+ MSIPProfileRegistryObserver::TEvent aEvent);
+
+ /**
+ * An asynchronous error has occurred related to SIP profile
+ * Event is send to those observers, who have the
+ * corresponding profile instantiated.
+ * @param aProfileId the id of failed profile
+ * @param aError an occurred error
+ */
+ void ProfileRegistryErrorOccurred(TUint32 aProfileId, TInt aError);
+
+public: // from MMceMediaGeneralObserver
+
+ /**
+ * Callback function to indicate about media error
+ * @param aError, error occured
+ */
+ void MediaError ( TInt aError );
+
+
+public: // New
+
+ /**
+ * Reserves new dialog id
+ * @return new dialog id
+ */
+ TUint32 NextDialogId();
+
+ /**
+ * Returns ETrue, if manager will consume the transaction
+ * @param aTransaction the pending transaction
+ * @return ETrue, if manager will consume the transaction
+ */
+ TBool Consumes( CSIPServerTransaction& aTransaction );
+
+ /**
+ * Registers a client
+ * @param aClientSession the client
+ */
+ void RegisterClientL( CMceCsSession& aClientSession );
+
+ /**
+ * Un-registers client
+ * @param aClientSession the client
+ */
+ void UnRegisterClient( CMceCsSession& aClientSession );
+
+ /**
+ * Creates outgoing (sub) session
+ * @param aClientSession the client
+ * @param aIds set of ids defining ITC call context
+ * @param aParams parameter for dialog
+ * @return sub session
+ */
+ CMceCsSubSession* CreateSubSessionL( CMceCsSession& aClientSession,
+ TMceIds& aIds,
+ CDesC8Array& aParams );
+
+ /**
+ * Creates incoming (sub) session
+ * @param aTransaction incoming request, which trigged creation
+ * @param aConnection SIP connection to which session will be attached
+ * @return sub session
+ */
+ void CreateSubSessionL( CSIPServerTransaction* aTransaction,
+ CMceSipConnection& aConnection );
+
+ /**
+ * Unregisters sub session
+ * @param aSubSession sub session
+ */
+ void UnRegisterSubSession( CMceCsSubSession& aSubSession );
+
+ /**
+ * Returns media mananger instance
+ * @return media mananger
+ */
+ CMceMediaManager& MediaManager();
+
+ /**
+ * Returns timer mananger instance
+ * @return timer mananger
+ */
+ CMceTimerManager& TimerManager();
+
+ /**
+ * Returns SIP client instance
+ * @return SIP client
+ */
+ CSIP& SIPClient();
+
+ /**
+ * Adds orphan sub session
+ * @param aSubSession sub session
+ */
+ void AddOrphanSubSessionL( CMceCsSubSession* aSubSession );
+
+ /*
+ * get Orphan Session's Count
+ * @return number of orphan subsessions.
+ */
+ TInt OrphanSubSessionCount();
+
+ /**
+ * Cleans up orphans sub sessions
+ */
+ void Cleanup();
+
+ /**
+ * Creates incoming sub session
+ * @param aTransaction incoming request, which trigged creation
+ * @param aClient resolved client
+ * @param aConnection IP connection to which session will be attached
+ */
+ void CreateSubSessionL( CSIPServerTransaction* aTransaction,
+ CMceCsSession& aClient,
+ CMceSipConnection& aConnection,
+ CMceCsSubSession* aAssocSession = NULL );
+
+ RSocketServ& SocketServ();
+
+private:
+
+ CMceSipManager (CMceServerCore& aServerCore);
+ void ConstructL ();
+ CSIPProfile& ProfileL( TUint32 aProfileId );
+ CSIPProfile& ProfileL( TUint32 aIapId,
+ const CUri8& aRequestUri );
+ CMceSipConnection& ConnectionL( CSIPProfile& aProfile );
+ CMceSipConnection& ConnectionL( TUint32 aIAPId );
+ TInt FindProfileById( RPointerArray<CSIPProfile>& aProfiles, TUint32 profileId );
+ TInt FindProfileByRequestUriL( RPointerArray<CSIPProfile>& aProfiles,
+ const CUri8& aRequestUri );
+
+ TUint32 ChannelL( CSIPServerTransaction& aRequest );
+
+ /**
+ * When a profile has been updated and its data has been read from Profile
+ * server to aNewProfile, update the sub sessions that point to the old
+ * profile instance, so that they will point to the new instance.
+ * @param aNewProfile Profile's current data
+ * @param aOldProfile Profile's data before it was updated
+ */
+ void UpdateProfileToSubSessions( CSIPProfile& aNewProfile,
+ CSIPProfile& aOldProfile );
+
+private: // NOT owned Data
+
+ //MCE server core
+ CMceServerCore& iServerCore;
+ //all clients registered to MCE server
+ RPointerArray<CMceCsSession> iClients;
+
+private: // Owned Data
+
+ //SIP connections
+ RPointerArray<CMceSipConnection> iSIPClientConnections;
+ //SIP instance
+ CSIP* iSIP;
+ //media manager
+ CMceMediaManager* iMediaManager;
+ //profile registry
+ CSIPProfileRegistry* iProfileRegistry;
+ //SIP session FSM
+ CMceSipStateMachine* iStateMachine;
+ //profiles in use
+ RPointerArray<CSIPProfile> iProfiles;
+ //next dialog id
+ TUint32 iNextDialogId;
+ //client resolver
+ CMceClientResolver* iClientResolver;
+ //orphan sub sessions
+ CMceCsSessionImplementation* iOrphanSubSessions;
+ //timer manager
+ CMceTimerManager* iTimerManager;
+ // Socket server handle
+ RSocketServ iSocketServ;
+
+ //definitions for unit testing
+ MCESRV_UT_DEFINITIONS
+ };
+
+#endif // CMCESIPMANAGER_H
+
+// End of File