multimediacommsengine/mmceshared/src/mcecomendpoint.cpp
changeset 0 1bce908db942
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2005 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 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 #include "mcecomendpoint.h"
       
    22 #include "mceserial.h"
       
    23 #include "mceevents.h"
       
    24 #include "mcecommediastream.h"
       
    25 #include "mcecomendpointproxy.h"
       
    26 
       
    27 #ifdef MCE_COMMON_SERVER_SIDE
       
    28 
       
    29 #include "mcemediaobserver.h"
       
    30 
       
    31 #else
       
    32 
       
    33 #include "mce.h"
       
    34 #include "mceitcsender.h"
       
    35 
       
    36 #endif
       
    37 
       
    38 // ============================ MEMBER FUNCTIONS ===============================
       
    39 
       
    40 
       
    41 // -----------------------------------------------------------------------------
       
    42 // CMceComEndpoint::~CMceComEndpoint
       
    43 // -----------------------------------------------------------------------------
       
    44 //
       
    45 CMceComEndpoint::~CMceComEndpoint()
       
    46     {
       
    47     iParents.Close();
       
    48     
       
    49 #ifndef MCE_COMMON_SERVER_SIDE
       
    50     delete iItcSender;
       
    51 #endif
       
    52     }
       
    53     
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // CMceComEndpoint::CMceComEndpoint
       
    57 // -----------------------------------------------------------------------------
       
    58 //
       
    59 CMceComEndpoint::CMceComEndpoint( TMceEndpointCategory aCategory, TUint8 aType )
       
    60   : iCategory( aCategory ),
       
    61     iType( aType ),
       
    62     iID( TMceMediaId( (TUint32)&iID ) ),
       
    63     iIsEnabled( ETrue )
       
    64     {
       
    65     }
       
    66 
       
    67 // -----------------------------------------------------------------------------
       
    68 // CMceComEndpoint::Category
       
    69 // -----------------------------------------------------------------------------
       
    70 //
       
    71 TMceEndpointCategory CMceComEndpoint::Category() const
       
    72     {
       
    73     return iCategory;
       
    74     }
       
    75     
       
    76 // -----------------------------------------------------------------------------
       
    77 // CMceComEndpoint::Type
       
    78 // -----------------------------------------------------------------------------
       
    79 //
       
    80 TUint8 CMceComEndpoint::Type() const
       
    81     {
       
    82     return iType;
       
    83     }    
       
    84 
       
    85 // -----------------------------------------------------------------------------
       
    86 // CMceComEndpoint::IsEnabled
       
    87 // -----------------------------------------------------------------------------
       
    88 //
       
    89 TBool CMceComEndpoint::IsEnabled( TBool /*aLocally*/ ) const
       
    90     {
       
    91     return iIsEnabled;
       
    92     }
       
    93     
       
    94     
       
    95 // -----------------------------------------------------------------------------
       
    96 // CMceComEndpoint::Enabled
       
    97 // -----------------------------------------------------------------------------
       
    98 //
       
    99 void CMceComEndpoint::Enabled( TBool aValue )
       
   100     {
       
   101     iIsEnabled = aValue;
       
   102     }
       
   103 
       
   104     
       
   105 // -----------------------------------------------------------------------------
       
   106 // CMceComEndpoint::CreateEndpointProxyL
       
   107 // -----------------------------------------------------------------------------
       
   108 //
       
   109 MMceComEndPointProxy* CMceComEndpoint::EndpointProxy() const
       
   110     {
       
   111     return iEndpointProxy;
       
   112     }
       
   113 
       
   114 // -----------------------------------------------------------------------------
       
   115 // CMceComEndpoint::CreateEndpointProxyL
       
   116 // -----------------------------------------------------------------------------
       
   117 //
       
   118 MMceComEndPointProxy* CMceComEndpoint::CreateEndpointProxyL() const
       
   119     {
       
   120     return NULL;
       
   121     }
       
   122 
       
   123 // -----------------------------------------------------------------------------
       
   124 // CMceComEndpoint::UsesEndpointProxy
       
   125 // -----------------------------------------------------------------------------
       
   126 //
       
   127 TBool CMceComEndpoint::UsesEndpointProxy() const
       
   128     {
       
   129     return EFalse;
       
   130     }
       
   131     
       
   132 // -----------------------------------------------------------------------------
       
   133 // CMceComEndpoint::SetupEndpointProxyL
       
   134 // -----------------------------------------------------------------------------
       
   135 //
       
   136 void CMceComEndpoint::SetupEndpointProxyL( MMceComEndPointProxy* aEndpointProxy )
       
   137     {
       
   138     if ( !UsesEndpointProxy() )
       
   139         {
       
   140         return;
       
   141         }
       
   142         
       
   143     if ( !aEndpointProxy && !iEndpointProxy )
       
   144         {
       
   145         iEndpointProxy = CreateEndpointProxyL();
       
   146         iEndpointProxy->AddProxyClientL( *this );
       
   147         }
       
   148     else if ( aEndpointProxy && !iEndpointProxy )
       
   149         {
       
   150         aEndpointProxy->AddProxyClientL( *this );
       
   151         iEndpointProxy = aEndpointProxy;
       
   152         }
       
   153     else
       
   154         {
       
   155         iEndpointProxy->AddProxyClientL( *this );
       
   156         }
       
   157         
       
   158     }
       
   159     
       
   160 // -----------------------------------------------------------------------------
       
   161 // CMceComEndpoint::SerializationId
       
   162 // -----------------------------------------------------------------------------
       
   163 //
       
   164 TUint64 CMceComEndpoint::SerializationId() const
       
   165     {
       
   166     return iID.Uint64();
       
   167     }
       
   168 
       
   169     
       
   170 // -----------------------------------------------------------------------------
       
   171 // CMceComEndpoint::InternalizeFlatL
       
   172 // -----------------------------------------------------------------------------
       
   173 //
       
   174 void CMceComEndpoint::InternalizeFlatL( RReadStream& aReadStream )
       
   175     {
       
   176     //iType, needs to be first value to internalize
       
   177     iType = aReadStream.ReadUint8L();
       
   178     //iCategory
       
   179     iCategory = aReadStream.ReadUint8L();
       
   180     //iID
       
   181     MceSerial::DecodeL( iID, aReadStream );
       
   182     //iIsEnabled
       
   183     iIsEnabled = static_cast<TBool>( aReadStream.ReadUint8L() );
       
   184         
       
   185     }
       
   186     
       
   187 // -----------------------------------------------------------------------------
       
   188 // CMceComEndpoint::ExternalizeFlatL
       
   189 // -----------------------------------------------------------------------------
       
   190 //
       
   191 void CMceComEndpoint::ExternalizeFlatL( RWriteStream& aWriteStream )
       
   192     {
       
   193     //iType, needs to be first value to externalize
       
   194 	aWriteStream.WriteUint8L( iType );
       
   195 	//iCategory
       
   196     aWriteStream.WriteUint8L( iCategory ); 
       
   197     //iID
       
   198     MceSerial::EncodeL( iID, aWriteStream );
       
   199     //iIsEnabled
       
   200 	aWriteStream.WriteUint8L( iIsEnabled );
       
   201     
       
   202     }
       
   203 
       
   204 
       
   205 // -----------------------------------------------------------------------------
       
   206 // CMceComEndpoint::InternalizeL
       
   207 // -----------------------------------------------------------------------------
       
   208 //
       
   209 void CMceComEndpoint::InternalizeL( MMceComSerializationContext& aSerCtx )
       
   210     {
       
   211     InternalizeFlatL( aSerCtx.ReadStream() );
       
   212     }
       
   213 
       
   214 // -----------------------------------------------------------------------------
       
   215 // CMceComEndpoint::ExternalizeL
       
   216 // -----------------------------------------------------------------------------
       
   217 //
       
   218 void CMceComEndpoint::ExternalizeL( MMceComSerializationContext& aSerCtx )
       
   219     {
       
   220     ExternalizeFlatL( aSerCtx.WriteStream() );
       
   221     }
       
   222 
       
   223 
       
   224 // -----------------------------------------------------------------------------
       
   225 // CMceComEndpoint::BaseFactory
       
   226 // -----------------------------------------------------------------------------
       
   227 //
       
   228 TMceComFactory CMceComEndpoint::BaseFactory()
       
   229     {
       
   230     return TMceComFactory();
       
   231     }
       
   232 
       
   233         
       
   234 // -----------------------------------------------------------------------------
       
   235 // CMceComEndpoint::Id
       
   236 // -----------------------------------------------------------------------------
       
   237 //
       
   238 TMceMediaId CMceComEndpoint::Id() const
       
   239     {
       
   240     return iID;
       
   241     }
       
   242 
       
   243 
       
   244 // -----------------------------------------------------------------------------
       
   245 // CMceComEndpoint::ReferenceCount
       
   246 // -----------------------------------------------------------------------------
       
   247 //
       
   248 TInt& CMceComEndpoint::ReferenceCount()
       
   249     {
       
   250     return iReferenceCount;
       
   251     }
       
   252 
       
   253 // -----------------------------------------------------------------------------
       
   254 // CMceComEndpoint::InitializeL
       
   255 // -----------------------------------------------------------------------------
       
   256 //
       
   257 void CMceComEndpoint::InitializeL( CMceComMediaStream& aParent )
       
   258     {
       
   259     StreamAddedL( aParent );
       
   260     iStream = iParents[0];
       
   261     
       
   262     }
       
   263 
       
   264 // -----------------------------------------------------------------------------
       
   265 // CMceComEndpoint::StreamAddedL
       
   266 // -----------------------------------------------------------------------------
       
   267 //
       
   268 void CMceComEndpoint::StreamAddedL( CMceComMediaStream& aParent )
       
   269     {
       
   270     
       
   271     if ( iParents.Find( &aParent ) == KErrNotFound )
       
   272         {
       
   273         iParents.AppendL( &aParent );
       
   274         }
       
   275     
       
   276     }
       
   277 
       
   278 // -----------------------------------------------------------------------------
       
   279 // CMceComEndpoint::UnInitialize
       
   280 // -----------------------------------------------------------------------------
       
   281 //
       
   282 void CMceComEndpoint::UnInitialize( CMceComMediaStream& aParent )
       
   283     {
       
   284     TInt index = iParents.Find( &aParent );
       
   285     if ( index >= 0 )
       
   286         {
       
   287         iParents.Remove( index );
       
   288         }
       
   289     iStream = NULL;
       
   290     
       
   291     if ( iParents.Count() > 0 )
       
   292         {
       
   293         iStream = iParents[0];
       
   294         }
       
   295     
       
   296     }
       
   297 
       
   298 
       
   299 // -----------------------------------------------------------------------------
       
   300 // CMceComEndpoint::MediaStream
       
   301 // -----------------------------------------------------------------------------
       
   302 //
       
   303 CMceComMediaStream* CMceComEndpoint::MediaStream() const
       
   304     {
       
   305     return iStream;
       
   306     }
       
   307 
       
   308 // -----------------------------------------------------------------------------
       
   309 // CMceComEndpoint::operator==
       
   310 // -----------------------------------------------------------------------------
       
   311 //
       
   312 TBool CMceComEndpoint::operator==( const CMceComEndpoint& aEndpoint ) const
       
   313     {
       
   314     return Id() == aEndpoint.Id();
       
   315     }
       
   316 
       
   317 
       
   318 // -----------------------------------------------------------------------------
       
   319 // CMceComEndpoint::Zero
       
   320 // -----------------------------------------------------------------------------
       
   321 //
       
   322 void CMceComEndpoint::Zero()
       
   323     {
       
   324     iStream = NULL;
       
   325     iReferenceCount = 0;
       
   326     iParents = RPointerArray<CMceComMediaStream>( KMceArrayGranularity );
       
   327     }
       
   328 
       
   329 
       
   330 // -----------------------------------------------------------------------------
       
   331 // CMceComEndpoint::BaseUpdateL
       
   332 // -----------------------------------------------------------------------------
       
   333 //
       
   334 void CMceComEndpoint::BaseUpdateL( CMceComEndpoint& aEndpoint )
       
   335     {
       
   336     iCategory = aEndpoint.iCategory;
       
   337     iType = aEndpoint.iType;
       
   338     iID = aEndpoint.iID;
       
   339     iIsEnabled = aEndpoint.iIsEnabled;
       
   340     //if updating data only (orphan endpoint)
       
   341     iReferenceCount = aEndpoint.iReferenceCount > 0 ? 
       
   342                                 aEndpoint.iReferenceCount : iReferenceCount;
       
   343     
       
   344     }
       
   345 
       
   346 // -----------------------------------------------------------------------------
       
   347 // CMceComEndpoint::Reusable
       
   348 // -----------------------------------------------------------------------------
       
   349 //
       
   350 TBool CMceComEndpoint::Reusable( const CMceComMediaStream& /*aParent*/ ) const
       
   351     {
       
   352     return ETrue;
       
   353     }
       
   354 
       
   355 // -----------------------------------------------------------------------------
       
   356 // CMceComEndpoint::UseRTCP
       
   357 // -----------------------------------------------------------------------------
       
   358 //
       
   359 TBool CMceComEndpoint::UseRTCP()
       
   360     {
       
   361     return ETrue;
       
   362     }
       
   363     
       
   364 #ifdef MCE_COMMON_SERVER_SIDE
       
   365 
       
   366 // -----------------------------------------------------------------------------
       
   367 // CMceComEndpoint::InitParamL
       
   368 // -----------------------------------------------------------------------------
       
   369 //
       
   370 const TDesC8& CMceComEndpoint::InitParamL( const CMceComCodec& /*aCodec*/ )
       
   371     {
       
   372     return KNullDesC8;
       
   373     }
       
   374 
       
   375 // -----------------------------------------------------------------------------
       
   376 // CMceComEndpoint::InitializedL
       
   377 // -----------------------------------------------------------------------------
       
   378 //
       
   379 void CMceComEndpoint::InitializedL()
       
   380     {
       
   381     //NOP
       
   382     }
       
   383     
       
   384 // -----------------------------------------------------------------------------
       
   385 // CMceComEndpoint::EnableL
       
   386 // -----------------------------------------------------------------------------
       
   387 //
       
   388 void CMceComEndpoint::EnableL( const CMceComCodec& /*aCodec*/ )
       
   389     {
       
   390     //NOP
       
   391     }
       
   392 
       
   393 // -----------------------------------------------------------------------------
       
   394 // CMceComEndpoint::DisableL
       
   395 // -----------------------------------------------------------------------------
       
   396 //
       
   397 void CMceComEndpoint::DisableL()
       
   398     {
       
   399     //NOP
       
   400     }
       
   401 
       
   402 // -----------------------------------------------------------------------------
       
   403 // CMceComEndpoint::PrepareL
       
   404 // -----------------------------------------------------------------------------
       
   405 //    
       
   406 void CMceComEndpoint::PrepareL()
       
   407     {
       
   408     // NOP
       
   409     }
       
   410 
       
   411 // -----------------------------------------------------------------------------
       
   412 // CMceComEndpoint::EventReceived
       
   413 // -----------------------------------------------------------------------------
       
   414 //
       
   415 void CMceComEndpoint::EventReceived( TMceMccComEvent& aEvent )
       
   416     {
       
   417     
       
   418     CMceComSession* session = MediaStream()->Session();
       
   419     
       
   420     switch( aEvent.iEvent )
       
   421         {
       
   422         case KMccStreamPrepared:
       
   423             {
       
   424             TInt err = DoPrepared();
       
   425             if ( err != KErrNone )
       
   426                 {
       
   427                 aEvent.iError = err;
       
   428                 session->MediaObserver().MediaError( aEvent );
       
   429                 }
       
   430             break;
       
   431             }
       
   432         case KMccStreamPaused:
       
   433         case KMccStreamResumed:
       
   434             {
       
   435             aEvent.iItcEvent = EMceItcStateChanged;
       
   436             aEvent.iItcData = static_cast<TUint32>( iIsEnabled );
       
   437             session->MediaObserver().EventReceived( aEvent );
       
   438             break;
       
   439             }
       
   440         case KMccInactivityEvent:
       
   441             {
       
   442             aEvent.iItcEvent = EMceItcInactivityTimeout;
       
   443             aEvent.iItcData = MediaStream()->iState;
       
   444             session->MediaObserver().EventReceived( aEvent );
       
   445             break;
       
   446             }
       
   447         case KMccStreamError:
       
   448             {
       
   449             aEvent.iItcEvent = EMceItcInProgress;
       
   450             
       
   451             aEvent.iItcData = 
       
   452                 MCE_ENCODE_DOUBLE_STATE( MediaStream()->iState, iIsEnabled );
       
   453 
       
   454             session->MediaObserver().MediaError( aEvent );
       
   455             break;
       
   456             }
       
   457         case KMccRtcpReceived:
       
   458         case KMccDtmfReceived:
       
   459         case KMccDtmfControl:
       
   460             {
       
   461             aEvent.iItcEvent = EMceItcNotAssigned;
       
   462             switch( aEvent.iEventSubType )
       
   463                 {
       
   464                 case KRtcpSrPacket:
       
   465                     {
       
   466                     aEvent.iItcEvent = EMceItcSRReceived;
       
   467                     break;
       
   468                     }
       
   469                 case KRtcpRrPacket:
       
   470                     {
       
   471                     aEvent.iItcEvent = EMceItcRRReceived;
       
   472                     break;
       
   473                     }
       
   474                 case KRtcpPacketUndefined:
       
   475                     {
       
   476                     aEvent.iItcEvent = EMceItcFCMsgReceived;
       
   477                     break;
       
   478                     }
       
   479                 case KMccDtmfManualStart:
       
   480                 case KMccDtmfSequenceStart:
       
   481                     {
       
   482                     aEvent.iItcEvent = EMceItcDtmfSendStarted;
       
   483                     break;
       
   484                     }
       
   485                 case KMccDtmfManualStop:
       
   486                 case KMccDtmfSequenceStop:
       
   487                 case KMccDtmfStopInDtmfString:
       
   488                 case KMccDtmfSendingComplete:
       
   489                     {
       
   490                     aEvent.iItcEvent = EMceItcDtmfSendCompleted;
       
   491                     break;
       
   492                     }
       
   493                 case KMccDtmfManualAbort:
       
   494                 case KMccDtmfSequenceAbort:
       
   495                     {
       
   496                     aEvent.iItcEvent = EMceItcDtmfSendError;
       
   497                     break;
       
   498                     }
       
   499                 default:
       
   500                     {
       
   501                     //NOP
       
   502                     break;
       
   503                     }
       
   504                 }
       
   505             if ( aEvent.iItcEvent != EMceItcNotAssigned )
       
   506                 {
       
   507                 aEvent.iItcData = MediaStream()->iState;
       
   508                 session->MediaObserver().EventReceived( aEvent );
       
   509                 }
       
   510             break;
       
   511             }
       
   512         case KMccStreamIdle:
       
   513         case KMccStreamPlaying:
       
   514         case KMccStreamStarted:
       
   515         case KMccStreamBuffering:
       
   516         case KMccStreamStopped:
       
   517         case KMccStreamClosed:
       
   518         case KMccResourceNotAvailable:
       
   519         case KMccActivityEvent:
       
   520         case KMccResourceReserved:
       
   521         case KMccResourceReleased:
       
   522             {
       
   523             aEvent.iItcEvent = EMceItcInProgress;
       
   524             aEvent.iItcData = 
       
   525                 MCE_ENCODE_DOUBLE_STATE( MediaStream()->iState, iIsEnabled );    
       
   526         
       
   527             session->MediaObserver().EventReceived( aEvent );
       
   528             break;
       
   529             }
       
   530         default:
       
   531             {
       
   532             //NOP
       
   533             break;
       
   534             }
       
   535                 
       
   536         }
       
   537         
       
   538     }
       
   539     
       
   540 
       
   541 // -----------------------------------------------------------------------------
       
   542 // CMceComEndpoint::Merge
       
   543 // -----------------------------------------------------------------------------
       
   544 //
       
   545 void CMceComEndpoint::Merge( CMceComEndpoint& aMergeWith )
       
   546     {
       
   547     if ( !MediaStream()->DowngradedEndpoints() )
       
   548         {
       
   549         iIsEnabled = aMergeWith.iIsEnabled;
       
   550         }
       
   551     }
       
   552     
       
   553 // -----------------------------------------------------------------------------
       
   554 // CMceComEndpoint::SetState
       
   555 // -----------------------------------------------------------------------------
       
   556 //
       
   557 void CMceComEndpoint::SetState( TMceMccComEvent& aEvent )
       
   558     {
       
   559 
       
   560     switch( aEvent.iEvent )
       
   561         {
       
   562         case KMccStreamResumed:
       
   563         case KMccStreamStarted:
       
   564             {
       
   565             iIsEnabled = ETrue;
       
   566             break;
       
   567             }
       
   568         case KMccStreamStopped:
       
   569         case KMccStreamPaused:
       
   570         case KMccStreamError:
       
   571             {
       
   572             iIsEnabled = EFalse;
       
   573             break;
       
   574             }
       
   575         case KMccResourceNotAvailable:
       
   576             {
       
   577             if ( aEvent.iSource || aEvent.iSink )
       
   578                 {
       
   579                 iIsEnabled = EFalse;
       
   580                 }
       
   581             break;
       
   582             }
       
   583         default:
       
   584             {
       
   585             //NOP
       
   586             break;
       
   587             }
       
   588         }
       
   589     }
       
   590 
       
   591 // -----------------------------------------------------------------------------
       
   592 // CMceComEndpoint::DoPrepared
       
   593 // -----------------------------------------------------------------------------
       
   594 //
       
   595 TInt CMceComEndpoint::DoPrepared()
       
   596     {
       
   597     return KErrNone;
       
   598     }
       
   599     
       
   600 #else // MCE CLIENT SIDE
       
   601 
       
   602 // -----------------------------------------------------------------------------
       
   603 // CMceComEndpoint::SenderL
       
   604 // -----------------------------------------------------------------------------
       
   605 //
       
   606 CMceItcSender& CMceComEndpoint::SenderL( RMce& aItcProvider )
       
   607     {
       
   608     if ( !iItcSender )
       
   609         {
       
   610         iItcSender = CMceItcSender::NewL( aItcProvider );
       
   611         }
       
   612     return *iItcSender;
       
   613     }
       
   614 #endif//MCE_COMMON_SERVER_SIDE