simpleengine/siputils/inc/simplesipconnectionobserver.h
changeset 0 c8caa15ef882
child 17 2669f8761a99
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpleengine/siputils/inc/simplesipconnectionobserver.h	Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,367 @@
+/*
+* Copyright (c) 2006-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:    Implementation of MSIPConnectionObserver.
+*
+*/
+
+
+
+
+#ifndef CSimpleSipConnectionObserver_H
+#define CSimpleSipConnectionObserver_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <sipconnectionobserver.h>
+
+#include "simplecommon.h"
+
+
+// FORWARD DECLARATIONS
+class CSIPRegistrationBinding;
+class CSIPClientTransaction;
+class MSimpleSipConnCallback;
+class CSIPDialogAssocBase;
+class CSIPInviteDialogAssoc;
+class MSimpleEngineRequest;
+
+#ifdef _DEBUG
+#ifdef __LOCAL_MODE
+// INTERNAL TEST SUITE
+class CSimpleLocalModeUtils;
+#endif
+#endif
+
+
+/**
+ * Implementation of MSIPConnectionObserver.
+ *
+ * @lib simplesiputils
+ * since S60 3.2
+ */
+class CSimpleSipConnectionObserver: public CBase,
+                                    public MSIPConnectionObserver
+    {
+
+public:
+
+    /**
+     * Two phase constructore
+     * @param aCallback status observer
+     */
+    static CSimpleSipConnectionObserver* NewL( MSimpleSipConnCallback& aCallback );
+    
+    /**
+     * destructor
+     */
+    virtual ~CSimpleSipConnectionObserver();    
+
+public: 
+
+    /**
+     * SIP state accesor
+     *
+     * since S60 3.2     
+     * @return SIP state
+     */    
+    TSimpleSipState SIPState();
+            
+    /**
+     * SIP Profile state has changed.
+     *
+     * since S60 3.2      
+     * @param aState indicates the current profile state
+     * @param aSipError SIP error code
+     */
+    void ProfileStateChanged( 
+        CSIPConnection::TState aState, TInt aSipError );   
+    
+    /**
+     * SIP Profile has updated. 
+     * 
+     * @see MSIPProfileRegistryObserver::EProfileUpdated
+     * @since S60 3.2.3
+     */
+    void ProfileUpdated();
+
+// from base class MSIPConnectionObserver
+
+    /**
+     * A SIP request outside a dialog has been received from the network.
+     * @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.
+     * @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 that is within a dialog association or creates
+     * a dialog association.
+     * @param aTransaction contains response elements.
+     * The ownership is transferred.
+     * @param aDialogAssoc a dialog association
+     */
+    void IncomingResponse(
+        CSIPClientTransaction& aTransaction,
+        CSIPDialogAssocBase& aDialogAssoc );
+
+    /**
+     * A SIP response that is within a Invite association or creates
+     * a dialog association.
+     * @param aTransaction contains response elements.
+     * The ownership is transferred.
+     * @param aDialogAssoc a dialog association
+     */
+    void IncomingResponse(
+        CSIPClientTransaction& aTransaction,
+        CSIPInviteDialogAssoc* aDialogAssoc );
+
+    /**
+     * A SIP response creating a registration binding or an error response
+     * that is related to an refreshed registration binding
+     * has been received from the network.
+     * @param aTransaction contains response elements.
+     * The ownership is transferred.
+     * @param aSIPRegistration associated registration
+     */
+    void IncomingResponse(
+        CSIPClientTransaction& aTransaction,
+        CSIPRegistrationBinding& aRegistration );
+
+    /**
+     * An asynchronous error has occured related to a periodical refresh
+     * that relates to a registration.
+     * @param aError error code
+     * @param aSIPRegistration associated registration
+     */
+    void ErrorOccured(
+        TInt aError,
+        CSIPRegistrationBinding& aRegistration );
+    /**
+     * An asynchronous error has occurred in the stack related
+     * to the request indicated by the given transaction.
+     * @param aError error code
+     * @param aTransaction the failed transaction
+     * @param aRegistration the failed registration
+     */
+    void ErrorOccured(
+        TInt aError,
+        CSIPClientTransaction& aTransaction,
+        CSIPRegistrationBinding& aRegistration );
+
+    /**
+     * An asynchronous error has occurred in the stack related to the
+     * request indicated by the given transaction.
+     * @param aError error code
+     * @param aTransaction failed transaction
+     */
+    void ErrorOccured(
+        TInt aError,
+        CSIPTransactionBase& aTransaction );
+
+    /**
+     * An asynchronous error has occured related to a request within
+     * an existing dialog.
+     * @param aError 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 error code
+     * @param aSIPRefresh original refresh object
+     */
+    void ErrorOccured(
+        TInt aError,
+        CSIPRefresh& aRefresh );
+
+    /**
+     * An asynchronous error has occured related to a periodical refresh
+     * that belongs to SIP dialog association.
+     * @param aError error code
+     * @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.
+     *
+     * @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.
+     * @param aState indicates the current connection state
+     */
+    void ConnectionStateChanged( CSIPConnection::TState aState );
+     
+
+protected:
+
+    /**
+     * Two-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Default constructor
+     * @param aCallback status observer
+     */
+    CSimpleSipConnectionObserver( MSimpleSipConnCallback& aCallback );
+
+private:
+
+    /**
+     * Handle Server request data content
+     */
+    void DoHandleSrvrReqContentL(
+        const CSIPMessageElements& aElems,
+        MSimpleEngineRequest& aR );
+    
+    /**
+     * A SIP request outside a dialog has been received from the network.
+     *
+     * since S60 5.0
+     * @param aTransaction SIP server transaction
+     * The ownership is transferred.
+     */
+    void DoIncomingRequestL( 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.
+     * @param aTransaction SIP server transaction
+     * The ownership is transferred.
+     * @param aDialog the dialog  that
+     *        this transaction belongs to.
+     */
+    void DoIncomingRequestL(
+        CSIPServerTransaction* aTransaction,
+        CSIPDialog& aDialog );
+        
+    /**
+     * A SIP response received from the network.
+     * @param aTransaction contains response elements.
+     */
+    void DoIncomingResponse( CSIPClientTransaction& aTransaction );
+    
+    /**
+     * A SIP response that is within a dialog association or creates
+     * a dialog association.
+     * @param aTransaction contains response elements.
+     * The ownership is transferred.
+     * @param aDialogAssoc a dialog association
+     */
+    void DoIncomingResponse(
+        CSIPClientTransaction& aTransaction,
+        CSIPDialogAssocBase& aDialogAssoc );
+            
+    /**
+     * Convert Sip error code to the S60 error code
+     * @param aSip SIP error code
+     * @param aRetryAfter wheter retry-after header is available
+     * @param aPublishModify wheteer publish modify request
+     * @return S60 error code
+     */
+    TInt ConvertSipCode( TUint aSip, TBool aRetryAfter, TBool aPublishModify ); 
+    
+    /**
+     * Convert Sip publish modify error code to the S60 error code
+     * @param aSip SIP error code
+     * @return S60 error code
+     */
+    TInt ConvertSipModifyCode( TUint aSip );    
+    
+    /**
+     * Get retry-after SIP header value
+     * @param aElems
+     * @return retry-after value
+     */
+    TUint GetRetryAfter( const CSIPResponseElements* aElems );
+    
+    /**
+     * Connection state has changed.
+     *
+     * since S60 3.2      
+     * @param aState indicates the current connection state
+     * @param aSipError SIP error code
+     */
+    void ConnectionStateChanged2( 
+        CSIPConnection::TState aState, TInt aSipError );    
+	                       
+
+private: // data
+
+    /**
+     * callback observer
+     */
+    MSimpleSipConnCallback& iCallback;
+    
+    /**
+     * Error code from network
+     */
+    TInt iError;
+    
+    
+#ifdef _DEBUG
+#ifdef __LOCAL_MODE
+    /**
+     * INTERNAL TEST SUITE
+     * Own.
+     */
+    CSimpleLocalModeUtils* iLocalModeUtils;
+#endif
+#endif        
+
+#ifdef _DEBUG
+    friend class T_CSimpleSipConnectionObserver;
+#endif   
+    };
+
+#endif