Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 103 additions & 3 deletions Source/SmppClient/ESMEConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ namespace BSN.SmppClient
{
/// <summary> Manages a single ESME (Extended Short Message Entity) connection </summary>
internal class ESMEConnection : IDisposable
{
{
#region Delegates

/// <summary> Called when a message is received </summary>
/// <param name="logKey"></param>
/// <param name="logKey"></param>
/// <param name="messageType"></param>
/// <param name="serviceType"></param>
/// <param name="sourceTon"></param>
Expand Down Expand Up @@ -754,6 +754,106 @@ public int SendMessage(string phoneNumber, string serviceType, Ton destinationTo
return retVal;
}

/// <summary> Called to send the message </summary>
/// <param name="phoneNumber"></param>
/// <param name="serviceType"></param>
/// <param name="sourceTon"></param>
/// <param name="sourceNpi"></param>
/// <param name="destinationTon"></param>
/// <param name="destinationNpi"></param>
/// <param name="submitDataCoding"></param>
/// <param name="encodeDataCoding"></param>
/// <param name="message"></param>
/// <param name="submitSm"></param>
/// <param name="submitSmResp"></param>
/// <returns> 0 - Successful / 1 - Failed For Exception / 2 - Not Binded / 3 - Failed For Unknown Reason </returns>
public int SendMessage(string phoneNumber, string serviceType, Ton sourceTon, Npi sourceNpi, Ton destinationTon, Npi destinationNpi, DataCodings submitDataCoding, DataCodings encodeDataCoding, string message, out SubmitSm submitSm, out SubmitSmResp submitSmResp)
{
int retVal = 1;

submitSm = null;
submitSmResp = null;

try
{
if (Client.Status != ConnectionStatus.Bound)
{
WriteLog("ESMEConnection : SendMessage : Warning : Not Connected To The SMPP Server");
return 2;
}

// The message to send
string sendMessage = null;

// Do we need to cut the message down
if (encodeDataCoding == DataCodings.UCS2)
{
// UCS2 only supports 140 bytes
if (message.Length > 70)
{
WriteLog(LogEventNotificationTypes.Email, "ESMEConnection : SendMessage : WARNING : Truncating UCS2 message to 70 characters.");

// The default is Unicode so truncate the message
sendMessage = message.Substring(0, 70);
}
}
else if (message.Length > 160)
{
WriteLog(LogEventNotificationTypes.Email, "ESMEConnection : SendMessage : WARNING : Truncating Default message to 160 characters.");
sendMessage = message.Substring(0, 160);
}

// Prepare the message, I have made sure there is only ever one message
// with the trunacting above
submitSm = Client.PrepareSubmit(
SubmitMode.ShortMessage,
serviceType,
(byte)sourceTon,
(byte)sourceNpi,
ShortLongCode,
(byte)destinationTon,
(byte)destinationNpi,
phoneNumber,
submitDataCoding,
encodeDataCoding,
(sendMessage == null) ? message : sendMessage);

// Send the message
submitSmResp = Client.Submit(submitSm);

// Log the send call
WriteLog("ESMEConnection : SendMessage : Send : Sequence[{0}] Phone[{1}] Status[{2}]", submitSmResp.Sequence, phoneNumber, submitSmResp.Status);

// Success
if (submitSmResp.Status == CommandStatus.ESME_ROK)
{
retVal = 0;
}
// Bind Failed
else if (submitSmResp.Status == CommandStatus.ESME_RBINDFAIL)
{
WriteLog("ESMEConnection : SendMessage : ERROR : Bind Failed");

retVal = 2;
}
// Isn't successful
else
{
WriteLog("ESMEConnection : SendMessage : ERROR : Failed For Unknown Reason");

retVal = 3;
}

}
catch (Exception ex)
{
WriteLog(LogEventNotificationTypes.Email, "ESMEConnection : SendMessage : ERROR : {0}", ex.ToString());
retVal = 1;
}

return retVal;
}

/// <summary> Called to send the message </summary>
/// <param name="phoneNumber"></param>
/// <param name="serviceType"></param>
Expand Down
56 changes: 49 additions & 7 deletions Source/SmppClient/ESMEManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ namespace BSN.SmppClient
{
/// <summary> Provides ESME (Extended Short Message Entity) Management </summary>
public class ESMEManager : IDisposable
{
{
#region Delegates

/// <summary> Called when a message is received </summary>
/// <param name="logKey"></param>
/// <param name="logKey"></param>
/// <param name="messageType"></param>
/// <param name="serviceType"></param>
/// <param name="sourceTon"></param>
Expand Down Expand Up @@ -248,10 +248,10 @@ public void ConnectionEventConnectionHandler(string logKey, ConnectionEventTypes
{
ConnectionEventHandler(logKey, connectionEventType, message);
}
}
}

/// <summary> Called when a message is received on a connection </summary>
/// <param name="logKey"></param>
/// <param name="logKey"></param>
/// <param name="messageType"></param>
/// <param name="serviceType"></param>
/// <param name="sourceTon"></param>
Expand Down Expand Up @@ -503,7 +503,7 @@ public void AddConnections(int howMany, ConnectionModes connectionMode, string h
/// <param name="message"></param>
/// <param name="submitSm"></param>
/// <param name="submitSmResp"></param>
/// <returns> 1 - Successful / 0 - Failed </returns>
/// <returns> 0 - Successful / 1 - Failed </returns>
public int SendMessage(string phoneNumber, string serviceType, Ton sourceTon, Npi sourceNpi, DataCodings submitDataCoding, DataCodings encodeDataCoding, string message, out SubmitSm submitSm, out SubmitSmResp submitSmResp)
{
int retVal = 0;
Expand Down Expand Up @@ -535,6 +535,48 @@ public int SendMessage(string phoneNumber, string serviceType, Ton sourceTon, Np
return retVal;
}

/// <summary> Called to send the message </summary>
/// <param name="phoneNumber"></param>
/// <param name="serviceType"></param>
/// <param name="sourceTon"></param>
/// <param name="sourceNpi"></param>
/// <param name="destTon"></param>
/// <param name="destNpi"></param>
/// <param name="submitDataCoding"></param>
/// <param name="encodeDataCoding"></param>
/// <param name="message"></param>
/// <param name="submitSm"></param>
/// <param name="submitSmResp"></param>
/// <returns> 0 - Successful / 1 - Failed </returns>
public int SendMessage(string phoneNumber, string serviceType, Ton sourceTon, Npi sourceNpi, Ton destTon, Npi destNpi, DataCodings submitDataCoding, DataCodings encodeDataCoding, string message, out SubmitSm submitSm, out SubmitSmResp submitSmResp)
{
int retVal = 0;

submitSm = null;
submitSmResp = null;
try
{
// Capture the next transmitter connection
ESMEConnection eSMEConnection = NextTransmitterConnection();

if (eSMEConnection == null)
{
WriteLog("ESMEManager : SendMessage : Warning : Not Bound To The SMPP Server");

return 2;
}

// Send the message
retVal = eSMEConnection.SendMessage(phoneNumber, serviceType, sourceTon, sourceNpi, destTon, destNpi, submitDataCoding, encodeDataCoding, message, out submitSm, out submitSmResp);
}
catch (Exception ex)
{
WriteLog(LogEventNotificationTypes.Email, "ESMEManager : SendMessage : ERROR : {0}", ex.ToString());
}

return retVal;
}

/// <summary> Called to send the message </summary>
/// <param name="phoneNumber"></param>
/// <param name="serviceType"></param>
Expand Down
Loading