Example #1
0
        protected override void OnDataReceived(Byte[] receiveData)
        {
            MtnUSSDTCPPDU pdu = null;

            try
            {
                pdu = MtnUSSDTCPPDU.FromXML(Encoding.ASCII.GetString(receiveData));
            }
            catch (Exception ex)
            {
                LogManager.LogError("XML Invalid: " + ex.Message);
                return;
            }

            lastActivity = DateTime.Now;
            try
            {
                if (pdu != null)
                {
                    if (pdu.Pdu == MtnUSSDTCPPDU.PDUTypes.CTRL.ToString())
                    {
                        LogManager.LogStatus("  ** <-- ping returned   ** ");
                        //Console.WriteLine("--> ping sent");
                    }
                    else
                    {
                        LogManager.LogStatus("Received " + Encoding.ASCII.GetString(receiveData));

                        String requestData = Encoding.ASCII.GetString(receiveData);
                        USSDHandlerRequestType.RequestTypes requestType = USSDHandlerRequestType.RequestTypes.TCP;
                        IUSSDHandler ussdHandler = USSDHandlerFactory.GetHandler(mobileNetwork, requestData, requestType);
                        Boolean      isTimeout   = false;
                        Boolean      isInvalid   = false;
                        ussdHandler.Initialize(requestData, requestType, out isTimeout, out isInvalid);
                        if (!isTimeout)
                        {
                            LogManager.LogStatus("Handler {0} found for request", ussdHandler.HandlerID);
                            String responseData = ussdHandler.ProcessRequest(requestData);
                            SendResponse(pdu, responseData);
                        }
                        else
                        {
                            LogManager.LogStatus("Timout request for handler {0} received", ussdHandler.HandlerID);
                        }
                    }
                }
                else
                {
                    SendResponse(pdu, "Invalid/Empty Request");
                }
            }

            catch (Exception ex)
            {
                LogManager.LogError(ex);
                SendResponse(pdu, "Invalid request. Please retry.");
            }
        }
Example #2
0
        protected void SendResponse(MtnUSSDTCPPDU pdu, String responseText)
        {
            MtnUSSDTCPPDU.PDUTypes pduReturnType = pdu.FindResponseType((MtnUSSDTCPPDU.PDUTypes)Enum.Parse(typeof(MtnUSSDTCPPDU.PDUTypes), pdu.Pdu, true), false);
            MtnUSSDTCPPDU          responsePDU   = new MtnUSSDTCPPDU();

            responsePDU.Pdu       = pduReturnType.ToString();
            responsePDU.Cookie    = cookie;
            responsePDU.Data      = responseText;
            responsePDU.MSISDN    = pdu.MSISDN;
            responsePDU.RequestID = pdu.RequestID;
            responsePDU.SessionID = pdu.SessionID;
            responsePDU.Status    = "0";
            responsePDU.Tariff    = pdu.Tariff;
            responsePDU.Encoding  = pdu.Encoding;
            LogManager.LogStatus("Response: " + responsePDU.ToXML());
            Send(responsePDU.ToXML());
        }
Example #3
0
        protected void DoPing(object sender, EventArgs e)
        {
            if (DateTime.Now.Subtract(lastActivity).TotalMilliseconds < this.ussdTcpListenerConfigurationSection.PingInterval)
            {
                return;
            }

            MtnUSSDTCPPDU pdu = new MtnUSSDTCPPDU();

            pdu.Pdu  = MtnUSSDTCPPDU.PDUTypes.CTRL.ToString();
            pdu.Data = DateTime.Now.ToString();
            try
            {
                //Console.Write(".");
                LogManager.LogStatus("  ** --> ping            ** ");
                //LogManager.LogStatus("PDU: " + pdu.ToXML());
                Send(pdu.ToXML());
            }
            catch (USSDTcpSendTimeoutException te)
            {
                LogManager.LogError(te);
            }
        }