示例#1
0
        /// <summary>
        /// Комманда отсоединения
        /// </summary>
        void communicator_OnUnbind(object source, UnbindEventArgs e)
        {
            //Отсоединяемся
            if (communicator.IsBinded && billing != null)
            {
                LoggerService.Logger.TraceEvent(TraceEventType.Information, LoggingCatoegory.Protocol.IntValue(), string.Format("Client {0} unbinded", billing.Account.Login));
                billing.Account.Dispose();
                billing = null;
                PerformanceCountersService.GetCounter(CONNECTION_COUNTER_NAME).Decrement();
            }
            SmppUnbindResp pdu = new SmppUnbindResp();

            pdu.SequenceNumber = e.UnbindPdu.SequenceNumber;
            pdu.CommandStatus  = (uint)SmppCommandStatus.ESME_ROK;
        }
示例#2
0
        /// <summary>
        /// Fires an event off based on what Pdu is sent in.
        /// </summary>
        /// <param name="response">The response to fire an event for.</param>
        private void FireEvents(Pdu response)
        {
            //понеслась...
            if (response is SmppBindResp)
            {
                SmppBindResp resp = (SmppBindResp)response;
                if (resp.CommandStatus == (uint)SmppCommandStatus.ESME_ROK)
                {
                    _isBinded = true; //Мы сопоставлены, все отлично
                }
                if (OnBindResp != null)
                {
                    OnBindResp(this, new BindRespEventArgs(resp));
                }
            }
            else if (response is SmppUnbindResp)
            {
                _isBinded = false;
                //Отсоединяемся
                asClient.Disconnect();
                if (OnUnboundResp != null)
                {
                    OnUnboundResp(this, new UnbindRespEventArgs((SmppUnbindResp)response));
                }
            }
            else if (response is SmppAlertNotification)
            {
                if (OnAlert != null)
                {
                    OnAlert(this, new AlertEventArgs((SmppAlertNotification)response));
                }
            }
            else if (response is SmppSubmitSmResp)
            {
                if (OnSubmitSmResp != null)
                {
                    OnSubmitSmResp(this,
                                   new SubmitSmRespEventArgs((SmppSubmitSmResp)response));
                }
            }
            else if (response is SmppEnquireLinkResp)
            {
                if (OnEnquireLinkResp != null)
                {
                    OnEnquireLinkResp(this, new EnquireLinkRespEventArgs((SmppEnquireLinkResp)response));
                }
            }
            else if (response is SmppSubmitSm)
            {
                if (OnSubmitSm != null)
                {
                    OnSubmitSm(this, new SubmitSmEventArgs((SmppSubmitSm)response));
                }
                else
                {
                    //Нет отбработчика, значит сами
                    SmppSubmitSmResp pdu = new SmppSubmitSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.MessageId      = System.Guid.NewGuid().ToString().Substring(0, 10);
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RSUBMITFAIL;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }

                    SendPdu(pdu);
                }
            }
            else if (response is SmppQuerySm)
            {
                if (OnQuerySm != null)
                {
                    OnQuerySm(this, new QuerySmEventArgs((SmppQuerySm)response));
                }
                else
                {
                    //Нет обработчика, отдаем пустой ответ "незнаю"
                    SmppQuerySmResp pdu = new SmppQuerySmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RQUERYFAIL;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }
                    SendPdu(pdu);
                }
            }
            else if (response is SmppGenericNack)
            {
                if (OnGenericNack != null)
                {
                    OnGenericNack(this, new GenericNackEventArgs((SmppGenericNack)response));
                }
            }
            else if (response is SmppEnquireLink)
            {
                if (OnEnquireLink != null)
                {
                    OnEnquireLink(this, new EnquireLinkEventArgs((SmppEnquireLink)response));
                }

                //Ответ, что с соединением все хорошо. Ответ взад
                SmppEnquireLinkResp pdu = new SmppEnquireLinkResp();
                pdu.SequenceNumber = response.SequenceNumber;
                pdu.CommandStatus  = (uint)SmppCommandStatus.ESME_ROK;
                SendPdu(pdu);
            }
            else if (response is SmppUnbind)
            {
                if (OnUnbind != null)
                {
                    OnUnbind(this, new UnbindEventArgs((SmppUnbind)response));
                }
                else
                {
                    //Нет обработчика, сами отвечаем
                    SmppUnbindResp pdu = new SmppUnbindResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = (uint)SmppCommandStatus.ESME_ROK;
                    SendPdu(pdu);
                }
                //Отключаемся, не сопряжены
                asClient.Disconnect();
                _isBinded = false;
            }
            else if (response is SmppBind)
            {
                SmppBind bindCommand = (SmppBind)response;
                if (_serverMode)
                {
                    this._AddressRange = bindCommand.AddressRange;
                    this._BindType     = bindCommand.BindType;
                    this._NpiType      = bindCommand.AddressNpi;
                    this._TonType      = bindCommand.AddressTon;
                    this._Version      = bindCommand.InterfaceVersion;
                    this._SystemType   = bindCommand.SystemType;
                    this._SystemId     = bindCommand.SystemId;
                    this._Password     = bindCommand.Password;
                }
                if (OnBind != null)
                {
                    BindEventArgs bindEA = new BindEventArgs(bindCommand);
                    OnBind(this, bindEA);
                    _isBinded = bindEA.IsBindSucessfull;
                }
                else
                {
                    //Если нет обработчика, то все плохо, возвращаем стандартный ответ
                    SmppBindResp pdu = new SmppBindResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RALYBND;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RBINDFAIL;
                        }
                        _isBinded = false;
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                        _isBinded         = true;
                    }
                    pdu.SystemId = "Generic";
                    SendPdu(pdu);
                }
            }
            else if (response is SmppCancelSm)
            {
                if (OnCancelSm != null)
                {
                    OnCancelSm(this, new CancelSmEventArgs((SmppCancelSm)response));
                }
                else
                {
                    //Нет обработчика - стандартный ответ "незнаю"
                    SmppCancelSmResp pdu = new SmppCancelSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RCANCELFAIL;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }
                    SendPdu(pdu);
                }
            }
            else if (response is SmppCancelSmResp)
            {
                if (OnCancelSmResp != null)
                {
                    OnCancelSmResp(this, new CancelSmRespEventArgs((SmppCancelSmResp)response));
                }
            }
            else if (response is SmppCancelSmResp)
            {
                if (OnCancelSmResp != null)
                {
                    OnCancelSmResp(this, new CancelSmRespEventArgs((SmppCancelSmResp)response));
                }
            }
            else if (response is SmppQuerySmResp)
            {
                if (OnQuerySmResp != null)
                {
                    OnQuerySmResp(this, new QuerySmRespEventArgs((SmppQuerySmResp)response));
                }
            }
            else if (response is SmppDataSm)
            {
                if (OnDataSm != null)
                {
                    OnDataSm(this, new DataSmEventArgs((SmppDataSm)response));
                }
                else
                {
                    //Нет обработчика, стандартный ответ
                    SmppDataSmResp pdu = new SmppDataSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RSUBMITFAIL;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }
                    pdu.MessageId = "Generic";

                    SendPdu(pdu);
                }
            }
            else if (response is SmppDataSmResp)
            {
                if (OnDataSmResp != null)
                {
                    OnDataSmResp(this, new DataSmRespEventArgs((SmppDataSmResp)response));
                }
            }
            else if (response is SmppDeliverSm)
            {
                if (OnDeliverSm != null)
                {
                    OnDeliverSm(this, new DeliverSmEventArgs((SmppDeliverSm)response));
                }
                else
                {
                    //Нет обработчика - стандартный ответ
                    SmppDeliverSmResp pdu = new SmppDeliverSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RDELIVERYFAILURE;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }
                    SendPdu(pdu);
                }
            }
            else if (response is SmppDeliverSmResp)
            {
                if (OnDeliverSmResp != null)
                {
                    OnDeliverSmResp(this, new DeliverSmRespEventArgs((SmppDeliverSmResp)response));
                }
            }
            else if (response is SmppReplaceSm)
            {
                if (OnReplaceSm != null)
                {
                    OnReplaceSm(this, new ReplaceSmEventArgs((SmppReplaceSm)response));
                }
                else
                {
                    //Нет обработчика - стандартный ответ
                    SmppReplaceSmResp pdu = new SmppReplaceSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RREPLACEFAIL;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }
                    SendPdu(pdu);
                }
            }
            else if (response is SmppReplaceSmResp)
            {
                if (OnReplaceSmResp != null)
                {
                    OnReplaceSmResp(this, new ReplaceSmRespEventArgs((SmppReplaceSmResp)response));
                }
            }
            else if (response is SmppSubmitMulti)
            {
                if (OnSubmitMulti != null)
                {
                    OnSubmitMulti(this, new SubmitMultiEventArgs((SmppSubmitMulti)response));
                }
                else
                {
                    //Нет обработчика - стандартный ответ
                    SmppSubmitMultiResp pdu = new SmppSubmitMultiResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    if (_serverMode)
                    {
                        if (_isBinded)
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RSUBMITFAIL;
                        }
                        else
                        {
                            pdu.CommandStatus = (uint)SmppCommandStatus.ESME_RINVBNDSTS;
                        }
                    }
                    else
                    {
                        pdu.CommandStatus = (uint)SmppCommandStatus.ESME_ROK;
                    }
                    SendPdu(pdu);
                }
            }
            else if (response is SmppSubmitMultiResp)
            {
                if (OnSubmitMultiResp != null)
                {
                    OnSubmitMultiResp(this, new SubmitMultiRespEventArgs((SmppSubmitMultiResp)response));
                }
            }
        }
示例#3
0
        /// <summary>
        /// Gets a single PDU based on the response bytes.
        /// </summary>
        /// <param name="response">The SMSC response.</param>
        /// <returns>The PDU corresponding to the bytes.</returns>
        private Pdu GetPDU(byte[] response)
        {
            Pdu.CommandIdType commandID = Pdu.DecodeCommandId(response);
            Pdu packet;

            switch (commandID)
            {
            case Pdu.CommandIdType.alert_notification:
                packet = new SmppAlertNotification(response);
                break;

            case Pdu.CommandIdType.bind_receiver_resp:
            case Pdu.CommandIdType.bind_transceiver_resp:
            case Pdu.CommandIdType.bind_transmitter_resp:
                packet = new SmppBindResp(response);
                break;

            case Pdu.CommandIdType.cancel_sm_resp:
                packet = new SmppCancelSmResp(response);
                break;

            case Pdu.CommandIdType.data_sm_resp:
                packet = new SmppDataSmResp(response);
                break;

            case Pdu.CommandIdType.deliver_sm:
                packet = new SmppDeliverSm(response);
                break;

            case Pdu.CommandIdType.enquire_link_resp:
                packet = new SmppEnquireLinkResp(response);
                break;

            case Pdu.CommandIdType.outbind:
                packet = new SmppOutbind(response);
                break;

            case Pdu.CommandIdType.query_sm_resp:
                packet = new SmppQuerySmResp(response);
                break;

            case Pdu.CommandIdType.replace_sm_resp:
                packet = new SmppReplaceSmResp(response);
                break;

            case Pdu.CommandIdType.submit_multi_resp:
                packet = new SmppSubmitMultiResp(response);
                break;

            case Pdu.CommandIdType.submit_sm_resp:
                packet = new SmppSubmitSmResp(response);
                break;

            case Pdu.CommandIdType.unbind_resp:
                packet = new SmppUnbindResp(response);
                break;

            default:
                packet = null;
                break;
            }

            return(packet);
        }
示例#4
0
 /// <summary>
 /// Sets up the UnbindEventArgs.
 /// </summary>
 /// <param name="response">The SmppUnbindResp.</param>
 internal UnbindRespEventArgs(SmppUnbindResp response) : base(response)
 {
     UnbindRespPdu = response;
 }
示例#5
0
        /// <summary>
        /// Fires an event off based on what Pdu is sent in.
        /// </summary>
        /// <param name="response">The response to fire an event for.</param>
        private void FireEvents(Pdu response)
        {
            //here we go...
            if (response is SmppBindResp)
            {
                if (OnBindResp != null)
                {
                    OnBindResp(this, new BindRespEventArgs((SmppBindResp)response));
                }
            }
            else if (response is SmppUnbindResp)
            {
                //disconnect
                asClient.Disconnect();
                if (OnUnboundResp != null)
                {
                    OnUnboundResp(this, new UnbindRespEventArgs((SmppUnbindResp)response));
                }
            }
            else if (response is SmppAlertNotification)
            {
                if (OnAlert != null)
                {
                    OnAlert(this, new AlertEventArgs((SmppAlertNotification)response));
                }
            }
            else if (response is SmppSubmitSmResp)
            {
                if (OnSubmitSmResp != null)
                {
                    OnSubmitSmResp(this,
                                   new SubmitSmRespEventArgs((SmppSubmitSmResp)response));
                }
            }
            else if (response is SmppEnquireLinkResp)
            {
                if (OnEnquireLinkResp != null)
                {
                    OnEnquireLinkResp(this, new EnquireLinkRespEventArgs((SmppEnquireLinkResp)response));
                }
            }
            else if (response is SmppSubmitSm)
            {
                if (OnSubmitSm != null)
                {
                    OnSubmitSm(this, new SubmitSmEventArgs((SmppSubmitSm)response));
                }
                else
                {
                    //default a response
                    SmppSubmitSmResp pdu = new SmppSubmitSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.MessageId      = System.Guid.NewGuid().ToString().Substring(0, 10);
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppQuerySm)
            {
                if (OnQuerySm != null)
                {
                    OnQuerySm(this, new QuerySmEventArgs((SmppQuerySm)response));
                }
                else
                {
                    //default a response
                    SmppQuerySmResp pdu = new SmppQuerySmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppGenericNack)
            {
                if (OnGenericNack != null)
                {
                    OnGenericNack(this, new GenericNackEventArgs((SmppGenericNack)response));
                }
            }
            else if (response is SmppEnquireLink)
            {
                if (OnEnquireLink != null)
                {
                    OnEnquireLink(this, new EnquireLinkEventArgs((SmppEnquireLink)response));
                }

                //send a response back
                SmppEnquireLinkResp pdu = new SmppEnquireLinkResp();
                pdu.SequenceNumber = response.SequenceNumber;
                pdu.CommandStatus  = 0;

                SendPdu(pdu);
            }
            else if (response is SmppUnbind)
            {
                if (OnUnbind != null)
                {
                    OnUnbind(this, new UnbindEventArgs((SmppUnbind)response));
                }
                else
                {
                    //default a response
                    SmppUnbindResp pdu = new SmppUnbindResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppBind)
            {
                if (OnBind != null)
                {
                    OnBind(this, new BindEventArgs((SmppBind)response));
                }
                else
                {
                    //default a response
                    SmppBindResp pdu = new SmppBindResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;
                    pdu.SystemId       = "Generic";

                    SendPdu(pdu);
                }
            }
            else if (response is SmppCancelSm)
            {
                if (OnCancelSm != null)
                {
                    OnCancelSm(this, new CancelSmEventArgs((SmppCancelSm)response));
                }
                else
                {
                    //default a response
                    SmppCancelSmResp pdu = new SmppCancelSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppCancelSmResp)
            {
                if (OnCancelSmResp != null)
                {
                    OnCancelSmResp(this, new CancelSmRespEventArgs((SmppCancelSmResp)response));
                }
            }
            else if (response is SmppCancelSmResp)
            {
                if (OnCancelSmResp != null)
                {
                    OnCancelSmResp(this, new CancelSmRespEventArgs((SmppCancelSmResp)response));
                }
            }
            else if (response is SmppQuerySmResp)
            {
                if (OnQuerySmResp != null)
                {
                    OnQuerySmResp(this, new QuerySmRespEventArgs((SmppQuerySmResp)response));
                }
            }
            else if (response is SmppDataSm)
            {
                if (OnDataSm != null)
                {
                    OnDataSm(this, new DataSmEventArgs((SmppDataSm)response));
                }
                else
                {
                    //default a response
                    SmppDataSmResp pdu = new SmppDataSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;
                    pdu.MessageId      = "Generic";

                    SendPdu(pdu);
                }
            }
            else if (response is SmppDataSmResp)
            {
                if (OnDataSmResp != null)
                {
                    OnDataSmResp(this, new DataSmRespEventArgs((SmppDataSmResp)response));
                }
            }
            else if (response is SmppDeliverSm)
            {
                if (OnDeliverSm != null)
                {
                    OnDeliverSm(this, new DeliverSmEventArgs((SmppDeliverSm)response));
                }
                else
                {
                    //default a response
                    SmppDeliverSmResp pdu = new SmppDeliverSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppDeliverSmResp)
            {
                if (OnDeliverSmResp != null)
                {
                    OnDeliverSmResp(this, new DeliverSmRespEventArgs((SmppDeliverSmResp)response));
                }
            }
            else if (response is SmppReplaceSm)
            {
                if (OnReplaceSm != null)
                {
                    OnReplaceSm(this, new ReplaceSmEventArgs((SmppReplaceSm)response));
                }
                else
                {
                    //default a response
                    SmppReplaceSmResp pdu = new SmppReplaceSmResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppReplaceSmResp)
            {
                if (OnReplaceSmResp != null)
                {
                    OnReplaceSmResp(this, new ReplaceSmRespEventArgs((SmppReplaceSmResp)response));
                }
            }
            else if (response is SmppSubmitMulti)
            {
                if (OnSubmitMulti != null)
                {
                    OnSubmitMulti(this, new SubmitMultiEventArgs((SmppSubmitMulti)response));
                }
                else
                {
                    //default a response
                    SmppSubmitMultiResp pdu = new SmppSubmitMultiResp();
                    pdu.SequenceNumber = response.SequenceNumber;
                    pdu.CommandStatus  = 0;

                    SendPdu(pdu);
                }
            }
            else if (response is SmppSubmitMultiResp)
            {
                if (OnSubmitMultiResp != null)
                {
                    OnSubmitMultiResp(this, new SubmitMultiRespEventArgs((SmppSubmitMultiResp)response));
                }
            }
        }
示例#6
0
        /// <summary>
        /// Gets a single PDU based on the response bytes.
        /// </summary>
        /// <param name="response">The SMSC response.</param>
        /// <returns>The PDU corresponding to the bytes.</returns>
        private Pdu GetPdu(byte[] response)
        {
            var commandId = Pdu.DecodeCommandId(response);

            Pdu packet;

            switch (commandId)
            {
            case CommandId.AlertNotification:
                packet = new SmppAlertNotification(response);
                break;

            case CommandId.BindReceiverResp:
            case CommandId.BindTransceiverResp:
            case CommandId.BindTransmitterResp:
                packet = new SmppBindResp(response);
                break;

            case CommandId.CancelSmResp:
                packet = new SmppCancelSmResp(response);
                break;

            case CommandId.DataSmResp:
                packet = new SmppDataSmResp(response);
                break;

            case CommandId.DeliverSm:
                packet = new SmppDeliverSm(response);
                break;

            case CommandId.EnquireLink:
                packet = new SmppEnquireLink(response);
                break;

            case CommandId.EnquireLinkResp:
                packet = new SmppEnquireLinkResp(response);
                break;

            case CommandId.Outbind:
                packet = new SmppOutbind(response);
                break;

            case CommandId.QuerySmResp:
                packet = new SmppQuerySmResp(response);
                break;

            case CommandId.ReplaceSmResp:
                packet = new SmppReplaceSmResp(response);
                break;

            case CommandId.SubmitMultiResp:
                packet = new SmppSubmitMultiResp(response);
                break;

            case CommandId.SubmitSmResp:
                packet = new SmppSubmitSmResp(response);
                break;

            case CommandId.UnbindResp:
                packet = new SmppUnbindResp(response);
                break;

            case CommandId.GenericNack:
                packet = new SmppGenericNack(response);
                break;

            default:
                packet = null;
                break;
            }

            return(packet);
        }