/// <summary> /// Creates a new UnsuccessAdress. /// </summary> /// <param name="destinationAddressTon">Type of number for destination SME.</param> /// <param name="destinationAddressNpi">Numbering Plan Indicator for destination SME</param> /// <param name="destinationAdress">Destination Address of destination SME</param> /// <param name="ErrorStatusCode">Indicates the success or failure of the submit_multi request /// to this SME address.</param> public UnsuccessAddress( Pdu.TonType destinationAddressTon, Pdu.NpiType destinationAddressNpi, string destinationAdress, UInt32 ErrorStatusCode) { DestinationAddressTon = destinationAddressTon; DestinationAddressNpi = destinationAddressNpi; DestinationAddress = destinationAdress; this.ErrorStatusCode = ErrorStatusCode; }
/// <summary> /// Creates a new UnsuccessAdress. /// </summary> /// <param name="destinationAddressTon">Type of number for destination SME.</param> /// <param name="destinationAddressNpi">Numbering Plan Indicator for destination SME</param> /// <param name="destinationAdress">Destination Address of destination SME</param> /// <param name="errorStatusCode">Indicates the success or failure of the submit_multi request /// to this SME address.</param> public UnsuccessAddress( Pdu.TonType destinationAddressTon, Pdu.NpiType destinationAddressNpi, string destinationAdress, UInt32 errorStatusCode) { this._destinationAddressTon = destinationAddressTon; this._destinationAddressNpi = destinationAddressNpi; this._destinationAddress = destinationAdress; this._errorStatusCode = errorStatusCode; }
/// <summary> /// Creates a new UnsuccessAdress. /// </summary> /// <param name="destinationAddressTon">Type of number for destination SME.</param> /// <param name="destinationAddressNpi">Numbering Plan Indicator for destination SME</param> /// <param name="destinationAdress">Destination Address of destination SME</param> /// <param name="ErrorStatusCode">Indicates the success or failure of the submit_multi request /// to this SME address.</param> public UnsuccessAddress( Pdu.TonType destinationAddressTon, Pdu.NpiType destinationAddressNpi, string destinationAdress, UInt32 ErrorStatusCode) { this._DestinationAddressTon = destinationAddressTon; this._DestinationAddressNpi = destinationAddressNpi; this._DestinationAddress = destinationAdress; this._ErrorStatusCode = ErrorStatusCode; }
/// <summary> /// Creates an Unsuccess address. This will trim down the address given to /// it for use in future operations. /// </summary> /// <param name="address">The bytes of the response.</param> public UnsuccessAddress(ref byte[] address) { _DestinationAddressTon = (Pdu.TonType)address[0]; _DestinationAddressNpi = (Pdu.NpiType)address[1]; _DestinationAddress = SmppStringUtil.GetCStringFromBody(ref address, 2); //convert error status to host order _ErrorStatusCode = UnsignedNumConverter.SwapByteOrdering( BitConverter.ToUInt32(address, 0)); //now we have to trim off four octets to account for the status code long length = address.Length - 4; byte[] newRemainder = new byte[length]; Array.Copy(address, 4, newRemainder, 0, length); //and change the reference address = newRemainder; newRemainder = null; }
/// <summary> /// Creates a new DestinationAddress. /// </summary> /// <param name="destinationAddressTon">Type of number for destination SME.</param> /// <param name="destinationAddressNpi">Numbering Plan Indicator for destination SME</param> /// <param name="destinationAdress">Destination Address of destination SME</param> public DestinationAddress( Pdu.TonType destinationAddressTon, Pdu.NpiType destinationAddressNpi, string destinationAdress) { if (destinationAdress == null || destinationAdress.Length > 20) { throw new ArgumentException( "Destination Adress must be 20 characters or less."); } _IsDistributionList = false; this._DestinationAddressTon = destinationAddressTon; this._DestinationAddressNpi = destinationAddressNpi; this._DestinationAddress = destinationAdress; }
/// <summary> /// Creates an Unsuccess address. This will trim down the address given to /// it for use in future operations. /// </summary> /// <param name="address">The bytes of the response.</param> public UnsuccessAddress(ref byte[] address) { _destinationAddressTon = (Pdu.TonType)address[0]; _destinationAddressNpi = (Pdu.NpiType)address[1]; _destinationAddress = SmppStringUtil.GetCStringFromBody(ref address, 2); //convert error status to host order _errorStatusCode = UnsignedNumConverter.SwapByteOrdering( BitConverter.ToUInt32(address, 0)); //now we have to trim off four octets to account for the status code long length = address.Length - 4; byte[] newRemainder = new byte[length]; Array.Copy(address, 4, newRemainder, 0, length); //and change the reference address = newRemainder; newRemainder = null; }
/// <summary> /// Creates an DestinationAddress address. This will trim down the address given to /// it for use in future operations. /// </summary> /// <param name="address">The bytes of the response.</param> public DestinationAddress(ref byte[] address) { if (address[0] == 0x01) { _IsDistributionList = false; } else if (address[0] == 0x02) { _IsDistributionList = true; } else { throw new ApplicationException("Unable to determine type of destination address"); } if (!IsDistributionList) { _DestinationAddressTon = (Pdu.TonType)address[1]; _DestinationAddressNpi = (Pdu.NpiType)address[2]; _DestinationAddress = SmppStringUtil.GetCStringFromBody(ref address, 3); // // long length = address.Length - 4; // byte[] newRemainder = new byte[length]; // Array.Copy(address, 4, newRemainder, 0, length); // //and change the reference // address = newRemainder; // newRemainder = null; } else { _DistributionList = SmppStringUtil.GetCStringFromBody(ref address, 1); // // long length = address.Length - 4; // byte[] newRemainder = new byte[length]; // Array.Copy(address, 4, newRemainder, 0, length); // //and change the reference // address = newRemainder; // newRemainder = null; } }
/// <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)); } } }
public TonNpiPair(Pdu.TonType ton, Pdu.NpiType npi) { Ton = ton; Npi = npi; }