natplugins/natpnatfwsdpprovider/src/nspmediastreamcomponent.cpp
changeset 0 1bce908db942
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2007 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:  Media stream component class implementation
       
    15 *
       
    16 */
       
    17 
       
    18 #include "natfwcandidate.h"
       
    19 #include "natfwcandidatepair.h"
       
    20 #include "mnatfwsocketmediaconnwrapper.h"
       
    21 #include "nspsessionobserver.h"
       
    22 #include "nspmediastreamcomponent.h"
       
    23 #include "nspnatfwasyncstate.h"
       
    24 #include "nspcontrollerif.h"
       
    25 #include "nspdefs.h"
       
    26 
       
    27 const TUint KNSPFetchCandTimerInMicros = 7000000; // 7 seconds
       
    28 const TUint KNSPRtcpComponentId = 2;
       
    29 
       
    30 #define TOINETADDR_L( aDesc, aPort ) ConvertTDesC8ToTInetAddrL( aDesc, aPort )
       
    31 #define NATFWRECEIVING_L( aCand, aState ) \
       
    32 	iController.SetReceivingStateL( aCand, aState )
       
    33 #define NATFWSENDING_L( aCand, aState ) \
       
    34 	iController.SetSendingStateL( aCand, aState, iRemoteAddress, iRemotePort )
       
    35 
       
    36 
       
    37 // ======== MEMBER FUNCTIONS ========
       
    38 // ---------------------------------------------------------------------------
       
    39 // CNSPMediaStreamComponent::CNSPMediaStreamComponent
       
    40 // ---------------------------------------------------------------------------
       
    41 //
       
    42 CNSPMediaStreamComponent::CNSPMediaStreamComponent( MNSPControllerIF& aController,
       
    43         TUint aSessionId, TUint aCollectionId, TUint aComponentId )
       
    44     : iController( aController ),
       
    45       iSessionId( aSessionId ),
       
    46       iCollectionId( aCollectionId ),
       
    47       iComponentId( aComponentId )
       
    48     {
       
    49     }
       
    50 
       
    51 
       
    52 // ---------------------------------------------------------------------------
       
    53 // CNSPMediaStreamComponent::ConstructL
       
    54 // ---------------------------------------------------------------------------
       
    55 //
       
    56 void CNSPMediaStreamComponent::ConstructL( const TDesC8& aAddress, TUint aPort,
       
    57         TUint aProtocol, TUint aMediaTos )
       
    58     {
       
    59     TInetAddr addr = TOINETADDR_L( aAddress, aPort );
       
    60     iAddrFamily = addr.Family();
       
    61     
       
    62     iStreamId = iController.CreateStreamL( 
       
    63         iSessionId, aProtocol, static_cast<TInt>( aMediaTos ) );
       
    64     iWrapper = &iController.CreateWrapperL( iSessionId, iStreamId );
       
    65     
       
    66     iWrapper->SetIncomingAddrL( addr );
       
    67     iWrapper->SetReceivingStateL( EStreamingStateActive );
       
    68     iWrapper->SetSendingStateL( EStreamingStateActive );
       
    69     
       
    70     iState = CNSPNATFWAsyncState::NewL();
       
    71     iRemoteAddress.Assign( KNullDesC8().AllocL() );
       
    72     }
       
    73 
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 // CNSPMediaStreamComponent::NewL
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 CNSPMediaStreamComponent* CNSPMediaStreamComponent::NewL(
       
    80         MNSPControllerIF& aController, TUint aSessionId,
       
    81         TUint aCollectionId, TUint aComponentId, const TDesC8& aAddress,
       
    82         TUint aPort, TUint aProtocol, TUint aMediaTos )
       
    83     {
       
    84     CNSPMediaStreamComponent* self = CNSPMediaStreamComponent::NewLC(
       
    85             aController, aSessionId, aCollectionId, aComponentId,
       
    86             aAddress, aPort, aProtocol, aMediaTos );
       
    87     CleanupStack::Pop( self );
       
    88     return self;
       
    89     }
       
    90 
       
    91 
       
    92 // ---------------------------------------------------------------------------
       
    93 // CNSPMediaStreamComponent::NewLC
       
    94 // ---------------------------------------------------------------------------
       
    95 //
       
    96 CNSPMediaStreamComponent* CNSPMediaStreamComponent::NewLC(
       
    97         MNSPControllerIF& aController, TUint aSessionId, TUint aCollectionId,
       
    98         TUint aComponentId, const TDesC8& aAddress, TUint aPort,
       
    99         TUint aProtocol, TUint aMediaTos )
       
   100     {
       
   101     CNSPMediaStreamComponent* self = new ( ELeave ) CNSPMediaStreamComponent(
       
   102             aController, aSessionId, aCollectionId, aComponentId );
       
   103     CleanupStack::PushL( self );
       
   104     self->ConstructL( aAddress, aPort, aProtocol, aMediaTos );
       
   105     return self;
       
   106     }
       
   107 
       
   108 
       
   109 // ---------------------------------------------------------------------------
       
   110 // CNSPMediaStreamComponent::~CNSPMediaStreamComponent
       
   111 // ---------------------------------------------------------------------------
       
   112 //
       
   113 CNSPMediaStreamComponent::~CNSPMediaStreamComponent()
       
   114     {
       
   115     iRemoteAddress.Close();
       
   116     iWrapper = NULL;
       
   117     delete iState;
       
   118     delete iCandidatePair;
       
   119     iLocalCandidates.ResetAndDestroy();
       
   120     iLocalCandidates.Close();
       
   121     iController.Cancel( iTimerTransactionId );
       
   122     TRAP_IGNORE( iController.CloseStreamL( iSessionId, iStreamId ) )
       
   123     }
       
   124 
       
   125 // ---------------------------------------------------------------------------
       
   126 // CNSPMediaStreamComponent::ControlMediaL
       
   127 // ---------------------------------------------------------------------------
       
   128 //
       
   129 TNatReturnStatus CNSPMediaStreamComponent::ControlMediaL(
       
   130 		MNATFWConnectivityObserver::TNATFWConnectivityEvent aEvent,
       
   131 		TInt aError, TAny* aData )
       
   132 	{
       
   133     NSPLOG_STR( "CNSPMediaStreamComponent::ControlMediaL(), Entry" )
       
   134     
       
   135     TNatReturnStatus status = KNatAsync;
       
   136     
       
   137     switch ( aEvent )
       
   138     	{
       
   139     	case MNATFWConnectivityObserver::ELocalCandidateFound:
       
   140     		{
       
   141     		iLocalCandidates.AppendL( reinterpret_cast<CNATFWCandidate*>(aData) );
       
   142     		break;
       
   143     		}
       
   144     	
       
   145     	case MNATFWConnectivityObserver::ECandidatePairFound:
       
   146     		{
       
   147     	    delete iCandidatePair;
       
   148     	    iCandidatePair = reinterpret_cast<CNATFWCandidatePair*>(aData);
       
   149     		break;
       
   150     		}
       
   151     	
       
   152         case MNATFWConnectivityObserver::EReceivingActivated:
       
   153             {
       
   154             status = HandleReceivingActivated( aError );
       
   155             break;
       
   156             }
       
   157         
       
   158         case MNATFWConnectivityObserver::ESendingActivated:
       
   159             {
       
   160             status = HandleSendingActivated( aError );
       
   161             break;
       
   162             }
       
   163         
       
   164         case MNATFWConnectivityObserver::EFetchingCompleted:
       
   165             {
       
   166             status = HandleFetchingCompleted( aError );
       
   167             break;
       
   168             }
       
   169         
       
   170         case MNATFWConnectivityObserver::EConnChecksCompleted:
       
   171             {
       
   172             status = HandleConnChecksCompleted( aError );
       
   173             break;
       
   174             }
       
   175         
       
   176         case MNATFWConnectivityObserver::EReceivingDeactivated:
       
   177             {
       
   178             status = HandleReceivingDeActivated( aError );
       
   179             break;
       
   180             }
       
   181         
       
   182         case MNATFWConnectivityObserver::ESendingDeactivated:
       
   183             {
       
   184             status = HandleSendingDeActivated( aError );
       
   185             break;
       
   186             }
       
   187         
       
   188         case MNATFWConnectivityObserver::EGeneralError:
       
   189         	{
       
   190         	status = ErrorOccurred( aError );
       
   191         	break;
       
   192         	}
       
   193         
       
   194         case MNATFWConnectivityObserver::ESessionCreated:
       
   195         default:
       
   196             {
       
   197             User::Leave( KErrNotReady );
       
   198             }
       
   199     	}
       
   200     
       
   201     NSPLOG_INT( "CNSPMediaStreamComponent::ControlMediaL(), Exit, status", status )
       
   202     return status;
       
   203 	}
       
   204 
       
   205 
       
   206 // ---------------------------------------------------------------------------
       
   207 // CNSPMediaStreamComponent::ResetAndDestroyCandidates
       
   208 // ---------------------------------------------------------------------------
       
   209 //
       
   210 void CNSPMediaStreamComponent::ResetAndDestroyCandidates()
       
   211     {
       
   212     iLocalCandidates.ResetAndDestroy();
       
   213     }
       
   214 
       
   215 
       
   216 // ---------------------------------------------------------------------------
       
   217 // CNSPMediaStreamComponent::FetchCandidateL
       
   218 // ---------------------------------------------------------------------------
       
   219 //
       
   220 void CNSPMediaStreamComponent::FetchCandidateL()
       
   221     {
       
   222     iState->CheckStateL( CNSPNATFWAsyncState::ENATFWEventFetchCand );
       
   223     
       
   224     iController.FetchCandidateL( iSessionId, iStreamId, iAddrFamily );
       
   225     iTimerTransactionId = iController.OrderTimeoutL( iSessionId, iStreamId,
       
   226             MNATFWConnectivityObserver::EFetchingCompleted,
       
   227             KNSPFetchCandTimerInMicros );
       
   228     
       
   229     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventFetchCand );
       
   230     }
       
   231 
       
   232 
       
   233 // ---------------------------------------------------------------------------
       
   234 // CNSPMediaStreamComponent::FetchCandidatesL
       
   235 // ---------------------------------------------------------------------------
       
   236 //
       
   237 void CNSPMediaStreamComponent::FetchCandidatesL()
       
   238     {
       
   239     iState->CheckStateL( CNSPNATFWAsyncState::ENATFWEventFetchCand );
       
   240     
       
   241     iController.FetchCandidatesL( iSessionId,
       
   242             iStreamId, iCollectionId, iComponentId, iAddrFamily );
       
   243     iTimerTransactionId = iController.OrderTimeoutL( iSessionId, iStreamId,
       
   244             MNATFWConnectivityObserver::EFetchingCompleted,
       
   245             KNSPFetchCandTimerInMicros );
       
   246     
       
   247     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventFetchCand );
       
   248     }
       
   249 
       
   250 
       
   251 // ---------------------------------------------------------------------------
       
   252 // CNSPMediaStreamComponent::PerformCandidateChecksL
       
   253 // ---------------------------------------------------------------------------
       
   254 //
       
   255 void CNSPMediaStreamComponent::PerformCandidateChecksL()
       
   256     {
       
   257     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventPerformChecks );
       
   258     }
       
   259 
       
   260 
       
   261 // ---------------------------------------------------------------------------
       
   262 // CNSPMediaStreamComponent::ActivateL
       
   263 // ---------------------------------------------------------------------------
       
   264 //
       
   265 void CNSPMediaStreamComponent::ActivateL( const TDesC8& aAddress, TUint aPort )
       
   266     {
       
   267     iState->CheckStateL( CNSPNATFWAsyncState::ENATFWEventRecvAct );
       
   268     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventRecvDeAct );
       
   269     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventSendDeAct );
       
   270     
       
   271     iRemoteAddress.Close();
       
   272     iRemoteAddress.Assign( aAddress.AllocL() );
       
   273     iRemotePort = aPort;
       
   274     
       
   275     __ASSERT_ALWAYS( iLocalCandidates.Count(), User::Leave( KErrNotReady ) );
       
   276     NATFWRECEIVING_L( *iLocalCandidates[0], EStreamingStateActive );
       
   277     NATFWSENDING_L( *iLocalCandidates[0], EStreamingStateActive );
       
   278     }
       
   279 
       
   280 
       
   281 // ---------------------------------------------------------------------------
       
   282 // CNSPMediaStreamComponent::ActivateL
       
   283 // ---------------------------------------------------------------------------
       
   284 //
       
   285 void CNSPMediaStreamComponent::ActivateL()
       
   286     {
       
   287     __ASSERT_ALWAYS( iCandidatePair, User::Leave( KErrNotReady ) );
       
   288     
       
   289     iState->CheckStateL( CNSPNATFWAsyncState::ENATFWEventRecvAct );    
       
   290     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventRecvDeAct );
       
   291     iState->ChangeStateL( CNSPNATFWAsyncState::ENATFWEventSendDeAct );
       
   292     
       
   293     iRemoteAddress.Close();
       
   294     iRemoteAddress.Assign( iCandidatePair->RemoteCandidate().TransportDomainAddr().AllocL() );
       
   295     iRemotePort = iCandidatePair->RemoteCandidate().TransportDomainPort();
       
   296     
       
   297     NATFWRECEIVING_L( iCandidatePair->LocalCandidate(), EStreamingStateActive );
       
   298     NATFWSENDING_L( iCandidatePair->LocalCandidate(), EStreamingStateActive );
       
   299     }
       
   300 
       
   301 
       
   302 // ---------------------------------------------------------------------------
       
   303 // CNSPMediaStreamComponent::DeActivateL
       
   304 // ---------------------------------------------------------------------------
       
   305 //
       
   306 void CNSPMediaStreamComponent::DeActivateL()
       
   307     {
       
   308     iState->CheckStateL( CNSPNATFWAsyncState::ENATFWEventRecvDeAct );
       
   309     
       
   310     __ASSERT_ALWAYS( iLocalCandidates.Count(), User::Leave( KErrNotReady ) );
       
   311     NATFWRECEIVING_L( *iLocalCandidates[0], EStreamingStatePassive );
       
   312     NATFWSENDING_L( *iLocalCandidates[0], EStreamingStatePassive );
       
   313     }
       
   314 
       
   315 
       
   316 // ---------------------------------------------------------------------------
       
   317 // CNSPMediaStreamComponent::RemoteAddress
       
   318 // ---------------------------------------------------------------------------
       
   319 //
       
   320 const TDesC8& CNSPMediaStreamComponent::RemoteAddress() const
       
   321     {
       
   322     return iRemoteAddress;
       
   323     }
       
   324 
       
   325 
       
   326 // ---------------------------------------------------------------------------
       
   327 // CNSPMediaStreamComponent::RemotePort
       
   328 // ---------------------------------------------------------------------------
       
   329 //
       
   330 TUint CNSPMediaStreamComponent::RemotePort() const
       
   331     {
       
   332     return iRemotePort;
       
   333     }
       
   334 
       
   335 
       
   336 // ---------------------------------------------------------------------------
       
   337 // CNSPMediaStreamComponent::StreamId
       
   338 // ---------------------------------------------------------------------------
       
   339 //
       
   340 TUint CNSPMediaStreamComponent::StreamId() const
       
   341     {
       
   342     return iStreamId;
       
   343     }
       
   344 
       
   345 
       
   346 // ---------------------------------------------------------------------------
       
   347 // CNSPMediaStreamComponent::ComponentId
       
   348 // ---------------------------------------------------------------------------
       
   349 //
       
   350 TUint CNSPMediaStreamComponent::ComponentId() const
       
   351     {
       
   352     return iComponentId;
       
   353     }
       
   354 
       
   355 
       
   356 // ---------------------------------------------------------------------------
       
   357 // CNSPMediaStreamComponent::LocalCandidates
       
   358 // ---------------------------------------------------------------------------
       
   359 //
       
   360 RPointerArray<CNATFWCandidate>& CNSPMediaStreamComponent::LocalCandidates()
       
   361     {
       
   362     return iLocalCandidates;
       
   363     }
       
   364 
       
   365 
       
   366 // ---------------------------------------------------------------------------
       
   367 // CNSPMediaStreamComponent::IceLocalCandidateL
       
   368 // ---------------------------------------------------------------------------
       
   369 //
       
   370 const CNATFWCandidate& CNSPMediaStreamComponent::IceLocalCandidateL()
       
   371     {
       
   372     __ASSERT_ALWAYS( iCandidatePair, User::Leave( KErrNotReady ) );
       
   373     return iCandidatePair->LocalCandidate();
       
   374     }
       
   375 
       
   376 
       
   377 // ---------------------------------------------------------------------------
       
   378 // CNSPMediaStreamComponent::IceRemoteCandidateL
       
   379 // ---------------------------------------------------------------------------
       
   380 //
       
   381 const CNATFWCandidate& CNSPMediaStreamComponent::IceRemoteCandidateL()
       
   382     {
       
   383     __ASSERT_ALWAYS( iCandidatePair, User::Leave( KErrNotReady ) );
       
   384     return iCandidatePair->RemoteCandidate();
       
   385     }
       
   386 
       
   387 
       
   388 // ---------------------------------------------------------------------------
       
   389 // CNSPMediaStreamComponent::OutgoingAddress
       
   390 // ---------------------------------------------------------------------------
       
   391 //
       
   392 TInt CNSPMediaStreamComponent::OutgoingAddress( TDes8& aAddress, TUint& aPort ) const
       
   393     {
       
   394     TInetAddr address;
       
   395     iWrapper->OutgoingAddr( address );
       
   396     TRAPD( error, ConvertTInetAddrToTDes8AndTUintL( address, aAddress, aPort ) );
       
   397     return error;
       
   398     }
       
   399 
       
   400 
       
   401 // ---------------------------------------------------------------------------
       
   402 // CNSPMediaStreamComponent::SetCredentialsL
       
   403 // ---------------------------------------------------------------------------
       
   404 //
       
   405 void CNSPMediaStreamComponent::SetCredentialsL( const CNATFWCredentials& aCredentials )
       
   406     {
       
   407     iController.SetCredentialsL( iSessionId, iStreamId, aCredentials );
       
   408     }
       
   409 
       
   410 
       
   411 // ---------------------------------------------------------------------------
       
   412 // CNSPMediaStreamComponent::AttachCandidateL
       
   413 // ---------------------------------------------------------------------------
       
   414 //
       
   415 TBool CNSPMediaStreamComponent::AttachCandidateL( CNATFWCandidate& aCandidate ) const
       
   416     {
       
   417     if ( aCandidate.ComponentId() == iComponentId )
       
   418         {
       
   419         aCandidate.SetStreamId( iStreamId );
       
   420         return ETrue;
       
   421         }
       
   422     
       
   423     return EFalse;
       
   424     }
       
   425 
       
   426 
       
   427 // ---------------------------------------------------------------------------
       
   428 // CNSPMediaStreamComponent::HandleReceivingActivated
       
   429 // ---------------------------------------------------------------------------
       
   430 //
       
   431 TNatReturnStatus CNSPMediaStreamComponent::HandleReceivingActivated(
       
   432         TInt aError )
       
   433     {
       
   434     TInt error = iState->CheckState( CNSPNATFWAsyncState::ENATFWEventRecvAct );
       
   435     
       
   436     if ( KErrNone == error && KErrNone == aError )
       
   437         {
       
   438         iState->ChangeState( CNSPNATFWAsyncState::ENATFWEventRecvAct );
       
   439         return Continue();
       
   440         }
       
   441     else if ( KErrNone == aError )
       
   442         {
       
   443         return ErrorOccurred( error );
       
   444         }
       
   445     else
       
   446         {
       
   447         return ErrorOccurred( aError );
       
   448         }
       
   449     }
       
   450 
       
   451 
       
   452 // ---------------------------------------------------------------------------
       
   453 // CNSPMediaStreamComponent::HandleSendingActivated
       
   454 // ---------------------------------------------------------------------------
       
   455 //
       
   456 TNatReturnStatus CNSPMediaStreamComponent::HandleSendingActivated(
       
   457         TInt aError )
       
   458     {
       
   459     TInt error = iState->CheckState( CNSPNATFWAsyncState::ENATFWEventSendAct );
       
   460     
       
   461     if ( KErrNone == error && KErrNone == aError )
       
   462         {
       
   463         iState->ChangeState( CNSPNATFWAsyncState::ENATFWEventSendAct );
       
   464         return Continue();
       
   465         }
       
   466     else if ( KErrNone == aError )
       
   467         {
       
   468         return ErrorOccurred( error );
       
   469         }
       
   470     else
       
   471         {
       
   472         return ErrorOccurred( aError );
       
   473         }
       
   474     }
       
   475 
       
   476 
       
   477 // ---------------------------------------------------------------------------
       
   478 // CNSPMediaStreamComponent::HandleReceivingDeActivated
       
   479 // ---------------------------------------------------------------------------
       
   480 //
       
   481 TNatReturnStatus CNSPMediaStreamComponent::HandleReceivingDeActivated(
       
   482         TInt aError )
       
   483     {
       
   484     TInt error = iState->CheckState( CNSPNATFWAsyncState::ENATFWEventRecvDeAct );
       
   485     
       
   486     if ( KErrNone == error && KErrNone == aError )
       
   487         {
       
   488         iState->ChangeState( CNSPNATFWAsyncState::ENATFWEventRecvDeAct );
       
   489         return Continue();
       
   490         }
       
   491     else if ( KErrNone == aError )
       
   492         {
       
   493         return ErrorOccurred( error );
       
   494         }
       
   495     else
       
   496         {
       
   497         return ErrorOccurred( aError );
       
   498         }
       
   499     }
       
   500 
       
   501 
       
   502 // ---------------------------------------------------------------------------
       
   503 // CNSPMediaStreamComponent::HandleSendingDeActivated
       
   504 // ---------------------------------------------------------------------------
       
   505 //
       
   506 TNatReturnStatus CNSPMediaStreamComponent::HandleSendingDeActivated(
       
   507         TInt aError )
       
   508     {
       
   509     TInt error = iState->CheckState( CNSPNATFWAsyncState::ENATFWEventSendDeAct );
       
   510     
       
   511     if ( KErrNone == error && KErrNone == aError )
       
   512         {
       
   513         iState->ChangeState( CNSPNATFWAsyncState::ENATFWEventSendDeAct );
       
   514         return Continue();
       
   515         }
       
   516     else if ( KErrNone == aError )
       
   517         {
       
   518         return ErrorOccurred( error );
       
   519         }
       
   520     else
       
   521         {
       
   522         return ErrorOccurred( aError );
       
   523         }
       
   524     }
       
   525 
       
   526 
       
   527 // ---------------------------------------------------------------------------
       
   528 // CNSPMediaStreamComponent::HandleFetchingCompleted
       
   529 // ---------------------------------------------------------------------------
       
   530 //
       
   531 TNatReturnStatus CNSPMediaStreamComponent::HandleFetchingCompleted( TInt aError )
       
   532     {
       
   533     iController.Cancel( iTimerTransactionId );
       
   534     
       
   535     TNatReturnStatus status = 
       
   536         ( KErrNone == aError ? Continue() : ErrorOccurred( aError ) );
       
   537     
       
   538     if ( iLocalCandidates.Count() )
       
   539         {
       
   540         const CNATFWCandidate& candidate = *iLocalCandidates[0];
       
   541         
       
   542         // local candidates are never in FQDN format
       
   543         if ( candidate.Type() == CNATFWCandidate::EServerReflexive &&
       
   544              candidate.Base().CmpAddr( candidate.TransportAddr() ) )
       
   545             {
       
   546             // we are not behind NAT, no need to proceed with NATFW
       
   547             NSPLOG_STR( 
       
   548                 "CNSPMediaStreamComponent::HandleFetchingCompleted, NO NAT" )
       
   549             status = KNatNonFatalErrorLimit;
       
   550             }
       
   551         }
       
   552     
       
   553     return status;
       
   554     }
       
   555 
       
   556 
       
   557 // ---------------------------------------------------------------------------
       
   558 // CNSPMediaStreamComponent::HandleConnChecksCompleted
       
   559 // ---------------------------------------------------------------------------
       
   560 //
       
   561 TNatReturnStatus CNSPMediaStreamComponent::HandleConnChecksCompleted( TInt aError )
       
   562     {
       
   563     return ( KErrNone == aError ? Continue() : ErrorOccurred( aError ) );
       
   564     }
       
   565 
       
   566 
       
   567 // ---------------------------------------------------------------------------
       
   568 // CNSPMediaStreamComponent::Continue
       
   569 // ---------------------------------------------------------------------------
       
   570 //
       
   571 TNatReturnStatus CNSPMediaStreamComponent::Continue()
       
   572     {
       
   573     return ( iState->Continue() ? KNatReady : KNatAsync );
       
   574     }
       
   575 
       
   576 
       
   577 // ---------------------------------------------------------------------------
       
   578 // CNSPMediaStreamComponent::ErrorOccurred
       
   579 // ---------------------------------------------------------------------------
       
   580 //
       
   581 TNatReturnStatus CNSPMediaStreamComponent::ErrorOccurred( TInt aError )
       
   582     {
       
   583     NSPLOG_INT( "CNSPMediaStreamComponent::ErrorOccurred():", aError )
       
   584     
       
   585     return ( KErrTimedOut == aError ||
       
   586     		 SuppressRtcpIcmp( aError ) ? Continue() : aError );
       
   587     }
       
   588 
       
   589 
       
   590 // ---------------------------------------------------------------------------
       
   591 // CNSPMediaStream::SuppressRtcpIcmp
       
   592 // ---------------------------------------------------------------------------
       
   593 //
       
   594 TBool CNSPMediaStreamComponent::SuppressRtcpIcmp( TInt aError ) const
       
   595 	{
       
   596 	return ( KNSPRtcpComponentId == iComponentId && NSP_ICMP( aError ) );
       
   597 	}
       
   598 
       
   599 
       
   600 // end of file