示例#1
0
        public frmSmsMessage(SimSession objSession, SimMessage objMessage, EFrmType eType, int nMultipartMode, int nUseGsmEncoding)
        {
            InitializeComponent();

            m_objConstants             = new AxSms.Constants();
            m_objSmsAsm                = new AxSms.Smpp();
            m_objSmsAsm.MultipartMode  = nMultipartMode;
            m_objSmsAsm.UseGsmEncoding = nUseGsmEncoding;
            m_eFrmType = eType;

            switch (m_eFrmType)
            {
            case EFrmType.CREATE:
                Text         = "Create new SMS message";
                btnSend.Text = "Ok";
                break;

            case EFrmType.EDIT:
                Text         = "Edit SMS message";
                btnSend.Text = "Ok";
                break;

            case EFrmType.VIEW:
                Text            = "View SMS message";
                btnCancel.Text  = "Close";
                btnSend.Visible = false;
                break;

            case EFrmType.SEND:
                Text         = "Send SMS message";
                btnSend.Text = "Send";
                break;
            }

            if (objSession != null)
            {
                if (objSession.Ip.Contains("."))
                {   // IPv4 notation
                    lblIp.Text = string.Format("{0}:{1}", objSession.Ip, objSession.Port);
                }
                else
                {   // IPv6 notiation
                    lblIp.Text = string.Format("[{0}]:{1}", objSession.Ip, objSession.Port);
                }
                lblSystemId.Text = objSession.SystemId;
            }

            if (objMessage == null)
            {
                m_objMessage = new SimMessage();
            }
            else
            {
                m_objMessage = objMessage;
            }
        }
示例#2
0
        public frmSessionInfo(SimSession objSimSession)
        {
            InitializeComponent();
            AxSms.Constants objSmsConstants = new AxSms.Constants();

            lblIp.Text              = objSimSession.Ip;
            lblPort.Text            = objSimSession.Port.ToString();
            lblVersion.Text         = objSmsConstants.SmppVersionToString(objSimSession.Version);
            lblSystemID.Text        = objSimSession.SystemId;
            lblPassword.Text        = objSimSession.Password;
            lblSystemType.Text      = objSimSession.SystemType;
            lblAddressRange.Text    = objSimSession.AddressRange;
            lblAddressRangeNPI.Text = objSmsConstants.NpiToString(objSimSession.AddressRangeNpi);
            lblAddressRangeTON.Text = objSmsConstants.TonToString(objSimSession.AddressRangeTon);
            lblConnectionState.Text = objSmsConstants.SmppSessionStateToString(objSimSession.ConnectionState);
        }
        private void frmStatusErrors_Load(object sender, EventArgs e)
        {
            m_objSmsConstants = new AxSms.Constants();
            //
            var dctMessageStatusses = new Dictionary <int, string>();

            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVMSGLEN, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVMSGLEN));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVCMDLEN, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVCMDLEN));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVCMDID, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVCMDID));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVBNDSTS, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVBNDSTS));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RALYBND, EsmeToString(m_objSmsConstants.SMPP_ESME_RALYBND));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVPRTFLG, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVPRTFLG));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVREGDLVFLG, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVREGDLVFLG));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RSYSERR, EsmeToString(m_objSmsConstants.SMPP_ESME_RSYSERR));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSRCADR, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSRCADR));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVDSTADR, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVDSTADR));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVMSGID, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVMSGID));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RBINDFAIL, EsmeToString(m_objSmsConstants.SMPP_ESME_RBINDFAIL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVPASWD, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVPASWD));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSYSID, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSYSID));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RCANCELFAIL, EsmeToString(m_objSmsConstants.SMPP_ESME_RCANCELFAIL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RREPLACEFAIL, EsmeToString(m_objSmsConstants.SMPP_ESME_RREPLACEFAIL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RMSGQFUL, EsmeToString(m_objSmsConstants.SMPP_ESME_RMSGQFUL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSERTYP, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSERTYP));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVNUMDESTS, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVNUMDESTS));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVDLNAME, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVDLNAME));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVDESTFLAG, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVDESTFLAG));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSUBREP, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSUBREP));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVESMCLASS, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVESMCLASS));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RCNTSUBDL, EsmeToString(m_objSmsConstants.SMPP_ESME_RCNTSUBDL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RSUBMITFAIL, EsmeToString(m_objSmsConstants.SMPP_ESME_RSUBMITFAIL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSRCTON, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSRCTON));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSRCNPI, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSRCNPI));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVDSTTON, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVDSTTON));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVDSTNPI, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVDSTNPI));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSYSTYP, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSYSTYP));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVREPFLAG, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVREPFLAG));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVNUMMSGS, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVNUMMSGS));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RTHROTTLED, EsmeToString(m_objSmsConstants.SMPP_ESME_RTHROTTLED));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVSCHED, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVSCHED));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVEXPIRY, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVEXPIRY));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVDFTMSGID, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVDFTMSGID));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RX_T_APPN, EsmeToString(m_objSmsConstants.SMPP_ESME_RX_T_APPN));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RX_P_APPN, EsmeToString(m_objSmsConstants.SMPP_ESME_RX_P_APPN));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RX_R_APPN, EsmeToString(m_objSmsConstants.SMPP_ESME_RX_R_APPN));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RQUERYFAIL, EsmeToString(m_objSmsConstants.SMPP_ESME_RQUERYFAIL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVOPTPARSTREAM, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVOPTPARSTREAM));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_ROPTPARNOTALLWD, EsmeToString(m_objSmsConstants.SMPP_ESME_ROPTPARNOTALLWD));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVPARLEN, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVPARLEN));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RMISSINGOPTPARAM, EsmeToString(m_objSmsConstants.SMPP_ESME_RMISSINGOPTPARAM));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RINVOPTPARAMVAL, EsmeToString(m_objSmsConstants.SMPP_ESME_RINVOPTPARAMVAL));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RDELIVERYFAILURE, EsmeToString(m_objSmsConstants.SMPP_ESME_RDELIVERYFAILURE));
            dctMessageStatusses.Add(m_objSmsConstants.SMPP_ESME_RUNKNOWNERR, EsmeToString(m_objSmsConstants.SMPP_ESME_RUNKNOWNERR));

            cbxMsgStatusPreDefined.ValueMember   = "Key";
            cbxMsgStatusPreDefined.DisplayMember = "Value";
            cbxMsgStatusPreDefined.DataSource    = new BindingSource(dctMessageStatusses, null);

            var dctDeliveryStatusses = new Dictionary <string, SimDeliveryErrorRate>();

            dctDeliveryStatusses.Add(DRSTATUS_TEXT_EXPIRED, new SimDeliveryErrorRate(DRSTATUS_TEXT_EXPIRED, 3, 0));
            dctDeliveryStatusses.Add(DRSTATUS_TEXT_DELETED, new SimDeliveryErrorRate(DRSTATUS_TEXT_DELETED, 4, 0));
            dctDeliveryStatusses.Add(DRSTATUS_TEXT_UNDELIVERABLE, new SimDeliveryErrorRate(DRSTATUS_TEXT_UNDELIVERABLE, 5, 0));
            dctDeliveryStatusses.Add(DRSTATUS_TEXT_ACCEPTED, new SimDeliveryErrorRate(DRSTATUS_TEXT_ACCEPTED, 6, 0));
            dctDeliveryStatusses.Add(DRSTATUS_TEXT_UNKNOWN, new SimDeliveryErrorRate(DRSTATUS_TEXT_UNKNOWN, 7, 0));
            dctDeliveryStatusses.Add(DRSTATUS_TEXT_REJECTED, new SimDeliveryErrorRate(DRSTATUS_TEXT_REJECTED, 8, 0));

            cbxDeliveryStatus.ValueMember   = "Value";
            cbxDeliveryStatus.DisplayMember = "Key";
            cbxDeliveryStatus.DataSource    = new BindingSource(dctDeliveryStatusses, null);

            // Make sure to update all the MESSAGE_ constants when changing stuff here !!!!
            lvMessageStatus.Columns.Add("Status", (int)(lvMessageStatus.Width * .75), HorizontalAlignment.Left);
            lvMessageStatus.Columns.Add("Occurance", (int)(lvMessageStatus.Width * .20), HorizontalAlignment.Left);

            // Make sure to update all the DELIVERY_ constants when changing stuff here !!!!
            lvDeliveryStatus.Columns.Add("Text", (int)(lvDeliveryStatus.Width * .40), HorizontalAlignment.Left);
            lvDeliveryStatus.Columns.Add("Code", (int)(lvDeliveryStatus.Width * .35), HorizontalAlignment.Left);
            lvDeliveryStatus.Columns.Add("Occurance", (int)(lvDeliveryStatus.Width * .20), HorizontalAlignment.Left);

            cbxDeliveryStatus.SelectedIndex      = 0;
            cbxMsgStatusPreDefined.SelectedValue = m_objSmsConstants.SMPP_ESME_RINVMSGLEN;
            rbMsgStatusPreDefined.Checked        = true;
            txtMessageStatusOccurance.Text       = "10";
            txtDeliveryStatusOccurance.Text      = "10";
            txtMsgStatusCustom.Text = "0";

            // Set error rates
            foreach (SimMessageErrorRate objErrr in m_objSimErrorRates.MessageErrorRates)
            {
                ListViewItem objLvi = new ListViewItem(
                    new string[] { EsmeToString(objErrr.StatusCode), objErrr.Occurance.ToString() });
                objLvi.Tag = new SimMessageErrorRate(objErrr);
                lvMessageStatus.Items.Add(objLvi);
            }

            foreach (SimDeliveryErrorRate objErrr in m_objSimErrorRates.DeliveryErrorRates)
            {
                ListViewItem objLvi = new ListViewItem(
                    new string[] { objErrr.Text, objErrr.Code.ToString(), objErrr.Occurance.ToString() });
                objLvi.Tag = new SimDeliveryErrorRate(objErrr);
                lvDeliveryStatus.Items.Add(objLvi);
            }

            UpdateControls();
        }
示例#4
0
        SimMessage bw_CreateDlr(SimMessage objIn, int nVersion, int nStatusCode, string strStatusText, AxSms.Constants objSmsConst)
        {
            SimMessage objDlr = new SimMessage();

            // Swap adress
            objDlr.FromAddress    = objIn.ToAddress;
            objDlr.FromAddressNpi = objIn.ToAddressNpi;
            objDlr.FromAddressTon = objIn.FromAddressTon;
            objDlr.ToAddress      = "";
            objDlr.ToAddressNpi   = 0;
            objDlr.ToAddressTon   = objSmsConst.TON_ALPHANUMERIC;

            // Set session information
            objDlr.SessionId = objIn.SessionId;
            objDlr.SystemId  = objIn.SystemId;

            // Add TLV's, only for 3.4 or 5.0 clients.
            if (nVersion != objSmsConst.SMPP_VERSION_33)
            {
                objDlr.Tlvs.Clear();
                AxSms.Tlv objAxTlv = new AxSms.Tlv();

                SimTlv objTlv = new SimTlv();
                objTlv.Tag           = objSmsConst.SMPP_TLV_MESSAGE_STATE;
                objAxTlv.ValueAsInt8 = nStatusCode;

                objTlv.TlvType    = SimTlv.TlvTypes.HEX;
                objTlv.TypedValue = objAxTlv.ValueAsHexString;
                objTlv.HexValue   = objTlv.TypedValue;
                objDlr.Tlvs.Add(objTlv);

                objTlv                 = new SimTlv();
                objTlv.Tag             = objSmsConst.SMPP_TLV_RECEIPTED_MESSAGE_ID;
                objAxTlv.ValueAsString = objIn.Reference;

                objTlv.TlvType    = SimTlv.TlvTypes.HEX;
                objTlv.TypedValue = objAxTlv.ValueAsHexString;
                objTlv.HexValue   = objTlv.TypedValue;
                objDlr.Tlvs.Add(objTlv);
            }

            // NOTE: submit date and done date are the same!

            string strExcerpt       = objIn.Body.Substring(0, Math.Min(objIn.Body.Length, 60));
            int    iNumSmsDelivered = nStatusCode == objSmsConst.SMPP_MESSAGESTATE_DELIVERED ? 1: 0;
            string strBody          = string.Format("id:{0} sub:001 dlvrd:{1:D3} submit date:{2:yyMMddHHmmss} done date:{2:yyMMddHHmmss} stat:{3} err:000 text:{4}",
                                                    objIn.Reference, iNumSmsDelivered, DateTime.Now, strStatusText, strExcerpt);

            // Complete delivery report formatting
            objDlr.IsDeliveryReport = true;
            objDlr.Body             = strBody.Substring(0, Math.Min(strBody.Length, 160));

            return(objDlr);
        }
示例#5
0
        private void bw_DoWork(BackgroundWorker objWorker, Logger objLogger, AxSms.SmppServer objServer)
        {
            if (m_objSimModel.IsServerLogEnabled)
            {
                objServer.LogFile = m_objSimModel.ServerLog;
            }

            AxSms.Constants objSmsConsts = new AxSms.Constants();

            objServer.LastReference = m_objSimModel.LastReference;
            objServer.Start(m_objSimModel.Port, m_objSimModel.IpVersion, m_objSimModel.Certificate);

            SimCommand objCommand = new SimCommand();

            objCommand.CommandId            = SimCommand.ECommandId.RESPONSECODE;
            objCommand.LastError            = objServer.LastError;
            objCommand.LastErrorDescription = objServer.GetErrorDescription(objServer.LastError);
            m_objSimModel.IsServerStarted   = objServer.LastError == 0;
            PushGui(objCommand);

            if (objServer.LastError != 0)
            {
                objLogger.WriteLine("SmppServer, failed: [{0}:{1}]", objCommand.LastError, objCommand.LastErrorDescription);
                return;
            }
            else
            {
                objLogger.WriteLine("SmppServer started");
            }

            // Initialize Smpp instance to do SMS splitting
            // This is very convenient because we don't need to use the orginal SmppSession object
            m_objSplitSms = new AxSms.Smpp();
            m_objSplitSms.MultipartMode  = m_objSimModel.MultipartMode;
            m_objSplitSms.UseGsmEncoding = m_objSimModel.UseGsmEncoding;

            // Replies
            long          nLastReloadReplies = GetTickCount();
            bool          bEcho         = m_objSimModel.Echo;
            SimErrorRates objErrorRates = m_objSimModel.GetErrorRates();

            // Auto messages
            long nLastReloadAutoMsg = GetTickCount();
            var  lsAutoMessages     = new List <SimMessage>();

            lsAutoMessages = m_objSimModel.GetAutoMessages();
            int    nGeneratePerMinute = m_objSimModel.GeneratePerMinute;
            bool   bRandomOrder       = m_objSimModel.RandomOrder;
            int    nAutoMsgIndex      = 0;
            Random objRandom          = new Random();

            var dctWrkSessions = new Dictionary <int, WrkSession>();

            while (!objWorker.CancellationPending)
            {
                var lsMessagesUpdated   = new List <SimMessage>();
                var lsMessagesGenerated = new List <SimMessage>();
                var lsMessagesReceived  = new List <SimMessage>();

                // Check if the GUI has some requests
                while ((objCommand = PollGui()) != null)
                {
                    WrkSession objWrkSession = null;
                    dctWrkSessions.TryGetValue(objCommand.SessionId, out objWrkSession);
                    switch (objCommand.CommandId)
                    {
                    case SimCommand.ECommandId.DROPSESSION:
                        if (objWrkSession != null)
                        {
                            objWrkSession.bDrop = true;
                        }
                        break;

                    case SimCommand.ECommandId.SENDMESSAGE:
                        if (objWrkSession != null)
                        {
                            bw_AddOutgoing(objCommand.Message, objWrkSession.qOutMessages, lsMessagesGenerated, true);
                        }
                        break;
                    }
                }

                // Quit if the server stopped for some reason
                if (!objServer.IsStarted)
                {
                    m_objSimModel.IsServerStarted = false;
                    break;
                }

                // Reset statistics count
                int nRecvPerSecond = 0, nSentPerSecond = 0;
                // Handle connected sessions
                var lsSessions               = new List <SimSession>();
                AxSms.SmppSession objSession = objServer.GetFirstSession();
                while (objServer.LastError == 0)
                {   // Creating objSimSession object early and only access it's properties since
                    // accessing ActiveX properties (and methods) seems to be expensive in C#
                    SimSession objSimSession = new SimSession(objSession);
                    lsSessions.Add(objSimSession);

                    // Get the current worker session
                    WrkSession objWrkSession = null;
                    if (!dctWrkSessions.ContainsKey(objSession.Id))
                    {
                        dctWrkSessions[objSession.Id] = objWrkSession = new WrkSession(objSimSession, GetTickCount());
                    }
                    else
                    {
                        objWrkSession = dctWrkSessions[objSession.Id];
                    }

                    // Handle session bind requests
                    if (objSimSession.ConnectionState == objSmsConsts.SMPP_SESSIONSTATE_BINDING)
                    {
                        // Respond to a bind required. If authentication is required test sysid
                        int iResponse = 0;
                        if (m_objSimModel.IsAuthRequired &&
                            (objSimSession.SystemId != m_objSimModel.SystemId ||
                             objSimSession.Password != m_objSimModel.Password))
                        {
                            iResponse = objSmsConsts.SMPP_ESME_RINVPASWD;
                        }
                        objSession.RespondToBind(iResponse);

                        // Generate a logfile path and set it
                        if (m_objSimModel.IsSessionLogEnabled)
                        {
                            string strLogIp;
                            if (objSimSession.Ip.Contains("."))
                            {   // IPv4; np
                                strLogIp = objSimSession.Ip;
                            }
                            else
                            {   // IPv6, can't have ':''s in a filename !
                                strLogIp = string.Format("[{0}]", objSimSession.Ip).Replace(':', '_');
                            }

                            string strLogPath = string.Format("{0}{1}_{2}.log",
                                                              m_objSimModel.SessionLog, strLogIp, objSimSession.Port);
                            objSession.LogPduDetails = m_objSimModel.IsPduLogEnabled;
                            objSession.LogFile       = strLogPath;
                        }

                        // Apply server settings
                        objSession.PduTimeout      = m_objSimModel.PduTimeout;
                        objSession.EnquireInterval = m_objSimModel.EnquireInterval;
                        objSession.UseGsmEncoding  = m_objSimModel.UseGsmEncoding;
                        objSession.DeliverMode     = m_objSimModel.DeliverMode;
                    }

                    // Generate auto-messages.
                    int iNumMessages = objWrkSession.CalculateMessagesToSend(GetTickCount(), nGeneratePerMinute);
                    if (lsAutoMessages.Count > 0)
                    {
                        for (int i = 0; i < iNumMessages; i++)
                        {   // Determine the message index of the auto-message to sent
                            if (bRandomOrder)
                            {
                                nAutoMsgIndex = objRandom.Next(lsAutoMessages.Count);
                            }
                            else
                            {
                                if (nAutoMsgIndex < lsAutoMessages.Count - 1)
                                {
                                    nAutoMsgIndex++;
                                }
                                else
                                {
                                    nAutoMsgIndex = 0;
                                }
                            }

                            // If there's room in the output queue, add it to the output queue
                            // othewise, reject the message, queue full..
                            SimMessage objMessage = new SimMessage(lsAutoMessages[nAutoMsgIndex]);
                            objMessage.SessionId = objSimSession.Id;
                            objMessage.SystemId  = objSimSession.SystemId;
                            bw_AddOutgoing(objMessage, objWrkSession.qOutMessages, lsMessagesGenerated, true);
                        }
                    }

                    // Sent SMS messages in sent queue
                    int nOut = objSession.CountSmsDeliverySpace();
                    while (objWrkSession.qOutMessages.Count > 0 && nOut > 0)
                    {
                        SimMessage    objSimMessage = objWrkSession.qOutMessages.Dequeue();
                        AxSms.Message objMessage    = objSimMessage.CreateAxSms();

                        // reject multipart messages because they should all have been splitup before beeing
                        // added to the output queue.
                        objSession.DeliverSms(objMessage, objSmsConsts.MULTIPART_REJECT);
                        if (objSession.LastError != 0)
                        {
                            objSimMessage.Status = string.Format("SUBMITERROR({0})", objSession.LastError);
                        }
                        else
                        {
                            objSimMessage.Status = "DELIVERED";
                        }

                        lsMessagesUpdated.Add(objSimMessage);
                    }

                    // Fetch updates for messages that have been sent
                    AxSms.Message objResponse = objSession.ReceiveDeliverResponse();
                    while (objSession.LastError == 0)
                    {
                        SimMessage objSimMessage = new SimMessage(objResponse);
                        objSimMessage.SystemId  = objSimSession.SystemId;
                        objSimMessage.SessionId = objSimSession.Id;
                        objSimMessage.Status    = objSmsConsts.SmppEsmeToString(objSimMessage.CommandStatus).Replace("SMPP_ESME_", "");
                        lsMessagesUpdated.Add(objSimMessage);
                        objResponse = objSession.ReceiveDeliverResponse();
                    }

                    // Fetch received messages
                    AxSms.Message objReceived = objSession.ReceiveSubmitSms();
                    while (objSession.LastError == 0)
                    {
                        SimMessage objSimMessage = new SimMessage(objReceived);
                        objSimMessage.SystemId  = objSimSession.SystemId;
                        objSimMessage.SessionId = objSimSession.Id;

                        // Determine command status
                        int nCommandStatus     = 0;
                        int nRandCmdStatus     = objRandom.Next(100);
                        int nRandCmdStatusOffs = 0;
                        foreach (SimMessageErrorRate objErrr in objErrorRates.MessageErrorRates)
                        {
                            nRandCmdStatusOffs += objErrr.Occurance;
                            if (nRandCmdStatus <= nRandCmdStatusOffs)
                            {
                                nCommandStatus = objErrr.StatusCode;
                                break;
                            }
                        }

                        // Respond to SMS message
                        objReceived.SmppCommandStatus = objSimMessage.CommandStatus = nCommandStatus;
                        objSession.RespondToSubmitSms(objReceived);

                        // Set message status text and add it to the 'received' list
                        // generate a usertag for received messages as well. The GUI relies on every message to have a unique ID
                        objSimMessage.Status  = objSmsConsts.SmppEsmeToString(objSimMessage.CommandStatus).Replace("SMPP_ESME_", "");
                        objSimMessage.UserTag = m_objSimModel.GetAndIncLastUserTag();
                        lsMessagesReceived.Add(objSimMessage);

                        // Determine command status
                        if (objSimMessage.RequestDeliveryReport && nCommandStatus == 0)
                        {
                            int    nRandDlrStatus     = objRandom.Next(100);
                            int    nRandDlrStatusOffs = 0;
                            int    nStatusCode        = objSmsConsts.SMPP_MESSAGESTATE_DELIVERED;
                            string strStatusText      = "DELIVRD";
                            foreach (SimDeliveryErrorRate objErrr in objErrorRates.DeliveryErrorRates)
                            {
                                nRandDlrStatusOffs += objErrr.Occurance;
                                if (nRandDlrStatus <= nRandDlrStatusOffs)
                                {
                                    nStatusCode   = objErrr.Code;
                                    strStatusText = objErrr.Text;
                                    break;
                                }
                            }
                            SimMessage objDlr = bw_CreateDlr(objSimMessage, objSimSession.Version, nStatusCode, strStatusText, objSmsConsts);
                            bw_AddOutgoing(objDlr, objWrkSession.qOutMessages, lsMessagesGenerated, false);
                        }

                        if (bEcho)
                        {
                            SimMessage objEcho = new SimMessage(objSimMessage);
                            objEcho.FromAddress    = objSimMessage.ToAddress;
                            objEcho.FromAddressNpi = objSimMessage.ToAddressNpi;
                            objEcho.FromAddressTon = objSimMessage.ToAddressTon;
                            objEcho.ToAddress      = objSimMessage.FromAddress;
                            objEcho.ToAddressNpi   = objSimMessage.FromAddressNpi;
                            objEcho.ToAddressTon   = objSimMessage.FromAddressTon;
                            bw_AddOutgoing(objEcho, objWrkSession.qOutMessages, lsMessagesGenerated, false);
                        }

                        objReceived = objSession.ReceiveSubmitSms();
                    }

                    // Don't support SMS queries
                    objReceived = objSession.ReceiveQuerySms();
                    while (objSession.LastError == 0)
                    {   // Just immediately respond with an error.
                        objReceived.SmppCommandStatus = objSmsConsts.SMPP_ESME_RINVCMDID;
                        objSession.RespondToQuerySms(objReceived);
                        objReceived = objSession.ReceiveQuerySms();
                    }

                    if (objWrkSession.bDrop)
                    {
                        objSession.Disconnect();
                    }

                    // Update statistics
                    nRecvPerSecond += objSession.SmsReceivedPerSecond;
                    nSentPerSecond += objSession.SmsSentPerSecond;

                    objSession = objServer.GetNextSession();
                }

                // Make a list of disconnected sessions
                var lsDisconnected = new List <SimSession>();
                objSession = objServer.GetClosedSession();
                while (objServer.LastError == 0)
                {
                    SimSession objSimSession = new SimSession(objSession);
                    lsDisconnected.Add(objSimSession);
                    dctWrkSessions.Remove(objSimSession.Id);
                    objSession = objServer.GetClosedSession();
                }

                // Set global stats
                m_objSimModel.RecvPerSecond = nRecvPerSecond;
                m_objSimModel.SentPerSecond = nSentPerSecond;
                m_objSimModel.LastReference = objServer.LastReference;

                // See if there's a need to sent the delta messages to the GUI
                if (lsMessagesUpdated.Count > 0 ||
                    lsMessagesReceived.Count > 0 ||
                    lsMessagesGenerated.Count > 0)
                {
                    objCommand                   = new SimCommand();
                    objCommand.CommandId         = SimCommand.ECommandId.MESSAGESDELTA;
                    objCommand.MessagesUpdated   = lsMessagesUpdated;
                    objCommand.MessagesReceived  = lsMessagesReceived;
                    objCommand.MessagesGenerated = lsMessagesGenerated;
                    PushGui(objCommand);
                }

                if (lsDisconnected.Count > 0)
                {
                    objCommand           = new SimCommand();
                    objCommand.CommandId = SimCommand.ECommandId.DROPSESSION;
                    objCommand.Sessions  = lsDisconnected;
                    PushGui(objCommand);
                }

                // Don't continuously refresh the auto-messages. They are not updated that often and
                // a small lag here is not very noticable.
                if (GetTickCount() - nLastReloadAutoMsg > AUTOMESSAGE_RELOAD_TOMS)
                {
                    nLastReloadAutoMsg = GetTickCount();
                    lsAutoMessages     = m_objSimModel.GetAutoMessages();
                    nGeneratePerMinute = m_objSimModel.GeneratePerMinute;
                    bRandomOrder       = m_objSimModel.RandomOrder;
                }

                // Don't continuously refresh reply settings, but do refresh them a bit
                // more often than the autoreply settings because its very visible.
                if (GetTickCount() - nLastReloadReplies > REPLIES_RELOAD_TOMS)
                {
                    nLastReloadReplies = GetTickCount();
                    bEcho         = m_objSimModel.Echo;
                    objErrorRates = m_objSimModel.GetErrorRates();
                }

                m_objSimModel.SetSessions(lsSessions);

                Thread.Sleep(100);
            }
        }
示例#6
0
        private void frmMain_Load(object sender, EventArgs e)
        {
            var objSettings = Settings.Default;

            // force save settings right away
            objSettings.LastReference = objSettings.LastReference;
            objSettings.Save();

            m_Logger = new Logger(objSettings.ViewLogFile);
            m_Logger.WriteLine("Startup SMPP Simulator");

            m_objSimWorker    = new SimWorker();
            m_objSimModel     = m_objSimWorker.SimModel;
            m_objSmsConstants = new AxSms.Constants();

            // IP Version combo box
            var dctIpVersion = new Dictionary <string, int>();

            dctIpVersion.Add("IPv6/IPv4", m_objSmsConstants.SMPP_IPVERSION_BOTH);
            dctIpVersion.Add("IPv6", m_objSmsConstants.SMPP_IPVERSION_6);
            dctIpVersion.Add("IPv4", m_objSmsConstants.SMPP_IPVERSION_4);

            cbxIpVersion.DisplayMember = "Key";
            cbxIpVersion.ValueMember   = "Value";
            cbxIpVersion.DataSource    = new BindingSource(dctIpVersion, null);

            // Make sure to update all the SESSION_ constants when changing stuff here !!!!
            lvSessions.Columns.Add("Client IP", (int)(lvSessions.Width * .25), HorizontalAlignment.Left);
            lvSessions.Columns.Add("Client Port", (int)(lvSessions.Width * .25), HorizontalAlignment.Left);
            lvSessions.Columns.Add("SystemID", (int)(lvSessions.Width * .24), HorizontalAlignment.Left);
            lvSessions.Columns.Add("Connection State", (int)(lvSessions.Width * .25), HorizontalAlignment.Left);
            lvSessions.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);

            // Make sure to update all the MESSAGE_ constants when changing stuff here !!!!
            lvMessages.Columns.Add("Dir.", (int)(lvMessages.Width * .1), HorizontalAlignment.Left);
            lvMessages.Columns.Add("SystemID", (int)(lvMessages.Width * .20), HorizontalAlignment.Left);
            lvMessages.Columns.Add("ToAddress", (int)(lvMessages.Width * .15), HorizontalAlignment.Left);
            lvMessages.Columns.Add("Reference", (int)(lvMessages.Width * .15), HorizontalAlignment.Left);
            lvMessages.Columns.Add("State", (int)(lvMessages.Width * .15), HorizontalAlignment.Left);
            lvMessages.Columns.Add("Body", -2, HorizontalAlignment.Left);

            // Make sure to update all the AUTOMESSAGE_ constants when changing stuff here !!!!
            lvAutoMessage.Columns.Add("FromAddress", (int)(lvAutoMessage.Width * .20), HorizontalAlignment.Left);
            lvAutoMessage.Columns.Add("ToAddress", (int)(lvAutoMessage.Width * .20), HorizontalAlignment.Left);
            lvAutoMessage.Columns.Add("Body", (int)(lvAutoMessage.Width * .59), HorizontalAlignment.Left);

            // Set the hyperlinks in the GUI
            llblAxLink.Text = "Try other SMS software products by Auron Software.";
            llblAxLink.Links.Add(llblAxLink.Text.IndexOf("SMS software products"), "SMS software products".Length, "https://www.auronsoftware.com/products/");
            llblAxLink.LinkClicked += new LinkLabelLinkClickedEventHandler(llblAxLink_LinkClicked);

            llblFooterText.Text  = "Auron SMPP Simulator is freeware. It uses Auron SMS Component.\r\n";
            llblFooterText.Text += "For more information on Auron SMS products, click here.";
            llblFooterText.Links.Add(llblFooterText.Text.IndexOf("click here"), "click here".Length, "https://www.auronsoftware.com/products/");
            llblFooterText.LinkClicked += new LinkLabelLinkClickedEventHandler(llblAxLink_LinkClicked);

            // Initialize model
            m_objSimModel.LastReference       = objSettings.LastReference + SimConstants.ADDREFERENCES_ONAPPSTART;
            m_objSimModel.Port                = objSettings.Port;
            m_objSimModel.IpVersion           = objSettings.IpVersion;
            m_objSimModel.IsAuthRequired      = objSettings.AuthRequired;
            m_objSimModel.SystemId            = objSettings.SystemId;
            m_objSimModel.Password            = objSettings.Password;
            m_objSimModel.IsPduLogEnabled     = objSettings.PduLogEnabled;
            m_objSimModel.IsServerLogEnabled  = objSettings.ServerLogEnabled;
            m_objSimModel.IsSessionLogEnabled = objSettings.SessionLogEnabled;
            m_objSimModel.ServerLog           = objSettings.ServerLog;
            m_objSimModel.SessionLog          = objSettings.SessionLog;
            m_objSimModel.GeneratePerMinute   = objSettings.GeneratePerMinute;
            m_objSimModel.RandomOrder         = objSettings.RandomOrder;
            m_objSimModel.Echo                = objSettings.Echo;
            m_objSimModel.PduTimeout          = objSettings.PduTimeout;
            m_objSimModel.EnquireInterval     = objSettings.EnquireInterval;
            m_objSimModel.UseGsmEncoding      = objSettings.UseGsmEncoding;
            m_objSimModel.MultipartMode       = objSettings.MultipartMode;
            m_objSimModel.DeliverMode         = objSettings.DeliverMode;
            m_objSimModel.CertificateStore    = objSettings.CertificateStore;

            m_nKeepMaxMessages    = objSettings.KeepMessages;
            m_strAutoMessagesFile = objSettings.AutoMessageFile;

            // pre-load auto messages
            if (LoadAutoMessages(m_strAutoMessagesFile) != 0)
            {
                SimMessage objMessage = null;
                AddToAutoMessage(new SimMessage("+123123123", SimConstants.DEFAULT_FROMADDRESS, "Hello, World!"));
                AddToAutoMessage(objMessage = new SimMessage("+321321321", SimConstants.DEFAULT_FROMADDRESS, "مرحبا، العالم"));
                objMessage.DataCoding       = m_objSmsConstants.DATACODING_UNICODE;
                AddToAutoMessage(objMessage = new SimMessage("+231231231", SimConstants.DEFAULT_FROMADDRESS, "नमस्ते दुनिया"));
                objMessage.DataCoding       = m_objSmsConstants.DATACODING_DEFAULT;
                objMessage.LanguageShift    = m_objSmsConstants.LANGUAGE_SINGLESHIFT_HINDI;
                AddToAutoMessage(objMessage = new SimMessage("+123123123", SimConstants.DEFAULT_FROMADDRESS, "48656c6c6f2c20576f726c6421"));
                objMessage.BodyFormat       = m_objSmsConstants.BODYFORMAT_HEX;
            }
            PushAutoMessages();

            // Push error rates to model.
            SimErrorRates objErrorRates    = new SimErrorRates();
            string        strMessageRates  = objSettings.MessageErrorRates;
            string        strDeliveryRates = objSettings.DeliveryErrorRates;

            string[] aMessageRates = strMessageRates.Split(';');
            try
            {
                foreach (string strMessageRate in aMessageRates)
                {
                    SimMessageErrorRate objErrr      = new SimMessageErrorRate();
                    string[]            aMessageRate = strMessageRate.Split(',');
                    objErrr.StatusCode = int.Parse(aMessageRate[0]);
                    objErrr.Occurance  = int.Parse(aMessageRate[1]);
                    objErrorRates.MessageErrorRates.Add(objErrr);
                }
            }
            catch (Exception x)
            {
                m_Logger.WriteLine("Error while parsing message rates: {0}", x.ToString());
            }

            string[] aDeliveryRates = strDeliveryRates.Split(';');
            try
            {
                foreach (string strDeliveryRate in aDeliveryRates)
                {
                    SimDeliveryErrorRate objErrr       = new SimDeliveryErrorRate();
                    string[]             aDeliveryRate = strDeliveryRate.Split(',');
                    objErrr.Code      = int.Parse(aDeliveryRate[0]);
                    objErrr.Text      = aDeliveryRate[1];
                    objErrr.Occurance = int.Parse(aDeliveryRate[2]);
                    objErrorRates.DeliveryErrorRates.Add(objErrr);
                }
            }
            catch (Exception x)
            {
                m_Logger.WriteLine("Error while parsing delivery rates: {0}", x.ToString());
            }

            m_objSimModel.SetErrorRates(objErrorRates);

            // Set other control values
            txtServerLog.Text          = m_objSimModel.ServerLog;
            txtSessionLog.Text         = m_objSimModel.SessionLog;
            cbEnableServerLog.Checked  = m_objSimModel.IsServerLogEnabled;
            cbEnableSessionLog.Checked = m_objSimModel.IsSessionLogEnabled;
            cbEnablePduLog.Checked     = m_objSimModel.IsPduLogEnabled;
            cbAuthentication.Checked   = m_objSimModel.IsAuthRequired;
            txtSystemId.Text           = m_objSimModel.SystemId;
            txtPassword.Text           = m_objSimModel.Password;
            txtMaxSendPerMinute.Text   = m_objSimModel.GeneratePerMinute.ToString();
            cbRandom.Checked           = m_objSimModel.RandomOrder;
            cbEcho.Checked             = m_objSimModel.Echo;

            ReloadCertificates();

            objSettings.Save();
            UpdateControls();
        }