telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmbroadcasttsy.cpp
changeset 20 244d7c5f118e
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
equal deleted inserted replaced
19:1f776524b15c 20:244d7c5f118e
    28 #include <ctsy/tflogger.h>
    28 #include <ctsy/tflogger.h>
    29 #include "cmmnettsy.h"
    29 #include "cmmnettsy.h"
    30 
    30 
    31 // ======== MEMBER FUNCTIONS ========
    31 // ======== MEMBER FUNCTIONS ========
    32 
    32 
    33 CMmBroadcastTsy::CMmBroadcastTsy()
    33 CMmBroadcastTsy::CMmBroadcastTsy():
       
    34     iReqHandleType(EMultimodeBroadcastReqHandleUnknown)
    34     {
    35     {
    35     // Set number of WCDMA CBS Pages to 0
    36     // Set number of WCDMA CBS Pages to 0
    36 	iWcdmaPageNumber = 0;
    37 	iWcdmaPageNumber = 0;
    37 
    38 
    38 	// Defaut value for iWcdmaCbsPageLeft.it means that there are
    39 	// Defaut value for iWcdmaCbsPageLeft.it means that there are
   151                 reinterpret_cast< RMobilePhone::TClientId* > ( dataPtr ),
   152                 reinterpret_cast< RMobilePhone::TClientId* > ( dataPtr ),
   152                 aPackage.Des2n() );
   153                 aPackage.Des2n() );
   153             break;
   154             break;
   154         // Cell broadcast requests that may need trapping
   155         // Cell broadcast requests that may need trapping
   155         default:
   156         default:
   156             // reset last tsy request type
   157             // Ensure the ReqHandleType is unset.
   157             iReqHandleType = EMultimodeBroadcastReqHandleUnknown; 
   158             // This will detect cases where this method indirectly calls itself
       
   159             // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
       
   160             // Such cases are not supported because iReqHandleType is in the context of this class instance,
       
   161             // not this request, and we don't want the values set by the inner request and the outer request
       
   162             // interfering with each other.
       
   163             __ASSERT_DEBUG(iReqHandleType==EMultimodeBroadcastReqHandleUnknown, User::Invariant());
   158 
   164 
   159             TInt leaveCode( KErrNone );
   165             TInt leaveCode( KErrNone );
   160             TRAP( leaveCode, ret = DoExtFuncL( aTsyReqHandle, aIpc, 
   166             TRAP( leaveCode, ret = DoExtFuncL( aTsyReqHandle, aIpc, 
   161                 aPackage ); );
   167                 aPackage ); );
   162 
   168 
   173 #else
   179 #else
   174                 //Never comes here ? See SetTypeOfResponse.
   180                 //Never comes here ? See SetTypeOfResponse.
   175                 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, 
   181                 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, 
   176                     aTsyReqHandle );
   182                     aTsyReqHandle );
   177 #endif // REQHANDLE_TIMER
   183 #endif // REQHANDLE_TIMER
       
   184                 // We've finished with this value now. Clear it so it doesn't leak
       
   185                 //  up to any other instances of this method down the call stack
       
   186                 iReqHandleType = EMultimodeBroadcastReqHandleUnknown;
   178                 }
   187                 }
   179             break;
   188             break;
   180         }
   189         }
   181 
   190 
   182     return ret;
   191     return ret;
  1020             iCbFilterSetting = *aSetting;
  1029             iCbFilterSetting = *aSetting;
  1021 
  1030 
  1022             // CB routing is not activated. We can complete this now.
  1031             // CB routing is not activated. We can complete this now.
  1023             CompleteNotifyFilterSettingChange();
  1032             CompleteNotifyFilterSettingChange();
  1024             
  1033             
  1025 			// Using CompleteNotifyFilterSettingChange() causes iReqHandleType to be modified so that
       
  1026 			// the object thinks it has been asked to perform a notification request, rather than a set request.
       
  1027             iReqHandleType = EMultimodeBroadcastReqHandleUnknown;
       
  1028 
       
  1029             ReqCompleted( aTsyReqHandle, KErrNone );
  1034             ReqCompleted( aTsyReqHandle, KErrNone );
  1030             }    
  1035             }    
  1031         }
  1036         }
  1032     else    
  1037     else    
  1033         {
  1038         {