realtimenetprots/sipfw/SIP/ConnectionMgr/src/COutgoingRequestQueue.h
changeset 0 307788aac0a8
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 /*
       
     2 * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 * Name        : COutgoingRequestQueue.h
       
    16 * Part of     : ConnectionMgr
       
    17 * See class definition below.
       
    18 * Version     : SIP/5.0
       
    19 *
       
    20 */
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 /**
       
    26  @internalComponent
       
    27 */
       
    28 
       
    29 #ifndef COUTGOINGREQUESTQUEUE_H
       
    30 #define COUTGOINGREQUESTQUEUE_H
       
    31   
       
    32 // INCLUDES
       
    33 #include <e32base.h>
       
    34 #include <stringpool.h>
       
    35 #include <sipnattraversalrequestobserver.h>
       
    36 
       
    37 #include "MSocketUsagePermissionObserver.h"
       
    38 #include "TOutgoingRequestQueueItem.h"
       
    39 
       
    40 // FORWARD DECLARATIONS
       
    41 class MOutgoingRequestQueueContext;
       
    42 class CSIPNATTraversalController;
       
    43 class TSIPTransportParams;
       
    44 class CSIPRequest;
       
    45 class CSIPMessage;
       
    46 class CSIPHeaderBase;
       
    47 class MSIPNATBindingObserver;
       
    48 class TInetAddr;
       
    49 class RConnection;
       
    50 class RSocket;
       
    51 class CUri8;
       
    52 
       
    53 // CLASS DEFINITION
       
    54 // 
       
    55 class COutgoingRequestQueue : public CBase, 
       
    56                               public MSIPNATTraversalRequestObserver,
       
    57                               public MSocketUsagePermissionObserver
       
    58     {
       
    59     public: // Constructor and destructor
       
    60         
       
    61         static COutgoingRequestQueue* NewL( 
       
    62                     MOutgoingRequestQueueContext& aContext,
       
    63                     CSIPNATTraversalController& aNATTraversal,
       
    64                     RConnection& aConnection,
       
    65                     TUint32 aIapId );
       
    66       
       
    67         ~COutgoingRequestQueue();
       
    68         
       
    69     public: // From MSIPNATTraversalRequestObserver
       
    70     
       
    71         void RequestComplete( TUint32 aRequestId, TInt aCompletionCode );
       
    72 		    
       
    73 		void PublicAddrResolved( TUint32 aRequestId, const TInetAddr& aPublicAddr );		
       
    74       
       
    75     public: // From MSocketUsagePermissionObserver
       
    76     
       
    77         void UsagePermissionChanged( RSocket& aSocket, TBool aPermissionToUse );  
       
    78     
       
    79     public: // New methods
       
    80     
       
    81         void NATTraverseL( const TSIPTransportParams& aParams,
       
    82                            CSIPRequest& aRequest,
       
    83                            TBool aForceUDP,
       
    84                            const TInetAddr& aAddr,
       
    85                            const CUri8* aOutboundProxy,
       
    86                            TUint aOrigTransport,
       
    87                            TRequestStatus& aStatus,
       
    88                            const TInetAddr& aLocalAddr );
       
    89                            
       
    90         void FreeResources( MSIPNATBindingObserver& aSIPNATBindingObserver );
       
    91         
       
    92         TBool CancelSend( TRequestStatus& aStatus );
       
    93                            
       
    94     private: // Private construction
       
    95         
       
    96         void ConstructL();
       
    97         
       
    98         COutgoingRequestQueue( MOutgoingRequestQueueContext& aContext,
       
    99                                CSIPNATTraversalController& aNATTraversal,
       
   100                                RConnection& aConnection,
       
   101                                TUint32 aIapId );
       
   102     
       
   103     private:
       
   104     
       
   105         void Update( TOutgoingRequestQueueItem& aItem, const TInetAddr& aPublicAddr );
       
   106         
       
   107         void Complete( TOutgoingRequestQueueItem& aItem, 
       
   108                        TInt aCompletionCode, 
       
   109                        TBool aPublicAddrResolved );
       
   110         
       
   111         void UpdateHeadersL( TOutgoingRequestQueueItem& aItem, 
       
   112                              const TInetAddr& aLocalAddr, 
       
   113                              const TInetAddr& aPublicAddr );
       
   114                              
       
   115         void UpdateContactHeaderL( CSIPMessage& aMessage,
       
   116                                    const TDesC8& aLocalAddr, 
       
   117                                    const TDesC8& aPublicAddr,
       
   118                                    TUint aPublicPort );
       
   119 
       
   120         void UpdateViaHeaderL( CSIPMessage& aMessage,
       
   121                                const TDesC8& aPublicAddr,
       
   122                                TUint aPublicPort );
       
   123                                    
       
   124         void HandleUsagePermissionChange( TOutgoingRequestQueueItem& aItem, 
       
   125                                           TBool aPermissionToUse );
       
   126                                           
       
   127         TBool HasRequestForSocket( RSocket& aSocket, TBool aFindPendingRequest );
       
   128         
       
   129         void CleanupFailedRequests();
       
   130         
       
   131         void ActivatePendingRequests();
       
   132         
       
   133         void IssueRequestL( TOutgoingRequestQueueItem& aItem );
       
   134         
       
   135         TInt FindRequestQueueItemIndex( TUint32 aRequestId ) const;
       
   136         
       
   137         void RemoveNATTraversalParameter( CSIPRequest& aRequest );
       
   138         
       
   139         TUint ContactPortL( CSIPRequest& aRequest, const TDesC8& aLocalAddr );
       
   140          
       
   141         static void ConvertToSIPURIRollBack(TAny* aDummy);
       
   142          
       
   143     private: // Data
       
   144     
       
   145         MOutgoingRequestQueueContext& iContext;
       
   146         
       
   147         CSIPNATTraversalController& iNATTraversal;
       
   148         
       
   149         RConnection& iConnection;
       
   150         
       
   151         TUint32 iIapId;
       
   152         
       
   153         TInetAddr iLocalAddr;
       
   154 
       
   155         RArray< TOutgoingRequestQueueItem > iRequestQueue;
       
   156         
       
   157         RStringF iStrNATTraversalRequired;
       
   158         
       
   159         
       
   160 #ifdef CPPUNIT_TEST
       
   161         friend class COutgoingRequestQueueTest;
       
   162 #endif
       
   163     
       
   164     };
       
   165     
       
   166 #endif // COUTGOINGREQUESTQUEUE_H