|
1 /* |
|
2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of the License "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 // INCLUDE FILES |
|
22 #include <ctsy/pluginapi/cmmdatapackage.h> |
|
23 #include <ctsy/serviceapi/mmtsy_ipcdefs.h> |
|
24 #include <tisi.h> |
|
25 #include <smsisi.h> |
|
26 #include "cmmbroadmesshandler.h" |
|
27 #include "cmmmessagerouter.h" |
|
28 #include "tsylogger.h" |
|
29 #include "cmmphonetsender.h" |
|
30 #include "cmmstaticutility.h" |
|
31 #include "osttracedefinitions.h" |
|
32 #ifdef OST_TRACE_COMPILER_IN_USE |
|
33 #include "cmmbroadmesshandlertraces.h" |
|
34 #endif |
|
35 |
|
36 |
|
37 // EXTERNAL DATA STRUCTURES |
|
38 //none |
|
39 |
|
40 // EXTERNAL FUNCTION PROTOTYPES |
|
41 //none |
|
42 |
|
43 // CONSTANTS |
|
44 const TUint8 KBroadPadding( 0x00 ); |
|
45 |
|
46 // MACROS |
|
47 //none |
|
48 // LOCAL CONSTANTS AND MACROS |
|
49 //none |
|
50 |
|
51 // MODULE DATA STRUCTURES |
|
52 //none |
|
53 |
|
54 // LOCAL FUNCTION PROTOTYPES |
|
55 //none |
|
56 |
|
57 // FORWARD DECLARATIONS |
|
58 //none |
|
59 |
|
60 // ============================= LOCAL FUNCTIONS =============================== |
|
61 //none |
|
62 |
|
63 // ============================ MEMBER FUNCTIONS =============================== |
|
64 |
|
65 // ----------------------------------------------------------------------------- |
|
66 // CMmBroadMessHandler::CMmBroadMessHandler |
|
67 // C++ constructor |
|
68 // ----------------------------------------------------------------------------- |
|
69 // |
|
70 CMmBroadMessHandler::CMmBroadMessHandler() |
|
71 { |
|
72 TFLOGSTRING("TSY: CMmBroadMessHandler::CMmBroadMessHandler"); |
|
73 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_CMMBROADMESSHANDLER, "CMmBroadMessHandler::CMmBroadMessHandler" ); |
|
74 } |
|
75 |
|
76 // ----------------------------------------------------------------------------- |
|
77 // CMmSmsMessHandler::ConstructL |
|
78 // Symbian 2nd phase constructor can leave. |
|
79 // ----------------------------------------------------------------------------- |
|
80 // |
|
81 void CMmBroadMessHandler::ConstructL() |
|
82 { |
|
83 TFLOGSTRING("TSY: CMmBroadMessHandler::ConstructL"); |
|
84 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_CONSTRUCTL, "CMmBroadMessHandler::ConstructL" ); |
|
85 // Initialise the array. Maximun of pages in a WCDMA CBS message is 15 |
|
86 iCbsMsg = new( ELeave ) CArrayPtrFlat< TWcdmaCbsMsg >( 10 ); |
|
87 } |
|
88 |
|
89 // ----------------------------------------------------------------------------- |
|
90 // CMmBroadMessHandler:: NewL |
|
91 // Two-phased constructor. |
|
92 // Creates a new MessageHandler object instance |
|
93 // ----------------------------------------------------------------------------- |
|
94 // |
|
95 CMmBroadMessHandler* CMmBroadMessHandler::NewL |
|
96 ( |
|
97 CMmPhoNetSender* aPhoNetSender, // a pointer to the PhonetSender |
|
98 CMmPhoNetReceiver* aPhoNetReceiver, // a pointer to the phonetReceiver |
|
99 CMmMessageRouter* aMessageRouter // a pointer to the Message router |
|
100 ) |
|
101 { |
|
102 TFLOGSTRING("TSY: CMmBroadMessHandler::NewL"); |
|
103 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_NEWL, "CMmBroadMessHandler::NewL" ); |
|
104 CMmBroadMessHandler* mmBroadMessHandler = |
|
105 new( ELeave ) CMmBroadMessHandler(); |
|
106 |
|
107 CleanupStack::PushL( mmBroadMessHandler ); |
|
108 mmBroadMessHandler->iPhoNetSender = aPhoNetSender; |
|
109 mmBroadMessHandler->iMessageRouter = aMessageRouter; |
|
110 |
|
111 aPhoNetReceiver->RegisterL( |
|
112 mmBroadMessHandler, |
|
113 PN_SMS, |
|
114 SMS_CB_ROUTING_RESP ); |
|
115 aPhoNetReceiver->RegisterL( |
|
116 mmBroadMessHandler, |
|
117 PN_SMS, |
|
118 SMS_CB_ROUTING_IND ); |
|
119 |
|
120 mmBroadMessHandler->ConstructL(); |
|
121 CleanupStack::Pop( mmBroadMessHandler ); |
|
122 |
|
123 return mmBroadMessHandler; |
|
124 } |
|
125 |
|
126 // ----------------------------------------------------------------------------- |
|
127 // CMmBroadMessHandler:: ~CMmBroadMessHandler |
|
128 // C++ destructor destroys all objects which are used |
|
129 // ----------------------------------------------------------------------------- |
|
130 // |
|
131 CMmBroadMessHandler::~CMmBroadMessHandler() |
|
132 { |
|
133 TFLOGSTRING("TSY: CMmBroadMessHandler::~CMmBroadMessHandler"); |
|
134 OstTrace0( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_CMMBROADMESSHANDLER, "CMmBroadMessHandler::~CMmBroadMessHandler" ); |
|
135 if ( iCbsMsg ) |
|
136 { |
|
137 iCbsMsg->ResetAndDestroy(); |
|
138 delete iCbsMsg; |
|
139 } |
|
140 } |
|
141 |
|
142 // ----------------------------------------------------------------------------- |
|
143 // CMmBroadMessHandler:: ReceiveMessageL |
|
144 // Called by PhonetReceiver when an ISI message has been received |
|
145 // ----------------------------------------------------------------------------- |
|
146 // |
|
147 void CMmBroadMessHandler::ReceiveMessageL( const TIsiReceiveC& aIsiMessage ) |
|
148 { |
|
149 TUint8 resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) ); |
|
150 TUint8 messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) ); |
|
151 |
|
152 TFLOGSTRING3("TSY: CMmBroadMessHandler::ReceiveMessageL. Resource:%d, MsgId:%d", resource,messageId); |
|
153 OstTraceExt2( TRACE_NORMAL, CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL;resource=%hhd;messageId=%hhx", resource, messageId ); |
|
154 |
|
155 switch ( resource ) |
|
156 { |
|
157 case PN_SMS: |
|
158 { |
|
159 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL - PN_SMS"); |
|
160 OstTrace0( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL - PN_SMS" ); |
|
161 |
|
162 switch( messageId ) |
|
163 { |
|
164 case SMS_CB_ROUTING_RESP: |
|
165 { |
|
166 SmsCbRoutingResp( aIsiMessage ); |
|
167 break; |
|
168 } |
|
169 case SMS_CB_ROUTING_IND: |
|
170 { |
|
171 SmsCbRoutingIndL( aIsiMessage ); |
|
172 break; |
|
173 } |
|
174 default: |
|
175 { |
|
176 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL - PN_SMS - default"); |
|
177 OstTrace0( TRACE_NORMAL, DUP3_CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL - PN_SMS - default" ); |
|
178 // No appropriate handler methods for ISI-message found. |
|
179 break; |
|
180 } |
|
181 } |
|
182 break; |
|
183 } |
|
184 default: |
|
185 { |
|
186 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL. Switch resource case default"); |
|
187 OstTrace0( TRACE_NORMAL, DUP2_CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL. Switch resource case default" ); |
|
188 // No appropriate handler methods for ISI-message found. |
|
189 break; |
|
190 } |
|
191 } |
|
192 return; |
|
193 } |
|
194 |
|
195 |
|
196 // ----------------------------------------------------------------------------- |
|
197 // CMmBroadMessHandler:: SmsCbRoutingRequest |
|
198 // Send CB message routing request to the SMS server |
|
199 // ----------------------------------------------------------------------------- |
|
200 // |
|
201 TInt CMmBroadMessHandler::SmsCbRoutingRequest |
|
202 ( |
|
203 TUint8 aTransId, // Transaction ID |
|
204 const CMmDataPackage* aDataPackage // Data Package |
|
205 ) |
|
206 { |
|
207 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingRequest"); |
|
208 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest" ); |
|
209 |
|
210 // Variable for the routing command initialized |
|
211 TUint8 routingCommand( 0 ); |
|
212 // Contents of the data package |
|
213 TCbsCbmiAndLangAndFilter data; |
|
214 // Unpack data |
|
215 aDataPackage->UnPackData( data ); |
|
216 |
|
217 if ( RMobileBroadcastMessaging::EBroadcastAcceptNone == data.iSetting ) |
|
218 { |
|
219 // Release routing |
|
220 TFLOGSTRING("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be released."); |
|
221 OstTrace0( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be released." ); |
|
222 routingCommand = SMS_ROUTING_RELEASE; |
|
223 } |
|
224 else if ( RMobileBroadcastMessaging::EBroadcastAcceptAll == data.iSetting ) |
|
225 { |
|
226 // Activate routing |
|
227 TFLOGSTRING("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be activated."); |
|
228 OstTrace0( TRACE_NORMAL, DUP2_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be activated." ); |
|
229 routingCommand = SMS_ROUTING_SET; |
|
230 } |
|
231 else |
|
232 { |
|
233 TFLOGSTRING2("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:Unsupported filter 0x%x.",data.iSetting); |
|
234 // Following lines flagged out just get rid of compiler warning when trace |
|
235 // compiler is not in use. |
|
236 #ifdef OST_TRACE_COMPILER_IN_USE |
|
237 TUint tempValue = data.iSetting; // Parameter just for tracing |
|
238 OstTraceExt1( TRACE_NORMAL, DUP3_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest;data.iSetting=%hhx", tempValue ); |
|
239 #endif // OST_TRACE_COMPILER_IN_USE |
|
240 return KErrArgument; |
|
241 } |
|
242 |
|
243 // Create a buffer to hold the request |
|
244 TBuf8<SIZE_SMS_CB_ROUTING_REQ> dataBuffer; |
|
245 dataBuffer.Append( routingCommand ); // Routing command |
|
246 dataBuffer.Append( SMS_NEW_SUBSCRIPTION ); // Subscription number |
|
247 dataBuffer.Append( SMS_TYPE_DEFAULT ); // Subscription type |
|
248 dataBuffer.Append( KBroadPadding ); // Filler |
|
249 dataBuffer.Append( KBroadPadding ); // Filler |
|
250 dataBuffer.Append( 0 ); // Number of subblocks |
|
251 |
|
252 return iPhoNetSender->Send( |
|
253 PN_SMS, |
|
254 aTransId, |
|
255 SMS_CB_ROUTING_REQ, |
|
256 dataBuffer ); |
|
257 } |
|
258 |
|
259 |
|
260 // ----------------------------------------------------------------------------- |
|
261 // CMmBroadMessHandler:: SmsCbRoutingResp |
|
262 // Response for SmsCbRoutingReq. |
|
263 // Response doesn't include CB message |
|
264 // ----------------------------------------------------------------------------- |
|
265 // |
|
266 void CMmBroadMessHandler::SmsCbRoutingResp |
|
267 ( |
|
268 const TIsiReceiveC& aSmsCbRoutingResp // Received isimsg |
|
269 ) |
|
270 { |
|
271 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingResp"); |
|
272 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_SMSGSMCBROUTINGRESP, "CMmBroadMessHandler::SmsCbRoutingResp" ); |
|
273 TInt ipc( 0 ); // Initialize to zero |
|
274 |
|
275 TUint8 isiCause( aSmsCbRoutingResp.Get8bit( ISI_HEADER_SIZE |
|
276 + SMS_CB_ROUTING_RESP_OFFSET_SMSCAUSE ) ); |
|
277 |
|
278 TInt cause( CMmStaticUtility::CSCauseToEpocError( |
|
279 PN_SMS, |
|
280 SMS_CAUSE_TYPE_COMMON, |
|
281 isiCause ) ); |
|
282 |
|
283 TUint8 traid( aSmsCbRoutingResp.Get8bit( ISI_HEADER_SIZE |
|
284 + SMS_CB_ROUTING_RESP_OFFSET_TRANSID ) ); |
|
285 |
|
286 // Response for SmsGsmCbRoutingReq (receive message) |
|
287 if ( EBroadcastMessagingReceiveMessage == traid ) |
|
288 { |
|
289 ipc = EMobileBroadcastMessagingReceiveMessage; |
|
290 } |
|
291 // Response for SmsGsmCbRoutingReq (receive message cancel) |
|
292 else if ( EBroadcastMessagingReceiveMessageCancel == traid ) |
|
293 { |
|
294 ipc = EMobileBroadcastMessagingReceiveMessageCancel; |
|
295 } |
|
296 // Response for SmsGsmCbRoutingReq (set filter setting) |
|
297 else if ( EBroadcastMessagingSetFilterSetting == traid ) |
|
298 { |
|
299 ipc = EMobileBroadcastMessagingSetFilterSetting; |
|
300 } |
|
301 |
|
302 // Complete status change indication, if ipc is set |
|
303 if ( 0 != ipc ) |
|
304 { |
|
305 iMessageRouter->Complete( ipc, cause ); |
|
306 } |
|
307 |
|
308 return; |
|
309 } |
|
310 |
|
311 // ----------------------------------------------------------------------------- |
|
312 // CMmBroadMessHandler:: SmsCbRoutingInd |
|
313 // Incoming CB message. When the SMS Server receives a CB message |
|
314 // from the network and routing of this CB message has been |
|
315 // accepted, the server shall send message to the client |
|
316 // ----------------------------------------------------------------------------- |
|
317 // |
|
318 void CMmBroadMessHandler::SmsCbRoutingIndL |
|
319 ( |
|
320 const TIsiReceiveC& aSmsCbRoutingInd // Received ISI message |
|
321 ) |
|
322 { |
|
323 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingInd"); |
|
324 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL, "CMmBroadMessHandler::SmsCbRoutingIndL" ); |
|
325 |
|
326 CMmDataPackage data; |
|
327 TInt error ( KErrNone ); |
|
328 |
|
329 // Get the number of subblocks |
|
330 TUint sbNumber( aSmsCbRoutingInd.Get8bit( ISI_HEADER_SIZE |
|
331 + SMS_CB_ROUTING_IND_OFFSET_SUBBLOCKCOUNT ) ); |
|
332 |
|
333 // Check the info length of the 1st SMS_SB_CB_MESSAGE subblock to |
|
334 // know if it is a WCDMA CBS message or a GSM one |
|
335 TUint firstSbOffset( 0 ); |
|
336 TInt sbFound( aSmsCbRoutingInd.FindSubBlockOffsetById( |
|
337 ISI_HEADER_SIZE + SIZE_SMS_CB_ROUTING_IND, |
|
338 SMS_SB_CB_MESSAGE, |
|
339 EIsiSubBlockTypeId16Len16, |
|
340 firstSbOffset ) ); |
|
341 |
|
342 TUint8 infoLength( SMS_CB_MESSAGE_CONTENT_SIZE + 1 ); // Illegal value |
|
343 if ( KErrNone == sbFound ) |
|
344 { |
|
345 infoLength = aSmsCbRoutingInd.Get8bit( firstSbOffset |
|
346 + SMS_SB_CB_MESSAGE_OFFSET_INFOLENGTH ); |
|
347 } |
|
348 |
|
349 TFLOGSTRING2("TSY: CMmBroadMessHandler::SmsCbRoutingIndL. infoLength:%d",infoLength); |
|
350 OstTraceExt1( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL, "CMmBroadMessHandler::SmsCbRoutingIndL;infoLength=%hhu", infoLength ); |
|
351 |
|
352 // Reset and destroy the array |
|
353 iCbsMsg->ResetAndDestroy(); |
|
354 |
|
355 // GSM mode, don't care of info length |
|
356 if ( KInfoLengthIgnored == infoLength ) |
|
357 { |
|
358 // GSM CB Message. First SMS_SB_CB_MESSAGE sub block is the only one. |
|
359 TGsmCbsMsg cbsMsg; |
|
360 |
|
361 // Get serial number |
|
362 TUint16 serialNumber( aSmsCbRoutingInd.Get16bit( firstSbOffset |
|
363 + SMS_SB_CB_MESSAGE_OFFSET_SERIALNUMBER ) ); |
|
364 // Append MSB bits from serial number |
|
365 cbsMsg.iCbsMsg.Append( serialNumber >> 8 ); |
|
366 // Append LSB bits from serial number |
|
367 cbsMsg.iCbsMsg.Append( serialNumber & 0x00FF ); |
|
368 |
|
369 // Get message ID |
|
370 TUint16 messageId( aSmsCbRoutingInd.Get16bit( firstSbOffset |
|
371 + SMS_SB_CB_MESSAGE_OFFSET_CBMESSAGEID ) ); |
|
372 // Append MSB bits from message ID |
|
373 cbsMsg.iCbsMsg.Append( messageId >> 8 ); |
|
374 // Append LSB bits from message ID |
|
375 cbsMsg.iCbsMsg.Append( messageId & 0x00FF ); |
|
376 |
|
377 // Data coding scheme |
|
378 cbsMsg.iCbsMsg.Append( aSmsCbRoutingInd.Get8bit( firstSbOffset |
|
379 + SMS_SB_CB_MESSAGE_OFFSET_DATACODINGSCHEME ) ); |
|
380 |
|
381 // Number of pages |
|
382 cbsMsg.iCbsMsg.Append( aSmsCbRoutingInd.Get8bit( firstSbOffset |
|
383 + SMS_SB_CB_MESSAGE_OFFSET_PAGE ) ); |
|
384 |
|
385 // Content of the message |
|
386 cbsMsg.iCbsMsg.Append( aSmsCbRoutingInd.GetData( firstSbOffset |
|
387 + SMS_SB_CB_MESSAGE_OFFSET_CONTENTOFMESSAGE, |
|
388 SMS_CB_MESSAGE_CONTENT_SIZE ) ); |
|
389 |
|
390 // Pack data |
|
391 data.PackData( &cbsMsg ); |
|
392 |
|
393 // Complete |
|
394 iMessageRouter->Complete( |
|
395 EMmTsyGsmBroadcastNotifyMessageReceived, |
|
396 &data, |
|
397 error ); |
|
398 } |
|
399 |
|
400 // WCDMA mode,take care of info length and number of subblocks should be |
|
401 // less or equal to 15 |
|
402 else if ( ( SMS_CB_MESSAGE_CONTENT_SIZE >= infoLength ) |
|
403 && ( KWcdmaCbsNumberOfSbMax >= sbNumber ) ) |
|
404 { |
|
405 TUint currSbOffset( firstSbOffset ); |
|
406 // Loop through the SMS_SB_CB_MESSAGE sub blocks. |
|
407 for ( TInt i( 0 ); i < sbNumber; i++) |
|
408 { |
|
409 TWcdmaCbsMsg* wcdmaCbsMsg = new ( ELeave ) TWcdmaCbsMsg; |
|
410 CleanupStack::PushL( wcdmaCbsMsg ); |
|
411 |
|
412 // Total number of subblocks in SMS_CB_ROUTING_IND |
|
413 wcdmaCbsMsg->iSbNumber = sbNumber; |
|
414 |
|
415 // Serial number |
|
416 wcdmaCbsMsg->iSerialNum = aSmsCbRoutingInd.Get16bit( |
|
417 currSbOffset + SMS_SB_CB_MESSAGE_OFFSET_SERIALNUMBER ); |
|
418 |
|
419 // Message ID |
|
420 wcdmaCbsMsg->iMessageId = aSmsCbRoutingInd.Get16bit( |
|
421 currSbOffset + SMS_SB_CB_MESSAGE_OFFSET_CBMESSAGEID ); |
|
422 |
|
423 // Data coding scheme |
|
424 wcdmaCbsMsg->iDCS = aSmsCbRoutingInd.Get8bit( |
|
425 currSbOffset + SMS_SB_CB_MESSAGE_OFFSET_DATACODINGSCHEME ); |
|
426 |
|
427 // Number of pages |
|
428 wcdmaCbsMsg->iNumberOfPages = static_cast<TInt>( |
|
429 aSmsCbRoutingInd.Get8bit( |
|
430 currSbOffset + SMS_SB_CB_MESSAGE_OFFSET_PAGE ) ); |
|
431 |
|
432 // Information length |
|
433 wcdmaCbsMsg->iInfoLength = aSmsCbRoutingInd.Get8bit( |
|
434 currSbOffset + SMS_SB_CB_MESSAGE_OFFSET_INFOLENGTH ); |
|
435 |
|
436 // Message type is here CBS Message |
|
437 // (see spec 3GPP 25.324 v6.1 chapter 11.1.2) |
|
438 wcdmaCbsMsg->iMessageType = KCbsMessageType; |
|
439 |
|
440 // Content of the message |
|
441 TBuf8<RMobileBroadcastMessaging::KBroadcastPageSize> |
|
442 wcdmaCbsDataTemp = aSmsCbRoutingInd.GetData( |
|
443 currSbOffset + SMS_SB_CB_MESSAGE_OFFSET_CONTENTOFMESSAGE, |
|
444 SMS_CB_MESSAGE_CONTENT_SIZE ); |
|
445 |
|
446 // Append data portion from beginning to info length |
|
447 wcdmaCbsMsg->iWcdmaCbsData.Append( |
|
448 wcdmaCbsDataTemp.Mid ( 0, wcdmaCbsMsg->iInfoLength ) ); |
|
449 |
|
450 iCbsMsg->AppendL( wcdmaCbsMsg ); |
|
451 |
|
452 currSbOffset += SIZE_SMS_SB_CB_MESSAGE; |
|
453 |
|
454 // Pop wcdmaCbsMsg but don't destroy it |
|
455 CleanupStack::Pop( wcdmaCbsMsg ); |
|
456 //note: Lint doesn't understand the use of PopAndDestroy and 'thinks' |
|
457 //that there is a memory leak for wcdmaCbsMsg, we disable that warning with |
|
458 //the following command |
|
459 //lint -e429 |
|
460 } |
|
461 |
|
462 // Pack data |
|
463 data.PackData( &iCbsMsg, &sbNumber ); |
|
464 |
|
465 // Complete |
|
466 iMessageRouter->Complete( |
|
467 EMmTsyWcdmaBroadcastNotifyMessageReceived, |
|
468 &data, |
|
469 error ); |
|
470 } |
|
471 else // Illegal value ( e.g network is not working correctly ) |
|
472 { |
|
473 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsGsmCbRoutingNtfL illegal value (e.g network problem )"); |
|
474 OstTrace0( TRACE_NORMAL, DUP2_CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL, "CMmBroadMessHandler::SmsGsmCbRoutingNtfL-illegal value (e.g network problem" ); |
|
475 |
|
476 error = KErrGeneral; |
|
477 // Complete. We could complete with either ipc |
|
478 // EMmTsyWcdmaBroadcastNotifyMessageReceived or |
|
479 // EMmTsyGsmBroadcastNotifyMessageReceived but as it doesn't matter, |
|
480 // we arbitrarily decide to complete with a GSM CBS ipc |
|
481 iMessageRouter->Complete( |
|
482 EMmTsyGsmBroadcastNotifyMessageReceived, |
|
483 &data, |
|
484 error ); |
|
485 } |
|
486 return; |
|
487 } |
|
488 |
|
489 // ----------------------------------------------------------------------------- |
|
490 // CMmBroadMessHandler::ExtFuncL |
|
491 // Dispatches Etel requests to DOS level handlers |
|
492 // ----------------------------------------------------------------------------- |
|
493 // |
|
494 TInt CMmBroadMessHandler::ExtFuncL |
|
495 ( |
|
496 TInt aIpc, // IPC number |
|
497 const CMmDataPackage* aDataPackage // packed data |
|
498 ) |
|
499 { |
|
500 TFLOGSTRING("TSY: CMmBroadMessHandler::ExtFuncL"); |
|
501 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_EXTFUNCL, "CMmBroadMessHandler::ExtFuncL" ); |
|
502 TInt ret( KErrNone ); |
|
503 |
|
504 TUint8 transId( 0 ); // Initialize to zero |
|
505 |
|
506 switch ( aIpc ) |
|
507 { |
|
508 case EMobileBroadcastMessagingReceiveMessage: |
|
509 { |
|
510 transId = EBroadcastMessagingReceiveMessage; |
|
511 break; |
|
512 } |
|
513 case EMobileBroadcastMessagingReceiveMessageCancel: |
|
514 { |
|
515 transId = EBroadcastMessagingReceiveMessageCancel; |
|
516 break; |
|
517 } |
|
518 case EMobileBroadcastMessagingSetFilterSetting: |
|
519 { |
|
520 transId = EBroadcastMessagingSetFilterSetting; |
|
521 break; |
|
522 } |
|
523 default: |
|
524 { |
|
525 // This method should only be called for Broadcast cases |
|
526 TFLOGSTRING2("TSY: CMmBroadMessHandler::ExtFuncL - Unknown IPC: %d", aIpc); |
|
527 OstTrace1( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_EXTFUNCL, "CMmBroadMessHandler::ExtFuncL;aIpc=%d", aIpc ); |
|
528 ret = KErrArgument; |
|
529 break; |
|
530 } |
|
531 } |
|
532 if ( EBroadcastMessagingUnknown != transId ) |
|
533 { |
|
534 ret = SmsCbRoutingRequest( transId, aDataPackage ); |
|
535 } |
|
536 return ret; |
|
537 } |
|
538 |
|
539 |
|
540 // End of the file |
|
541 |