diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/inc/mcesipconnection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcesipconnection.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,359 @@ +/* +* 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 CMCESIPCONNECTION_H +#define CMCESIPCONNECTION_H + +#include +#include +#include + +#include "mcesrv.h" + +// FORWARD DECLARATION + +// CLASS DECLARATION +class CSIPProfile; +class CSIPConnection; +class CMceCsSubSession; +class CMceSipManager; +class CMceLocalAddrResolver; +class CSIPProfileRegistry; + +/** +* MCE SIP Connection. +* +* @lib +* @since +*/ +class CMceSipConnection : public CBase, + public MSIPConnectionObserver + { + +public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aSessionManager, reference to session manager + * @param aProfile, reference to profile. + */ + static CMceSipConnection* NewLC ( CMceSipManager& aSessionManager, + CSIPProfile& aProfile, + CSIPProfileRegistry& aProfileRegistry ); + + /** + * Two-phased constructor. + * @param aSessionManager, reference to session manager + * @param aIAPId, access point id to be used. + */ + static CMceSipConnection* NewLC ( CMceSipManager& aSessionManager, TUint32 aIAPId ); + + /** + * Destructor. + */ + ~CMceSipConnection(); + + +public: //New + + /** + * return access point id + * + * @return return access point id + */ + TUint32 AccessPointId() const; + + /** + * State of connection + * + * @State of connection + */ + CSIPConnection::TState State() const; + + /** + * return connection + * + * @return connection + */ + CSIPConnection& Connection() const; + + /** + * Numbers of sessions + * + * @param + * @return number of sessions attached to this connection + */ + TBool IsProfileUsedInSession( CSIPProfile& aProfile ); + + /** + * Attach session to this connection + * Leaves, if SIP connection is not active or + * session is allready attached + * @param aSession session + */ + void AttachL( CMceCsSubSession& aSession ); + + /** + * De-Attach session to this connection + * + * @param aSession session + * @return number of sessions attached to this connection + */ + TInt Detach( CMceCsSubSession& aSession ); + + /** + * Gets local IP address of the connection + * + * @return local IP address + */ + TInetAddr LocalIPAddressL(TInetAddr* aNextHop); + + /** + * Gets IP address of IAP + * + * @return IP address + */ + static TInetAddr IPAddressL( TUint32 aIapId ); + + /** + * Sets signalling type of service for connection if profile is + * not used. + * @param aSignallingTypeOfService + */ + void UpdateConnectionL( TUint aSignallingTypeOfService ); + +public: // from MSIPConnectionObserver + + + /** + * A SIP request outside a dialog has been received from the network. + * + * @pre aTransaction != 0 + * @param aTransaction SIP server transaction. The ownership is + * transferred. + */ + void IncomingRequest (CSIPServerTransaction* + aTransaction); + + /** + * A SIP request within a dialog has been received from the network. + * The client must resolve the actual dialog association to which + * this request belongs. + * + * @pre aTransaction != 0 + * @param aTransaction SIP server transaction. The ownership is + * transferred. + * @param aDialog the dialog that this transaction belongs to. + */ + void IncomingRequest (CSIPServerTransaction* aTransaction, + CSIPDialog& aDialog); + + /** + * A SIP response received from the network. + * + * @param aTransaction contains response elements. + */ + void IncomingResponse (CSIPClientTransaction& + aTransaction); + + /** + * A SIP response received from the network that is within a dialog + * association or creates a dialog association. + * + * @param aTransaction contains response elements. + * @param aDialogAssoc a dialog association. + */ + void IncomingResponse ( + CSIPClientTransaction& aTransaction, + CSIPDialogAssocBase& aDialogAssoc); + + /** + * Multiple SIP responses have been received to the single INVITE due + * to the forking proxy. Note that each response creates a separate + * INVITE dialog association. + * Multiple responses can arrive until SIP stack completes UAC core + * INVITE transaction. + * If clients deletes INVITE transaction after first SIP response + * other possible responses will be consumed by the implementation. + * + * @param aTransaction contains response elements + * @param aDialogAssoc INVITE dialog association; the ownership is + * transferred + */ + void IncomingResponse ( + CSIPClientTransaction& aTransaction, + CSIPInviteDialogAssoc* aDialogAssoc); + + /** + * A SIP response related a registration binding or an error response + * that is related to registration binding has been received + * from the network. + * + * @param aTransaction contains response elements + * @param aRegistration registration binding this transaction belongs to + */ + void + IncomingResponse (CSIPClientTransaction& aTransaction, + CSIPRegistrationBinding& aRegistration); + + /** + * An asynchronous error has occurred in the stack related to the + * request indicated by the given transaction. + * + * @param aError system wide or SIP error code + * @param aTransaction failed transaction + * @param aSIPConnection a SIP connection + */ + void ErrorOccured (TInt aError, + CSIPTransactionBase& aTransaction); + + /** + * An asynchronous error has occurred in the stack related + * to the request indicated by the given transaction. + * + * @param aError system wide or SIP error code + * @param aTransaction the failed transaction + * @param aRegistration the failed registration binding + */ + void ErrorOccured (TInt aError, + CSIPClientTransaction& aTransaction, + CSIPRegistrationBinding& aRegistration); + + /** + * An asynchronous error has occured related to a request within + * an existing dialog. + * + * @param aError system wide or SIP error code + * @param aTransaction the failed transaction. + * @param aDialogAssoc the failed dialog associoation. + */ + void ErrorOccured ( + TInt aError, + CSIPTransactionBase& aTransaction, + CSIPDialogAssocBase& aDialogAssoc); + + /** + * An asynchronous error has occured related to a refresh + * + * @param aError system wide or SIP error code + * @param aSIPRefresh original refresh object. + */ + void ErrorOccured (TInt aError, CSIPRefresh& aSIPRefresh); + + /** + * An asynchronous error has occured related to a periodical refresh + * that relates to a registration. + * + * @param aError system wide or SIP error code; + * KErrCouldNotConnect if the refresh has failed + * due to the suspended connection. + * @param aRegistration associated registration binding + */ + void ErrorOccured (TInt aError, + CSIPRegistrationBinding& aRegistration); + + /** + * An asynchronous error has occured related to a periodical refresh + * that belongs to SIP dialog association. + * + * @param aError system wide or SIP error code; + * KErrCouldNotConnect if the refresh has failed + * due to the suspended connection. + * @param aDialogAssoc SIP dialog association. + */ + void ErrorOccured (TInt aError, + CSIPDialogAssocBase& aDialogAssoc); + + /** + * SIP stack has completed UAC core INVITE transaction 64*T1 seconds + * after the reception of the first 2xx response. No more 2xx responses + * can be received to the issued single INVITE. + * + * If the INVITE transaction does not create a dialog, or the INVITE + * transaction encounters an error, this event will not be sent. + * + * @param aTransaction a complete UAC core INVITE transaction + */ + void InviteCompleted (CSIPClientTransaction& aTransaction); + + /** + * Invite was canceled with the CANCEL + * @param aTransaction a canceled INVITE UAS transaction + */ + void InviteCanceled (CSIPServerTransaction& aTransaction); + + /** + * Connection state has changed. + * If connection state has changed to EInactive or EUnavailable, + * SIP stack has removed all stand-alone SIP refreshes, registrations + * and dialog associations that client requested to refresh. Client may + * re-issue refresh requests (stand-alone, registration or dialog + * association related) when connection becomes EActive again. + * SIP stack also terminates all pending SIP client transactions and no + * errors are reported back to the client about the terminated + * transactions nor about removed refreshes in order to avoid event + * flood. + * + * @param aState indicates the current connection state + */ + void ConnectionStateChanged (CSIPConnection::TState aState); + +private: + + CMceSipConnection ( CMceSipManager& aSessionManager, + CSIPProfile& aProfile ); + + CMceSipConnection ( CMceSipManager& aSessionManager, + TUint32 aIAPId ); + void ConstructL ( CSIPProfile& aProfile, CSIPProfileRegistry& aProfileRegistry ); + + void ConstructL ( ); + + void Reject ( CSIPInviteDialogAssoc* aDialogAssoc ); + + void FillWithMatchingAddrFamily( TInetAddr& aAddr, + const TInetAddr* aNextHop ); + +private: // Data + + TUint32 iIAPId; + + CSIPConnection* iClientConnection; + + CMceLocalAddrResolver* iLocalAddrResolver; + + TUint iCurrentSignallingTypeOfService; + +private: //NOT owned data + + + RPointerArray iSessions; + + CMceSipManager& iSessionManager; + + //definitions for unit testing + MCESRV_UT_DEFINITIONS + + + }; + +#endif + +// End of File