1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of "Eclipse Public License v1.0" |
4 // under the terms of "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
46 const RMobileSmsMessaging::TMobileSmsCapsV1& aMobileSmsCaps, |
52 const RMobileSmsMessaging::TMobileSmsCapsV1& aMobileSmsCaps, |
47 RMobileSmsMessaging& aSmsMessaging, |
53 RMobileSmsMessaging& aSmsMessaging, |
48 TInt aPriority, |
54 TInt aPriority, |
49 CSmspSetBearer& aSmspSetBearer) |
55 CSmspSetBearer& aSmspSetBearer) |
50 { |
56 { |
51 LOGSMSPROT1("CSmsMessageSend::NewL()"); |
57 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_NEWL_1, "CSmsMessageSend::NewL()"); |
52 |
58 |
53 CSmsMessageSend* self = new (ELeave) CSmsMessageSend(aSegmentationStore, |
59 CSmsMessageSend* self = new (ELeave) CSmsMessageSend(aSegmentationStore, |
54 aSmsSettings, |
60 aSmsSettings, |
55 aMobileSmsCaps, |
61 aMobileSmsCaps, |
56 aSmsMessaging, |
62 aSmsMessaging, |
69 * |
75 * |
70 * Creates CSmsTimeout object and the SMS event logger. |
76 * Creates CSmsTimeout object and the SMS event logger. |
71 */ |
77 */ |
72 void CSmsMessageSend::ConstructL() |
78 void CSmsMessageSend::ConstructL() |
73 { |
79 { |
74 LOGSMSPROT1("CSmsMessageSend::ConstructL()"); |
80 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_CONSTRUCTL_1, "CSmsMessageSend::ConstructL()"); |
75 |
81 |
76 iSmsEventLogger = CSmsEventLogger::NewL(iSegmentationStore.FileSession(), |
82 iSmsEventLogger = CSmsEventLogger::NewL(iSegmentationStore.FileSession(), |
77 Priority()); |
83 Priority()); |
78 |
84 |
79 ConstructTimeoutL(); |
85 ConstructTimeoutL(); |
122 |
128 |
123 |
129 |
124 void CSmsMessageSend::Start(CSmsMessage& aSmsMessage, TInt aOptions, |
130 void CSmsMessageSend::Start(CSmsMessage& aSmsMessage, TInt aOptions, |
125 const TSmsAddr& aSmsAddr, TRequestStatus& aStatus) |
131 const TSmsAddr& aSmsAddr, TRequestStatus& aStatus) |
126 { |
132 { |
127 LOGSMSPROT1("CSmsMessageSend::Start()"); |
133 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_START_1, "CSmsMessageSend::Start()"); |
128 |
134 |
129 __ASSERT_DEBUG(iState == ESmsMessageSendIdle,SmspPanic(KSmspPanicUnexpectedState)); |
135 __ASSERT_DEBUG(iState == ESmsMessageSendIdle,SmspPanic(KSmspPanicUnexpectedState)); |
130 |
136 |
131 // |
137 // |
132 // Store the request status that we will complete when finished... |
138 // Store the request status that we will complete when finished... |
158 } // CSmsMessageSend::Start |
164 } // CSmsMessageSend::Start |
159 |
165 |
160 |
166 |
161 void CSmsMessageSend::DoRunL() |
167 void CSmsMessageSend::DoRunL() |
162 { |
168 { |
163 LOGSMSPROT3("CSmsMessageSend::RunL(): iStatus=%d, iState=%d", iStatus.Int(), iState); |
169 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DORUNL_1, "CSmsMessageSend::RunL(): iStatus=%d, iState=%d", iStatus.Int(), iState); |
164 |
170 |
165 switch (iState) |
171 switch (iState) |
166 { |
172 { |
167 case ESmsMessageSendSetBearer: |
173 case ESmsMessageSendSetBearer: |
168 { |
174 { |
246 DecodeSubmitReportL(); |
252 DecodeSubmitReportL(); |
247 } |
253 } |
248 |
254 |
249 if (iStatus.Int() == KErrNone && !IsRPError()) |
255 if (iStatus.Int() == KErrNone && !IsRPError()) |
250 { |
256 { |
251 LOGSMSIF2("CSmsMessageSend::RunL(): Submit ACK'd MsgRef=%d", |
257 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DORUNL_2, "CSmsMessageSend::RunL(): Submit ACK'd MsgRef=%d",iMobileSmsSendAttributesV1.iMsgRef); |
252 iMobileSmsSendAttributesV1.iMsgRef); |
|
253 } |
258 } |
254 else if (IsRPError()) |
259 else if (IsRPError()) |
255 { |
260 { |
256 LOGSMSIF2("CSmsMessageSend::RunL(): Submit N'ACK'D MsgRef=%d", |
261 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DORUNL_3, "CSmsMessageSend::RunL(): Submit N'ACK'D MsgRef=%d",iMobileSmsSendAttributesV1.iMsgRef); |
257 iMobileSmsSendAttributesV1.iMsgRef); |
|
258 } |
262 } |
259 else |
263 else |
260 { |
264 { |
261 LOGSMSIF2("CSmsMessageSend::RunL(): MsgRef=%d", |
265 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DORUNL_4, "CSmsMessageSend::RunL(): MsgRef=%d",iMobileSmsSendAttributesV1.iMsgRef); |
262 iMobileSmsSendAttributesV1.iMsgRef); |
|
263 } |
266 } |
264 |
267 |
265 // |
268 // |
266 // If the PDU was sent okay, then update the segmentation store... |
269 // If the PDU was sent okay, then update the segmentation store... |
267 // |
270 // |
350 } // CSmsMessageSend::DoRunL |
353 } // CSmsMessageSend::DoRunL |
351 |
354 |
352 |
355 |
353 void CSmsMessageSend::DoCancel() |
356 void CSmsMessageSend::DoCancel() |
354 { |
357 { |
355 LOGSMSPROT2("CSmsMessageSend::DoCancel(): iState=%d", iState); |
358 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DOCANCEL_1, "CSmsMessageSend::DoCancel(): iState=%d", iState); |
356 |
359 |
357 TimedSetActiveCancel(); |
360 TimedSetActiveCancel(); |
358 |
361 |
359 switch (iState) |
362 switch (iState) |
360 { |
363 { |
420 * @leave Leaves if CSmsBuffer::NewL or CSmsMessage::NewL leaves. |
423 * @leave Leaves if CSmsBuffer::NewL or CSmsMessage::NewL leaves. |
421 * |
424 * |
422 */ |
425 */ |
423 void CSmsMessageSend::DecodeSubmitReportL() |
426 void CSmsMessageSend::DecodeSubmitReportL() |
424 { |
427 { |
425 LOGSMSPROT1("CSmsMessageSend::DecodeSubmitReportL()"); |
428 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DECODESUBMITREPORTL_1, "CSmsMessageSend::DecodeSubmitReportL()"); |
426 |
429 |
427 // |
430 // |
428 // Only try to decode the submit report if error is a RP-error, in which case there should be a valid PDU |
431 // Only try to decode the submit report if error is a RP-error, in which case there should be a valid PDU |
429 // |
432 // |
430 if (IsRPError()) |
433 if (IsRPError()) |
448 iStatus = FailureCauseToError(failureCause); |
451 iStatus = FailureCauseToError(failureCause); |
449 } |
452 } |
450 } |
453 } |
451 else |
454 else |
452 { |
455 { |
453 LOGSMSPROT3("Invalid PDU Type = %d with iStatus = %d", smsMessage->SmsPDU().Type(), iStatus.Int() ); |
456 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DECODESUBMITREPORTL_2, "Invalid PDU Type = %d with iStatus = %d", smsMessage->SmsPDU().Type(), iStatus.Int() ); |
454 } |
457 } |
455 |
458 |
456 CleanupStack::PopAndDestroy(smsMessage); |
459 CleanupStack::PopAndDestroy(smsMessage); |
457 } |
460 } |
458 } // CSmsMessageSend::DecodeSubmitReportL |
461 } // CSmsMessageSend::DecodeSubmitReportL |
512 } // CSmsMessageSend::IsRPError |
515 } // CSmsMessageSend::IsRPError |
513 |
516 |
514 |
517 |
515 void CSmsMessageSend::SegmentMessage() |
518 void CSmsMessageSend::SegmentMessage() |
516 { |
519 { |
517 LOGSMSPROT1("CSmsMessageSend::SegmentMessage()"); |
520 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_SEGMENTMESSAGE_1, "CSmsMessageSend::SegmentMessage()"); |
518 |
521 |
519 iState = ESmsMessageSendSegmentingMessage; |
522 iState = ESmsMessageSendSegmentingMessage; |
520 |
523 |
521 TRAPD(ret,DoSegmentMessageL()); |
524 TRAPD(ret,DoSegmentMessageL()); |
522 |
525 |
524 } // CSmsMessageSend::SegmentMessage |
527 } // CSmsMessageSend::SegmentMessage |
525 |
528 |
526 |
529 |
527 void CSmsMessageSend::DoSegmentMessageL() |
530 void CSmsMessageSend::DoSegmentMessageL() |
528 { |
531 { |
529 LOGSMSPROT1("CSmsMessageSend::DoSegmentMessageL()"); |
532 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DOSEGMENTMESSAGEL_1, "CSmsMessageSend::DoSegmentMessageL()"); |
530 |
533 |
531 TInt reference=0; |
534 TInt reference=0; |
532 if (iSmsMessage->Type()==CSmsPDU::ESmsCommand) |
535 if (iSmsMessage->Type()==CSmsPDU::ESmsCommand) |
533 { |
536 { |
534 CSmsCommand& command=(CSmsCommand&) iSmsMessage->SmsPDU(); |
537 CSmsCommand& command=(CSmsCommand&) iSmsMessage->SmsPDU(); |
596 { |
599 { |
597 iSentBefore=ETrue; |
600 iSentBefore=ETrue; |
598 } |
601 } |
599 } |
602 } |
600 |
603 |
601 LOGSMSPROT3("CSmsMesageSend::DoSegmentMessageL [LogServerId=%d][iSentBefore=%d]",iSmsMessage->LogServerId(),iSentBefore); |
604 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DOSEGMENTMESSAGEL_2, "CSmsMesageSend::DoSegmentMessageL [LogServerId=%d][iSentBefore=%d]",iSmsMessage->LogServerId(),iSentBefore); |
602 LOGSMSPROT3("CSmsMesageSend::DoSegmentMessageL [referenceNo=%d] [iCountOfSentBefore=%d ]",reference,iSmsPDUData.iSent); |
605 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DOSEGMENTMESSAGEL_3, "CSmsMesageSend::DoSegmentMessageL [referenceNo=%d] [iCountOfSentBefore=%d ]",reference,iSmsPDUData.iSent); |
603 if(!iSentBefore) |
606 if(!iSentBefore) |
604 { |
607 { |
605 iSegmentationStore.AddSubmitL(iSmsAddr,*iSmsMessage); |
608 iSegmentationStore.AddSubmitL(iSmsAddr,*iSmsMessage); |
606 } |
609 } |
607 } |
610 } |
608 } // CSmsMessageSend::DoSegmentMessageL |
611 } // CSmsMessageSend::DoSegmentMessageL |
609 |
612 |
610 |
613 |
611 void CSmsMessageSend::CreateLogServerEvent() |
614 void CSmsMessageSend::CreateLogServerEvent() |
612 { |
615 { |
613 LOGSMSPROT1("CSmsMessageSend::CreateLogServerEvent()"); |
616 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_CREATELOGSERVEREVENT_1, "CSmsMessageSend::CreateLogServerEvent()"); |
614 |
617 |
615 iState=ESmsMessageSendCreatingLogServerEvent; |
618 iState=ESmsMessageSendCreatingLogServerEvent; |
616 TLogId logid=(TLogId) iSmsMessage->LogServerId(); |
619 TLogId logid=(TLogId) iSmsMessage->LogServerId(); |
617 |
620 |
618 if (logid == KLogNullId) |
621 if (logid == KLogNullId) |
628 } // CSmsMessageSend::CreateLogServerEvent |
631 } // CSmsMessageSend::CreateLogServerEvent |
629 |
632 |
630 |
633 |
631 void CSmsMessageSend::SendNextPDU() |
634 void CSmsMessageSend::SendNextPDU() |
632 { |
635 { |
633 LOGSMSPROT3("CSmsMessageSend::SendNextPDU [sending pdu %d of count=%d]",iSmsPDUData.iSent, iSmsArray.Count() ); |
636 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_SENDNEXTPDU_1, "CSmsMessageSend::SendNextPDU [sending pdu %d of count=%d]",iSmsPDUData.iSent, iSmsArray.Count() ); |
634 |
637 |
635 if (iSmsPDUData.iSent<iSmsArray.Count()) |
638 if (iSmsPDUData.iSent<iSmsArray.Count()) |
636 { |
639 { |
637 NMobilePhone::TMobileTON ton; |
640 NMobilePhone::TMobileTON ton; |
638 NMobilePhone::TMobileNPI npi; |
641 NMobilePhone::TMobileNPI npi; |
672 } |
675 } |
673 |
676 |
674 // |
677 // |
675 // Debug logging of the PDU we are sending... |
678 // Debug logging of the PDU we are sending... |
676 // |
679 // |
677 LOGSMSIFPDU(_L8("ETEL TX PDU: "), iSmsArray[iSmsPDUData.iSent].Pdu(), ETrue); |
680 #if (OST_TRACE_CATEGORY & OST_TRACE_CATEGORY_DEBUG) |
678 LOGSMSIFSENDATTRIBUTES(_L8("SENDATTRIBS: "), iMobileSmsSendAttributesV1); |
681 LogSmsIfPDU(_L8("ETEL TX PDU: "), iSmsArray[iSmsPDUData.iSent].Pdu(), ETrue); |
679 LOGSMSIFTIMESTAMP(); |
682 LogSmsIfSendAttributes(_L8("SENDATTRIBS: "), iMobileSmsSendAttributesV1); |
680 |
683 TBuf<40> timestamp; |
|
684 SmsTimeStampL(timestamp); |
|
685 OstTraceDefExt1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS,CSMSMESSAGESEND_SENDNEXTPDU_2, "%S",timestamp); |
|
686 #endif |
681 // |
687 // |
682 // Send the message and enter the correct state... |
688 // Send the message and enter the correct state... |
683 // |
689 // |
684 iState = ESmsMessageSendPDU; |
690 iState = ESmsMessageSendPDU; |
685 iSmsMessaging.SendMessage(iStatus, iSmsArray[iSmsPDUData.iSent].Pdu(), |
691 iSmsMessaging.SendMessage(iStatus, iSmsArray[iSmsPDUData.iSent].Pdu(), |
699 } // CSmsMessageSend::UpdateSegmentationStore |
705 } // CSmsMessageSend::UpdateSegmentationStore |
700 |
706 |
701 |
707 |
702 void CSmsMessageSend::DoUpdateSegmentationStoreL() |
708 void CSmsMessageSend::DoUpdateSegmentationStoreL() |
703 { |
709 { |
704 LOGSMSPROT1("CSmsMessageSend::DoUpdateSegmentationStoreL()"); |
710 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_DOUPDATESEGMENTATIONSTOREL_1, "CSmsMessageSend::DoUpdateSegmentationStoreL()"); |
705 |
711 |
706 iSmsPDUData.iSent++; // This is the end of the sequence for sending an SMS PDU |
712 iSmsPDUData.iSent++; // This is the end of the sequence for sending an SMS PDU |
707 |
713 |
708 if (iSmsMessage->Scheme() == EControlParametersScheme || |
714 if (iSmsMessage->Scheme() == EControlParametersScheme || |
709 iSmsMessage->Scheme() == ETPSRRScheme) |
715 iSmsMessage->Scheme() == ETPSRRScheme) |
721 } // CSmsMessageSend::DoUpdateSegmentationStoreL |
727 } // CSmsMessageSend::DoUpdateSegmentationStoreL |
722 |
728 |
723 |
729 |
724 void CSmsMessageSend::UpdateLogServerEvent() |
730 void CSmsMessageSend::UpdateLogServerEvent() |
725 { |
731 { |
726 LOGSMSPROT1("CSmsMessageSend::UpdateLogServerEvent()"); |
732 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_UPDATELOGSERVEREVENT_1, "CSmsMessageSend::UpdateLogServerEvent()"); |
727 |
733 |
728 // |
734 // |
729 // Fill in log event... |
735 // Fill in log event... |
730 // |
736 // |
731 iState = ESmsMessageSendUpdatingLogEvent; |
737 iState = ESmsMessageSendUpdatingLogEvent; |
735 } // CSmsMessageSend::UpdateLogServerEvent |
741 } // CSmsMessageSend::UpdateLogServerEvent |
736 |
742 |
737 |
743 |
738 void CSmsMessageSend::Complete(TInt aStatus) |
744 void CSmsMessageSend::Complete(TInt aStatus) |
739 { |
745 { |
740 LOGSMSPROT3("CSmsMessageSend::Complete [iStatus=%d, iState=%d]", iStatus.Int(), iState ); |
746 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_COMPLETE_1, "CSmsMessageSend::Complete [iStatus=%d, iState=%d]", iStatus.Int(), iState ); |
741 |
747 |
742 // |
748 // |
743 // For completion during log events, use the saved error code instead... |
749 // For completion during log events, use the saved error code instead... |
744 // |
750 // |
745 if (iState == ESmsMessageSendCreatingLogServerEvent || |
751 if (iState == ESmsMessageSendCreatingLogServerEvent || |