/// <summary> /// This method sends a data_sm packet synchronously over to the peer. /// </summary> /// <param name="pdu">data_sm packet</param> /// <returns>data_sm response</returns> public data_sm_resp SendData(data_sm pdu) { data_sm_resp response = null; PduSyncronizer sync = AddWaitingPdu(pdu); if (sync != null) { if (IsBound && SendPdu(pdu)) { if (sync.WaitForResponse()) { response = sync.PduResponse as data_sm_resp; if (response == null) { response = new data_sm_resp(pdu.SequenceNumber, sync.PduResponse.Status); } } else { response = new data_sm_resp(pdu.SequenceNumber, StatusCodes.ESME_RINVEXPIRY); } } else { response = new data_sm_resp(pdu.SequenceNumber, StatusCodes.ESME_RDELIVERYFAILURE); } FindAndRemoveWaitingPdu(pdu.SequenceNumber); } else { response = new data_sm_resp(pdu.SequenceNumber, StatusCodes.ESME_RMSGQFUL); } return(response); }
/// <summary> /// This method sends an enquire link /// </summary> /// <returns></returns> public enquire_link_resp EnquireLink() { SmppPdu pdu = new enquire_link(); enquire_link_resp response = null; PduSyncronizer sync = AddWaitingPdu(pdu); if (sync != null) { if (IsBound && SendPdu(pdu)) { if (sync.WaitForResponse()) { response = sync.PduResponse as enquire_link_resp; if (response == null) { response = new enquire_link_resp(pdu.SequenceNumber, sync.PduResponse.Status); } } else { response = new enquire_link_resp(pdu.SequenceNumber, StatusCodes.ESME_RINVEXPIRY); } } else { response = new enquire_link_resp(pdu.SequenceNumber, StatusCodes.ESME_RINVCMDID); } FindAndRemoveWaitingPdu(pdu.SequenceNumber); } else { response = new enquire_link_resp(pdu.SequenceNumber, StatusCodes.ESME_RMSGQFUL); } return(response); }
/// <summary> /// This method is used to unbind our session synchronously. /// </summary> /// <returns>Unbind response PDU</returns> public unbind_resp UnBind() { unbind pdu = new unbind(); unbind_resp response = null; PduSyncronizer sync = AddWaitingPdu(pdu); if (sync != null) { if (IsBound && SendPdu(pdu)) { if (sync.WaitForResponse()) { response = sync.PduResponse as unbind_resp; if (response == null) { response = new unbind_resp(pdu.SequenceNumber, sync.PduResponse.Status); } } else { response = new unbind_resp(pdu.SequenceNumber, StatusCodes.ESME_RINVEXPIRY); } } else { response = new unbind_resp(pdu.SequenceNumber, StatusCodes.ESME_RINVBNDSTS); } FindAndRemoveWaitingPdu(pdu.SequenceNumber); } else { response = new unbind_resp(pdu.SequenceNumber, StatusCodes.ESME_RMSGQFUL); } return(response); }