adaptationlayer/tsy/nokiatsy_dll/src/cmmcallmesshandler.cpp
changeset 5 8ccc39f9d787
parent 0 63b37f68c1ce
child 7 fa67e03b87df
equal deleted inserted replaced
4:510c70acdbf6 5:8ccc39f9d787
    24 #include "cmmstaticutility.h"
    24 #include "cmmstaticutility.h"
    25 #include "cmmmessagerouter.h"
    25 #include "cmmmessagerouter.h"
    26 #include "tsylogger.h"
    26 #include "tsylogger.h"
    27 #include "cmmdataporthandler.h" // dataport includes
    27 #include "cmmdataporthandler.h" // dataport includes
    28 #include "cmmdtmfmesshandler.h" //DTMF includes
    28 #include "cmmdtmfmesshandler.h" //DTMF includes
    29 #include "osttracedefinitions.h"
    29 #include "OstTraceDefinitions.h"
    30 #ifdef OST_TRACE_COMPILER_IN_USE
    30 #ifdef OST_TRACE_COMPILER_IN_USE
    31 #include "cmmcallmesshandlertraces.h"
    31 #include "cmmcallmesshandlerTraces.h"
    32 #endif
    32 #endif
    33 
    33 
    34 // ISI message coding/decoding functions
    34 // ISI message coding/decoding functions
    35 #include <call_modemisi.h>
    35 #include <call_modemisi.h>
    36 #include <infoisi.h>
    36 #include <infoisi.h>
    38 #include <product_profile_definitions.h>
    38 #include <product_profile_definitions.h>
    39 #include <ctsy/serviceapi/gsmerror.h>
    39 #include <ctsy/serviceapi/gsmerror.h>
    40 #include <csdisi.h>
    40 #include <csdisi.h>
    41 #include <pipeisi.h>
    41 #include <pipeisi.h>
    42 #include <pipe_sharedisi.h>
    42 #include <pipe_sharedisi.h>
       
    43 #include <satcs.h>
       
    44 #include <etelsat.h>
    43 
    45 
    44 // EXTERNAL DATA STRUCTURES
    46 // EXTERNAL DATA STRUCTURES
    45     // None
    47     // None
    46 
    48 
    47 // EXTERNAL FUNCTION PROTOTYPES
    49 // EXTERNAL FUNCTION PROTOTYPES
    81 const TUint8 KFirstPepDevice = PN_DEV_HOST;      // Device Id of first PEP
    83 const TUint8 KFirstPepDevice = PN_DEV_HOST;      // Device Id of first PEP
    82 const TUint8 KFirstPepType   = PN_PEP_TYPE_COMM; // First PEP type
    84 const TUint8 KFirstPepType   = PN_PEP_TYPE_COMM; // First PEP type
    83 
    85 
    84 // Second PEP
    86 // Second PEP
    85 const TUint8 KSecondPepDevice = PN_DEV_MODEM;    // Device Id of second PEP
    87 const TUint8 KSecondPepDevice = PN_DEV_MODEM;    // Device Id of second PEP
    86 const TUint8 KSecondPepObject = 54; // PN_OBJ_CSD_SRV // Object Id of second PEP
    88 const TUint8 KSecondPepObject = PN_OBJ_CSD_SRV; // Object Id of second PEP
    87 const TUint8 KSecondPepType   = PN_PEP_TYPE_GPRS; // Second PEP type
    89 const TUint8 KSecondPepType   = PN_PEP_TYPE_GPRS; // Second PEP type
    88 
    90 
    89 // Redirect PEP
       
    90 const TUint8 KRedirectPepObject = 59; //PN_OBJ_CSD_WTB; // Object Id of redirected PEP
       
    91 
       
    92 const TUint8 KPipeTransID  = EIscNokiaDataport1;
    91 const TUint8 KPipeTransID  = EIscNokiaDataport1;
    93 
    92 
    94 const TUint8 KInvalidPipeHandle = 0xFF;
    93 const TUint8 KInvalidPipeHandle = 0xFF;
    95 
    94 
       
    95 // From 3GPP TS 31.111, 7.3.1.6 Structure of ENVELOPE (CALL CONTROL)
       
    96 const TUint8 KCcResultAllowedNoModification     = 0x00;
       
    97 const TUint8 KCcResultNotAllowed                = 0x01;
    96 // MACROS
    98 // MACROS
    97     // None
    99     // None
    98 
   100 
    99 // LOCAL CONSTANTS AND MACROS
   101 // LOCAL CONSTANTS AND MACROS
   100     // None
   102     // None
   237     iHSDPADisabledInPp = EFalse;
   239     iHSDPADisabledInPp = EFalse;
   238     iEmergencyTimer.ConstructL();
   240     iEmergencyTimer.ConstructL();
   239     // Read "HSDPA Disabled" status from product profile
   241     // Read "HSDPA Disabled" status from product profile
   240     InfoPpDataReadReq();
   242     InfoPpDataReadReq();
   241 
   243 
   242     iSecondPepDeviceId = KSecondPepDevice;
       
   243     iSecondPepObjectId = KSecondPepObject;
       
   244 
       
   245     iCallOperationID = CSD_CALL_CREATE;
   244     iCallOperationID = CSD_CALL_CREATE;
   246     iVideoCallMtReleased = EFalse;
   245     iVideoCallReleased = EFalse;
       
   246     iCallControlCallId = CALL_MODEM_ID_NONE;
       
   247     iCcResult = KCcResultAllowedNoModification;
   247     }
   248     }
   248 
   249 
   249 // -----------------------------------------------------------------------------
   250 // -----------------------------------------------------------------------------
   250 // CMmCallMessHandler::NewL
   251 // CMmCallMessHandler::NewL
   251 // Two-phased constructor.
   252 // Two-phased constructor.
   281         GPDS_CONTEXTS_CLEAR_RESP );
   282         GPDS_CONTEXTS_CLEAR_RESP );
   282 
   283 
   283     aPhoNetReceiver->RegisterL( callMessHandler, PN_CSD );
   284     aPhoNetReceiver->RegisterL( callMessHandler, PN_CSD );
   284 
   285 
   285     aPhoNetReceiver->RegisterL( callMessHandler, PN_PIPE, PNS_PIPE_CREATE_RESP );
   286     aPhoNetReceiver->RegisterL( callMessHandler, PN_PIPE, PNS_PIPE_CREATE_RESP );
   286     aPhoNetReceiver->RegisterL( callMessHandler, PN_PIPE, PNS_PIPE_ENABLE_RESP );
       
   287     aPhoNetReceiver->RegisterL( callMessHandler, PN_PIPE, PNS_PIPE_RESET_RESP );
       
   288     aPhoNetReceiver->RegisterL( callMessHandler, PN_PIPE, PNS_PIPE_REMOVE_RESP );
   287     aPhoNetReceiver->RegisterL( callMessHandler, PN_PIPE, PNS_PIPE_REMOVE_RESP );
   289 
   288 
   290     callMessHandler->iDtmfMessHandler = aDtmfMessHandler;
   289     callMessHandler->iDtmfMessHandler = aDtmfMessHandler;
   291     CleanupStack::Pop( callMessHandler );
   290     CleanupStack::Pop( callMessHandler );
   292 
   291 
   484                 case PNS_PIPE_CREATE_RESP:
   483                 case PNS_PIPE_CREATE_RESP:
   485                     {
   484                     {
   486                     PnsPipeCreateResp( aIsiMessage );
   485                     PnsPipeCreateResp( aIsiMessage );
   487                     break;
   486                     break;
   488                     }
   487                     }
   489                 case PNS_PIPE_ENABLE_RESP:
       
   490                     {
       
   491                     PnsPipeEnableResp( aIsiMessage );
       
   492                     break;
       
   493                     }
       
   494                 case PNS_PIPE_RESET_RESP:
       
   495                     {
       
   496                     PnsPipeResetResp( aIsiMessage );
       
   497                     break;
       
   498                     }
       
   499                 case PNS_PIPE_REMOVE_RESP:
   488                 case PNS_PIPE_REMOVE_RESP:
   500                     {
   489                     {
   501                     PnsPipeRemoveResp( aIsiMessage );
   490                     PnsPipeRemoveResp( aIsiMessage );
   502                     break;
   491                     break;
   503                     }
       
   504                 case PNS_PIPE_REDIRECT_RESP:
       
   505                     {
       
   506                     PnsPipeRedirectResp( aIsiMessage );
       
   507                     }
   492                     }
   508                 default:
   493                 default:
   509                     {
   494                     {
   510 TFLOGSTRING("TSY: CMmCallMessHandler::ReceiveMessageL, switch resource - case PN_PIPE, switch messageId - default.\n" );
   495 TFLOGSTRING("TSY: CMmCallMessHandler::ReceiveMessageL, switch resource - case PN_PIPE, switch messageId - default.\n" );
   511 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_RECEIVEMESSAGEL, "CMmCallMessHandler::ReceiveMessageL, switch resource - case PN_PIPE, switch messageId - default.\n" );
   496 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_RECEIVEMESSAGEL, "CMmCallMessHandler::ReceiveMessageL, switch resource - case PN_PIPE, switch messageId - default.\n" );
   543     TUint8 dosCallId( CALL_MODEM_ID_NONE );
   528     TUint8 dosCallId( CALL_MODEM_ID_NONE );
   544     RMobilePhone::TMobileService callMode( RMobilePhone::EServiceUnspecified );
   529     RMobilePhone::TMobileService callMode( RMobilePhone::EServiceUnspecified );
   545     TBool requestDirectedToDataPort( EFalse );
   530     TBool requestDirectedToDataPort( EFalse );
   546     TBool callCreatedAlready( EFalse );
   531     TBool callCreatedAlready( EFalse );
   547 
   532 
   548     const CCallDataPackage* callData(
   533     if ( ESatNotifyCallControlRequest == aIpc )
   549         reinterpret_cast<const CCallDataPackage*>( aDataPackage ) );
   534         {
   550 
   535         // simatktsy uses this IPC to inform NTSY about call controlled CALL_ID
   551     // In case of emergency call CMmDataPackage is used and it doesn't contain
   536         // and call control result
   552     // call ID or call mode. CCallDataPackage is used in case of normal call.
   537         aDataPackage->UnPackData ( iCallControlCallId, iCcResult );
   553     if ( EMobileCallDialEmergencyCall != aIpc )
   538         }
   554         {
   539     else
   555         callData->GetCallIdAndMode( callId, callMode );
   540         {
       
   541         const CCallDataPackage* callData(
       
   542             reinterpret_cast<const CCallDataPackage*>( aDataPackage ) );
       
   543 
       
   544         // In case of emergency call CMmDataPackage is used and it doesn't contain
       
   545         // call ID or call mode. CCallDataPackage is used in case of normal call.
       
   546         if ( EMobileCallDialEmergencyCall != aIpc )
       
   547             {
       
   548             callData->GetCallIdAndMode( callId, callMode );
   556 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL. CallMode:%d", callMode );
   549 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL. CallMode:%d", callMode );
   557 OstTrace1( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL;callMode=%d", callMode );
   550 OstTrace1( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL;callMode=%d", callMode );
   558         }
   551             }
   559 
   552 
   560     if ( KSymbianCallIdNone == callId )
   553         if ( KSymbianCallIdNone == callId )
   561         {
   554             {
   562         dosCallId = CALL_MODEM_ID_NONE;
   555             dosCallId = CALL_MODEM_ID_NONE;
   563         }
   556             }
   564     else
   557         else
   565         {
   558             {
   566         dosCallId = static_cast<TUint8>( callId );
   559             dosCallId = static_cast<TUint8>( callId );
   567         }
   560             }
   568 
   561 
   569     TIsiSend callReq( iPhoNetSender->SendBufferDes() );
   562         TIsiSend callReq( iPhoNetSender->SendBufferDes() );
   570 
   563 
   571     // Resource ID
   564         // Resource ID
   572     callReq.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_MODEM_CALL );
   565         callReq.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_MODEM_CALL );
   573 
   566 
   574     // Transaction ID
   567         // Transaction ID
   575     callReq.Set8bit( ISI_HEADER_OFFSET_TRANSID, KCallTransId );
   568         callReq.Set8bit( ISI_HEADER_OFFSET_TRANSID, KCallTransId );
   576 
   569 
   577     switch( aIpc )
   570         switch( aIpc )
   578         {
   571             {
   579         case EMobileCallDialEmergencyCall:
   572             case EMobileCallDialEmergencyCall:
   580             {
   573                 {
   581             aDataPackage->UnPackData( iTelEmergNumber );
   574                 aDataPackage->UnPackData( iTelEmergNumber );
   582 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL - emergency dial number is %S", &iTelEmergNumber);
   575 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL - emergency dial number is %S", &iTelEmergNumber);
   583 OstTraceExt1( TRACE_NORMAL, DUP4_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - emergency dial number is=%S", iTelEmergNumber );
   576 OstTraceExt1( TRACE_NORMAL, DUP4_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - emergency dial number is=%S", iTelEmergNumber );
   584 #ifdef NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   577 #ifdef NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   585             if ( iHSDPADisabledInPp )
   578                 if ( iHSDPADisabledInPp )
   586                 {
   579                     {
   587                 // HSPDA is disabled in PP; no need to delay the emergency
   580                     // HSPDA is disabled in PP; no need to delay the emergency
   588                 // call setup.
   581                     // call setup.
   589 #endif //NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   582 #endif //NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   590                 dosCallId = CALL_MODEM_ID_NONE;
   583                     dosCallId = CALL_MODEM_ID_NONE;
   591                 // In the case when emergency number checking is needed to be ignored
   584                     // In the case when emergency number checking is needed to be ignored
   592                 // the destination address is delivered
   585                     // the destination address is delivered
   593                 EmergencyCallCreateReq( &callReq );
   586                     EmergencyCallCreateReq( &callReq );
   594                 // Emergency calls are created immediately, without
   587                     // Emergency calls are created immediately, without
   595                 // setting properties
   588                     // setting properties
   596                 messageId = CALL_MODEM_CREATE_REQ;
   589                     messageId = CALL_MODEM_CREATE_REQ;
   597                 isiCallId = CALL_MODEM_CREATE_REQ_OFFSET_CALLID;
   590                     isiCallId = CALL_MODEM_CREATE_REQ_OFFSET_CALLID;
   598 #ifdef NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   591 #ifdef NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   599                 }
   592                     }
   600             else
   593                 else
   601                 {
   594                     {
   602                 // Destroy all data connections before attempting emergency
   595                     // Destroy all data connections before attempting emergency
   603                 // call. The call will be set up in GpdsContextsClearResp.
   596                     // call. The call will be set up in GpdsContextsClearResp.
   604 TFLOGSTRING( "TSY: CMmCallMessHandler::ExtFuncL - HSDPA workaround. Emergency call delayed, data connections have to be closed first." );
   597 TFLOGSTRING( "TSY: CMmCallMessHandler::ExtFuncL - HSDPA workaround. Emergency call delayed, data connections have to be closed first." );
   605 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - HSDPA workaround. Emergency call delayed, data connections have to be closed first." );
   598 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - HSDPA workaround. Emergency call delayed, data connections have to be closed first." );
   606                 iEmergCallDelayed = ETrue;
   599                     iEmergCallDelayed = ETrue;
   607                 GpdsContextsClearReq();
   600                     GpdsContextsClearReq();
   608                 }
   601                     }
   609 #endif //NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   602 #endif //NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   610             break;
   603                 break;
   611             }
   604                 }
   612         case EEtelCallDial:
   605             case EEtelCallDial:
   613         case EMobileCallDialISV:
   606             case EMobileCallDialISV:
   614         case EMobileCallDialNoFdnCheck:
   607             case EMobileCallDialNoFdnCheck:
   615             {
   608                 {
   616             // Set iNoFDNDial flag in correct state
   609                 // Set iNoFDNDial flag in correct state
   617             if ( EMobileCallDialNoFdnCheck == aIpc )
   610                 if ( EMobileCallDialNoFdnCheck == aIpc )
   618                 {
   611                     {
   619                 iNoFdnDial = ETrue;
   612                     iNoFdnDial = ETrue;
   620                 }
   613                     }
   621             else
   614                 else
   622                 {
   615                     {
   623                 iNoFdnDial = EFalse;
   616                     iNoFdnDial = EFalse;
   624                 }
   617                     }
   625             if ( RMobilePhone::ECircuitDataService == callMode )
   618                 if ( RMobilePhone::ECircuitDataService == callMode )
   626                 {
   619                     {
   627                 iFDNErrorAlredyNotified = EFalse;
   620                     iFDNErrorAlredyNotified = EFalse;
   628                 ret = DialDataCall( callData );
   621                     ret = DialDataCall( callData );
   629                 requestDirectedToDataPort = ETrue;
   622                     requestDirectedToDataPort = ETrue;
   630                 }
   623                     }
   631             else if ( RMobilePhone::EVoiceService == callMode )
   624                 else if ( RMobilePhone::EVoiceService == callMode )
   632                 {
   625                     {
   633                 iCallMode = CALL_MODEM_MODE_SPEECH;
   626                     iCallMode = CALL_MODEM_MODE_SPEECH;
   634                 }
   627                     }
   635             else
   628                 else
   636                 {
   629                     {
   637                 iCallMode = CALL_MODEM_MODE_ALS_LINE_2;
   630                     iCallMode = CALL_MODEM_MODE_ALS_LINE_2;
   638                 }
   631                     }
   639 
   632 
   640             if ( ! requestDirectedToDataPort )
   633                 if ( ! requestDirectedToDataPort )
   641                 {
   634                     {
   642                 iIs3rdPartyDial = EFalse;
   635                     iIs3rdPartyDial = EFalse;
   643 
   636 
   644                 // If 3rd party client
   637                     // If 3rd party client
   645                 if ( EMobileCallDialISV == aIpc )
   638                     if ( EMobileCallDialISV == aIpc )
   646                     {
   639                         {
   647                     iIs3rdPartyDial = ETrue;
   640                         iIs3rdPartyDial = ETrue;
   648                     }
   641                         }
   649                 // No else
   642                     // No else
   650 
   643 
   651                 // Check if CUG info is needed
   644                     // Check if CUG info is needed
   652                 RMobileCall::TMobileCallParamsV1Pckg* callParams( NULL );
   645                     RMobileCall::TMobileCallParamsV1Pckg* callParams( NULL );
   653                 RMobileCall::TMobileCallInfoV1* callInfo( NULL );
   646                     RMobileCall::TMobileCallInfoV1* callInfo( NULL );
   654 
   647 
   655                 aDataPackage->UnPackData( &callParams, &callInfo );
   648                     aDataPackage->UnPackData( &callParams, &callInfo );
   656 
   649 
   657                 RMobileCall::TMobileCallParamsV1Pckg* paramsPckgV1(
   650                     RMobileCall::TMobileCallParamsV1Pckg* paramsPckgV1(
   658                     reinterpret_cast<RMobileCall::TMobileCallParamsV1Pckg*>
   651                         reinterpret_cast<RMobileCall::TMobileCallParamsV1Pckg*>
   659                         ( callParams ) );
   652                             ( callParams ) );
   660 
   653 
   661                 RMobileCall::TMobileCallParamsV1 recentCallParams(
   654                     RMobileCall::TMobileCallParamsV1 recentCallParams(
   662                     ( *paramsPckgV1 )() );
   655                         ( *paramsPckgV1 )() );
   663 
   656 
   664                 if ( RMmCustomAPI::KETelCustomExtCustomCallParamsV3 ==
   657                     if ( RMmCustomAPI::KETelCustomExtCustomCallParamsV3 ==
   665                         recentCallParams.ExtensionId() )
   658                             recentCallParams.ExtensionId() )
   666                     {
   659                         {
   667 TFLOGSTRING("TSY: CMmCallMessHandler::ExtFuncL - Custom API call params in use ");
   660 TFLOGSTRING("TSY: CMmCallMessHandler::ExtFuncL - Custom API call params in use ");
   668 OstTrace0( TRACE_NORMAL, DUP7_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - Custom API call params in use" );
   661 OstTrace0( TRACE_NORMAL, DUP7_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - Custom API call params in use" );
   669 
   662 
   670                     // Unpack custom call parameters
   663                         // Unpack custom call parameters
   671                     RMmCustomAPI::TCustomCallParamsPckg* customparamsPckgV1(
   664                         RMmCustomAPI::TCustomCallParamsPckg* customparamsPckgV1(
   672                         reinterpret_cast<RMmCustomAPI::TCustomCallParamsPckg*>
   665                             reinterpret_cast<RMmCustomAPI::TCustomCallParamsPckg*>
   673                             ( paramsPckgV1 ) );
   666                                 ( paramsPckgV1 ) );
   674 
   667 
   675                     RMmCustomAPI::TCustomCallParams& aCustomParams(
   668                         RMmCustomAPI::TCustomCallParams& aCustomParams(
   676                         ( *customparamsPckgV1 )() );
   669                             ( *customparamsPckgV1 )() );
   677                     iSubAddress.Copy( aCustomParams.iSubAddress );
   670                         iSubAddress.Copy( aCustomParams.iSubAddress );
   678                     iBearer.Copy( aCustomParams.iBearer );
   671                         iBearer.Copy( aCustomParams.iBearer );
   679                     }
   672                         }
   680             #if ( NCP_COMMON_S60_VERSION_SUPPORT >= S60_VERSION_50 )
   673 #if ( NCP_COMMON_S60_VERSION_SUPPORT >= S60_VERSION_50 )
   681                 else if ( RMobileCall::KETelMobileCallParamsV7 == recentCallParams.ExtensionId() )
   674                     else if ( RMobileCall::KETelMobileCallParamsV7 == recentCallParams.ExtensionId() )
   682                     {
   675                         {
   683 TFLOGSTRING("TSY: CMmCallMessHandler::ExtFuncL - V7 call params in use ");
   676 TFLOGSTRING("TSY: CMmCallMessHandler::ExtFuncL - V7 call params in use ");
   684 OstTrace0( TRACE_NORMAL, DUP8_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - V7 call params in use" );
   677 OstTrace0( TRACE_NORMAL, DUP8_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - V7 call params in use" );
   685 
   678 
   686                     RMobileCall::TMobileCallParamsV7Pckg* paramsPckgV7(
   679                         RMobileCall::TMobileCallParamsV7Pckg* paramsPckgV7(
   687                         reinterpret_cast<RMobileCall::TMobileCallParamsV7Pckg*>
   680                             reinterpret_cast<RMobileCall::TMobileCallParamsV7Pckg*>
   688                             ( callParams ) );
   681                                 ( callParams ) );
   689 
   682 
   690                     RMobileCall::TMobileCallParamsV7 recentCallParamsV7(
   683                         RMobileCall::TMobileCallParamsV7 recentCallParamsV7(
   691                         ( *paramsPckgV7 )() );
   684                             ( *paramsPckgV7 )() );
   692 
   685 
   693                     iSubAddress.Copy( recentCallParamsV7.iSubAddress );
   686                         iSubAddress.Copy( recentCallParamsV7.iSubAddress );
   694                     // At the moment only 1 bearer capability is supported in SET UP CALL PCmd
   687                         // At the moment only 1 bearer capability is supported in SET UP CALL PCmd
   695                     iBearer.Copy( recentCallParamsV7.iBearerCap1 );
   688                         iBearer.Copy( recentCallParamsV7.iBearerCap1 );
   696 
   689 
   697                     // Prevent FDN check if call is SIM originated (SET UP CALL)
   690                         // Prevent FDN check if call is SIM originated (SET UP CALL)
   698                     if ( RMobileCall::EOriginatorSIM == recentCallParamsV7.iCallParamOrigin )
   691                         if ( RMobileCall::EOriginatorSIM == recentCallParamsV7.iCallParamOrigin )
       
   692                             {
       
   693                             iNoFdnCheck = ETrue;
       
   694                             }
       
   695                         else
       
   696                             {
       
   697                             iNoFdnCheck = EFalse;
       
   698                             }
       
   699                         }
       
   700 #endif
       
   701                     else
   699                         {
   702                         {
   700                         iNoFdnCheck = ETrue;
   703                         iSubAddress.Zero();
       
   704                         iBearer.Zero();
       
   705                         }
       
   706 
       
   707 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL - Cug explicit invoked: %d", recentCallParams.iCug.iExplicitInvoke );
       
   708 OstTrace1( TRACE_NORMAL, DUP5_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - Cug explicit invoked: %d", recentCallParams.iCug.iExplicitInvoke );
       
   709                     // if CUG is explicitly invoked by
       
   710                     // the other entries in this structure will be filled in
       
   711                     // function CallPropertySetReq.
       
   712                     if ( recentCallParams.iCug.iExplicitInvoke )
       
   713                         {
       
   714                         // Non-emergency calls set properties first. CallCreateReq will
       
   715                         // be called after CallPropertySetResp response has come.
       
   716                         messageId = CALL_MODEM_PROPERTY_SET_REQ;
       
   717                         dosCallId = CALL_MODEM_PROP_CUG_INFO;
       
   718 
       
   719                         CallPropertySetReq( &callReq, callData );
   701                         }
   720                         }
   702                     else
   721                     else
   703                         {
   722                         {
   704                         iNoFdnCheck = EFalse;
   723     //                    RMobileCall::TMobileCallParamsV1Pckg* callParams( NULL );
   705                         }
   724     //                    RMobileCall::TMobileCallInfoV1* callInfo( NULL );
   706                     }
   725     //                    aDataPackage->UnPackData( &callParams, &callInfo );
   707             #endif
   726                         iTelNumber = callInfo->iDialledParty.iTelNumber;
   708                 else
       
   709                     {
       
   710                     iSubAddress.Zero();
       
   711                     iBearer.Zero();
       
   712                     }
       
   713 
       
   714 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL - Cug explicit invoked: %d", recentCallParams.iCug.iExplicitInvoke );
       
   715 OstTrace1( TRACE_NORMAL, DUP5_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - Cug explicit invoked: %d", recentCallParams.iCug.iExplicitInvoke );
       
   716                 // if CUG is explicitly invoked by
       
   717                 // the other entries in this structure will be filled in
       
   718                 // function CallPropertySetReq.
       
   719                 if ( recentCallParams.iCug.iExplicitInvoke )
       
   720                     {
       
   721                     // Non-emergency calls set properties first. CallCreateReq will
       
   722                     // be called after CallPropertySetResp response has come.
       
   723                     messageId = CALL_MODEM_PROPERTY_SET_REQ;
       
   724                     dosCallId = CALL_MODEM_PROP_CUG_INFO;
       
   725 
       
   726                     CallPropertySetReq( &callReq, callData );
       
   727                     }
       
   728                 else
       
   729                     {
       
   730 //                    RMobileCall::TMobileCallParamsV1Pckg* callParams( NULL );
       
   731 //                    RMobileCall::TMobileCallInfoV1* callInfo( NULL );
       
   732 //                    aDataPackage->UnPackData( &callParams, &callInfo );
       
   733                     iTelNumber = callInfo->iDialledParty.iTelNumber;
       
   734 TFLOGSTRING2("TSY: CMmCallMessHandlerExtFuncL - iTelNumber: %S", &iTelNumber);
   727 TFLOGSTRING2("TSY: CMmCallMessHandlerExtFuncL - iTelNumber: %S", &iTelNumber);
   735 OstTraceExt1( TRACE_NORMAL, DUP6_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - iTelNumber=%s", iTelNumber );
   728 OstTraceExt1( TRACE_NORMAL, DUP6_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL - iTelNumber=%s", iTelNumber );
   736                     iIdRestrict = recentCallParams.iIdRestrict;
   729                         iIdRestrict = recentCallParams.iIdRestrict;
   737 
   730 
   738                     CallCreateReq();
   731                         CallCreateReq();
   739                     callCreatedAlready = ETrue;
   732                         callCreatedAlready = ETrue;
   740                     // Reset information
   733                         // Reset information
   741                     iSubAddress.Zero();
   734                         iSubAddress.Zero();
   742                     iBearer.Zero();
   735                         iBearer.Zero();
   743                     }
   736                         }
   744                 }
   737                     }
   745             // No else
   738                 // No else
   746             break;
   739                 break;
   747             }
   740                 }
   748         case EMobileCallSwap:
   741             case EMobileCallSwap:
   749             {
   742                 {
   750             // Set special call Id
   743                 // Set special call Id
   751             dosCallId = CALL_MODEM_ID_ACTIVE;
   744                 dosCallId = CALL_MODEM_ID_ACTIVE;
   752             messageId = CALL_MODEM_CONTROL_REQ;
   745                 messageId = CALL_MODEM_CONTROL_REQ;
   753             isiCallId = CALL_MODEM_CONTROL_REQ_OFFSET_CALLID;
   746                 isiCallId = CALL_MODEM_CONTROL_REQ_OFFSET_CALLID;
   754             CallControlReq( &callReq, aIpc );
   747                 CallControlReq( &callReq, aIpc );
   755             break;
   748                 break;
   756             }
   749                 }
   757         case EMobileCallHold:
   750             case EMobileCallHold:
   758         case EMobileCallResume:
   751             case EMobileCallResume:
   759         case EMobileCallGoOneToOne:
   752             case EMobileCallGoOneToOne:
   760         case EMobileCallTransfer:
   753             case EMobileCallTransfer:
   761         case EMobileCallActivateCCBS:
   754             case EMobileCallActivateCCBS:
   762         case EMobilePhoneAcceptCCBSRecall:
   755             case EMobilePhoneAcceptCCBSRecall:
   763             {
   756                 {
   764             messageId = CALL_MODEM_CONTROL_REQ;
   757                 messageId = CALL_MODEM_CONTROL_REQ;
   765             isiCallId = CALL_MODEM_CONTROL_REQ_OFFSET_CALLID;
   758                 isiCallId = CALL_MODEM_CONTROL_REQ_OFFSET_CALLID;
   766             CallControlReq( &callReq, aIpc );
   759                 CallControlReq( &callReq, aIpc );
   767             break;
   760                 break;
   768             }
   761                 }
   769         case EMobileCallAnswerISV:
   762             case EMobileCallAnswerISV:
   770         case EEtelCallAnswer:
   763             case EEtelCallAnswer:
   771             {
   764                 {
   772             if ( RMobilePhone::ECircuitDataService == callMode )
   765                 if ( RMobilePhone::ECircuitDataService == callMode )
   773                 {
   766                     {
   774                 ret = AnswerIncomingDataCall( callData );
   767                     ret = AnswerIncomingDataCall( callData );
       
   768                     requestDirectedToDataPort = ETrue;
       
   769                     }
       
   770                 else
       
   771                     {
       
   772                     iIs3rdPartyAnswerIncomingCall = EFalse;
       
   773 
       
   774                     // Is it from a 3rd party client or not
       
   775                     if ( EMobileCallAnswerISV == aIpc )
       
   776                         {
       
   777                         iIs3rdPartyAnswerIncomingCall = ETrue;
       
   778                         }
       
   779                     // No else
       
   780                     messageId = CALL_MODEM_ANSWER_REQ;
       
   781                     isiCallId = CALL_MODEM_ANSWER_REQ_OFFSET_CALLID;
       
   782                     callReq.Set8bit(
       
   783                         ISI_HEADER_SIZE + CALL_MODEM_ANSWER_REQ_OFFSET_SUBBLOCKS,
       
   784                         KCallPadding );
       
   785                     }
       
   786                 break;
       
   787                 }
       
   788             case EEtelCallHangUp:
       
   789                 {
       
   790                 // Call mode for emergency call is voice
       
   791                 if ( RMobilePhone::EVoiceService == callMode )
       
   792                     {
       
   793                     iEmergCallDelayed = EFalse;
       
   794                     }
       
   795 
       
   796                 if ( RMobilePhone::ECircuitDataService == callMode )
       
   797                     {
       
   798                     ret = HangUp( callId );
       
   799                         requestDirectedToDataPort = ETrue;
       
   800                         }
       
   801                 else
       
   802                     {
       
   803                     messageId = CALL_MODEM_RELEASE_REQ;
       
   804                     isiCallId = CALL_MODEM_RELEASE_REQ_OFFSET_CALLID;
       
   805                     CallReleaseReq( &callReq, callData );
       
   806                     }
       
   807                 // No else
       
   808                 break;
       
   809                 }
       
   810             case EMobilePhoneClearBlacklist:
       
   811                 {
       
   812                 messageId = CALL_MODEM_BLACKLIST_CLEAR_REQ;
       
   813                 break;
       
   814                 }
       
   815             // CSD fearures
       
   816             case EEtelCallLoanDataPort:
       
   817                 {
       
   818                 if ( iDataPortHandler )
       
   819                     {
       
   820                     ret = iDataPortHandler->LoanDataPort( callData );
       
   821                     }
       
   822                 else
       
   823                     {
       
   824                     ret = KErrNotReady;
       
   825                     }
   775                 requestDirectedToDataPort = ETrue;
   826                 requestDirectedToDataPort = ETrue;
   776                 }
   827                 break;
   777             else
   828                 }
   778                 {
   829             case EEtelCallRecoverDataPort:
   779                 iIs3rdPartyAnswerIncomingCall = EFalse;
   830                 {
   780 
   831                 if ( iDataPortHandler )
   781                 // Is it from a 3rd party client or not
   832                     {
   782                 if ( EMobileCallAnswerISV == aIpc )
   833                     ret = iDataPortHandler->RecoverDataPort( callData );
   783                     {
   834                     }
   784                     iIs3rdPartyAnswerIncomingCall = ETrue;
   835                 else
   785                     }
   836                     {
   786                 // No else
   837                     ret = KErrNotReady;
   787                 messageId = CALL_MODEM_ANSWER_REQ;
   838                     }
   788                 isiCallId = CALL_MODEM_ANSWER_REQ_OFFSET_CALLID;
       
   789                 callReq.Set8bit(
       
   790                     ISI_HEADER_SIZE + CALL_MODEM_ANSWER_REQ_OFFSET_SUBBLOCKS,
       
   791                     KCallPadding );
       
   792                 }
       
   793             break;
       
   794             }
       
   795         case EEtelCallHangUp:
       
   796             {
       
   797             // Call mode for emergency call is voice
       
   798             if ( RMobilePhone::EVoiceService == callMode )
       
   799                 {
       
   800                 iEmergCallDelayed = EFalse;
       
   801                 }
       
   802 
       
   803             if ( RMobilePhone::ECircuitDataService == callMode )
       
   804                 {
       
   805                 ret = HangUp( callId );
       
   806                 requestDirectedToDataPort = ETrue;
   839                 requestDirectedToDataPort = ETrue;
   807                 }
   840                 break;
   808             else
   841                 }
   809                 {
   842             case EMobileCallActivateUUS:
   810                 messageId = CALL_MODEM_RELEASE_REQ;
   843                 {
   811                 isiCallId = CALL_MODEM_RELEASE_REQ_OFFSET_CALLID;
   844                 ret = ActivateUUS( aDataPackage );
   812                 CallReleaseReq( &callReq, callData );
   845                 break;
   813                 }
   846                 }
   814             // No else
   847             default:
   815             break;
   848                 {
   816             }
       
   817         case EMobilePhoneClearBlacklist:
       
   818             {
       
   819             messageId = CALL_MODEM_BLACKLIST_CLEAR_REQ;
       
   820             break;
       
   821             }
       
   822         // CSD fearures
       
   823         case EEtelCallLoanDataPort:
       
   824             {
       
   825             if ( iDataPortHandler )
       
   826                 {
       
   827                 ret = iDataPortHandler->LoanDataPort( callData );
       
   828                 }
       
   829             else
       
   830                 {
       
   831                 ret = KErrNotReady;
       
   832                 }
       
   833             requestDirectedToDataPort = ETrue;
       
   834             break;
       
   835             }
       
   836         case EEtelCallRecoverDataPort:
       
   837             {
       
   838             if ( iDataPortHandler )
       
   839                 {
       
   840                 ret = iDataPortHandler->RecoverDataPort( callData );
       
   841                 }
       
   842             else
       
   843                 {
       
   844                 ret = KErrNotReady;
       
   845                 }
       
   846             requestDirectedToDataPort = ETrue;
       
   847             break;
       
   848             }
       
   849         case EMobileCallActivateUUS:
       
   850             {
       
   851             ret = ActivateUUS( aDataPackage );
       
   852             break;
       
   853             }
       
   854         default:
       
   855             {
       
   856 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
   849 TFLOGSTRING2("TSY: CMmCallMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
   857 OstTrace1( TRACE_NORMAL, DUP3_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL; - Unknown IPC=%d", aIpc );
   850 OstTrace1( TRACE_NORMAL, DUP3_CMMCALLMESSHANDLER_EXTFUNCL, "CMmCallMessHandler::ExtFuncL; - Unknown IPC=%d", aIpc );
   858             ret = KErrNotSupported;
   851                 ret = KErrNotSupported;
   859             break;
   852                 break;
   860             }
   853                 }
   861         }
   854             }
   862 
   855 
   863     if ( ! requestDirectedToDataPort && !callCreatedAlready
   856         if ( ! requestDirectedToDataPort && !callCreatedAlready
   864 #ifdef NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   857 #ifdef NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   865          && !iEmergCallDelayed
   858              && !iEmergCallDelayed
   866 #endif //NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   859 #endif //NCP_COMMON_HSDPA_EMERGCALL_WORKAROUND
   867          )
   860              )
   868         {
   861             {
   869         // Create ISI message
   862             // Create ISI message
   870         callReq.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, messageId );
   863             callReq.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, messageId );
   871 
   864 
   872         // Every message definition doesn't contains call ID
   865             // Every message definition doesn't contains call ID
   873         if ( 0 != isiCallId )
   866             if ( 0 != isiCallId )
   874             {
   867                 {
   875             callReq.Set8bit( ISI_HEADER_SIZE + isiCallId, dosCallId );
   868                 callReq.Set8bit( ISI_HEADER_SIZE + isiCallId, dosCallId );
   876             }
   869                 }
   877         // No else
   870             // No else
   878 
   871 
   879         if ( KErrNone == ret )
   872             if ( KErrNone == ret )
   880             {
   873                 {
   881             // Send message to PhoNet
   874                 // Send message to PhoNet
   882             ret = iPhoNetSender->Send( callReq.Complete() );
   875                 ret = iPhoNetSender->Send( callReq.Complete() );
       
   876                 }
       
   877             // No else
   883             }
   878             }
   884         // No else
   879         // No else
   885         }
   880         }
   886     // No else
   881     // No else
   887 
   882 
  1182 
  1177 
  1183         // Get Cause Value
  1178         // Get Cause Value
  1184         TUint8 causeValue( aIsiMessage.Get8bit(
  1179         TUint8 causeValue( aIsiMessage.Get8bit(
  1185             sbStartOffSet + CALL_MODEM_SB_CAUSE_OFFSET_CAUSE ) );
  1180             sbStartOffSet + CALL_MODEM_SB_CAUSE_OFFSET_CAUSE ) );
  1186 
  1181 
  1187         // Map error value to Symbian OS error value
       
  1188         mobileCallInfo.iExitCode = CMmStaticUtility::CSCauseToEpocError(
       
  1189             PN_MODEM_CALL,
       
  1190             causeType,
       
  1191             causeValue );
       
  1192 
       
  1193         // To prevent FDN error to be completed again from CallServiceDeniedInd
  1182         // To prevent FDN error to be completed again from CallServiceDeniedInd
  1194         if ( CALL_MODEM_CAUSE_FDN_NOT_OK == causeValue )
  1183         if ( CALL_MODEM_CAUSE_FDN_NOT_OK == causeValue )
  1195             {
  1184             {
  1196             iFDNErrorAlredyNotified = ETrue;
  1185             iFDNErrorAlredyNotified = ETrue;
  1197             }
  1186             }
  1200         // (three bits (1-3) contain unique call ID)
  1189         // (three bits (1-3) contain unique call ID)
  1201         mobileCallInfo.iCallId = static_cast<TInt>( aIsiMessage.Get8bit(
  1190         mobileCallInfo.iCallId = static_cast<TInt>( aIsiMessage.Get8bit(
  1202             ISI_HEADER_SIZE + CALL_MODEM_CREATE_RESP_OFFSET_CALLID )
  1191             ISI_HEADER_SIZE + CALL_MODEM_CREATE_RESP_OFFSET_CALLID )
  1203                 & KMaskBits1to3 );
  1192                 & KMaskBits1to3 );
  1204 
  1193 
       
  1194         // Check if the call request has been call controlled
       
  1195         if ( iCallControlCallId == mobileCallInfo.iCallId
       
  1196             && iCcResult != KCcResultAllowedNoModification )
       
  1197             {
       
  1198             // call controlled requests have always different call id than
       
  1199             // CALL_MODEM_ID_NONE. If the original request is not changed,
       
  1200             // no need for specific error values
       
  1201             if ( KCcResultNotAllowed == iCcResult )
       
  1202                 {
       
  1203                 // call control rejected the request
       
  1204                 mobileCallInfo.iExitCode =
       
  1205                     CMmStaticUtility::EpocErrorCode( KErrGeneral,
       
  1206                         KErrGsmCCCallRejected );
       
  1207                 }
       
  1208             else
       
  1209                 {
       
  1210                 // call control modified the request
       
  1211                 mobileCallInfo.iExitCode =
       
  1212                     CMmStaticUtility::EpocErrorCode( KErrAccessDenied,
       
  1213                         KErrSatControl );
       
  1214                 }
       
  1215             // reset the values
       
  1216             iCallControlCallId = CALL_MODEM_ID_NONE;
       
  1217             iCcResult = KCcResultAllowedNoModification;
       
  1218             }
       
  1219         else
       
  1220             {
       
  1221             // Map error value to Symbian OS error value
       
  1222             mobileCallInfo.iExitCode = CMmStaticUtility::CSCauseToEpocError(
       
  1223                 PN_MODEM_CALL,
       
  1224                 causeType,
       
  1225                 causeValue );
       
  1226             }
  1205         // Create call package
  1227         // Create call package
  1206         CCallDataPackage callData;
  1228         CCallDataPackage callData;
  1207         // Pack the data for sending to the manager
  1229         // Pack the data for sending to the manager
  1208         callData.SetCallIdAndMode(
  1230         callData.SetCallIdAndMode(
  1209             mobileCallInfo.iCallId,
  1231             mobileCallInfo.iCallId,
  3255         }
  3277         }
  3256 
  3278 
  3257     // Check if Video Call is MT Released.
  3279     // Check if Video Call is MT Released.
  3258     // Pipe have to remove to make next call possible.
  3280     // Pipe have to remove to make next call possible.
  3259     // Have to wait that Csd videoCall is disconnected.
  3281     // Have to wait that Csd videoCall is disconnected.
  3260     if ( CALL_MODEM_STATUS_MT_RELEASE == callStatusISA )
  3282     if ( CALL_MODEM_STATUS_MT_RELEASE == callStatusISA ||
  3261         {
  3283          CALL_MODEM_STATUS_MO_RELEASE == callStatusISA )
  3262         iVideoCallMtReleased = ETrue;
  3284         {
       
  3285         iVideoCallReleased = ETrue;
  3263         }
  3286         }
  3264 
  3287 
  3265     // Read call mode
  3288     // Read call mode
  3266     if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3289     if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3267         ISI_HEADER_SIZE + CALL_MODEM_STATUS_IND_OFFSET_MODE,
  3290         ISI_HEADER_SIZE + CALL_MODEM_STATUS_IND_OFFSET_MODE,
  3282         // No else
  3305         // No else
  3283 
  3306 
  3284     if( CALL_MODEM_STATUS_IDLE == callStatusISA &&
  3307     if( CALL_MODEM_STATUS_IDLE == callStatusISA &&
  3285         mobileCallInfo.iCallId == iIncomingCallInfo.iCallId )
  3308         mobileCallInfo.iCallId == iIncomingCallInfo.iCallId )
  3286         {
  3309         {
  3287 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:NOTE! Can't complete to CTSY!, because call is terminated before it is indicated to CTSY");
       
  3288 OstTrace0( TRACE_NORMAL, DUP19_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL:NOTE! Can't complete to CTSY!, because call is terminated before it is indicated to CTSY" );
       
  3289         // reset temporary call info
  3310         // reset temporary call info
  3290         ResetIncomingCallInfo( iIncomingCallInfo );
  3311         ResetIncomingCallInfo( iIncomingCallInfo );
  3291         }
  3312         }
  3292     else
       
  3293         {
       
  3294 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:Normal completion of call status ind (no termination of calls which haven't been indicated to CTSY yet)");
  3313 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:Normal completion of call status ind (no termination of calls which haven't been indicated to CTSY yet)");
  3295 OstTrace0( TRACE_NORMAL, DUP20_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL:Normal completion of call status ind (no termination of calls which haven't been indicated to CTSY yet)" );
  3314 OstTrace0( TRACE_NORMAL, DUP20_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL:Normal completion of call status ind (no termination of calls which haven't been indicated to CTSY yet)" );
  3296 
  3315 
  3297         // Create call package (used for all completions)
  3316     // Create call package (used for all completions)
  3298         CCallDataPackage callData;
  3317     CCallDataPackage callData;
  3299         // Pack the data for sending to the manager
  3318     // Pack the data for sending to the manager
  3300         callData.SetCallIdAndMode(
  3319     callData.SetCallIdAndMode(
  3301             mobileCallInfo.iCallId,
  3320         mobileCallInfo.iCallId,
  3302             mobileCallInfo.iService );
  3321         mobileCallInfo.iService );
  3303 
  3322 
  3304         CheckCallIsaStatus( mobileCallInfo, callStatusISA );
  3323     CheckCallIsaStatus( mobileCallInfo, callStatusISA );
  3305 
  3324 
  3306         // Store UUI data when the call is coming
  3325     // Store UUI data when the call is coming
       
  3326     if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
       
  3327         ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
       
  3328         CALL_MODEM_SB_USER_TO_USER,
       
  3329         EIsiSubBlockTypeId8Len8,
       
  3330         sbStartOffSet ) &&
       
  3331         ( CALL_MODEM_STATUS_COMING == callStatusISA ) )
       
  3332         {
       
  3333 
       
  3334 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: Receive UUI.");
       
  3335 OstTrace0( TRACE_NORMAL, DUP3_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: Receive UUI" );
       
  3336 
       
  3337         // Get data length
       
  3338         TUint8 userToUserDataLen( aIsiMessage.Get8bit(
       
  3339         sbStartOffSet + CALL_MODEM_SB_USER_TO_USER_OFFSET_UTOULEN ) );
       
  3340 
       
  3341         // Get UUIE data
       
  3342         TPtrC8 data( aIsiMessage.GetData(
       
  3343             sbStartOffSet + CALL_MODEM_SB_USER_TO_USER_OFFSET_UTOU,
       
  3344             userToUserDataLen ) );
       
  3345 
       
  3346         // Copy UUS data to member variable. Receive UUI will be completed
       
  3347         // after EEtelLineNotifyIncomingCall is completed.
       
  3348         iReceivedUusData.Zero();
       
  3349         iReceivedUusData.Copy( data.Left( RMobileCall::KMaxUUISize ) );
       
  3350         }
       
  3351     // No else
       
  3352 
       
  3353     // If status is valid in Symbian OS
       
  3354     if ( RMobileCall::EStatusUnknown != statusETel )
       
  3355         {
       
  3356         TUint8 causeType( 0 );
       
  3357         TUint8 causeValue( 0 );
       
  3358         // Introduce target
       
  3359         TBuf16<RMobilePhone::KMaxMobileTelNumberSize> targetOrig;
       
  3360         TBuf16<RMobileCall::KCallingNameSize> targetOrigName;
       
  3361 
       
  3362         // Copy some data previously received to current MobileCallInfo
       
  3363         if ( mobileCallInfo.iCallId == iIncomingCallInfo.iCallId )
       
  3364             {
       
  3365             mobileCallInfo.iForwarded = iIncomingCallInfo.iForwarded;
       
  3366             mobileCallInfo.iValid |= RMobileCall::KCallForwarded;
       
  3367             mobileCallInfo.iRemoteParty = iIncomingCallInfo.iRemoteParty;
       
  3368             mobileCallInfo.iValid |= RMobileCall::KCallRemoteParty;
       
  3369             }
       
  3370         // No else
       
  3371 
       
  3372         // Read gsm redirecting address
  3307         if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3373         if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3308             ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3374             ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3309             CALL_MODEM_SB_USER_TO_USER,
  3375             CALL_MODEM_SB_REDIRECTING_ADDRESS,
  3310             EIsiSubBlockTypeId8Len8,
  3376             EIsiSubBlockTypeId8Len8,
  3311             sbStartOffSet ) &&
  3377             sbStartOffSet ) )
  3312             ( CALL_MODEM_STATUS_COMING == callStatusISA ) )
  3378             {
  3313             {
  3379 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_REDIRECTING_ADDRESS subblock");
  3314 
  3380 OstTrace0( TRACE_NORMAL, DUP4_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_REDIRECTING_ADDRESS subblock" );
  3315 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: Receive UUI.");
  3381 
  3316 OstTrace0( TRACE_NORMAL, DUP3_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: Receive UUI" );
  3382             // Get address length
  3317 
  3383             TUint8 redirectingAddressLength( aIsiMessage.Get8bit(
  3318             // Get data length
  3384                 sbStartOffSet +
  3319             TUint8 userToUserDataLen( aIsiMessage.Get8bit(
  3385                 CALL_MODEM_SB_REDIRECTING_ADDRESS_OFFSET_ADDRLEN ) );
  3320             sbStartOffSet + CALL_MODEM_SB_USER_TO_USER_OFFSET_UTOULEN ) );
  3386 
  3321 
  3387             // If there is a redirection address, the call has been forwarded
  3322             // Get UUIE data
  3388             // (but not vice versa; this information can come with another
  3323             TPtrC8 data( aIsiMessage.GetData(
  3389             // indication)
  3324                 sbStartOffSet + CALL_MODEM_SB_USER_TO_USER_OFFSET_UTOU,
  3390             if ( 0 != redirectingAddressLength )
  3325                 userToUserDataLen ) );
  3391                 {
  3326 
  3392                 mobileCallInfo.iForwarded = ETrue;
  3327             // Copy UUS data to member variable. Receive UUI will be completed
       
  3328             // after EEtelLineNotifyIncomingCall is completed.
       
  3329             iReceivedUusData.Zero();
       
  3330             iReceivedUusData.Copy( data.Left( RMobileCall::KMaxUUISize ) );
       
  3331             }
       
  3332         // No else
       
  3333 
       
  3334         // If status is valid in Symbian OS
       
  3335         if ( RMobileCall::EStatusUnknown != statusETel )
       
  3336             {
       
  3337             TUint8 causeType( 0 );
       
  3338             TUint8 causeValue( 0 );
       
  3339             // Introduce target
       
  3340             TBuf16<RMobilePhone::KMaxMobileTelNumberSize> targetOrig;
       
  3341             TBuf16<RMobileCall::KCallingNameSize> targetOrigName;
       
  3342 
       
  3343             // Copy some data previously received to current MobileCallInfo
       
  3344             if ( mobileCallInfo.iCallId == iIncomingCallInfo.iCallId )
       
  3345                 {
       
  3346                 mobileCallInfo.iForwarded = iIncomingCallInfo.iForwarded;
       
  3347                 mobileCallInfo.iValid |= RMobileCall::KCallForwarded;
  3393                 mobileCallInfo.iValid |= RMobileCall::KCallForwarded;
  3348                 mobileCallInfo.iRemoteParty = iIncomingCallInfo.iRemoteParty;
  3394                 }
  3349                 mobileCallInfo.iValid |= RMobileCall::KCallRemoteParty;
  3395                 // No else
  3350                 }
  3396             }
  3351             // No else
  3397             // No else
  3352 
  3398 
  3353             // Read gsm redirecting address
  3399         // Read CALL_MODEM_SB_LINE_ID
       
  3400         if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
       
  3401             ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
       
  3402             CALL_MODEM_SB_LINE_ID,
       
  3403             EIsiSubBlockTypeId8Len8,
       
  3404             sbStartOffSet ))
       
  3405             {
       
  3406 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_LINE_ID subblock");
       
  3407 OstTrace0( TRACE_NORMAL, DUP21_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_LINE_ID subblock" );
       
  3408 
       
  3409             origPresentInd = aIsiMessage.Get8bit(
       
  3410                 sbStartOffSet + CALL_MODEM_SB_LINE_ID_OFFSET_LINEID );
       
  3411             }
       
  3412         // Read all destination address
       
  3413         if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
       
  3414             ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
       
  3415             CALL_MODEM_SB_DESTINATION_ADDRESS,
       
  3416             EIsiSubBlockTypeId8Len8,
       
  3417             sbStartOffSet ) )
       
  3418             {
       
  3419 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_DESTINATION_ADDRESS subblock");
       
  3420 OstTrace0( TRACE_NORMAL, DUP5_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_DESTINATION_ADDRESS subblock" );
       
  3421 
       
  3422             ReadAllAddressDestination( mobileCallInfo, targetOrig, aIsiMessage, sbStartOffSet, origPresentInd );
       
  3423             }
       
  3424             // No else
       
  3425 
       
  3426         if ( CALL_MODEM_STATUS_CREATE == callStatusISA )
       
  3427             {
       
  3428             // Reset orginator address information. Destination address
       
  3429             // contents in CALL_MODEM_STATUS_IND are same as in CALL_MODEM_CREATE_REQ
       
  3430             // when call is in create state.
       
  3431             mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Zero();
       
  3432             mobileCallInfo.iValid &= ~RMobileCall::KCallRemoteParty;
       
  3433             }
       
  3434             // No else
       
  3435 
       
  3436             // Read call origin info
  3354             if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3437             if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3355                 ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3438                 ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3356                 CALL_MODEM_SB_REDIRECTING_ADDRESS,
  3439                 CALL_MODEM_SB_ORIGIN_INFO,
  3357                 EIsiSubBlockTypeId8Len8,
  3440                 EIsiSubBlockTypeId8Len8,
  3358                 sbStartOffSet ) )
  3441                 sbStartOffSet ) )
  3359                 {
  3442                 {
  3360 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_REDIRECTING_ADDRESS subblock");
  3443 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_ORIGIN_INFO subblock");
  3361 OstTrace0( TRACE_NORMAL, DUP4_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_REDIRECTING_ADDRESS subblock" );
  3444 OstTrace0( TRACE_NORMAL, DUP6_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_ORIGIN_INFO subblock" );
  3362 
  3445 
  3363                 // Get address length
  3446                 ReadCallInfo(
  3364                 TUint8 redirectingAddressLength( aIsiMessage.Get8bit(
  3447                     mobileCallInfo,
  3365                     sbStartOffSet +
  3448                     targetOrigName,
  3366                     CALL_MODEM_SB_REDIRECTING_ADDRESS_OFFSET_ADDRLEN ) );
  3449                     aIsiMessage,
  3367 
  3450                     sbStartOffSet );
  3368                 // If there is a redirection address, the call has been forwarded
       
  3369                 // (but not vice versa; this information can come with another
       
  3370                 // indication)
       
  3371                 if ( 0 != redirectingAddressLength )
       
  3372                     {
       
  3373                     mobileCallInfo.iForwarded = ETrue;
       
  3374                     mobileCallInfo.iValid |= RMobileCall::KCallForwarded;
       
  3375                     }
       
  3376                     // No else
       
  3377                 }
  3451                 }
  3378                 // No else
  3452                 // No else
  3379 
  3453 
  3380             // Read CALL_MODEM_SB_LINE_ID
  3454             // Get error value
  3381             if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3455             if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3382                 ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3456                 ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3383                 CALL_MODEM_SB_LINE_ID,
  3457                 CALL_MODEM_SB_CAUSE,
  3384                 EIsiSubBlockTypeId8Len8,
       
  3385                 sbStartOffSet ))
       
  3386                 {
       
  3387 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_LINE_ID subblock");
       
  3388 OstTrace0( TRACE_NORMAL, DUP21_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_LINE_ID subblock" );
       
  3389 
       
  3390                 origPresentInd = aIsiMessage.Get8bit(
       
  3391                     sbStartOffSet + CALL_MODEM_SB_LINE_ID_OFFSET_LINEID );
       
  3392                 }
       
  3393             // Read all destination address
       
  3394             if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
       
  3395                 ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
       
  3396                 CALL_MODEM_SB_DESTINATION_ADDRESS,
       
  3397                 EIsiSubBlockTypeId8Len8,
  3458                 EIsiSubBlockTypeId8Len8,
  3398                 sbStartOffSet ) )
  3459                 sbStartOffSet ) )
  3399                 {
  3460                 {
  3400 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_DESTINATION_ADDRESS subblock");
  3461 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_CAUSE subblock");
  3401 OstTrace0( TRACE_NORMAL, DUP5_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_DESTINATION_ADDRESS subblock" );
  3462 OstTrace0( TRACE_NORMAL, DUP7_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_CAUSE subblock" );
  3402 
  3463 
  3403                 ReadAllAddressDestination( mobileCallInfo, targetOrig, aIsiMessage, sbStartOffSet, origPresentInd );
  3464                 // Get cause type and value
       
  3465                 causeType = aIsiMessage.Get8bit(
       
  3466                     sbStartOffSet + CALL_MODEM_SB_CAUSE_OFFSET_CAUSETYPE );
       
  3467 
       
  3468                 // Get call cause value
       
  3469                 causeValue = aIsiMessage.Get8bit(
       
  3470                     sbStartOffSet + CALL_MODEM_SB_CAUSE_OFFSET_CAUSE );
  3404                 }
  3471                 }
  3405                 // No else
  3472                 // No else
  3406 
  3473 
  3407             if ( CALL_MODEM_STATUS_CREATE == callStatusISA )
  3474             // If iDestPostAddressIncluded flag is (ETrue) we don't handle
  3408                 {
  3475             // CALL_MODEM_SB_DESTINATION_POST_ADDRESS subblock here
  3409                 // Reset orginator address information. Destination address
  3476             if ( !iDestPostAddressIncluded )
  3410                 // contents in CALL_MODEM_STATUS_IND are same as in CALL_MODEM_CREATE_REQ
  3477                 {
  3411                 // when call is in create state.
  3478                 // CALL_MODEM_SB_DESTINATION_POST_ADDRESS
  3412                 mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Zero();
  3479                 // If Destination post address is found, save it.
  3413                 mobileCallInfo.iValid &= ~RMobileCall::KCallRemoteParty;
  3480                 // It will be sent later when this call is active
  3414                 }
       
  3415                 // No else
       
  3416 
       
  3417                 // Read call origin info
       
  3418                 if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3481                 if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
  3419                     ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3482                     ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
  3420                     CALL_MODEM_SB_ORIGIN_INFO,
  3483                     CALL_MODEM_SB_DESTINATION_POST_ADDRESS,
  3421                     EIsiSubBlockTypeId8Len8,
  3484                     EIsiSubBlockTypeId8Len8,
  3422                     sbStartOffSet ) )
  3485                     sbStartOffSet ) )
  3423                     {
  3486                     {
  3424 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_ORIGIN_INFO subblock");
       
  3425 OstTrace0( TRACE_NORMAL, DUP6_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_ORIGIN_INFO subblock" );
       
  3426 
       
  3427                     ReadCallInfo(
       
  3428                         mobileCallInfo,
       
  3429                         targetOrigName,
       
  3430                         aIsiMessage,
       
  3431                         sbStartOffSet );
       
  3432                     }
       
  3433                     // No else
       
  3434 
       
  3435                 // Get error value
       
  3436                 if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
       
  3437                     ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
       
  3438                     CALL_MODEM_SB_CAUSE,
       
  3439                     EIsiSubBlockTypeId8Len8,
       
  3440                     sbStartOffSet ) )
       
  3441                     {
       
  3442 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_CAUSE subblock");
       
  3443 OstTrace0( TRACE_NORMAL, DUP7_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_CAUSE subblock" );
       
  3444 
       
  3445                     // Get cause type and value
       
  3446                     causeType = aIsiMessage.Get8bit(
       
  3447                         sbStartOffSet + CALL_MODEM_SB_CAUSE_OFFSET_CAUSETYPE );
       
  3448 
       
  3449                     // Get call cause value
       
  3450                     causeValue = aIsiMessage.Get8bit(
       
  3451                         sbStartOffSet + CALL_MODEM_SB_CAUSE_OFFSET_CAUSE );
       
  3452                     }
       
  3453                     // No else
       
  3454 
       
  3455                 // If iDestPostAddressIncluded flag is (ETrue) we don't handle
       
  3456                 // CALL_MODEM_SB_DESTINATION_POST_ADDRESS subblock here
       
  3457                 if ( !iDestPostAddressIncluded )
       
  3458                     {
       
  3459                     // CALL_MODEM_SB_DESTINATION_POST_ADDRESS
       
  3460                     // If Destination post address is found, save it.
       
  3461                     // It will be sent later when this call is active
       
  3462                     if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
       
  3463                         ISI_HEADER_SIZE + SIZE_CALL_MODEM_STATUS_IND,
       
  3464                         CALL_MODEM_SB_DESTINATION_POST_ADDRESS,
       
  3465                         EIsiSubBlockTypeId8Len8,
       
  3466                         sbStartOffSet ) )
       
  3467                         {
       
  3468 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:CALL_MODEM_SB_DESTINATION_POST_ADDRESS");
  3487 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:CALL_MODEM_SB_DESTINATION_POST_ADDRESS");
  3469 OstTrace0( TRACE_NORMAL, DUP8_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_DESTINATION_POST_ADDRESS" );
  3488 OstTrace0( TRACE_NORMAL, DUP8_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: CALL_MODEM_SB_DESTINATION_POST_ADDRESS" );
  3470 
  3489 
  3471                         // Get address length
  3490                     // Get address length
  3472                         TUint8 destinationPostAddressLength( aIsiMessage.Get8bit(
  3491                     TUint8 destinationPostAddressLength( aIsiMessage.Get8bit(
  3473                             sbStartOffSet + CALL_MODEM_SB_DESTINATION_POST_ADDRESS_OFFSET_ADDRLEN ) );
  3492                         sbStartOffSet + CALL_MODEM_SB_DESTINATION_POST_ADDRESS_OFFSET_ADDRLEN ) );
  3474 
  3493 
  3475                         // Get address
  3494                     // Get address
  3476                         TPtrC8 postAddr( aIsiMessage.GetData(
  3495                     TPtrC8 postAddr( aIsiMessage.GetData(
  3477                             sbStartOffSet + CALL_MODEM_SB_DESTINATION_POST_ADDRESS_OFFSET_ADDR,
  3496                         sbStartOffSet + CALL_MODEM_SB_DESTINATION_POST_ADDRESS_OFFSET_ADDR,
  3478                             destinationPostAddressLength * 2 ) );
  3497                         destinationPostAddressLength * 2 ) );
  3479 
  3498 
  3480                         // Do not handle post address which lenght is over 15 chars
  3499                     // Do not handle post address which lenght is over 15 chars
  3481                         if ( ( KDestPostAddressMaxLength * 2 ) >= postAddr.Length() )
  3500                     if ( ( KDestPostAddressMaxLength * 2 ) >= postAddr.Length() )
  3482                             {
  3501                         {
  3483 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:lenght less than 15 char");
  3502 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:lenght less than 15 char");
  3484 OstTrace0( TRACE_NORMAL, DUP9_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: Lenght less than 15 char" );
  3503 OstTrace0( TRACE_NORMAL, DUP9_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: Lenght less than 15 char" );
  3485                             // Copy 8-bit name to the 16-bit target using correct endianess
  3504                         // Copy 8-bit name to the 16-bit target using correct endianess
  3486                             TIsiUtility::CopyFromBigEndian(
  3505                         TIsiUtility::CopyFromBigEndian(
  3487                                 postAddr,
  3506                             postAddr,
  3488                                 iDestPostAddress );
  3507                             iDestPostAddress );
  3489 
  3508 
  3490                             TInt postAddrLength( iDestPostAddress.Length() );
  3509                         TInt postAddrLength( iDestPostAddress.Length() );
  3491 
  3510 
  3492                             // Store call ID to identify SIM ATK call
  3511                         // Store call ID to identify SIM ATK call
  3493                             iDtmfPostAddressCallId = mobileCallInfo.iCallId;
  3512                         iDtmfPostAddressCallId = mobileCallInfo.iCallId;
  3494 
  3513 
  3495                             // Check that there is not "w" char. "w" will mess up internal
  3514                         // Check that there is not "w" char. "w" will mess up internal
  3496                             // DTMF sending process
  3515                         // DTMF sending process
  3497                             for ( TInt i( 0 ); i < postAddrLength; i++ )
  3516                         for ( TInt i( 0 ); i < postAddrLength; i++ )
       
  3517                             {
       
  3518                             if ( 'w' == iDestPostAddress[ i ] )
  3498                                 {
  3519                                 {
  3499                                 if ( 'w' == iDestPostAddress[ i ] )
       
  3500                                     {
       
  3501 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:w found");
  3520 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:w found");
  3502 OstTrace0( TRACE_NORMAL, DUP10_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: w found" );
  3521 OstTrace0( TRACE_NORMAL, DUP10_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: w found" );
  3503                                     iDestPostAddress.SetLength( 0 );
  3522                                 iDestPostAddress.SetLength( 0 );
  3504                                     iDtmfPostAddressCallId = 0;
  3523                                 iDtmfPostAddressCallId = 0;
  3505                                     break;
  3524                                 break;
  3506                                     }
       
  3507                                 }
  3525                                 }
  3508                             }
  3526                             }
  3509                         }
  3527                         }
       
  3528                     }
  3510 
  3529 
  3511 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:callStatusISA: %d", callStatusISA);
  3530 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:callStatusISA: %d", callStatusISA);
  3512 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:mobileCallInfo.iCallId: %d", mobileCallInfo.iCallId);
  3531 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:mobileCallInfo.iCallId: %d", mobileCallInfo.iCallId);
  3513 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:iDtmfPostAddressCallId: %d", iDtmfPostAddressCallId);
  3532 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:iDtmfPostAddressCallId: %d", iDtmfPostAddressCallId);
  3514 OstTraceExt1( TRACE_NORMAL, DUP11_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;callStatusISA=%hhu", callStatusISA );
  3533 OstTraceExt1( TRACE_NORMAL, DUP11_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;callStatusISA=%hhu", callStatusISA );
  3515 OstTraceExt1( TRACE_NORMAL, DUP13_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;mobileCallInfo.iCallId=%hhu", mobileCallInfo.iCallId );
  3534 OstTraceExt1( TRACE_NORMAL, DUP13_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;mobileCallInfo.iCallId=%hhu", mobileCallInfo.iCallId );
  3516 OstTraceExt1( TRACE_NORMAL, DUP12_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;iDtmfPostAddressCallId=%hhu", iDtmfPostAddressCallId );
  3535 OstTraceExt1( TRACE_NORMAL, DUP12_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;iDtmfPostAddressCallId=%hhu", iDtmfPostAddressCallId );
  3517 
  3536 
  3518                     // When call is active, send post address
  3537                 // When call is active, send post address
  3519                     // DTMF sending in case this is SIMATK call
  3538                 // DTMF sending in case this is SIMATK call
  3520                     if ( CALL_MODEM_STATUS_ACTIVE == callStatusISA &&
  3539                 if ( CALL_MODEM_STATUS_ACTIVE == callStatusISA &&
  3521                         iDtmfPostAddressCallId == mobileCallInfo.iCallId &&
  3540                     iDtmfPostAddressCallId == mobileCallInfo.iCallId &&
  3522                         0 < iDtmfPostAddressCallId )
  3541                     0 < iDtmfPostAddressCallId )
  3523                         {
  3542                     {
  3524 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:Dtmf post address sending (ACTIVE)");
  3543 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:Dtmf post address sending (ACTIVE)");
  3525 OstTrace0( TRACE_NORMAL, DUP17_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL, Dtmf post address sending (ACTIVE)" );
  3544 OstTrace0( TRACE_NORMAL, DUP17_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL, Dtmf post address sending (ACTIVE)" );
  3526                         iDtmfMessHandler->SendPostAddressL ( &iDestPostAddress );
  3545                     iDtmfMessHandler->SendPostAddressL ( &iDestPostAddress );
  3527 
  3546 
  3528                         // Reset iDestPostAddress and iDtmfPostAddressCallId to prevent multiple
  3547                     // Reset iDestPostAddress and iDtmfPostAddressCallId to prevent multiple
  3529                         // requests
  3548                     // requests
  3530                         iDestPostAddress.SetLength( 0 );
  3549                     iDestPostAddress.SetLength( 0 );
  3531                         iDtmfPostAddressCallId = 0;
  3550                     iDtmfPostAddressCallId = 0;
  3532                         }
  3551                     }
  3533 
  3552 
  3534                     // If call fails for some reason, and goes to idle, reset
  3553                 // If call fails for some reason, and goes to idle, reset
  3535                     // iDestPostAddress and iDtmfPostAddressCallId
  3554                 // iDestPostAddress and iDtmfPostAddressCallId
  3536                     if ( CALL_MODEM_STATUS_IDLE == callStatusISA &&
  3555                 if ( CALL_MODEM_STATUS_IDLE == callStatusISA &&
  3537                         iDtmfPostAddressCallId == mobileCallInfo.iCallId &&
  3556                     iDtmfPostAddressCallId == mobileCallInfo.iCallId &&
  3538                         0 < iDtmfPostAddressCallId )
  3557                     0 < iDtmfPostAddressCallId )
  3539                         {
  3558                     {
  3540 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:If call fails for some reason (IDLE)");
  3559 TFLOGSTRING("TSY: CMmCallMessHandler::CallStatusIndL:If call fails for some reason (IDLE)");
  3541 OstTrace0( TRACE_NORMAL, DUP14_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: If call fails for some reason (IDLE)" );
  3560 OstTrace0( TRACE_NORMAL, DUP14_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL: If call fails for some reason (IDLE)" );
  3542                         iDestPostAddress.SetLength( 0 );
  3561                     iDestPostAddress.SetLength( 0 );
  3543                         iDtmfPostAddressCallId = 0;
  3562                     iDtmfPostAddressCallId = 0;
  3544                         }
  3563                     }
  3545 
  3564 
  3546 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:iDtmfPostAddressCallId: %d After value",iDtmfPostAddressCallId);
  3565 TFLOGSTRING2("TSY: CMmCallMessHandler::CallStatusIndL:iDtmfPostAddressCallId: %d After value",iDtmfPostAddressCallId);
  3547 OstTraceExt1( TRACE_NORMAL, DUP18_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;iDtmfPostAddressCallId=%hhu After value", iDtmfPostAddressCallId );
  3566 OstTraceExt1( TRACE_NORMAL, DUP18_CMMCALLMESSHANDLER_CALLSTATUSINDL, "CMmCallMessHandler::CallStatusIndL;iDtmfPostAddressCallId=%hhu After value", iDtmfPostAddressCallId );
  3548                     }
  3567                 }
  3549                     // No else
  3568                 // No else
  3550 
  3569 
  3551             if ( CALL_MODEM_SSD_NO_CUG == ( iDiagnosticOctet & KMaskBits1to7 ) &&
  3570             if ( CALL_MODEM_SSD_NO_CUG == ( iDiagnosticOctet & KMaskBits1to7 ) &&
  3552                 CALL_MODEM_NW_CAUSE_FACILITY_REJECTED == causeValue )
  3571                 CALL_MODEM_NW_CAUSE_FACILITY_REJECTED == causeValue )
  3553                 {
  3572                 {
  3554                 // This is special situation. Dial is made to number that is not
  3573                 // This is special situation. Dial is made to number that is not
  3577 
  3596 
  3578             // COMPLETE INCOMING CALL NOTIFICATION
  3597             // COMPLETE INCOMING CALL NOTIFICATION
  3579             CompleteIncomingCallNotif( mobileCallInfo, statusETel );
  3598             CompleteIncomingCallNotif( mobileCallInfo, statusETel );
  3580             // MT calls which went waiting can alert twice
  3599             // MT calls which went waiting can alert twice
  3581             // reset stored incoming call information only after they actually rang
  3600             // reset stored incoming call information only after they actually rang
  3582             if ( CALL_MODEM_STATUS_MT_ALERTING == callStatusISA )
  3601             // or when MT call is answered
       
  3602             if ( CALL_MODEM_STATUS_MT_ALERTING == callStatusISA || 
       
  3603                  CALL_MODEM_STATUS_ANSWERED == callStatusISA )
  3583                 {
  3604                 {
  3584                 ResetIncomingCallInfo( iIncomingCallInfo );
  3605                 ResetIncomingCallInfo( iIncomingCallInfo );
  3585                 }
  3606                 }
  3586 
  3607 
  3587         // Update mobile call info to data port handler also
  3608         // Update mobile call info to data port handler also
  3588             if ( ( CALL_MODEM_MODE_MULTIMEDIA == callModeISA ) &&
  3609             if ( CALL_MODEM_MODE_MULTIMEDIA == callModeISA )
  3589                 CALL_MODEM_STATUS_WAITING != callStatusISA )
       
  3590                 {
  3610                 {
  3591                 TBool isMultimedia( CALL_MODEM_MODE_MULTIMEDIA == callModeISA );
  3611                 TBool isMultimedia( CALL_MODEM_MODE_MULTIMEDIA == callModeISA );
  3592                 TBool isWaitingCall( iWaitingCall == mobileCallInfo.iCallId );
  3612                 TBool isWaitingCall( iWaitingCall == mobileCallInfo.iCallId );
  3593 
  3613 
  3594                 SetMobileCallInfo(
  3614                 SetMobileCallInfo(
  3657             else if ( iWaitingCall == mobileCallInfo.iCallId )
  3677             else if ( iWaitingCall == mobileCallInfo.iCallId )
  3658                 {
  3678                 {
  3659                 iWaitingCall = KSymbianCallIdNone;
  3679                 iWaitingCall = KSymbianCallIdNone;
  3660                 }
  3680                 }
  3661             // No else
  3681             // No else
  3662             }
  3682         }
  3663         // No else
  3683         // No else
  3664 
       
  3665         }//end of if(incoming call && status == idle)
       
  3666     }
  3684     }
  3667 
  3685 
  3668 // -----------------------------------------------------------------------------
  3686 // -----------------------------------------------------------------------------
  3669 // CMmCallMessHandler::CallComingInd
  3687 // CMmCallMessHandler::CallComingInd
  3670 // This method breaks incoming call indication message and saves information
  3688 // This method breaks incoming call indication message and saves information
  4989 
  5007 
  4990     if( CSD_CALL_CAUSE_NONE != causeValue )
  5008     if( CSD_CALL_CAUSE_NONE != causeValue )
  4991         {
  5009         {
  4992         result = CMmStaticUtility::CSCauseToEpocError( PN_CSD, 0x00, causeValue );
  5010         result = CMmStaticUtility::CSCauseToEpocError( PN_CSD, 0x00, causeValue );
  4993 
  5011 
  4994         //Remove Pipe for wideo telephony
       
  4995         PnsPipeRemoveReq();
       
  4996 
       
  4997         // set call id and mode
  5012         // set call id and mode
  4998         if ( iMobileCallInfo.iCallId < 0 )
  5013         if ( iMobileCallInfo.iCallId < 0 )
  4999             {
  5014             {
  5000             // call id not defined, complete with id 0
  5015             // call id not defined, complete with id 0
  5001             // =>special cases in CMmMessageRouterBase::RouteCompletionL
  5016             // =>special cases in CMmMessageRouterBase::RouteCompletionL
  5031                         &callDataPackage,
  5046                         &callDataPackage,
  5032                         result );
  5047                         result );
  5033                 break;
  5048                 break;
  5034                 }
  5049                 }
  5035             case CSD_CALL_RELEASE:
  5050             case CSD_CALL_RELEASE:
       
  5051             case CSD_CALL_REJECT:
  5036                 {
  5052                 {
  5037                 // Complete failed HangUp request
  5053                 // Complete failed HangUp request
  5038                 iMessageRouter->Complete(
  5054                 iMessageRouter->Complete(
  5039                         EEtelCallHangUp,
  5055                         EEtelCallHangUp,
  5040                         &callDataPackage,
  5056                         &callDataPackage,
  5041                         result );
  5057                         result );
  5042                 break;
  5058                 break;
  5043                 }
  5059                 }
  5044             case CSD_CALL_REJECT:
       
  5045             default:
  5060             default:
  5046                 {
  5061                 {
  5047 TFLOGSTRING("TSY: CMmCallMessHandler::CsdCallControlResp. Switch oper_Id case default.");
  5062 TFLOGSTRING("TSY: CMmCallMessHandler::CsdCallControlResp. Switch oper_Id case default.");
  5048 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_CSDCALLCONTROLRESP, "CMmCallMessHandler::CsdCallControlResp, Switch oper_Id case default" );
  5063 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_CSDCALLCONTROLRESP, "CMmCallMessHandler::CsdCallControlResp, Switch oper_Id case default" );
  5049                 break;
  5064                 break;
  5050                 }
  5065                 }
  5051             }
       
  5052         }
       
  5053     else
       
  5054         {
       
  5055         if ( CSD_CALL_RELEASE == oper_Id )
       
  5056             {
       
  5057             //Remove Pipe for wideo telephony
       
  5058             PnsPipeRemoveReq();
       
  5059             }
  5066             }
  5060         }
  5067         }
  5061     }
  5068     }
  5062 
  5069 
  5063 // -----------------------------------------------------------------------------
  5070 // -----------------------------------------------------------------------------
  5096                 EEtelCallAnswer, &callData, KErrNone );
  5103                 EEtelCallAnswer, &callData, KErrNone );
  5097             }
  5104             }
  5098         }
  5105         }
  5099     else
  5106     else
  5100         {
  5107         {
  5101         // MT video call case we have to remove pipe
  5108         // MO/MT video call released. we have to remove pipe.
  5102         if ( iVideoCallMtReleased )
  5109         if ( iVideoCallReleased )
  5103             {
  5110             {
  5104 TFLOGSTRING("TSY: CMmCallMessHandler::CsdVideoCallStatusInd: call MT releated");
  5111 TFLOGSTRING("TSY: CMmCallMessHandler::CsdVideoCallStatusInd: call MO/MT releated");
  5105 OstTrace0( TRACE_NORMAL, DUP4_CMMCALLMESSHANDLER_CSDVIDEOCALLSTATUSIND, "CMmCallMessHandler::CsdVideoCallStatusInd: call MT released" );
  5112 OstTrace0( TRACE_NORMAL, DUP4_CMMCALLMESSHANDLER_CSDVIDEOCALLSTATUSIND, "CMmCallMessHandler::CsdVideoCallStatusInd: call MO/MT released" );
  5106             //Remove Pipe for wideo telephony
  5113             //Remove Pipe for wideo telephony
  5107             PnsPipeRemoveReq();
  5114             PnsPipeRemoveReq();
  5108             iVideoCallMtReleased = EFalse;
  5115             iVideoCallReleased = EFalse;
  5109             }
  5116             }
  5110         }
  5117         }
  5111     // CSD_VIDEO_CALL_STATUS_DISCONNECT arrives also when call establishment
  5118     // CSD_VIDEO_CALL_STATUS_DISCONNECT arrives also when call establishment
  5112     // fails
  5119     // fails
  5113     // reset call direction to avoid further unnecessary IPC completions
  5120     // reset call direction to avoid further unnecessary IPC completions
  5314     if ( callParams && callInfo )
  5321     if ( callParams && callInfo )
  5315         {
  5322         {
  5316 TFLOGSTRING("TSY: CMmCallMessHandler::DialDataCall. callParams and callInfo ok." );
  5323 TFLOGSTRING("TSY: CMmCallMessHandler::DialDataCall. callParams and callInfo ok." );
  5317 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_DIALDATACALL, "CMmCallMessHandler::DialDataCall;callParams and callInfo ok." );
  5324 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_DIALDATACALL, "CMmCallMessHandler::DialDataCall;callParams and callInfo ok." );
  5318 
  5325 
       
  5326         // if CTSY does not set call id as valid we need to copy it from
       
  5327         // data package
       
  5328         if ( 0 == callInfo->iValid & RMobileCall::KCallId )
       
  5329             {
       
  5330 TFLOGSTRING("TSY: CMmCallMessHandler::DialDataCall. Copy call mode into call info");
       
  5331 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_DIALDATACALL, "CMmCallMessHandler::DialDataCall. Copy call mode into call info" );
       
  5332             aDataPackage->GetCallIdAndMode(
       
  5333                 callInfo->iCallId, callInfo->iService );
       
  5334             // service is always valid
       
  5335             callInfo->iValid |= RMobileCall::KCallId;
       
  5336             }
       
  5337 
  5319         SetMobileCallInfo( *callInfo );
  5338         SetMobileCallInfo( *callInfo );
  5320 
  5339 
  5321         iIdRestrict = recentCallParams.iIdRestrict;
  5340         iIdRestrict = recentCallParams.iIdRestrict;
  5322         iTelNumber = callInfo->iDialledParty.iTelNumber;
  5341         iTelNumber = callInfo->iDialledParty.iTelNumber;
  5323 
  5342 
  5324         // Dial the call
  5343         // Dial the call
  5325         iCallOperationID = CSD_CALL_CREATE;
  5344         iCallOperationID = CSD_CALL_CREATE;
       
  5345         iCallDirection = RMobileCall::EMobileOriginated;
  5326 
  5346 
  5327         // Create Pipe for wideo telephony
  5347         // Create Pipe for wideo telephony
  5328         // If creation succeed, then CsdCallControlReq( CSD_CALL_CREATE )
  5348         // If creation succeed, then CsdCallControlReq( CSD_CALL_CREATE )
  5329         // is called on PnsPipeCreateResp()
  5349         // is called on PnsPipeCreateResp()
  5330         PnsPipeCreateReq( PN_PIPE_ENABLE );
  5350         PnsPipeCreateReq( PN_PIPE_ENABLE );
  5403 
  5423 
  5404     // If valid call id
  5424     // If valid call id
  5405     if ( 0 < aCallId )
  5425     if ( 0 < aCallId )
  5406         {
  5426         {
  5407         // Hangup the call
  5427         // Hangup the call
  5408         ret = CsdCallControlReq( CSD_CALL_RELEASE );
  5428         if( iMobileCallInfo.iCallId == aCallId &&
       
  5429             RMobileCall::EStatusRinging == iMobileCallInfo.iStatus )
       
  5430             {
       
  5431             ret = CsdCallControlReq( CSD_CALL_REJECT );
       
  5432             }
       
  5433         else
       
  5434             {
       
  5435             ret = CsdCallControlReq( CSD_CALL_RELEASE );
       
  5436             }
  5409         }
  5437         }
  5410     else if ( RMobileCall::EStatusIdle == iMobileCallInfo.iStatus )
  5438     else if ( RMobileCall::EStatusIdle == iMobileCallInfo.iStatus )
  5411         {
  5439         {
  5412         iMobileCallInfo.iStatus = RMobileCall::EStatusUnknown;
  5440         iMobileCallInfo.iStatus = RMobileCall::EStatusUnknown;
  5413         }
  5441         }
  5420 // Construct a PNS_PIPE_CREATE_REQ ISI-message
  5448 // Construct a PNS_PIPE_CREATE_REQ ISI-message
  5421 // ----------------------------------------------------------------------------
  5449 // ----------------------------------------------------------------------------
  5422 //
  5450 //
  5423 TInt CMmCallMessHandler::PnsPipeCreateReq( const TUint8 aPipeStateAfter ) const
  5451 TInt CMmCallMessHandler::PnsPipeCreateReq( const TUint8 aPipeStateAfter ) const
  5424     {
  5452     {
  5425 
       
  5426     TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeCreateReq" );
  5453     TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeCreateReq" );
  5427 OstTrace0( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPECREATEREQ, "CMmCallMessHandler::PnsPipeCreateReq" );
  5454 OstTrace0( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPECREATEREQ, "CMmCallMessHandler::PnsPipeCreateReq" );
  5428 
  5455 
  5429    // create buffer for isi msg data
  5456    // create buffer for isi msg data
  5430 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
  5457 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
  5437     data.Append( PN_MSG_PRIORITY_HIGH );
  5464     data.Append( PN_MSG_PRIORITY_HIGH );
  5438     data.Append( KFirstPepDevice );
  5465     data.Append( KFirstPepDevice );
  5439     data.Append( EIscNokiaDataport1 );
  5466     data.Append( EIscNokiaDataport1 );
  5440     data.Append( KFirstPepType );
  5467     data.Append( KFirstPepType );
  5441     data.Append( KCallPadding );
  5468     data.Append( KCallPadding );
  5442     data.Append( iSecondPepDeviceId );
  5469     data.Append( KSecondPepDevice );
  5443     data.Append( iSecondPepObjectId );
  5470     data.Append( KSecondPepObject );
  5444     data.Append( KSecondPepType );
  5471     data.Append( KSecondPepType );
  5445     data.Append( KCallPadding );
  5472     data.Append( KCallPadding );
  5446 
  5473 
  5447     // Sending message to phonet
  5474     // Sending message to phonet
  5448     return iPhoNetSender->Send(
  5475     return iPhoNetSender->Send(
  5485         if ( PN_PIPE_NO_ERROR == errorCode )
  5512         if ( PN_PIPE_NO_ERROR == errorCode )
  5486             {
  5513             {
  5487             // Dial or Answer the call
  5514             // Dial or Answer the call
  5488             CsdCallControlReq( iCallOperationID );
  5515             CsdCallControlReq( iCallOperationID );
  5489             }
  5516             }
  5490         else if ( PN_PIPE_ERR_GENERAL == errorCode ) // Check PIPE Error Code
  5517         else
  5491             {
  5518             {
  5492             TUint8 pep1ErrorCode( aIsiMessage.Get8bit(
  5519             CCallDataPackage callData;
  5493 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
  5520             // set call id and mode
  5494                 ISI_HEADER_SIZE + PNS_PIPE_CREATE_RESP_OFFSET_PEP1ERRORCODE ) );
  5521             callData.SetCallIdAndMode(
  5495 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
  5522                 iMobileCallInfo.iCallId, iMobileCallInfo.iService );
  5496                 ISI_HEADER_SIZE + CM_PIPE_CREATE_RESP_OFFSET_PEP1ERRORCODE ) );
  5523             TInt err = CMmStaticUtility::PacketDataCSCauseToEpocError(
  5497 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
  5524                  errorCode, PN_PIPE );
  5498 
  5525             if ( RMobileCall::EMobileTerminated == iCallDirection )
  5499             TUint8 pep2ErrorCode( aIsiMessage.Get8bit(
  5526                 {
  5500 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
  5527                 // answering video call fails
  5501                 ISI_HEADER_SIZE + PNS_PIPE_CREATE_RESP_OFFSET_PEP2ERRORCODE ) );
  5528                 iMessageRouter->Complete(
  5502 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
  5529                     EEtelCallAnswer,
  5503                 ISI_HEADER_SIZE + CM_PIPE_CREATE_RESP_OFFSET_PEP2ERRORCODE ) );
  5530                     &callData,
  5504 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
  5531                     err );
  5505 
  5532                 }
  5506             // Check PEP Error Codes
  5533             else
  5507             if ( pep1ErrorCode == PN_PIPE_ERR_PEP_IN_USE ||
  5534                 {
  5508                  pep1ErrorCode == PN_PIPE_ERR_ALL_PIPES_IN_USE ||
  5535                 // dialling video call fails
  5509                  pep2ErrorCode == PN_PIPE_ERR_PEP_IN_USE ||
  5536                 // for MO calls pipe is created before iCallDirection is set
  5510                  pep2ErrorCode == PN_PIPE_ERR_ALL_PIPES_IN_USE )
  5537                 iMessageRouter->Complete(
  5511                 {
  5538                     EEtelCallDial,
  5512                 // PEP can't create more pipes (all pipes in use),
  5539                     &callData,
  5513                 // error value is updated here
  5540                     err );
  5514 TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeCreateResp. ErrorCode changed to PN_PIPE_ERR_ALL_PIPES_IN_USE" );
  5541                 }
  5515 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_PNSPIPECREATERESP, "CMmCallMessHandler::PnsPipeCreateResp, ErrorCode changed to PN_PIPE_ERR_ALL_PIPES_IN_USE" );
  5542             iCallDirection = RMobileCall::EDirectionUnknown;
  5516                 }
  5543             }
  5517             }
  5544         }
  5518         //no else
       
  5519         }
       
  5520     //no else
       
  5521     }
       
  5522 
       
  5523 // ----------------------------------------------------------------------------
       
  5524 // CMmCallMessHandler::PnsPipeEnableReq
       
  5525 // Construct a PNS_PIPE_ENABLE_REQ ISI-message.
       
  5526 // ----------------------------------------------------------------------------
       
  5527 //
       
  5528 TInt CMmCallMessHandler::PnsPipeEnableReq() const
       
  5529     {
       
  5530     TFLOGSTRING2("TSY: CMmCallMessHandler::PnsPipeEnableReq. PipeHandle: %d", iPipeHandle );
       
  5531 OstTraceExt1( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_PNSPIPEENABLEREQ, "CMmCallMessHandler::PnsPipeEnableReq;pipehandle=%hhu", iPipeHandle );
       
  5532 
       
  5533     // TODO: this method is not called. See TelAd-110
       
  5534 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5535     TBuf8<SIZE_PNS_PIPE_ENABLE_REQ> data;
       
  5536 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5537     TBuf8<SIZE_CM_PIPE_ENABLE_REQ> data;
       
  5538 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5539 
       
  5540     data.Append( iPipeHandle );
       
  5541     data.Append( KCallPadding );
       
  5542 
       
  5543     // Send Isi message via phonet
       
  5544     return iPhoNetSender->Send(
       
  5545         PN_PIPE, KPipeTransID, PNS_PIPE_ENABLE_REQ, data );
       
  5546     }
       
  5547 
       
  5548 // ----------------------------------------------------------------------------
       
  5549 // CMmCallMessHandler::PnsPipeEnableResp
       
  5550 // Breaks a PNS_PIPE_ENABLE_RESP ISI-message.
       
  5551 // ----------------------------------------------------------------------------
       
  5552 //
       
  5553 void CMmCallMessHandler::PnsPipeEnableResp(
       
  5554     const TIsiReceiveC& aIsiMessage )
       
  5555     {
       
  5556 TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeEnableResp");
       
  5557 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_PNSPIPEENABLERESP, "CMmCallMessHandler::PnsPipeEnableResp" );
       
  5558     // Get Transaction Id from the ISI message
       
  5559     TUint8 transId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
       
  5560 
       
  5561     // TODO: this code makes no sense. See TelAd-110
       
  5562     if ( KPipeTransID == transId )
       
  5563         {
       
  5564         // Get Errorcode from the ISI message
       
  5565         TUint8 errorCode( aIsiMessage.Get8bit(
       
  5566 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5567             ISI_HEADER_SIZE + PNS_PIPE_ENABLE_RESP_OFFSET_ERRORCODE ) );
       
  5568 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5569             ISI_HEADER_SIZE + CM_PIPE_ENABLE_RESP_OFFSET_ERRORCODE ) );
       
  5570 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5571 
       
  5572 TFLOGSTRING4("TSY: CMmCallMessHandler::PnsPipeEnableResp - traId: %d, PipeHandle: %d, ErrorCode: %d", transId, iPipeHandle, errorCode );
       
  5573 OstTraceExt3( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPEENABLERESP, "CMmCallMessHandler::PnsPipeEnableResp;transId=%hhu;pipeHandle=%hhu;errorCode=%hhu", transId, iPipeHandle, errorCode );
       
  5574         }
       
  5575     // no else
       
  5576     }
       
  5577 
       
  5578 // ----------------------------------------------------------------------------
       
  5579 // CMmCallMessHandler::PnsPipeResetReq
       
  5580 // Construct a PNS_PIPE_RESET_REQ ISI-message.
       
  5581 // ----------------------------------------------------------------------------
       
  5582 //
       
  5583 TInt CMmCallMessHandler::PnsPipeResetReq(
       
  5584     const TUint8 aStateAfterReset )
       
  5585     {
       
  5586     TFLOGSTRING2("TSY: CMmCallMessHandler::PnsPipeResetReq. PipeHandle: %d", iPipeHandle );
       
  5587 OstTraceExt1( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPERESETREQ, "CMmCallMessHandler::PnsPipeResetReq;aPipeHandle=%hhu", iPipeHandle );
       
  5588 
       
  5589     // TODO: this method is not called. See TelAd-110
       
  5590     // Create buffer for isi msg data
       
  5591 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5592     TBuf8<SIZE_PNS_PIPE_RESET_REQ> data;
       
  5593 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5594     TBuf8<SIZE_CM_PIPE_RESET_REQ> data;
       
  5595 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5596 
       
  5597     data.Append( iPipeHandle );
       
  5598     data.Append( aStateAfterReset );
       
  5599 
       
  5600     // Send Isi message via phonet
       
  5601     return iPhoNetSender->Send(
       
  5602         PN_PIPE, KPipeTransID, PNS_PIPE_RESET_REQ, data );
       
  5603     }
       
  5604 
       
  5605 // ----------------------------------------------------------------------------
       
  5606 // CMmCallMessHandler::PnsPipeResetResp
       
  5607 // Breaks a PNS_PIPE_RESET_RESP ISI-message.
       
  5608 // ----------------------------------------------------------------------------
       
  5609 //
       
  5610 void CMmCallMessHandler::PnsPipeResetResp(
       
  5611     const TIsiReceiveC& aIsiMessage )
       
  5612     {
       
  5613 TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeResetResp");
       
  5614 OstTrace0( TRACE_NORMAL, DUP2_CMMCALLMESSHANDLER_PNSPIPERESETRESP, "CMmCallMessHandler::PnsPipeResetResp" );
       
  5615     // Get Transaction Id from the ISI message
       
  5616     TUint8 transId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
       
  5617 
       
  5618     // TODO: this code makes no sense. See TelAd-110
       
  5619     if ( KPipeTransID == transId )
       
  5620         {
       
  5621         // Get Pipehandle from the ISI message
       
  5622         TUint8 pipeHandle( aIsiMessage.Get8bit(
       
  5623 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5624             ISI_HEADER_SIZE + PNS_PIPE_REDIRECT_RESP_OFFSET_PIPEHANDLE ) );
       
  5625 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5626             ISI_HEADER_SIZE + CM_PIPE_REDIRECT_RESP_OFFSET_PIPEHANDLE ) );
       
  5627 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5628 
       
  5629         iPipeHandle = pipeHandle;
       
  5630 
       
  5631 TFLOGSTRING3("TSY: CMmCallMessHandler::PnsPipeResetResp - traId: %d, pipe handle: %d", transId, pipeHandle);
       
  5632 OstTraceExt2( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPERESETRESP, "CMmCallMessHandler::PnsPipeResetResp;transId=%hhu;pipeHandle=%hhu", transId, pipeHandle );
       
  5633 
       
  5634         TUint8 errorCode( aIsiMessage.Get8bit(
       
  5635 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5636             ISI_HEADER_SIZE + PNS_PIPE_RESET_RESP_OFFSET_ERRORCODE ) );
       
  5637 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5638             ISI_HEADER_SIZE + CM_PIPE_RESET_RESP_OFFSET_ERRORCODE ) );
       
  5639 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5640 
       
  5641 TFLOGSTRING3("TSY: CMmCallMessHandler::PnsPipeResetResp. PipeHandle: %d ErrorCode: %d", pipeHandle, errorCode );
       
  5642 OstTraceExt2( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_PNSPIPERESETRESP, "CMmCallMessHandler::PnsPipeResetResp;pipeHandle=%hhu;errorCode=%hhu", pipeHandle, errorCode );
       
  5643         }
       
  5644     // no else
       
  5645     }
  5545     }
  5646 
  5546 
  5647 // ----------------------------------------------------------------------------
  5547 // ----------------------------------------------------------------------------
  5648 // CMmCallMessHandler::PnsPipeRemoveReq
  5548 // CMmCallMessHandler::PnsPipeRemoveReq
  5649 // Construct a PNS_PIPE_REMOVE_REQ ISI-message.
  5549 // Construct a PNS_PIPE_REMOVE_REQ ISI-message.
  5683 TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeRemoveResp");
  5583 TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeRemoveResp");
  5684 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_PNSPIPEREMOVERESP, "CMmCallMessHandler::PnsPipeRemoveResp" );
  5584 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_PNSPIPEREMOVERESP, "CMmCallMessHandler::PnsPipeRemoveResp" );
  5685     // Get Transaction Id from the ISI message
  5585     // Get Transaction Id from the ISI message
  5686     TUint8 transId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
  5586     TUint8 transId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
  5687 
  5587 
  5688     // TODO: this code makes no sense. See TelAd-110
       
  5689     if ( KPipeTransID == transId )
  5588     if ( KPipeTransID == transId )
  5690         {
  5589         {
  5691         // Get Errorcode from the ISI message
  5590         // Get Errorcode from the ISI message
  5692         TUint8 errorCode( aIsiMessage.Get8bit(
  5591         TUint8 errorCode( aIsiMessage.Get8bit(
  5693 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
  5592 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
  5696             ISI_HEADER_SIZE + CM_PIPE_REMOVE_RESP_OFFSET_ERRORCODE ) );
  5595             ISI_HEADER_SIZE + CM_PIPE_REMOVE_RESP_OFFSET_ERRORCODE ) );
  5697 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
  5596 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
  5698 
  5597 
  5699 TFLOGSTRING4("TSY: CMmCallMessHandler::PnsPipeRemoveResp - traId: %d, PipeHandle: %d, ErrorCode: %d", transId, iPipeHandle, errorCode );
  5598 TFLOGSTRING4("TSY: CMmCallMessHandler::PnsPipeRemoveResp - traId: %d, PipeHandle: %d, ErrorCode: %d", transId, iPipeHandle, errorCode );
  5700 OstTraceExt3( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPEREMOVERESP, "CMmCallMessHandler::PnsPipeRemoveResp;transId=%hhu;pipeHandle=%hhu;errorCode=%hhu", transId, iPipeHandle, errorCode );
  5599 OstTraceExt3( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPEREMOVERESP, "CMmCallMessHandler::PnsPipeRemoveResp;transId=%hhu;pipeHandle=%hhu;errorCode=%hhu", transId, iPipeHandle, errorCode );
       
  5600 
       
  5601         iPipeHandle = KInvalidPipeHandle;
  5701         }
  5602         }
  5702     // no else
  5603     // no else
  5703     }
  5604     }
  5704 
  5605 
  5705 // ----------------------------------------------------------------------------
       
  5706 // CMmCallMessHandler::PnsPipeRedirectReq
       
  5707 // Construct a PNS_PIPE_REDIRECT_REQ ISI-message.
       
  5708 // ----------------------------------------------------------------------------
       
  5709 //
       
  5710 TInt CMmCallMessHandler::PnsPipeRedirectReq()
       
  5711     {
       
  5712     TFLOGSTRING2("TSY: CMmCallMessHandler::PnsPipeRedirectReq. PipeHandle: %d", iPipeHandle );
       
  5713 OstTraceExt1( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPEREDIRECTREQ, "CMmCallMessHandler::PnsPipeRedirectReq;aPipeHandle=%hhu", iPipeHandle );
       
  5714 
       
  5715     // TODO: this method is not called. See TelAd-110
       
  5716     // Create buffer for isi msg data
       
  5717 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5718     TBuf8<SIZE_PNS_PIPE_REDIRECT_REQ> data;
       
  5719 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5720     TBuf8<SIZE_CM_PIPE_REDIRECT_REQ> data;
       
  5721 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5722     data.Append( iPipeHandle );
       
  5723     data.Append( PN_PIPE_ENABLE );
       
  5724     data.Append( iSecondPepDeviceId );
       
  5725     data.Append( iSecondPepObjectId );
       
  5726     data.Append( KSecondPepType );
       
  5727     data.Append( KCallPadding );
       
  5728     data.Append( KSecondPepDevice );
       
  5729     data.Append( KRedirectPepObject );
       
  5730     data.Append( KSecondPepType );
       
  5731 
       
  5732     // Send Isi message via phonet
       
  5733     return iPhoNetSender->Send(
       
  5734         PN_PIPE,
       
  5735         KPipeTransID,
       
  5736         PNS_PIPE_REDIRECT_REQ,
       
  5737         data );
       
  5738     }
       
  5739 
       
  5740 // ----------------------------------------------------------------------------
       
  5741 // CMmCallMessHandler::PnsPipeRedirectResp
       
  5742 // Breaks a PNS_PIPE_REDIRECT_RESP ISI-message.
       
  5743 // ----------------------------------------------------------------------------
       
  5744 //
       
  5745 void CMmCallMessHandler::PnsPipeRedirectResp(
       
  5746     const TIsiReceiveC& aIsiMessage )
       
  5747     {
       
  5748 TFLOGSTRING("TSY: CMmCallMessHandler::PnsPipeRedirectResp");
       
  5749 OstTrace0( TRACE_NORMAL, DUP1_CMMCALLMESSHANDLER_PNSPIPEREDIRECTRESP, "CMmCallMessHandler::PnsPipeRedirectResp" );
       
  5750     // Get Transaction Id from the ISI message
       
  5751     TUint8 transId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
       
  5752 
       
  5753     if ( KPipeTransID == transId )
       
  5754         {
       
  5755         // Get Pipehandle from the ISI message
       
  5756         TUint8 pipeHandle( aIsiMessage.Get8bit(
       
  5757 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5758             ISI_HEADER_SIZE + PNS_PIPE_REDIRECT_RESP_OFFSET_PIPEHANDLE ) );
       
  5759 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5760             ISI_HEADER_SIZE + CM_PIPE_REDIRECT_RESP_OFFSET_PIPEHANDLE ) );
       
  5761 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5762 
       
  5763         iPipeHandle = pipeHandle;
       
  5764 
       
  5765         // Get Errorcode from the ISI message
       
  5766         TUint8 errorCode( aIsiMessage.Get8bit(
       
  5767 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
       
  5768             ISI_HEADER_SIZE + PNS_PIPE_REDIRECT_RESP_OFFSET_ERRORCODE ) );
       
  5769 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5770             ISI_HEADER_SIZE + CM_PIPE_REDIRECT_RESP_OFFSET_ERRORCODE ) );
       
  5771 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
       
  5772 
       
  5773 TFLOGSTRING4("TSY: CMmCallMessHandler::PnsPipeRedirectResp - traId: %d, PipeHandle: %d, ErrorCode: %d", transId, pipeHandle, errorCode );
       
  5774 OstTraceExt3( TRACE_NORMAL, CMMCALLMESSHANDLER_PNSPIPEREDIRECTRESP, "CMmCallMessHandler::PnsPipeRedirectResp;transId=%hhu;pipeHandle=%hhu;errorCode=%hhu", transId, pipeHandle, errorCode );
       
  5775         }
       
  5776     // no else
       
  5777     }
       
  5778 
       
  5779 // ========================== OTHER EXPORTED FUNCTIONS =========================
  5606 // ========================== OTHER EXPORTED FUNCTIONS =========================
  5780 
  5607 
  5781     // None
  5608     // None
  5782 
  5609 
  5783 //  End of File
  5610 //  End of File