Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }