816 ExternalizeEntryL(streamid,smsaddr,*smsmessage, aRefStatus); |
814 ExternalizeEntryL(streamid,smsaddr,*smsmessage, aRefStatus); |
817 PopulateEntry(entry,*smsmessage, aRefStatus); |
815 PopulateEntry(entry,*smsmessage, aRefStatus); |
818 ChangeEntryL(j,entry); |
816 ChangeEntryL(j,entry); |
819 } |
817 } |
820 |
818 |
821 //TODO What is happening here? Seems strange |
|
822 RSmsSegmentationStoreRefStatusArray refStatusTemp; |
819 RSmsSegmentationStoreRefStatusArray refStatusTemp; |
823 CleanupClosePushL(refStatusTemp); |
820 CleanupClosePushL(refStatusTemp); |
824 |
821 |
825 streamid=KNullStreamId; |
822 streamid=KNullStreamId; |
826 |
823 |
842 } // CSmsSegmentationStore::AddCommandL |
839 } // CSmsSegmentationStore::AddCommandL |
843 |
840 |
844 |
841 |
845 TBool CSmsSegmentationStore::AddReferenceL(const CSmsMessage& aSmsMessage,TInt aReference) |
842 TBool CSmsSegmentationStore::AddReferenceL(const CSmsMessage& aSmsMessage,TInt aReference) |
846 { |
843 { |
847 TSmsSegmentationEntry entry; // TODO const and inside loop |
|
848 const TInt count=Entries().Count(); |
844 const TInt count=Entries().Count(); |
849 LOGSMSPROT3("CSmsSegmentationStore::AddReferenceL [count=%d, ref=%d]", count, aReference); |
845 LOGSMSPROT3("CSmsSegmentationStore::AddReferenceL [count=%d, ref=%d]", count, aReference); |
850 TInt i=0; |
846 TInt i=0; |
851 TInt logserverid=aSmsMessage.LogServerId(); |
847 TInt logserverid=aSmsMessage.LogServerId(); |
852 if (logserverid!=KLogNullId) |
848 if (logserverid!=KLogNullId) |
853 { |
849 { |
854 for (i=0; i<count; i++) |
850 for (i=0; i<count; i++) |
855 { |
851 { |
856 entry = (TSmsSegmentationEntry&)Entries()[i]; |
852 if (logserverid==((TSmsSegmentationEntry&)Entries()[i]).LogServerId()) |
857 if (logserverid==entry.LogServerId()) |
|
858 break; |
853 break; |
859 } |
854 } |
860 } |
855 } |
861 else |
856 else |
862 { |
857 { |
863 TGsmSmsTelNumber parsedaddress; |
858 TGsmSmsTelNumber parsedaddress; |
864 aSmsMessage.ParsedToFromAddress(parsedaddress); |
859 aSmsMessage.ParsedToFromAddress(parsedaddress); |
865 TInt telLen; |
860 TInt telLen; |
866 for (i=0; i<count; i++) |
861 for (i=0; i<count; i++) |
867 { |
862 { |
868 entry = (TSmsSegmentationEntry&)Entries()[i]; |
863 TSAREntry tsareenty = Entries()[i]; |
869 telLen=Min(entry.Description2().Length(),parsedaddress.iTelNumber.Length()); |
864 TSmsSegmentationEntry& entry = static_cast<TSmsSegmentationEntry&>(tsareenty); |
870 const CSmsPDU::TSmsPDUType type=entry.PduType(); |
865 telLen=Min(entry.Description2().Length(),parsedaddress.iTelNumber.Length()); |
871 if ((type==aSmsMessage.Type()) && (!entry.IsComplete()) && (aSmsMessage.Time()==entry.Time()) && (entry.Description2().Right(telLen)==parsedaddress.iTelNumber.Right(telLen))) |
866 const CSmsPDU::TSmsPDUType type=entry.PduType(); |
872 break; |
867 if ((type==aSmsMessage.Type()) && (!entry.IsComplete()) && (aSmsMessage.Time()==entry.Time()) && (entry.Description2().Right(telLen)==parsedaddress.iTelNumber.Right(telLen))) |
873 } |
868 break; |
874 } |
869 } |
875 // __ASSERT_DEBUG(i<count,SmspPanic(KSmspPanicEntryWithLogServerIdNotFound)); TODO |
870 } |
876 if(i>=count) |
871 if(i>=count) |
877 { |
872 { |
878 LOGSMSPROT3("WARNING! KSmspPanicEntryWithLogServerIdNotFound [i=%d, count=%d]", i, count); |
873 LOGSMSPROT3("WARNING! KSmspPanicEntryWithLogServerIdNotFound [i=%d, count=%d]", i, count); |
|
874 return EFalse; |
879 } |
875 } |
880 |
876 |
881 RSmsSegmentationStoreRefStatusArray refStatusArray; |
877 RSmsSegmentationStoreRefStatusArray refStatusArray; |
882 CleanupClosePushL(refStatusArray); |
878 CleanupClosePushL(refStatusArray); |
883 |
879 |
|
880 TSAREntry tsareenty = Entries()[i]; |
|
881 TSmsSegmentationEntry& entry = static_cast<TSmsSegmentationEntry&>(tsareenty); |
884 TStreamId streamid=entry.DataStreamId(); |
882 TStreamId streamid=entry.DataStreamId(); |
885 TSmsAddr smsaddr; |
883 TSmsAddr smsaddr; |
886 CSmsBuffer* buffer=CSmsBuffer::NewL(); |
884 CSmsBuffer* buffer=CSmsBuffer::NewL(); |
887 CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer); |
885 CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer); |
888 CleanupStack::PushL(smsmessage); |
886 CleanupStack::PushL(smsmessage); |
921 * @param aSmsMessage Reference to CSmsMessage. |
919 * @param aSmsMessage Reference to CSmsMessage. |
922 * @param aReference The PDU reference. |
920 * @param aReference The PDU reference. |
923 */ |
921 */ |
924 TBool CSmsSegmentationStore::AddReferenceStatusPairL(const CSmsMessage& aSmsMessage,TInt aReference, TUint aSegmentSequenceNumber) |
922 TBool CSmsSegmentationStore::AddReferenceStatusPairL(const CSmsMessage& aSmsMessage,TInt aReference, TUint aSegmentSequenceNumber) |
925 { |
923 { |
926 TSmsSegmentationEntry entry; // TODO const and inside loop |
|
927 const TInt count=Entries().Count(); |
924 const TInt count=Entries().Count(); |
928 LOGSMSPROT3("CSmsSegmentationStore::AddReferenceStatusPairL [count=%d, ref=%d]", count, aReference); |
925 LOGSMSPROT3("CSmsSegmentationStore::AddReferenceStatusPairL [count=%d, ref=%d]", count, aReference); |
929 TInt i=0; |
926 TInt i=0; |
930 TInt logserverid=aSmsMessage.LogServerId(); |
927 TInt logserverid=aSmsMessage.LogServerId(); |
931 if (logserverid!=KLogNullId) |
928 if (logserverid!=KLogNullId) |
932 { |
929 { |
933 for (i=0; i<count; i++) |
930 for (i=0; i<count; i++) |
934 { |
931 { |
935 entry = (TSmsSegmentationEntry&)Entries()[i]; |
932 if (logserverid==((TSmsSegmentationEntry&)Entries()[i]).LogServerId()) |
936 if (logserverid==entry.LogServerId()) |
|
937 break; |
933 break; |
938 } |
934 } |
939 } |
935 } |
940 else |
936 else |
941 { |
937 { |
942 TGsmSmsTelNumber parsedaddress; |
938 TGsmSmsTelNumber parsedaddress; |
943 aSmsMessage.ParsedToFromAddress(parsedaddress); |
939 aSmsMessage.ParsedToFromAddress(parsedaddress); |
944 TInt telLen; |
940 TInt telLen; |
945 for (i=0; i<count; i++) |
941 for (i=0; i<count; i++) |
946 { |
942 { |
947 entry = (TSmsSegmentationEntry&)Entries()[i]; |
943 TSAREntry tsareenty = Entries()[i]; |
|
944 TSmsSegmentationEntry& entry = static_cast<TSmsSegmentationEntry&>(tsareenty); |
948 telLen=Min(entry.Description2().Length(),parsedaddress.iTelNumber.Length()); |
945 telLen=Min(entry.Description2().Length(),parsedaddress.iTelNumber.Length()); |
949 const CSmsPDU::TSmsPDUType type=entry.PduType(); |
946 const CSmsPDU::TSmsPDUType type=entry.PduType(); |
950 if ((type==aSmsMessage.Type()) && (!entry.IsComplete()) && (aSmsMessage.Time()==entry.Time()) && (entry.Description2().Right(telLen)==parsedaddress.iTelNumber.Right(telLen))) |
947 if ((type==aSmsMessage.Type()) && (!entry.IsComplete()) && (aSmsMessage.Time()==entry.Time()) && (entry.Description2().Right(telLen)==parsedaddress.iTelNumber.Right(telLen))) |
951 break; |
948 break; |
952 } |
949 } |
953 } |
950 } |
954 // __ASSERT_DEBUG(i<count,SmspPanic(KSmspPanicEntryWithLogServerIdNotFound)); TODO |
|
955 if(i>=count) |
951 if(i>=count) |
956 { |
952 { |
957 LOGSMSPROT3("WARNING! KSmspPanicEntryWithLogServerIdNotFound [i=%d, count=%d]", i, count); |
953 LOGSMSPROT3("WARNING! KSmspPanicEntryWithLogServerIdNotFound [i=%d, count=%d]", i, count); |
|
954 return EFalse; |
958 } |
955 } |
959 |
956 |
960 RSmsSegmentationStoreRefStatusArray refStatusArray; |
957 RSmsSegmentationStoreRefStatusArray refStatusArray; |
961 CleanupClosePushL(refStatusArray); |
958 CleanupClosePushL(refStatusArray); |
|
959 TSAREntry tsareenty = Entries()[i]; |
|
960 TSmsSegmentationEntry& entry = static_cast<TSmsSegmentationEntry&>(tsareenty); |
962 |
961 |
963 TStreamId streamid=entry.DataStreamId(); |
962 TStreamId streamid=entry.DataStreamId(); |
964 TSmsAddr smsaddr; |
963 TSmsAddr smsaddr; |
965 CSmsBuffer* buffer=CSmsBuffer::NewL(); |
964 CSmsBuffer* buffer=CSmsBuffer::NewL(); |
966 CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer); |
965 CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer); |
1057 CSmsBuffer* buffer=CSmsBuffer::NewL(); |
1056 CSmsBuffer* buffer=CSmsBuffer::NewL(); |
1058 CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer); |
1057 CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer); |
1059 CleanupStack::PushL(smsmessage); |
1058 CleanupStack::PushL(smsmessage); |
1060 TGsmSmsTelNumber parsedaddress; |
1059 TGsmSmsTelNumber parsedaddress; |
1061 aStatusReport.ParsedToFromAddress(parsedaddress); |
1060 aStatusReport.ParsedToFromAddress(parsedaddress); |
1062 TSmsSegmentationEntry entry; // TODO const ref and inside loop |
|
1063 |
1061 |
1064 BeginTransactionLC(); |
1062 BeginTransactionLC(); |
1065 |
1063 |
1066 aIndex = count1; |
1064 aIndex = count1; |
1067 |
1065 |
1068 TInt telLen; |
1066 TInt telLen; |
1069 while (!found && aIndex--) |
1067 while (!found && aIndex--) |
1070 { |
1068 { |
1071 entry = (TSmsSegmentationEntry&)Entries()[aIndex]; |
1069 TSAREntry tsareenty = Entries()[aIndex]; |
|
1070 TSmsSegmentationEntry& entry = static_cast<TSmsSegmentationEntry&>(tsareenty); |
1072 |
1071 |
1073 // Remove leading zeros of national numbers |
1072 // Remove leading zeros of national numbers |
1074 TPtrC trimmedTelNumber(TrimLeadingZeros(entry.Description2())); |
1073 TPtrC trimmedTelNumber(TrimLeadingZeros(entry.Description2())); |
1075 TPtrC trimmedParsedTelNumber(TrimLeadingZeros(parsedaddress.iTelNumber)); |
1074 TPtrC trimmedParsedTelNumber(TrimLeadingZeros(parsedaddress.iTelNumber)); |
1076 |
1075 |
1147 |
1146 |
1148 aComplete=EFalse; |
1147 aComplete=EFalse; |
1149 TInt telLen; |
1148 TInt telLen; |
1150 for (aIndex=0; aIndex<count1; aIndex++) |
1149 for (aIndex=0; aIndex<count1; aIndex++) |
1151 { |
1150 { |
1152 entry = (TSmsSegmentationEntry&)Entries()[aIndex]; |
1151 TSAREntry tsareenty = Entries()[aIndex]; |
|
1152 TSmsSegmentationEntry& entry = static_cast<TSmsSegmentationEntry&>(tsareenty); |
1153 telLen=Min(entry.Description2().Length(),parsedaddress.iTelNumber.Length()); |
1153 telLen=Min(entry.Description2().Length(),parsedaddress.iTelNumber.Length()); |
1154 const CSmsPDU::TSmsPDUType type = entry.PduType(); |
1154 const CSmsPDU::TSmsPDUType type = entry.PduType(); |
1155 if ((type==CSmsPDU::ESmsSubmit) && |
1155 if ((type==CSmsPDU::ESmsSubmit) && |
1156 entry.IsComplete() && |
1156 entry.IsComplete() && |
1157 (entry.Time()==time) && |
1157 (entry.Time()==time) && |
1174 InternalizeEntryL(entry.DataStreamId(),smsaddr,*smsmessage, refStatusArray2); |
1174 InternalizeEntryL(entry.DataStreamId(),smsaddr,*smsmessage, refStatusArray2); |
1175 const TInt count2 = refStatusArray.Count(); |
1175 const TInt count2 = refStatusArray.Count(); |
1176 __ASSERT_DEBUG(count2 == refStatusArray2.Count(),SmspPanic(KSmspPanicBadReferenceArray)); |
1176 __ASSERT_DEBUG(count2 == refStatusArray2.Count(),SmspPanic(KSmspPanicBadReferenceArray)); |
1177 for (TInt i=0; i<count2; i++) |
1177 for (TInt i=0; i<count2; i++) |
1178 { |
1178 { |
1179 //TODO What is this doing? |
|
1180 TSmsSegmentationStoreRefStatus& refStatus2 = refStatusArray2[i]; |
1179 TSmsSegmentationStoreRefStatus& refStatus2 = refStatusArray2[i]; |
1181 if (!IsPermanentStatus(refStatus2.Status())) |
1180 if (!IsPermanentStatus(refStatus2.Status())) |
1182 { |
1181 { |
1183 refStatus2.SetStatus(refStatusArray[i].Status()); |
1182 refStatus2.SetStatus(refStatusArray[i].Status()); |
1184 } |
1183 } |
1424 const TBool ret = IsPermanentStatus(aRefStatusArray[i].Status()); |
1423 const TBool ret = IsPermanentStatus(aRefStatusArray[i].Status()); |
1425 LOGSMSPROT4("CSmsSegmentationStore::IsPermanentStatus [Status: %d, RetVal: %d, count=%d]", aRefStatusArray[i].Status(), ret, count); |
1424 LOGSMSPROT4("CSmsSegmentationStore::IsPermanentStatus [Status: %d, RetVal: %d, count=%d]", aRefStatusArray[i].Status(), ret, count); |
1426 if (ret) |
1425 if (ret) |
1427 permanent++; |
1426 permanent++; |
1428 } |
1427 } |
1429 /* |
|
1430 * |
|
1431 * TODO ahe - for release |
|
1432 * tested hack: the messagereceived function will be called right |
|
1433 * I did a lot of testing with multipart messages, the sms are |
|
1434 * almost always received and sent now, there might be only problems |
|
1435 * with the SR now - to wait for more logs to see what happens in this |
|
1436 * special cases - and the device crashes and is too slow of course |
|
1437 * |
|
1438 */ |
|
1439 return (permanent==count) && (permanent==aEntry.Total() ); |
1428 return (permanent==count) && (permanent==aEntry.Total() ); |
1440 } // CSmsSegmentationStore::StatusArrayComplete |
1429 } // CSmsSegmentationStore::StatusArrayComplete |
1441 |
1430 |
1442 |
1431 |
1443 /** |
1432 /** |