187 aPackage.Des2n() ); |
188 aPackage.Des2n() ); |
188 break; |
189 break; |
189 case EMobileUssdMessagingSendMessage: |
190 case EMobileUssdMessagingSendMessage: |
190 { |
191 { |
191 iUssdNoFdnCheckFlag = EUssdNoFdnCheckNotUsed; |
192 iUssdNoFdnCheckFlag = EUssdNoFdnCheckNotUsed; |
|
193 iSendToDefaultHandler = EFalse; |
192 ret = SendMessageL( |
194 ret = SendMessageL( |
193 aTsyReqHandle, aPackage.Des1n(), aPackage.Des2n() ); |
195 aTsyReqHandle, aPackage.Des1n(), aPackage.Des2n() ); |
194 } |
196 } |
195 break; |
197 break; |
|
198 case EMobileUssdMessagingSendMessageDefaultHandler: |
|
199 { |
|
200 iUssdNoFdnCheckFlag = EUssdNoFdnCheckNotUsed; |
|
201 iSendToDefaultHandler = ETrue; |
|
202 ret = SendMessageL( |
|
203 aTsyReqHandle, aPackage.Des1n(), aPackage.Des2n() ); |
|
204 } |
|
205 break; |
196 case EMobileUssdMessagingSendMessageNoFdnCheck: |
206 case EMobileUssdMessagingSendMessageNoFdnCheck: |
197 { |
207 { |
198 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUsed; |
208 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUsed; |
|
209 iSendToDefaultHandler = EFalse; |
199 ret = SendMessageL( |
210 ret = SendMessageL( |
200 aTsyReqHandle, aPackage.Des1n(), aPackage.Des2n() ); |
211 aTsyReqHandle, aPackage.Des1n(), aPackage.Des2n() ); |
201 } |
212 } |
202 break; |
213 break; |
203 case EMobileUssdMessagingSendRelease: |
214 case EMobileUssdMessagingSendRelease: |
296 case EMobileUssdMessagingReceiveMessage: |
311 case EMobileUssdMessagingReceiveMessage: |
297 ret = KReqModeRePostImmediately | |
312 ret = KReqModeRePostImmediately | |
298 KReqModeMultipleCompletionWithInterestLevel; |
313 KReqModeMultipleCompletionWithInterestLevel; |
299 break; |
314 break; |
300 // Services handled by TSY |
315 // Services handled by TSY |
301 case EMobileUssdMessagingSendMessage: |
316 case EMobileUssdMessagingSendMessageDefaultHandler: |
|
317 ret = KReqModeSessionBased | KReqModeTransferToDefaultHandler; |
|
318 break; |
|
319 case EMobileUssdMessagingSendMessage: |
302 case EMobileUssdMessagingSendMessageNoFdnCheck: |
320 case EMobileUssdMessagingSendMessageNoFdnCheck: |
303 case EMobileUssdMessagingSendRelease: |
321 case EMobileUssdMessagingSendRelease: |
304 //ret = KReqModeSessionBased; |
322 ret = KReqModeSessionBased; |
305 ret = 0; |
|
306 break; |
323 break; |
307 case EMobileUssdMessagingNotifyNetworkRelease: |
324 case EMobileUssdMessagingNotifyNetworkRelease: |
308 // Multiple completion because the clients don't have to own the |
325 // Multiple completion because the clients don't have to own the |
309 // session in order to be notified that the session has been |
326 // session in order to be notified that the session has been |
310 // released. |
327 // released. |
311 ret = KReqModeMultipleCompletionEnabled; |
328 ret = KReqModeRePostImmediately | KReqModeMultipleCompletionEnabled; |
312 break; |
329 break; |
313 default: |
330 default: |
314 User::Leave( KErrNotSupported ); |
331 User::Leave( KErrNotSupported ); |
315 break; |
332 break; |
316 } |
333 } |
534 // |
550 // |
535 void CMmUssdTsy::CompleteReceiveMessage( |
551 void CMmUssdTsy::CompleteReceiveMessage( |
536 TInt aError, |
552 TInt aError, |
537 CMmDataPackage* aDataPackage ) |
553 CMmDataPackage* aDataPackage ) |
538 { |
554 { |
539 // TODO if a session is in progress and this is a notification then we need to send back |
|
540 // a USSD busy code. |
|
541 |
|
542 TFLOGSTRING("TSY: CMmUssdTsy::CompleteReceiveMessage.\n" ); |
555 TFLOGSTRING("TSY: CMmUssdTsy::CompleteReceiveMessage.\n" ); |
543 TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle( |
556 TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle( |
544 EMultimodeUssdReceiveMessage ); |
557 EMultimodeUssdReceiveMessage ); |
545 |
558 |
546 if ( ( EMultimodeUssdReqHandleUnknown != reqHandle ) ) |
559 if ( ( EMultimodeUssdReqHandleUnknown != reqHandle ) ) |
547 { |
560 { |
548 // reset req handle. Returns the deleted req handle |
561 // reset req handle. Returns the deleted req handle |
549 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
562 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
550 EMultimodeUssdReceiveMessage ); |
563 EMultimodeUssdReceiveMessage ); |
551 |
564 |
552 if ( KErrNone == aError ) |
565 if ( KErrNone == aError ) |
553 { |
566 { |
554 TDes8* unpackedReceiveUssdMessagePtr = NULL; |
567 TDes8* unpackedReceiveUssdMessagePtr = NULL; |
555 RMobileUssdMessaging::TMobileUssdAttributesV1* unpackedReceiveUssdMessageAttributesPtr = NULL; |
568 RMobileUssdMessaging::TMobileUssdAttributesV1* unpackedReceiveUssdMessageAttributesPtr = NULL; |
556 aDataPackage->UnPackData (&unpackedReceiveUssdMessagePtr, &unpackedReceiveUssdMessageAttributesPtr); |
569 aDataPackage->UnPackData (&unpackedReceiveUssdMessagePtr, &unpackedReceiveUssdMessageAttributesPtr); |
557 |
570 |
558 if(iReceiveUssdMessagePtr->MaxLength() >= unpackedReceiveUssdMessagePtr->Length()) |
571 if(iReceiveUssdMessagePtr->MaxLength() >= unpackedReceiveUssdMessagePtr->Length()) |
559 { |
572 { |
560 *iReceiveUssdMessagePtr = *unpackedReceiveUssdMessagePtr; |
573 *iReceiveUssdMessagePtr = *unpackedReceiveUssdMessagePtr; |
561 *iReceiveUssdMessageAttributesPtr = *unpackedReceiveUssdMessageAttributesPtr; |
574 *iReceiveUssdMessageAttributesPtr = *unpackedReceiveUssdMessageAttributesPtr; |
601 { |
615 { |
602 // Send request to the Domestic OS layer. |
616 // Send request to the Domestic OS layer. |
603 ret = iMmPhone->MessageManager()->HandleRequestL( |
617 ret = iMmPhone->MessageManager()->HandleRequestL( |
604 EMobileUssdMessagingSendMessageNoFdnCheck, &package ); |
618 EMobileUssdMessagingSendMessageNoFdnCheck, &package ); |
605 } |
619 } |
606 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckNotUsed ) |
620 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckNotUsed ) |
607 { |
621 { |
608 // Send request to the Domestic OS layer. |
622 // Send request to the Domestic OS layer. |
609 ret = iMmPhone->MessageManager()->HandleRequestL( |
623 if(EFalse == iSendToDefaultHandler) |
610 EMobileUssdMessagingSendMessage, &package ); |
624 { |
611 } |
625 ret = iMmPhone->MessageManager()->HandleRequestL( |
|
626 EMobileUssdMessagingSendMessage, &package ); |
|
627 } |
|
628 else //default handler |
|
629 { |
|
630 ret = iMmPhone->MessageManager()->HandleRequestL( |
|
631 EMobileUssdMessagingSendMessageDefaultHandler, &package ); |
|
632 } |
|
633 } |
|
634 |
612 |
635 |
613 iSsTransactionOngoing = ETrue; |
636 iSsTransactionOngoing = ETrue; |
614 } |
637 } |
615 |
638 |
616 if ( KErrNone != ret ) |
639 if ( KErrNone != ret ) |
617 { |
640 { |
618 ReqCompleted( aTsyReqHandle, ret ); |
641 ReqCompleted( aTsyReqHandle, ret ); |
619 iSsTransactionOngoing = EFalse; |
642 iSsTransactionOngoing = EFalse; |
620 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
643 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
621 } |
644 } |
622 else |
645 else |
623 { |
646 { |
624 /* TODO |
|
625 if (!IsSessionInProgress()) |
647 if (!IsSessionInProgress()) |
626 { |
648 { |
627 // If a session isn't in progress then reserve the session to |
649 // If a session isn't in progress then reserve the session to |
628 // prevent any other attempts at opening a dialogue. If the send |
650 // prevent any other attempts at opening a dialogue. If the send |
629 // succeeds then the session is opened. If the send fails or the |
651 // succeeds then the session is opened. If the send fails or the |
631 // If the session is already in progress then no reservation is |
653 // If the session is already in progress then no reservation is |
632 // necessary and the success or failure of this send does not |
654 // necessary and the success or failure of this send does not |
633 // affect the session or dialogue state. |
655 // affect the session or dialogue state. |
634 (void)ReserveSession(); |
656 (void)ReserveSession(); |
635 } |
657 } |
636 */ |
658 |
637 #ifdef REQHANDLE_TIMER |
659 #ifdef REQHANDLE_TIMER |
638 // Check if NoFdnCheck is used or not |
660 // Check if NoFdnCheck is used or not |
639 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckUsed ) |
661 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckUsed ) |
640 { |
662 { |
641 // Set timer for the request |
663 // Set timer for the request |
642 SetTypeOfResponse( EMultimodeUssdSendMessageNoFdnCheck, |
664 SetTypeOfResponse( EMultimodeUssdSendMessageNoFdnCheck, |
643 aTsyReqHandle ); |
665 aTsyReqHandle ); |
644 } |
666 } |
645 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckNotUsed ) |
667 if ( (iUssdNoFdnCheckFlag == EUssdNoFdnCheckNotUsed) && |
|
668 (EFalse == iSendToDefaultHandler)) |
646 { |
669 { |
647 // Set timer for the request |
670 // Set timer for the request |
648 SetTypeOfResponse( EMultimodeUssdSendMessage, |
671 SetTypeOfResponse( EMultimodeUssdSendMessage, |
649 aTsyReqHandle ); |
672 aTsyReqHandle ); |
650 } |
673 } |
|
674 if ( (iUssdNoFdnCheckFlag == EUssdNoFdnCheckNotUsed) && |
|
675 (EFalse != iSendToDefaultHandler)) //send to default hadnler |
|
676 { |
|
677 // Set timer for the request |
|
678 SetTypeOfResponse( EMultimodeUssdSendMessageDefaultHandler, |
|
679 aTsyReqHandle ); |
|
680 } |
651 #else |
681 #else |
652 // Check if NoFdnCheck is used or not |
682 // Check if NoFdnCheck is used or not |
653 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckUsed ) |
683 if ( iUssdNoFdnCheckFlag == EUssdNoFdnCheckUsed ) |
654 { |
684 { |
655 // Save SendMessageNoFdnCheck request handle, set timer |
685 // Save SendMessageNoFdnCheck request handle, set timer |
678 TInt CMmUssdTsy::SendMessageCancel( |
708 TInt CMmUssdTsy::SendMessageCancel( |
679 const TTsyReqHandle aTsyReqHandle ) |
709 const TTsyReqHandle aTsyReqHandle ) |
680 { |
710 { |
681 // reset the req handle |
711 // reset the req handle |
682 iTsyReqHandleStore->ResetTsyReqHandle( EMultimodeUssdSendMessage ); |
712 iTsyReqHandleStore->ResetTsyReqHandle( EMultimodeUssdSendMessage ); |
683 |
713 |
684 // CancelReserveSession(); TODO |
714 CancelReserveSession(); |
685 |
715 |
686 // complete with cancel |
716 // complete with cancel |
687 ReqCompleted( aTsyReqHandle, KErrCancel ); |
717 ReqCompleted( aTsyReqHandle, KErrCancel ); |
688 iSsTransactionOngoing = EFalse; |
718 iSsTransactionOngoing = EFalse; |
689 |
719 |
690 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
720 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
691 |
721 |
692 return KErrNone; |
722 return KErrNone; |
693 } |
723 } |
694 |
724 |
695 // --------------------------------------------------------------------------- |
725 // --------------------------------------------------------------------------- |
696 // CMmUssdTsy::CompleteSendMessage |
726 // CmmUssdTsy::SendMessageCancelDefaultHandler |
|
727 // Cancels cancelling of USSD session. |
|
728 // (other items were commented in a header). |
|
729 // --------------------------------------------------------------------------- |
|
730 // |
|
731 TInt CMmUssdTsy::SendMessageCancelDefaultHandler( |
|
732 const TTsyReqHandle aTsyReqHandle ) |
|
733 { |
|
734 // reset the req handle |
|
735 iTsyReqHandleStore->ResetTsyReqHandle( EMultimodeUssdSendMessageDefaultHandler ); |
|
736 |
|
737 CancelReserveSession(); |
|
738 |
|
739 // complete with cancel |
|
740 ReqCompleted( aTsyReqHandle, KErrCancel ); |
|
741 iSsTransactionOngoing = EFalse; |
|
742 |
|
743 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
|
744 |
|
745 return KErrNone; |
|
746 } |
|
747 |
|
748 // --------------------------------------------------------------------------- |
|
749 // CMmUssdTsy::CompleteSendMessageDefaultHandler |
697 // Complete SendMessage |
750 // Complete SendMessage |
698 // (other items were commented in a header). |
751 // (other items were commented in a header). |
699 // --------------------------------------------------------------------------- |
752 // --------------------------------------------------------------------------- |
700 // |
753 // |
701 void CMmUssdTsy::CompleteSendMessage( |
754 void CMmUssdTsy::CompleteSendMessageDefaultHandler( |
702 TInt aError ) |
755 TInt aError ) |
703 { |
756 { |
704 TFLOGSTRING("TSY: CMmUssdTsy::CompleteSendMessage.\n" ); |
757 TFLOGSTRING("TSY: CMmUssdTsy::CompleteSendMessage.\n" ); |
705 TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle( |
758 TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle( |
706 EMultimodeUssdSendMessage ); |
759 /*EMultimodeUssdSendMessage*/EMultimodeUssdSendMessageDefaultHandler ); |
707 |
760 |
708 if ( EMultimodeUssdReqHandleUnknown != reqHandle ) |
761 if ( EMultimodeUssdReqHandleUnknown != reqHandle ) |
709 { |
762 { |
710 // reset req handle. Returns the deleted req handle |
763 // reset req handle. Returns the deleted req handle |
711 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
764 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
712 EMultimodeUssdSendMessage ); |
765 /*EMultimodeUssdSendMessage*/EMultimodeUssdSendMessageDefaultHandler ); |
713 /* TODO |
|
714 // If the session is already in progress then no session management |
766 // If the session is already in progress then no session management |
715 // action is required. Otherwise we either promote the reserved |
767 // action is required. Otherwise we either promote the reserved |
716 // session to an open session or cancel the reservation. |
768 // session to an open session or cancel the reservation. |
717 if ( !IsSessionInProgress() && IsSessionReserved() ) |
769 if ( !IsSessionInProgress() && IsSessionReserved() ) |
718 { |
770 { |
723 else |
775 else |
724 { |
776 { |
725 CancelReserveSession(); |
777 CancelReserveSession(); |
726 } |
778 } |
727 } |
779 } |
728 */ |
780 |
729 ReqCompleted( reqHandle, aError ); |
781 ReqCompleted( reqHandle, aError ); |
730 iSsTransactionOngoing = EFalse; |
782 iSsTransactionOngoing = EFalse; |
731 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
783 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
732 } |
784 } |
733 } |
785 } |
|
786 // --------------------------------------------------------------------------- |
|
787 // CMmUssdTsy::CompleteSendMessage |
|
788 // Complete SendMessage |
|
789 // (other items were commented in a header). |
|
790 // --------------------------------------------------------------------------- |
|
791 // |
|
792 void CMmUssdTsy::CompleteSendMessage( |
|
793 TInt aError ) |
|
794 { |
|
795 TFLOGSTRING("TSY: CMmUssdTsy::CompleteSendMessage.\n" ); |
|
796 TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle( |
|
797 EMultimodeUssdSendMessage ); |
|
798 |
|
799 if ( EMultimodeUssdReqHandleUnknown != reqHandle ) |
|
800 { |
|
801 // reset req handle. Returns the deleted req handle |
|
802 reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
|
803 EMultimodeUssdSendMessage ); |
|
804 // If the session is already in progress then no session management |
|
805 // action is required. Otherwise we either promote the reserved |
|
806 // session to an open session or cancel the reservation. |
|
807 if ( !IsSessionInProgress() && IsSessionReserved() ) |
|
808 { |
|
809 if ( KErrNone == aError ) |
|
810 { |
|
811 SetSessionOwnerByTsyHandle( reqHandle ); |
|
812 } |
|
813 else |
|
814 { |
|
815 CancelReserveSession(); |
|
816 } |
|
817 } |
|
818 |
|
819 ReqCompleted( reqHandle, aError ); |
|
820 iSsTransactionOngoing = EFalse; |
|
821 iUssdNoFdnCheckFlag = EUssdNoFdnCheckUnknown; |
|
822 } |
|
823 } |
734 |
824 |
735 // --------------------------------------------------------------------------- |
825 // --------------------------------------------------------------------------- |
736 // CMmUssdTsy::SendReleaseL |
826 // CMmUssdTsy::SendReleaseL |
737 // This function cancels active ussd session asynchronously |
827 // This function cancels active ussd session asynchronously |
738 // (other items were commented in a header). |
828 // (other items were commented in a header). |
740 // |
830 // |
741 TInt CMmUssdTsy::SendReleaseL( |
831 TInt CMmUssdTsy::SendReleaseL( |
742 const TTsyReqHandle aTsyReqHandle, |
832 const TTsyReqHandle aTsyReqHandle, |
743 TDes8* aReturnResult ) |
833 TDes8* aReturnResult ) |
744 { |
834 { |
745 /* TODO |
835 |
|
836 //Check if there is a session in progress |
746 if ( !IsSessionInProgress() ) |
837 if ( !IsSessionInProgress() ) |
747 { |
838 { |
748 // You can't release a dialogue that isn't in progress. |
839 // You can't release a dialogue that isn't in progress. |
749 return KErrDisconnected; |
840 return KErrDisconnected; |
750 } |
841 } |
751 */ |
842 |
752 TTsyReqHandle sendReleaseHandle = |
843 TTsyReqHandle sendReleaseHandle = |
753 iTsyReqHandleStore->GetTsyReqHandle( EMultimodeUssdSendRelease ); |
844 iTsyReqHandleStore->GetTsyReqHandle( EMultimodeUssdSendRelease ); |
754 |
845 |
755 if ( 0 < sendReleaseHandle ) |
846 if ( 0 < sendReleaseHandle ) |
756 { |
847 { |
757 // The request is already in processing because of previous request |
848 // The request is already in processing because of previous request |
758 // Complete request with status value informing the client about |
849 // Complete request with status value informing the client about |
759 // the situation. |
850 // the situation. |
760 TFLOGSTRING("LTSY: CMmUssdTsy::SendRelease - KErrServerBusy"); |
851 TFLOGSTRING("LTSY: CMmUssdTsy::SendRelease - KErrAccessDenied"); |
761 ReqCompleted( aTsyReqHandle, KErrServerBusy ); |
852 ReqCompleted( aTsyReqHandle, KErrAccessDenied ); |
762 } |
853 } |
763 else |
854 else |
764 { |
855 { |
765 TFLOGSTRING("TSY: CMmUssdTsy::SendRelease called"); |
856 TFLOGSTRING("TSY: CMmUssdTsy::SendRelease called"); |
766 |
|
767 TInt ret = KErrGeneral; |
857 TInt ret = KErrGeneral; |
768 |
858 |
769 TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* ussdSendSSRequestPckg = |
859 TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* ussdSendSSRequestPckg = |
770 reinterpret_cast< TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* > |
860 reinterpret_cast< TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* > |
771 ( aReturnResult ); |
861 ( aReturnResult ); |
772 |
862 |
773 if ( sizeof(RMobilePhone::TMobilePhoneSendSSRequestV3) > |
863 if ( sizeof(RMobilePhone::TMobilePhoneSendSSRequestV3) > |
774 ussdSendSSRequestPckg->MaxLength() ) |
864 ussdSendSSRequestPckg->MaxLength() ) |
775 { |
865 { |
776 ret = KErrArgument; |
866 ret = KErrArgument; |
777 } |
867 } |
784 |
874 |
785 // Send request to the Domestic OS layer. |
875 // Send request to the Domestic OS layer. |
786 ret = iMmPhone->MessageManager()->HandleRequestL( |
876 ret = iMmPhone->MessageManager()->HandleRequestL( |
787 EMobileUssdMessagingSendRelease ); |
877 EMobileUssdMessagingSendRelease ); |
788 } |
878 } |
789 |
879 |
790 // If ret is not KErrNone |
880 // If ret is not KErrNone |
791 if ( KErrNone != ret ) |
881 if ( KErrNone != ret ) |
792 { |
882 { |
793 ReqCompleted( aTsyReqHandle, ret ); |
883 ReqCompleted( aTsyReqHandle, ret ); |
794 } |
884 } |
795 else |
885 else |
796 { |
886 { |
797 #ifdef REQHANDLE_TIMER |
887 #ifdef REQHANDLE_TIMER |
798 // Set timer for the request |
888 // Set timer for the request |
|
889 //If there is no session in progress this line lead to crash |
799 SetTypeOfResponse( EMultimodeUssdSendRelease, aTsyReqHandle ); |
890 SetTypeOfResponse( EMultimodeUssdSendRelease, aTsyReqHandle ); |
800 #else |
891 #else |
801 // Save SendMessage request handle, set timer |
892 // Save SendMessage request handle, set timer |
802 iTsyReqHandleStore->SetTsyReqHandle( |
893 iTsyReqHandleStore->SetTsyReqHandle( |
803 EMultimodeUssdSendRelease, aTsyReqHandle ); |
894 EMultimodeUssdSendRelease, aTsyReqHandle ); |
804 #endif // REQHANDLE_TIMER |
895 #endif // REQHANDLE_TIMER |
805 } |
896 } |
806 } |
897 } |
807 |
|
808 return KErrNone; |
898 return KErrNone; |
809 } |
899 } |
810 |
900 |
811 // --------------------------------------------------------------------------- |
901 // --------------------------------------------------------------------------- |
812 // CMmUssdTsy::CompleteSendRelease |
902 // CMmUssdTsy::CompleteSendRelease |
865 const TTsyReqHandle aTsyReqHandle, |
955 const TTsyReqHandle aTsyReqHandle, |
866 TDes8* aMsgData, |
956 TDes8* aMsgData, |
867 TDes8* aMsgAttributes) // aMsgAttributes may be NULL |
957 TDes8* aMsgAttributes) // aMsgAttributes may be NULL |
868 { |
958 { |
869 TFLOGSTRING("TSY: CMmUssdTsy::NotifyNetworkRelease" ); |
959 TFLOGSTRING("TSY: CMmUssdTsy::NotifyNetworkRelease" ); |
|
960 /* |
|
961 //Check if there is a session in progress |
|
962 if ( !IsSessionInProgress() ) |
|
963 { |
|
964 // You can't release a dialogue that isn't in progress. |
|
965 return KErrDisconnected; |
|
966 } |
|
967 */ |
870 |
968 |
871 if (aMsgData->MaxLength() < sizeof(RMobilePhone::TMobilePhoneSendSSRequestV3Pckg)) |
969 if (aMsgData->MaxLength() < sizeof(RMobilePhone::TMobilePhoneSendSSRequestV3Pckg)) |
872 { |
970 { |
873 TFLOGSTRING ("TSY: CMmNetTsy::NotifyNetworkRelease Bad size argument (arg1)"); |
971 TFLOGSTRING ("TSY: CMmNetTsy::NotifyNetworkRelease Bad size argument (arg1)"); |
874 // Complete the request with appropiate error |
972 // Complete the request with appropiate error |
875 return KErrArgument; |
973 return KErrArgument; |
876 } |
974 } |
|
975 |
877 if (aMsgAttributes && |
976 if (aMsgAttributes && |
878 aMsgAttributes->MaxLength() < sizeof(RMobileUssdMessaging::TMobileUssdAttributesV1Pckg)) |
977 aMsgAttributes->MaxLength() < sizeof(RMobileUssdMessaging::TMobileUssdAttributesV1Pckg)) |
879 { |
978 { |
880 TFLOGSTRING ("TSY: CMmNetTsy::NotifyNetworkRelease Bad size argument (arg2)"); |
979 TFLOGSTRING ("TSY: CMmNetTsy::NotifyNetworkRelease Bad size argument (arg2)"); |
881 // Complete the request with appropiate error |
980 // Complete the request with appropiate error |
882 return KErrArgument; |
981 return KErrArgument; |
883 } |
982 } |
884 |
983 |
885 TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* ussdSendSSRequestPckg = |
984 TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* ussdSendSSRequestPckg = |
886 reinterpret_cast< TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* > |
985 reinterpret_cast< TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3>* > |
887 ( aMsgData ); |
986 ( aMsgData ); |
888 |
987 |
889 RMobilePhone::TMobilePhoneSendSSRequestV3& msgData = |
988 RMobilePhone::TMobilePhoneSendSSRequestV3& msgData = |
890 ( *ussdSendSSRequestPckg )(); |
989 ( *ussdSendSSRequestPckg )(); |
891 |
990 |
892 iReturnNotifyPtr = &msgData; |
991 iReturnNotifyPtr = &msgData; |
893 |
|
894 if (aMsgAttributes != NULL) |
992 if (aMsgAttributes != NULL) |
895 { |
993 { |
896 RMobileUssdMessaging::TMobileUssdAttributesV1Pckg* ussdAttributesPckg = |
994 RMobileUssdMessaging::TMobileUssdAttributesV1Pckg* ussdAttributesPckg = |
897 reinterpret_cast< RMobileUssdMessaging::TMobileUssdAttributesV1Pckg* > (aMsgAttributes); |
995 reinterpret_cast< RMobileUssdMessaging::TMobileUssdAttributesV1Pckg* > (aMsgAttributes); |
898 |
996 |
924 // |
1022 // |
925 void CMmUssdTsy::CompleteNotifyNetworkRelease( |
1023 void CMmUssdTsy::CompleteNotifyNetworkRelease( |
926 TInt aErrorCode, |
1024 TInt aErrorCode, |
927 CMmDataPackage* aDataPackage ) |
1025 CMmDataPackage* aDataPackage ) |
928 { |
1026 { |
929 // EndSession(); TODO |
1027 EndSession(); |
930 |
1028 |
931 TFLOGSTRING2("TSY: CMmUssdTsy::CompleteNotifyNetworkRelease. Error: %d", aErrorCode ); |
1029 TFLOGSTRING2("TSY: CMmUssdTsy::CompleteNotifyNetworkRelease. Error: %d", aErrorCode ); |
932 // reset req handle. Returns the deleted req handle |
1030 // reset req handle. Returns the deleted req handle |
933 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1031 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
934 EMultimodeUssdNotifyNetworkRelease ); |
1032 EMultimodeUssdNotifyNetworkRelease ); |
1022 iReceiveUssdMessagePtr = NULL; |
1120 iReceiveUssdMessagePtr = NULL; |
1023 iReceiveUssdMessageAttributesPtr = NULL; |
1121 iReceiveUssdMessageAttributesPtr = NULL; |
1024 iReturnResultPtr = NULL; |
1122 iReturnResultPtr = NULL; |
1025 iReturnNotifyPtr = NULL; |
1123 iReturnNotifyPtr = NULL; |
1026 iReturnNotifyUssdMessageAttributesPtr = NULL; |
1124 iReturnNotifyUssdMessageAttributesPtr = NULL; |
|
1125 iSendToDefaultHandler = EFalse; |
1027 } |
1126 } |
1028 |
1127 |
1029 #ifdef REQHANDLE_TIMER |
1128 #ifdef REQHANDLE_TIMER |
1030 // --------------------------------------------------------------------------- |
1129 // --------------------------------------------------------------------------- |
1031 // CMmUssdTsy::SetTypeOfResponse |
1130 // CMmUssdTsy::SetTypeOfResponse |
1087 switch( aReqHandleType ) |
1187 switch( aReqHandleType ) |
1088 { |
1188 { |
1089 // Cases handled with automatic completion |
1189 // Cases handled with automatic completion |
1090 case EMultimodeUssdSendMessage: |
1190 case EMultimodeUssdSendMessage: |
1091 CompleteSendMessage( aError ); |
1191 CompleteSendMessage( aError ); |
1092 break; |
1192 break; |
|
1193 case EMultimodeUssdSendMessageDefaultHandler: |
|
1194 CompleteSendMessageDefaultHandler( aError ); |
|
1195 break; |
1093 case EMultimodeUssdSendMessageNoFdnCheck: |
1196 case EMultimodeUssdSendMessageNoFdnCheck: |
1094 CompleteSendMessageNoFdnCheck( aError ); |
1197 CompleteSendMessageNoFdnCheck( aError ); |
1095 break; |
1198 break; |
1096 case EMultimodeUssdSendRelease: |
1199 case EMultimodeUssdSendRelease: |
1097 returnResult.iOpCode = static_cast< TUint8 >( KErrTimedOut ); |
1200 returnResult.iOpCode = static_cast< TUint8 >( KErrTimedOut ); |