convergedcallengine/csplugin/src/cspetelconferencecallrequester.cpp
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
equal deleted inserted replaced
19:7d48bed6ce0c 20:987c9837762f
       
     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:  Contains the implementation of class 
       
    15 *                CSPEtelConferenceCallRequester.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #include <etelmm.h>
       
    21 #include <mccpconferencecallobserver.h>
       
    22 
       
    23 #include "cspetelconferencecallrequester.h"
       
    24 #include "csplogger.h"
       
    25 #include "cspconferencecall.h"
       
    26 
       
    27 
       
    28 // ---------------------------------------------------------------------------
       
    29 // Constructs the requester via two phased constructing.
       
    30 // ---------------------------------------------------------------------------
       
    31 //
       
    32 CSPEtelConferenceCallRequester* CSPEtelConferenceCallRequester::NewL(
       
    33             CSPConferenceCall& aOwner,
       
    34             RMobileConferenceCall& aCall ) 
       
    35     {
       
    36     CSPLOGSTRING(CSPOBJECT, "CSPEtelConferenceCallRequester::NewL()" );
       
    37     CSPEtelConferenceCallRequester* self = new ( ELeave ) CSPEtelConferenceCallRequester( 
       
    38                                         aOwner, aCall );
       
    39     CleanupStack::PushL( self );
       
    40     self->ConstructL();
       
    41     CleanupStack::Pop( self );
       
    42     return self;
       
    43     }
       
    44     
       
    45 // ---------------------------------------------------------------------------
       
    46 // Destructor of the object.
       
    47 // ---------------------------------------------------------------------------
       
    48 //
       
    49 CSPEtelConferenceCallRequester::~CSPEtelConferenceCallRequester( )
       
    50     {
       
    51     CSPLOGSTRING(CSPOBJECT, "CSPEtelConferenceCallRequester::~CSPEtelConferenceCallRequester()" );
       
    52     CSPLOGSTRING2(CSPINT, "CSPEtelConferenceCallRequester:: type: %d", iRequestType );
       
    53     Cancel();
       
    54     }
       
    55 
       
    56 // ---------------------------------------------------------------------------
       
    57 // CSPEtelConferenceCallRequester::MakeAddCallRequest
       
    58 // ---------------------------------------------------------------------------
       
    59 //
       
    60 TInt CSPEtelConferenceCallRequester::MakeAddCallRequest( const TName& aCallName )
       
    61     {
       
    62     if ( !IsActive() )
       
    63         {
       
    64         iRequestType = EConferenceRequestTypeAddCall;
       
    65         iCall.AddCall( iStatus, aCallName );
       
    66         SetActive();
       
    67         }
       
    68     else
       
    69         {
       
    70         return KErrInUse;
       
    71         }
       
    72     
       
    73     return KErrNone;
       
    74     }
       
    75 
       
    76 // ---------------------------------------------------------------------------
       
    77 // CSPEtelConferenceCallRequester::MakeRequest
       
    78 // ---------------------------------------------------------------------------
       
    79 //
       
    80 TInt CSPEtelConferenceCallRequester::MakeRequest( 
       
    81                                         TConferenceRequestType aRequest )
       
    82     {
       
    83     TInt result = KErrUnknown;
       
    84 
       
    85     if ( !IsActive() )
       
    86         {
       
    87         if ( aRequest != EConferenceRequestTypeAddCall )
       
    88             {
       
    89             iRequestType = aRequest;
       
    90             }
       
    91             
       
    92         CSPLOGSTRING2( CSPREQOUT, 
       
    93             "CSP: CSPEtelConferenceCallRequester::MakeRequest %d", iRequestType );
       
    94         switch ( aRequest )
       
    95             {
       
    96             case EConferenceRequestTypeAddCall:
       
    97                 {
       
    98                 // Requested through EConferenceRequestTypeAddCall as a special case because
       
    99                 // of the parameters.
       
   100                 result = KErrNotSupported;
       
   101                 break;
       
   102                 }
       
   103             case EConferenceRequestTypeHangup:
       
   104                 {
       
   105                 iCall.HangUp( iStatus );
       
   106                 SetActive();
       
   107                 result = KErrNone;
       
   108                 break;
       
   109                 }
       
   110             case EConferenceRequestTypeHold:
       
   111                 {
       
   112                 iCall.Swap( iStatus );
       
   113                 SetActive();
       
   114                 result = KErrNone;
       
   115                 break;
       
   116                 }
       
   117             case EConferenceRequestTypeResume:
       
   118                 {
       
   119                 iCall.Swap( iStatus );
       
   120                 SetActive();
       
   121                 result = KErrNone;
       
   122                 break;
       
   123                 }
       
   124             case EConferenceRequestTypeCreateConference:
       
   125                 {
       
   126                 iCall.CreateConference( iStatus );
       
   127                 SetActive();
       
   128                 result = KErrNone;
       
   129                 break;
       
   130                 }
       
   131             case EConferenceRequestTypeSwap:
       
   132                 {
       
   133                 iCall.Swap( iStatus );
       
   134                 SetActive();
       
   135                 result = KErrNone;
       
   136                 break;
       
   137                 }
       
   138             default:
       
   139                 {
       
   140                 CSPLOGSTRING2( CSPERROR, 
       
   141                     "CSP: CSPEtelConferenceCallRequester::MakeRequest: Unspecified \
       
   142                                         request type: %d", iRequestType );
       
   143                 result = KErrArgument;
       
   144                 }
       
   145             }
       
   146         
       
   147         }
       
   148     else
       
   149         {
       
   150         CSPLOGSTRING( CSPERROR, 
       
   151             "CSP: CSPEtelConferenceCallRequester::MakeRequest: Already active" );
       
   152         
       
   153         if ( aRequest == EConferenceRequestTypeHangup )
       
   154             {
       
   155             // First cancel ongoing request.
       
   156             Cancel();
       
   157 
       
   158             iCall.HangUp( iStatus );
       
   159             SetActive();
       
   160             result = KErrNone;            
       
   161             }
       
   162         else
       
   163             {
       
   164             result = KErrInUse;
       
   165             }
       
   166         }
       
   167         
       
   168     return result;
       
   169     }
       
   170 
       
   171 // ---------------------------------------------------------------------------
       
   172 // CSPEtelConferenceCallRequester::RunL
       
   173 // ---------------------------------------------------------------------------
       
   174 //
       
   175 void CSPEtelConferenceCallRequester::RunL()
       
   176     {
       
   177     // from CActive
       
   178     CSPLOGSTRING2( CSPREQEND, 
       
   179         "CSP: CSPEtelConferenceCallRequester::RunL: status: %d", iStatus.Int() );
       
   180     
       
   181     if ( iStatus == KErrNone )
       
   182         {
       
   183         switch ( iRequestType )
       
   184             {
       
   185             case EConferenceRequestTypeAddCall:
       
   186                 {
       
   187                 CSPLOGSTRING( CSPINT, 
       
   188                     "CSP CSPEtelConferenceCallRequester::RunL: Add call request OK" );
       
   189                 break;
       
   190                 }
       
   191             case EConferenceRequestTypeHangup:
       
   192                 {
       
   193                 CSPLOGSTRING( CSPINT, 
       
   194                     "CSP CSPEtelConferenceCallRequester::RunL: Hangup request OK" );
       
   195                 break;
       
   196                 }
       
   197             case EConferenceRequestTypeHold:
       
   198                 {
       
   199                 CSPLOGSTRING( CSPINT, 
       
   200                     "CSP CSPEtelConferenceCallRequester::RunL: Hold request OK" );
       
   201                 break;
       
   202                 }
       
   203             case EConferenceRequestTypeResume:
       
   204                 {
       
   205                 CSPLOGSTRING( CSPINT, 
       
   206                     "CSP CSPEtelConferenceCallRequester::RunL: Resume request OK" );
       
   207                 break;
       
   208                 }
       
   209             case EConferenceRequestTypeCreateConference:
       
   210                 {
       
   211                 CSPLOGSTRING( CSPINT, 
       
   212                     "CSP CSPEtelConferenceCallRequester::RunL: Conference create request OK" );
       
   213                 break;
       
   214                 }
       
   215             case EConferenceRequestTypeSwap:
       
   216                 {
       
   217                 CSPLOGSTRING( CSPINT, 
       
   218                     "CSP CSPEtelConferenceCallRequester::RunL: Conference swap request OK" );
       
   219                 break;
       
   220                 }
       
   221             default:
       
   222                 {
       
   223                 CSPLOGSTRING2( CSPERROR, 
       
   224                     "CSP CSPEtelConferenceCallRequester::RunL: Unspecified request \
       
   225                                                 type: %d", iRequestType );
       
   226                 break;
       
   227                 }
       
   228             }
       
   229         }
       
   230     else
       
   231         {
       
   232         // Error situations 
       
   233         
       
   234         CSPLOGSTRING2( CSPERROR, "CSP CSPEtelConferenceCallRequester::RunL: request \
       
   235                                 completed with error: %d", iStatus.Int() );
       
   236         switch ( iRequestType )
       
   237             {
       
   238             case EConferenceRequestTypeAddCall:
       
   239                 {
       
   240                 CSPLOGSTRING( CSPERROR, 
       
   241                     "CSP CSPEtelConferenceCallRequester::RunL: Add call request" );
       
   242                 iOwner.NotifyConferenceError( 
       
   243                            ECCPConferenceErrorAddCall );
       
   244                 break;
       
   245                 }
       
   246             case EConferenceRequestTypeHangup:
       
   247                 {
       
   248                 CSPLOGSTRING( CSPERROR, 
       
   249                     "CSP CSPEtelConferenceCallRequester::RunL: Hangup request" );
       
   250                 iOwner.NotifyConferenceError( 
       
   251                            ECCPConferenceErrorHangUp );
       
   252                 break;
       
   253                 }
       
   254             case EConferenceRequestTypeHold:
       
   255                 {
       
   256                 CSPLOGSTRING( CSPERROR, 
       
   257                     "CSP CSPEtelConferenceCallRequester::RunL: Hold request" );
       
   258                 iOwner.NotifyConferenceError( 
       
   259                            ECCPConferenceErrorHold );
       
   260                 break;
       
   261                 }
       
   262             case EConferenceRequestTypeResume:
       
   263                 {
       
   264                 CSPLOGSTRING( CSPERROR, 
       
   265                     "CSP CSPEtelConferenceCallRequester::RunL: Resume request err" );
       
   266                 iOwner.NotifyConferenceError( 
       
   267                            ECCPConferenceErrorResume );
       
   268                 break;
       
   269                 }
       
   270             case EConferenceRequestTypeCreateConference:
       
   271                 {
       
   272                 CSPLOGSTRING( CSPERROR, 
       
   273                     "CSP CSPEtelConferenceCallRequester::RunL: Conference create request" );
       
   274                 iOwner.NotifyConferenceError( 
       
   275                            ECCPConferenceErrorAddCall );
       
   276                 break;
       
   277                 }
       
   278             case EConferenceRequestTypeSwap:
       
   279                 {
       
   280                 CSPLOGSTRING( CSPERROR, 
       
   281                     "CSP CSPEtelConferenceCallRequester::RunL: Conference swap request" );
       
   282                 iOwner.NotifyConferenceError( 
       
   283                            ECCPConferenceErrorSwap );
       
   284 
       
   285                 break;
       
   286                 }
       
   287             default:
       
   288                 {
       
   289                 CSPLOGSTRING2( CSPERROR, 
       
   290                     "CSP CSPEtelConferenceCallRequester::RunL: Unspecified request \
       
   291                                                 type: %d", iRequestType );
       
   292                 break;
       
   293                 }
       
   294             }
       
   295         
       
   296         }    
       
   297     }
       
   298 
       
   299 // ---------------------------------------------------------------------------
       
   300 // CSPEtelConferenceCallRequester::DoCancel
       
   301 // ---------------------------------------------------------------------------
       
   302 //
       
   303 void CSPEtelConferenceCallRequester::DoCancel()
       
   304     {
       
   305     if ( IsActive() )
       
   306         {
       
   307         CSPLOGSTRING( CSPREQOUT, "CSP: CSPEtelConferenceCallRequester::DoCancel" );
       
   308         switch ( iRequestType )
       
   309             {
       
   310             case EConferenceRequestTypeAddCall:
       
   311                 {
       
   312                 iCall.CancelAsyncRequest( EMobileConferenceCallAddCall );
       
   313                 break;
       
   314                 }
       
   315             case EConferenceRequestTypeHangup:
       
   316                 {
       
   317                 iCall.CancelAsyncRequest( EMobileConferenceCallHangUp );
       
   318                 break;
       
   319                 }
       
   320             case EConferenceRequestTypeHold:
       
   321             case EConferenceRequestTypeResume:
       
   322                 {
       
   323                 iCall.CancelAsyncRequest( EMobileConferenceCallSwap );
       
   324                 break;
       
   325                 }
       
   326             case EConferenceRequestTypeCreateConference:
       
   327                 {
       
   328                 iCall.CancelAsyncRequest( EMobileConferenceCallCreateConference );
       
   329                 break;
       
   330                 }
       
   331             case EConferenceRequestTypeSwap:
       
   332                 {
       
   333                 iCall.CancelAsyncRequest( EMobileConferenceCallSwap );
       
   334                 break;
       
   335                 }
       
   336             default:
       
   337                 {
       
   338                 CSPLOGSTRING2( CSPERROR, "CSP CSPEtelConferenceCallRequester::DoCancel: \
       
   339                                 Unspecified request type: %d", iRequestType );
       
   340                 }
       
   341             }
       
   342         
       
   343         }
       
   344     else
       
   345         {
       
   346         CSPLOGSTRING( CSPERROR, 
       
   347             "CSP: CSPEtelConferenceCallRequester::DoCancel: Already active" );
       
   348         }
       
   349     }
       
   350 
       
   351 // ---------------------------------------------------------------------------
       
   352 // Constructs the requester.
       
   353 // ---------------------------------------------------------------------------
       
   354 //
       
   355 CSPEtelConferenceCallRequester::CSPEtelConferenceCallRequester(
       
   356             CSPConferenceCall& aOwner,
       
   357             RMobileConferenceCall& aCall ) : 
       
   358                 CActive( EPriorityStandard ), 
       
   359                 iOwner( aOwner ), 
       
   360                 iCall ( aCall )
       
   361     {
       
   362     CSPLOGSTRING(CSPOBJECT, "CSPEtelConferenceCallRequester::CSPEtelConferenceCallRequester()" );
       
   363     CActiveScheduler::Add( this );
       
   364     }
       
   365     
       
   366 // ---------------------------------------------------------------------------
       
   367 // Constructing in the second phase.
       
   368 // ---------------------------------------------------------------------------
       
   369 //
       
   370 void CSPEtelConferenceCallRequester::ConstructL()
       
   371     {
       
   372     }
       
   373     
       
   374 // End of File
       
   375