Esempio n. 1
0
        private void SendAck(object o)
        {
            SmsMessage message = (SmsMessage)o;

            if (message.deliveryTime == DateTime.MinValue)
            {
                CompleteMessageDelivery(message);
            }

            // If we are to send a receipt then do so.
            if ((message.deliveryReceipt == DeliveryReceiptType.FINAL_DELIVERY_RECEIPT) ||
                (message.deliveryReceipt == DeliveryReceiptType.FINAL_DELIVERY_FAIL_RECEIPT &&
                 (message.deliveryResult != DeliveryStatus.DELIVERED &&
                  message.deliveryResult != DeliveryStatus.ACCEPTED)))
            {
                deliver_sm pdu = new deliver_sm("", message.PDU.SourceAddress,
                                                message.PDU.DestinationAddress,
                                                new esm_class(MessagingMode.DEFAULT_MODE, MessageType.SMSC_DELIVERY_RCPT),
                                                0, MessagePriority.NORMAL, new SmppTime(), new SmppTime(),
                                                new registered_delivery(DeliveryReceiptType.NONE, AcknowledgementType.NONE, false),
                                                false, DataEncoding.SMSC_DEFAULT, 0,
                                                deliver_sm.BuildAckMessage(message.MessageId, 0, 0, DateTime.Now, DateTime.Now,
                                                                           message.deliveryResult, 0, message.PDU.Message));

                ((SmscSession)message.Session).BeginDeliverSm(pdu, new AsyncCallback(EndDeliverSm));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// This method sends a deliver_sm packet synchronously over to the peer.
        /// </summary>
        /// <param name="pdu">deliver_sm packet</param>
        /// <returns>deliver_sm response</returns>
        public deliver_sm_resp DeliverSm(deliver_sm pdu)
        {
            deliver_sm_resp rpdu = null;
            PduSyncronizer  evt  = AddWaitingPdu(pdu);

            if (IsBound && SendPdu(pdu))
            {
                SmppPdu pduR = evt.PduResponse;
                if ((pduR as deliver_sm_resp) != null)
                {
                    rpdu = (deliver_sm_resp)pduR;
                }
                else
                {
                    rpdu        = new deliver_sm_resp();
                    rpdu.Status = pduR.Status;
                }
            }
            else
            {
                FindAndRemoveWaitingPdu(pdu.SequenceNumber);
                rpdu        = new deliver_sm_resp();
                rpdu.Status = StatusCodes.ESME_RDELIVERYFAILURE;
            }
            return(rpdu);
        }
        /// <summary>
        /// This processes the deliver_sm PDU
        /// </summary>
        /// <param name="pdu">Protocol Data Unit being processed</param>
        public override void Process(deliver_sm pdu)
        {
            SmppEventArgs ea = new SmppEventArgs(session_, pdu, new deliver_sm_resp(pdu.SequenceNumber));

            if (!session_.FireEvent(EventType.DeliverSm, ea))
            {
                ea.ResponsePDU.Status = StatusCodes.ESME_RSUBMITFAIL;
            }
            session_.SendPdu(ea.ResponsePDU);
        }
Esempio n. 4
0
        private void OnGenerateSms(object sender, EventArgs e)
        {
            GenerateSms dlg = new GenerateSms(server_);

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                deliver_sm pdu = new deliver_sm(dlg.ServiceType,
                                                new address(TypeOfNumber.NATIONAL, NumericPlanIndicator.E164, dlg.SourceAddress),
                                                new address(TypeOfNumber.NATIONAL, NumericPlanIndicator.E164, dlg.DestinationAddress),
                                                new esm_class(MessagingMode.DEFAULT_MODE, MessageType.DEFAULT_MSG_TYPE),
                                                0, MessagePriority.NORMAL, new SmppTime(), new SmppTime(),
                                                new registered_delivery(DeliveryReceiptType.NONE, AcknowledgementType.NONE, false),
                                                false, DataEncoding.SMSC_DEFAULT, 0, dlg.ShortMessage);
                SmscSession session = dlg.Session as SmscSession;
                if (session != null && session.IsBound)
                {
                    session.BeginDeliverSm(pdu, new AsyncCallback(EndDeliverSm));
                }
            }
        }
Esempio n. 5
0
        // Used to get delivery ack.'s and MO messages from SMSC
        private void OnDeliverSm(object sender, SmppEventArgs args)
        {
            deliver_sm      req  = (deliver_sm)args.PDU;
            deliver_sm_resp resp = (deliver_sm_resp)args.ResponsePDU;
            esm_class       esm  = req.EsmClass;

            switch (esm.MessageType)
            {
            case MessageType.SMSC_DELIVERY_RCPT:        // Delivery receipt for previously sent short message
                smsc_delivery_receipt receipt = new smsc_delivery_receipt(req.Message);
                // Update the final deleivery status for the sent message using the message Id to locate
                UpdateSentMessageFinalStatus(receipt);
                break;

            case MessageType.DEFAULT_MSG_TYPE:                  // Mobile originated message
                AddNewMessage("Mobile Orig.", req.SourceAddress.Address, req.Message, "DELIVRD", DateTime.Now.ToString("d"), 0);
                break;

            default:
                AddNewMessage("Error", req.SourceAddress.Address, "Unknown message type - " + esm.MessageType, "n/a", "n/a", 0);
                break;
            }
        }
Esempio n. 6
0
        // Used to get delivery ack.'s and MO messages from SMSC
        private static void OnDeliverSm(object sender, SmppEventArgs args)
        {
            deliver_sm      req  = (deliver_sm)args.PDU;
            deliver_sm_resp resp = (deliver_sm_resp)args.ResponsePDU;
            esm_class       esm  = req.EsmClass;

            switch (esm.MessageType)
            {
            case MessageType.SMSC_DELIVERY_RCPT:                        // Delivery receipt for previously sent short message
                smsc_delivery_receipt receipt = new smsc_delivery_receipt(req.Message);
                Console.WriteLine(string.Format("Delivery receipt for message {0}: Type: {1}",
                                                receipt.OriginalMessageId, receipt.FinalMessageStatus));
                break;

            case MessageType.DEFAULT_MSG_TYPE:                                  // Mobile originated message
                Console.WriteLine(string.Format("Mobile originated message from {0}: {1}",
                                                req.SourceAddress, req.Message));
                break;

            default:
                Console.WriteLine("Unexpected deliver_sm message type: " + esm.MessageType.ToString());
                break;
            }
        }
Esempio n. 7
0
 /// <summary>
 /// This processes the deliver_sm PDU
 /// </summary>
 /// <param name="pdu">Protocol Data Unit being processed</param>
 public override void Process(deliver_sm pdu)
 {
     rx_.Process(pdu);
 }
Esempio n. 8
0
 /// <summary>
 /// This processes the deliver_sm PDU
 /// </summary>
 /// <param name="pdu">Protocol Data Unit being processed</param>
 public virtual void Process(deliver_sm pdu)
 {
     throw new InvalidSmppStateException("Session is not in the proper state for a deliver_sm operation.");
 }
Esempio n. 9
0
        /// <summary>
        /// This method invokes the DeliverSm method asynchronously
        /// </summary>
        /// <param name="pdu">deliver_sm PDU to send</param>
        /// <param name="ac">Asynch callback</param>
        /// <returns>IAsyncResult interface for monitoring</returns>
        public IAsyncResult BeginDeliverSm(deliver_sm pdu, AsyncCallback ac)
        {
            AsynchCall acr = new AsynchCall(ac, this);

            return(acr.BeginInvoke(new DeliverSmDelegate(DeliverSm), new object[] { pdu }));
        }