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 |
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 |
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. |
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 |