telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmussdtsy.cpp
branchopencode
changeset 77 930a53cdc2d3
parent 24 6638e7f4bd8f
child 78 d4cfc65049ba
equal deleted inserted replaced
35:6fbc08ed9c42 77:930a53cdc2d3
    58     // Reset all CMmUssdTsy variables
    58     // Reset all CMmUssdTsy variables
    59     ResetVariables();
    59     ResetVariables();
    60 
    60 
    61     // Initialize boolean flag
    61     // Initialize boolean flag
    62     iUssdNoFdnCheckFlag =  EUssdNoFdnCheckUnknown;
    62     iUssdNoFdnCheckFlag =  EUssdNoFdnCheckUnknown;
       
    63     iSendToDefaultHandler = EFalse;
    63     }
    64     }
    64 
    65 
    65 CMmUssdTsy* CMmUssdTsy::NewL( 
    66 CMmUssdTsy* CMmUssdTsy::NewL( 
    66     CMmPhoneTsy* aMmPhone )                                 
    67     CMmPhoneTsy* aMmPhone )                                 
    67     {
    68     {
   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:
   250             break;
   261             break;
   251         case EMobileUssdMessagingSendMessage:
   262         case EMobileUssdMessagingSendMessage:
   252             SendMessageCancel( aTsyReqHandle );
   263             SendMessageCancel( aTsyReqHandle );
   253             ret = KErrNone;
   264             ret = KErrNone;
   254             break;
   265             break;
       
   266         case EMobileUssdMessagingSendMessageDefaultHandler: 
       
   267         	SendMessageCancelDefaultHandler( aTsyReqHandle );
       
   268         	ret = KErrNone;
       
   269         	break;
   255         case EMobileUssdMessagingSendMessageNoFdnCheck:
   270         case EMobileUssdMessagingSendMessageNoFdnCheck:
   256             SendMessageNoFdnCheckCancel( aTsyReqHandle );
   271             SendMessageNoFdnCheckCancel( aTsyReqHandle );
   257             ret = KErrNone;
   272             ret = KErrNone;
   258             break;            
   273             break;            
   259         case EMobileUssdMessagingSendRelease:
   274         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         }
   469     	{
   486     	{
   470     	ret = KErrArgument;
   487     	ret = KErrArgument;
   471     	}
   488     	}
   472 
   489 
   473     ReqCompleted( aTsyReqHandle, ret );
   490     ReqCompleted( aTsyReqHandle, ret );
   474 
       
   475     return KErrNone;
   491     return KErrNone;
   476     }
   492     }
   477 
   493 
   478 // ---------------------------------------------------------------------------
   494 // ---------------------------------------------------------------------------
   479 // CMmUssdTsy::ReceiveMessage
   495 // CMmUssdTsy::ReceiveMessage
   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;            		            	
   582     { 
   595     { 
   583 TFLOGSTRING2("TSY: CMmUssdTsy::SendMessage - Data length: %d", aData->Length() );
   596 TFLOGSTRING2("TSY: CMmUssdTsy::SendMessage - Data length: %d", aData->Length() );
   584 TFLOGSTRING2("TSY: CMmUssdTsy::SendMessageL: iUssdNoFdnCheckFlag: %d", iUssdNoFdnCheckFlag);  
   597 TFLOGSTRING2("TSY: CMmUssdTsy::SendMessageL: iUssdNoFdnCheckFlag: %d", iUssdNoFdnCheckFlag);  
   585     TInt ret = KErrNone;
   598     TInt ret = KErrNone;
   586 
   599 
       
   600     
   587     if ( iSsTransactionOngoing )
   601     if ( iSsTransactionOngoing )
   588 	    {
   602 	    {
   589 	    ret = KErrServerBusy;
   603 	    ret = KErrServerBusy;
   590 	    }
   604 	    }
   591     else
   605     else
   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
   827         {
   917         {
   828         if ( KErrNone == aErrorCode )
   918         if ( KErrNone == aErrorCode )
   829             {
   919             {
   830             aDataPackage->UnPackData ( *iReturnResultPtr );
   920             aDataPackage->UnPackData ( *iReturnResultPtr );
   831             }
   921             }
   832 //        EndSession();     TODO   
   922         EndSession(); 
   833         ReqCompleted( reqHandle, aErrorCode );
   923         ReqCompleted( reqHandle, aErrorCode );
   834         }  
   924         }  
   835     }
   925     }
   836 
   926 
   837 // ---------------------------------------------------------------------------
   927 // ---------------------------------------------------------------------------
   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 	    		
   901 	    iReturnNotifyUssdMessageAttributesPtr = &msgAttributes;
   999 	    iReturnNotifyUssdMessageAttributesPtr = &msgAttributes;
   902     	}
  1000     	}
   903     else
  1001     else
   904     	{
  1002     	{
   905     	iReturnNotifyUssdMessageAttributesPtr = NULL;
  1003     	iReturnNotifyUssdMessageAttributesPtr = NULL;
   906     	}
  1004     	}    
   907 #ifdef REQHANDLE_TIMER
  1005 #ifdef REQHANDLE_TIMER
   908     // Set timer for the request
  1006     // Set timer for the request
   909     SetTypeOfResponse( EMultimodeUssdNotifyNetworkRelease, aTsyReqHandle );
  1007     SetTypeOfResponse( EMultimodeUssdNotifyNetworkRelease, aTsyReqHandle );
   910 #else
  1008 #else
   911     // Save SendMessage request handle, set timer
  1009     // Save SendMessage request handle, set timer
   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
  1042     TInt timeOut( 0 );
  1141     TInt timeOut( 0 );
  1043 
  1142 
  1044     switch ( aReqHandleType )
  1143     switch ( aReqHandleType )
  1045         {
  1144         {
  1046         case EMultimodeUssdSendMessage:
  1145         case EMultimodeUssdSendMessage:
       
  1146         case EMultimodeUssdSendMessageDefaultHandler: 
  1047             timeOut = KMmUssdSendMessageTimeOut;
  1147             timeOut = KMmUssdSendMessageTimeOut;
  1048             break;
  1148             break;
  1049         case EMultimodeUssdSendMessageNoFdnCheck:
  1149         case EMultimodeUssdSendMessageNoFdnCheck:
  1050             timeOut = KMmUssdSendMessageNoFdnCheckTimeOut;
  1150             timeOut = KMmUssdSendMessageNoFdnCheckTimeOut;
  1051             break;            
  1151             break;            
  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 );
  1149     {
  1252     {
  1150     TBool isRequestPossible ( ETrue );
  1253     TBool isRequestPossible ( ETrue );
  1151 
  1254 
  1152     switch ( aIpc )
  1255     switch ( aIpc )
  1153         {
  1256         {
  1154         case EMobileUssdMessagingSendMessage:      
  1257         case EMobileUssdMessagingSendMessage:     
       
  1258         case EMobileUssdMessagingSendMessageDefaultHandler: 
  1155         case EMobileUssdMessagingSendMessageNoFdnCheck:
  1259         case EMobileUssdMessagingSendMessageNoFdnCheck:
  1156         case EMobileUssdMessagingSendRelease:
  1260         case EMobileUssdMessagingSendRelease:
  1157             isRequestPossible = EFalse;
  1261             isRequestPossible = EFalse;
  1158             break;
  1262             break;
  1159         case EMobileUssdMessagingReceiveMessage:
  1263         case EMobileUssdMessagingReceiveMessage: