realtimenetprots/sipfw/SIP/ConnectionMgr/src/CNATTraversalNotIntegrated.cpp
changeset 0 307788aac0a8
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Name          : CNATTraversalNotIntegrated.h
       
    15 // Part of       : ConnectionMgr
       
    16 // Version       : SIP/5.0 
       
    17 //
       
    18 
       
    19 
       
    20 
       
    21 #include "CNATTraversalNotIntegrated.h"
       
    22 
       
    23 #include <sipnattraversalrequestobserver.h>
       
    24 
       
    25 
       
    26 const TInt KCompletionTime = 1;
       
    27 
       
    28 // -----------------------------------------------------------------------------
       
    29 // TPendingAsyncRequest::TPendingAsyncRequest
       
    30 // -----------------------------------------------------------------------------
       
    31 //
       
    32 TPendingAsyncRequest::TPendingAsyncRequest( 
       
    33     TDeltaTimerEntry aTimerEntry,
       
    34     TUint32 aIapId,
       
    35     MSIPNATTraversalRequestObserver& aObserver,
       
    36     TUint32 aRequestId ) :
       
    37     iTimerEntry( aTimerEntry ),
       
    38     iIapId( aIapId ),
       
    39     iObserver( aObserver ),
       
    40     iRequestId( aRequestId )
       
    41     {
       
    42     }  
       
    43 
       
    44 // -----------------------------------------------------------------------------
       
    45 // TPendingAsyncRequest::MatchRequestId
       
    46 // -----------------------------------------------------------------------------
       
    47 //    
       
    48 TBool TPendingAsyncRequest::MatchRequestId( TUint32 aRequestId ) const
       
    49     {
       
    50     return ( iRequestId == aRequestId );
       
    51     }
       
    52     
       
    53 // -----------------------------------------------------------------------------
       
    54 // TPendingAsyncRequest::MatchIapId
       
    55 // -----------------------------------------------------------------------------
       
    56 //    
       
    57 TBool TPendingAsyncRequest::MatchIapId( TUint32 aIapId ) const
       
    58     {
       
    59     return ( iIapId == aIapId );
       
    60     }
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 // CNATTraversalNotIntegrated::NewL
       
    64 // -----------------------------------------------------------------------------
       
    65 //
       
    66 CNATTraversalNotIntegrated* CNATTraversalNotIntegrated::NewL()
       
    67     {
       
    68     CNATTraversalNotIntegrated* self = 
       
    69         new ( ELeave ) CNATTraversalNotIntegrated;
       
    70     CleanupStack::PushL( self );
       
    71     self->ConstructL();    
       
    72     CleanupStack::Pop( self );
       
    73     return self;
       
    74     }
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // CNATTraversalNotIntegrated::~CNATTraversalNotIntegrated
       
    78 // -----------------------------------------------------------------------------
       
    79 //
       
    80 CNATTraversalNotIntegrated::~CNATTraversalNotIntegrated()
       
    81     {
       
    82     for ( TInt i = 0; i < iAsyncRequests.Count(); i++ )
       
    83 	    {
       
    84 	    if ( iAsyncCompletionTimer )
       
    85 	        {
       
    86 	        iAsyncCompletionTimer->Remove( iAsyncRequests[ i ].iTimerEntry );
       
    87 	        }
       
    88 	    }
       
    89 	iAsyncRequests.Close();
       
    90     delete iAsyncCompletionTimer;
       
    91     }
       
    92 
       
    93 // -----------------------------------------------------------------------------
       
    94 // CNATTraversalNotIntegrated::ResolvePublicAddrL
       
    95 // -----------------------------------------------------------------------------
       
    96 //
       
    97 TUint32 CNATTraversalNotIntegrated::ResolvePublicAddrL(
       
    98     TUint32 aIapId,
       
    99     RConnection& /*aConnection*/,
       
   100     const TInetAddr& /*aLocalAddr*/,
       
   101     const TDesC8& /*aDomain*/,
       
   102     RSocket& /*aUdpSocket*/,
       
   103     const TInetAddr& /*aNextHopAddr*/,
       
   104     MSIPNATBindingObserver* /*aBindingObserver*/,
       
   105     MSIPNATTraversalRequestObserver& aRequestObserver )
       
   106     {
       
   107     TUint32 requestId( NextRequestId() );
       
   108     AddAsyncRequestL( aIapId, aRequestObserver, requestId );
       
   109     return requestId;
       
   110     }
       
   111 
       
   112 // -----------------------------------------------------------------------------
       
   113 // CNATTraversalNotIntegrated::Cancel
       
   114 // -----------------------------------------------------------------------------
       
   115 //
       
   116 void CNATTraversalNotIntegrated::Cancel( TUint32 aRequestId )
       
   117     {
       
   118     TBool found( EFalse );
       
   119     for ( TInt i = 0; i < iAsyncRequests.Count() && !found; i++ )
       
   120 	    {
       
   121 	    TPendingAsyncRequest& request = iAsyncRequests[ i ];
       
   122 	    if ( request.MatchRequestId( aRequestId ) )
       
   123 	        {
       
   124 	        found = ETrue;
       
   125     	    iAsyncCompletionTimer->Remove( request.iTimerEntry );
       
   126     	    iAsyncRequests.Remove( i );
       
   127     	    iAsyncRequests.Compress();
       
   128 	        }
       
   129 	    }
       
   130     }
       
   131 
       
   132 // -----------------------------------------------------------------------------
       
   133 // CNATTraversalNotIntegrated::RefreshNATBindingL
       
   134 // -----------------------------------------------------------------------------
       
   135 //
       
   136 TBool CNATTraversalNotIntegrated::RefreshNATBindingL( 
       
   137     RSocket& /*aSocket*/,
       
   138     const MSIPNATBindingObserver* /*aBindingObserver*/ )
       
   139     {
       
   140     return EFalse;
       
   141     }
       
   142 
       
   143 // -----------------------------------------------------------------------------
       
   144 // CNATTraversalNotIntegrated::RefreshNATBindingL
       
   145 // -----------------------------------------------------------------------------
       
   146 //            
       
   147 TBool CNATTraversalNotIntegrated::RefreshNATBindingL(
       
   148     CSecureSocket& /*aSecureSocket*/,
       
   149     const MSIPNATBindingObserver* /*aBindingObserver*/ )
       
   150     {
       
   151     return EFalse;
       
   152     }
       
   153 
       
   154 // -----------------------------------------------------------------------------
       
   155 // CNATTraversalNotIntegrated::UpdateNextHop
       
   156 // -----------------------------------------------------------------------------
       
   157 //
       
   158 void CNATTraversalNotIntegrated::UpdateNextHop( 
       
   159     const TInetAddr& /*aNextHopAddr*/,
       
   160     const MSIPNATBindingObserver* /*aBindingObserver*/ )
       
   161     {
       
   162     }
       
   163 
       
   164 // -----------------------------------------------------------------------------
       
   165 // CNATTraversalNotIntegrated::SocketIdle
       
   166 // -----------------------------------------------------------------------------
       
   167 //
       
   168 void CNATTraversalNotIntegrated::SocketIdle( 
       
   169     TBool /*aIdle*/,
       
   170     RSocket& /*aSocket*/ )
       
   171     {
       
   172     }
       
   173 
       
   174 // -----------------------------------------------------------------------------
       
   175 // CNATTraversalNotIntegrated::SocketIdle
       
   176 // -----------------------------------------------------------------------------
       
   177 //     
       
   178 void CNATTraversalNotIntegrated::SocketIdle( 
       
   179     TBool /*aIdle*/,
       
   180     CSecureSocket& /*aSecureSocket*/ )
       
   181     {
       
   182     }
       
   183 
       
   184 // -----------------------------------------------------------------------------
       
   185 // CNATTraversalNotIntegrated::DataReceivedL
       
   186 // -----------------------------------------------------------------------------
       
   187 //       
       
   188 void CNATTraversalNotIntegrated::DataReceivedL( 
       
   189     const TDesC8& /*aData*/,
       
   190     const RSocket& /*aUdpSocket*/,
       
   191     TBool& aHandled )
       
   192     {
       
   193     aHandled = EFalse;
       
   194     }
       
   195 
       
   196 // -----------------------------------------------------------------------------
       
   197 // CNATTraversalNotIntegrated::FreeResources
       
   198 // -----------------------------------------------------------------------------
       
   199 //
       
   200 void CNATTraversalNotIntegrated::FreeResources( TUint32 aIapId )
       
   201     {
       
   202     TInt lastIndex( iAsyncRequests.Count() - 1 );
       
   203     for ( TInt i = lastIndex; i >= 0; i-- )
       
   204 	    {
       
   205 	    TPendingAsyncRequest& request = iAsyncRequests[ i ];
       
   206 	    if ( request.MatchIapId( aIapId ) )
       
   207 	        {
       
   208     	    iAsyncCompletionTimer->Remove( request.iTimerEntry );
       
   209     	    iAsyncRequests.Remove( i );
       
   210     	    iAsyncRequests.Compress();
       
   211 	        }
       
   212 	    }
       
   213     }
       
   214 
       
   215 // -----------------------------------------------------------------------------
       
   216 // CNATTraversalNotIntegrated::FreeResources
       
   217 // -----------------------------------------------------------------------------
       
   218 //
       
   219 void CNATTraversalNotIntegrated::FreeResources( 
       
   220     MSIPNATBindingObserver& /*aBindingObserver*/ )
       
   221     {
       
   222     }
       
   223 
       
   224 // -----------------------------------------------------------------------------
       
   225 // CNATTraversalNotIntegrated::CompletionCallback
       
   226 // -----------------------------------------------------------------------------
       
   227 //
       
   228 TInt CNATTraversalNotIntegrated::CompletionCallback( TAny* aAny )
       
   229 	{
       
   230 	CNATTraversalNotIntegrated* self = 
       
   231 	    reinterpret_cast< CNATTraversalNotIntegrated* >( aAny );
       
   232 
       
   233     if ( self )
       
   234         {
       
   235         self->CompletePendingAsyncRequest();
       
   236         }
       
   237     
       
   238 	return KErrNone;
       
   239 	}
       
   240 
       
   241 // -----------------------------------------------------------------------------
       
   242 // CNATTraversalNotIntegrated::ConstructL
       
   243 // -----------------------------------------------------------------------------
       
   244 //	
       
   245 void CNATTraversalNotIntegrated::ConstructL()
       
   246     {
       
   247     iAsyncCompletionTimer = CDeltaTimer::NewL( CActive::EPriorityStandard );  
       
   248     } 
       
   249 
       
   250 // -----------------------------------------------------------------------------
       
   251 // CNATTraversalNotIntegrated::CNATTraversalNotIntegrated
       
   252 // -----------------------------------------------------------------------------
       
   253 //
       
   254 CNATTraversalNotIntegrated::CNATTraversalNotIntegrated()
       
   255     {
       
   256     }
       
   257 
       
   258 // -----------------------------------------------------------------------------
       
   259 // CNATTraversalNotIntegrated::AddAsyncRequestL
       
   260 // -----------------------------------------------------------------------------
       
   261 //    
       
   262 void CNATTraversalNotIntegrated::AddAsyncRequestL( 
       
   263     TUint32 aIapId,
       
   264     MSIPNATTraversalRequestObserver& aRequestObserver,
       
   265     TUint32 aRequestId )
       
   266     {
       
   267     TCallBack callback( CompletionCallback, this );	
       
   268 	TDeltaTimerEntry entry( callback );
       
   269 	
       
   270 	TPendingAsyncRequest request( entry, 
       
   271 	                              aIapId,
       
   272 	                              aRequestObserver,
       
   273 	                              aRequestId );
       
   274 	
       
   275 	iAsyncRequests.AppendL( request );
       
   276 	
       
   277     iAsyncCompletionTimer->Queue( 
       
   278         KCompletionTime, 
       
   279         iAsyncRequests[ iAsyncRequests.Count() - 1 ].iTimerEntry );    
       
   280     }
       
   281 
       
   282 // -----------------------------------------------------------------------------
       
   283 // CNATTraversalNotIntegrated::CompletePendingAsyncRequest
       
   284 // -----------------------------------------------------------------------------
       
   285 //       
       
   286 void CNATTraversalNotIntegrated::CompletePendingAsyncRequest()
       
   287     {
       
   288     if ( iAsyncRequests.Count() > 0 )
       
   289         {
       
   290 	    TPendingAsyncRequest& request = iAsyncRequests[ 0 ];
       
   291     	iAsyncCompletionTimer->Remove( request.iTimerEntry );
       
   292     	
       
   293     	TUint32 requestId = request.iRequestId;
       
   294     	MSIPNATTraversalRequestObserver& observer = request.iObserver;
       
   295 	    iAsyncRequests.Remove( 0 );
       
   296 	    iAsyncRequests.Compress();
       
   297 	    
       
   298     	observer.RequestComplete( requestId, KErrNone );
       
   299 	    }
       
   300     }
       
   301     
       
   302 // -----------------------------------------------------------------------------
       
   303 // CNATTraversalNotIntegrated::NextRequestId
       
   304 // -----------------------------------------------------------------------------
       
   305 //
       
   306 TUint32 CNATTraversalNotIntegrated::NextRequestId()
       
   307 	{
       
   308     if ( iRequestIdCounter == KMaxTUint32 )
       
   309 		{
       
   310 		iRequestIdCounter = 1;
       
   311 		}
       
   312 	else
       
   313 		{
       
   314 		iRequestIdCounter++;
       
   315 		}
       
   316 	return iRequestIdCounter;
       
   317 	}
       
   318 
       
   319 // End of file