/// <summary> /// Initializes the SMPPCommunicator with some default values. /// </summary> private void InitCommunicator() { Port = 9999; BindType = SmppBind.BindingType.BindAsTransceiver; Host = "localhost"; NpiType = Pdu.NpiType.ISDN; TonType = Pdu.TonType.International; Version = SmppBind.SmppVersionType.Version3_4; AddressRange = null; Password = null; SystemId = null; SystemType = null; EnquireLinkInterval = 0; ReBindInterval = 10; ResponseTimeout = 2500; // Initialize timers.. _EnquireLinkTimer = new System.Timers.Timer() { Enabled = false }; _EnquireLinkTimer.Elapsed += new ElapsedEventHandler(EnquireLinkTimerElapsed); _ReBindTimer = new System.Timers.Timer() { Enabled = false }; _ReBindTimer.Elapsed += new ElapsedEventHandler(ReBindTimerElapsed); }
/// <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)); } } }