Exemple #1
0
        /// <summary>
        /// Reads Xml from given stream and retrieves incoming messages or delivery reports
        /// within the XML document. The Messages or DeliveryReport are stored in the IncomingMessages
        /// or DeliveryReports collection.
        /// </summary>
        /// <param name="inStream"></param>
        /// <param name="outStream"></param>
        public void HandleIncomingMessages(Stream inStream, Stream outStream)
        {
            ReceivedMessages.Clear();
            DeliveryReports.Clear();
            XmlDocument                 docRequest = new XmlDocument();
            XmlLocalResolver            res        = new XmlLocalResolver();
            XmlEmbeddedResourceResolver res2       = new XmlEmbeddedResourceResolver();

            docRequest.XmlResolver = res2;
            docRequest.Load(inStream);
            XmlDocument  docResponse = CheckRequest(docRequest);
            string       sResponse   = "<?xml version=\"1.0\"?>\n" + docResponse.OuterXml;
            StreamWriter sw          = new StreamWriter(outStream, System.Text.Encoding.GetEncoding("ISO-8859-1"));

            sw.Write(sResponse);
            sw.Flush();
            outStream.Flush();
        }
Exemple #2
0
        /// <summary>
        /// Check request for IncomingMessages/DeliveryReports from Gateway,
        /// update Message collection or DeliveryReport collection
        /// </summary>
        /// <param name="doc">XmlDocument containing request from gateway</param>
        private XmlDocument CheckRequest(XmlDocument doc)
        {
            XmlDocument docResponse = new XmlDocument();
            XmlNode     nodMsgList  = doc.SelectSingleNode("MSGLST");

            if (nodMsgList != null)
            {
                // Loop through msg list
                foreach (XmlNode n in nodMsgList.ChildNodes)
                {
                    if (n.NodeType == XmlNodeType.Element && n.Name.Equals("MSG"))
                    {
                        string id = GetNodeValue(n, "ID");
                        int    i  = int.Parse(id);

                        // is this delivery report or incoming msg?
                        string state = GetNodeValue(n, "STATE");
                        if (state == null)
                        {
                            // Incoming Message
                            ReceivedMessages.Add(i, new Message());
                            ReceivedMessages[i].Text           = GetNodeValue(n, "TEXT");
                            ReceivedMessages[i].SenderNumber   = GetNodeValue(n, "SND");
                            ReceivedMessages[i].ReceiverNumber = GetNodeValue(n, "RCV");
                            ReceivedMessages[i].Network        = GetNodeValue(n, "NET");
                            ReceivedMessages[i]._Address       = GetNodeValue(n, "ADDRESS");

                            // Check if position data is included
                            XmlNode nodPosition = n.SelectSingleNode("POSITION");
                            if (nodPosition != null)
                            {
                                // Get position request results
                                ReceivedMessages[i]._Position = new PositionResult();
                                switch (GetNodeValue(nodPosition, "STATUS"))
                                {
                                case "OK":
                                    ReceivedMessages[i]._Position._Status = PositionRequestStatus.Ok;
                                    XmlNode nodPosData = nodPosition.SelectSingleNode("POS");
                                    if (nodPosData != null)
                                    {
                                        ReceivedMessages[i]._Position._PositionData                = new GSMPosition();
                                        ReceivedMessages[i]._Position._PositionData._Latitude      = GetNodeValue(nodPosData, "LATITUDE");
                                        ReceivedMessages[i]._Position._PositionData._Longitude     = GetNodeValue(nodPosData, "LONGITUDE");
                                        ReceivedMessages[i]._Position._PositionData._City          = GetNodeValue(nodPosData, "CITY");
                                        ReceivedMessages[i]._Position._PositionData._Council       = GetNodeValue(nodPosData, "COUNCIL");
                                        ReceivedMessages[i]._Position._PositionData._CouncilNumber = GetNodeValue(nodPosData, "COUNCILNUMBER", "").Equals("") ? -1 : int.Parse(GetNodeValue(nodPosData, "COUNCILNUMBER"));
                                        ReceivedMessages[i]._Position._PositionData._County        = GetNodeValue(nodPosData, "COUNTY");
                                        ReceivedMessages[i]._Position._PositionData._Place         = GetNodeValue(nodPosData, "PLACE");
                                        ReceivedMessages[i]._Position._PositionData._Radius        = GetNodeValue(nodPosData, "RADIUS", "").Equals("") ? -1 : int.Parse(GetNodeValue(nodPosData, "RADIUS"));
                                        ReceivedMessages[i]._Position._PositionData._SubPlace      = GetNodeValue(nodPosData, "SUBPLACE");
                                        ReceivedMessages[i]._Position._PositionData._ZipCode       = GetNodeValue(nodPosData, "ZIPCODE", "").Equals("") ? -1 : int.Parse(GetNodeValue(nodPosData, "ZIPCODE"));
                                    }
                                    break;

                                default:
                                    ReceivedMessages[i]._Position._Status       = PositionRequestStatus.Failed;
                                    ReceivedMessages[i]._Position._FailedReason = GetNodeValue(nodPosition, "INFO");
                                    break;
                                }
                            }
                        }
                        else
                        {
                            DeliveryReports.Add(i, new DeliveryReport());
                            DeliveryReports[i].State          = GetNodeValue(n, "STATE");
                            DeliveryReports[i].Reference      = GetNodeValue(n, "REF");
                            DeliveryReports[i].ReceiverNumber = GetNodeValue(n, "RCV");
                            string sDeliveryTime = GetNodeValue(n, "DELIVERYTIME");
                            if (sDeliveryTime != null && sDeliveryTime.Length > 0)
                            {
                                DeliveryReports[i].DeliveredDate = Convert.ToDateTime(sDeliveryTime);
                            }
                        }
                    }
                }

                // Build Response
                XmlElement elmMsgList = docResponse.CreateElement("MSGLST");
                foreach (int i in ReceivedMessages.Keys)
                {
                    XmlElement elmMsg = docResponse.CreateElement("MSG");
                    elmMsg.AppendChild(CreateElement(docResponse, "ID", i.ToString()));
                    elmMsg.AppendChild(CreateElement(docResponse, "STATUS", "OK"));
                    elmMsgList.AppendChild(elmMsg);
                }
                foreach (int i in DeliveryReports.Keys)
                {
                    XmlElement elmMsg = docResponse.CreateElement("MSG");
                    elmMsg.AppendChild(CreateElement(docResponse, "ID", i.ToString()));
                    elmMsg.AppendChild(CreateElement(docResponse, "STATUS", "OK"));
                    elmMsgList.AppendChild(elmMsg);
                }
                docResponse.AppendChild(elmMsgList);
            }
            return(docResponse);
        }