I'm going to purchase your SMPP client/server implementation, so I'm testing this wonderful library at this time. I'm confused with resending one part of long sms. For sending message I'm doing smth like this:
Code: Select all
ushort refNumber = 0;
Code: Select all
refNumber = (ushort)(refNumber + (ushort)1);
if ((refNumber == 0) || (refNumber >= 65535))
{
refNumber = 1;
} else {
refNumber = (ushort)(refNumber + (ushort)1);
}
SubmitSm submit_sm = new SubmitSm();
submit_sm.DataCoding = (DataCodings)codings[sms[i].sms_group_id];
submit_sm.DestAddr = sms[i].phone;
submit_sm.DestNpi = channelInfo.dest_addr_npi;
submit_sm.DestTon = channelInfo.dest_addr_ton;
submit_sm.MessageMode = MessageModes.Default;
submit_sm.MessageType = MessageTypes.Default;
submit_sm.RegisteredDelivery = 1;
submit_sm.ReplaceIfPresent = 0;
submit_sm.ScheduleDeliveryTime = null;
submit_sm.Sequence = (uint)sms[i].server_id;
submit_sm.SrcAddr = sms[i].sender_sign;
submit_sm.SrcNpi = channelInfo.source_addr_npi;
submit_sm.SrcTon = channelInfo.source_addr_ton;
submit_sm.UserDataPdu = new UserData();
switch ((DataCodings)codings[sms[i].sms_group_id])
{
case DataCodings.Latin1: { submit_sm.UserDataPdu.ShortMessage = Encoding.GetEncoding("iso8859-1").GetBytes(sms[i].sms_text); } break;
default: { submit_sm.UserDataPdu.ShortMessage = Encoding.BigEndianUnicode.GetBytes(sms[i].sms_text); } break;
}
if (!((sms[i].sms_group_count == 0) || (sms[i].sms_group_count == 1)))
{
submit_sm.Optional.AddSARReferenceNumber((ushort)[b]refNumber[/b]);
submit_sm.Optional.AddSARSequenceNumber((byte)sms[i].sms_group_index);
submit_sm.Optional.AddSARTotalSegments((byte)sms[i].sms_group_count);
}
submit_sm.ValidityPeriod = DateTime.Now.AddDays(1).ToString("yyMMddhhmmss000+");
client.SubmitAsync(submit_sm);
I don't know what to to do when i receive throatling (for example) error for one part of multipart sms message. How to process resending only one part of multipart message: ReferenceNumber may not be unique? I hope for your answer!
p.s. sorry for my English, please.