smsprotocols/smsstack/smsprot/Src/smspsend.cpp
branchRCL_3
changeset 65 630d2f34d719
parent 0 3553901f7fa8
child 66 07a122eea281
equal deleted inserted replaced
61:17af172ffa5f 65:630d2f34d719
     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".
    17 
    17 
    18 /**
    18 /**
    19  @file
    19  @file
    20  @internalAll
    20  @internalAll
    21 */
    21 */
       
    22 
       
    23 
       
    24 #include "OstTraceDefinitions.h"
       
    25 #ifdef OST_TRACE_COMPILER_IN_USE
       
    26 #include "smspsendTraces.h"
       
    27 #endif
    22 
    28 
    23 #include "smspsend.h"
    29 #include "smspsend.h"
    24 #include "smspstor.h"
    30 #include "smspstor.h"
    25 #include "smspmain.h"
    31 #include "smspmain.h"
    26 #include "smsuset.h"
    32 #include "smsuset.h"
    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
   463  *  
   466  *  
   464  *  @return boolean.
   467  *  @return boolean.
   465  */
   468  */
   466 TBool CSmsMessageSend::IsRPError() const
   469 TBool CSmsMessageSend::IsRPError() const
   467 	{
   470 	{
   468 	LOGSMSPROT1("CSmsMessageSend::IsRPError()");
   471 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSMESSAGESEND_ISRPERROR_1, "CSmsMessageSend::IsRPError()");
   469 	
   472 	
   470 	TBool  isRPError = EFalse;
   473 	TBool  isRPError = EFalse;
   471 
   474 
   472 	switch (iStatus.Int())
   475 	switch (iStatus.Int())
   473 		{
   476 		{
   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         LogSmsIfPDUL(_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  ||