public override void Clean()
 {
     this._headerFields         = null;
     this._requestUri           = string.Empty;
     this._requestUriParameters = null;
     this._contentFields        = null;
 }
示例#2
0
        public override void Init(HTTPMsg message)
        {
            this._headerFields = message.HTTPHeader.Fields;
            if (message.MessageType == MessageType.REQUEST)
            {
                var reqHeader = message.HTTPHeader as HttpRequestHeader;
                var uri       = reqHeader.RequestURI.Split('?');
                this._requestUri           = uri[0];
                this._requestUriParameters = new Dictionary <string, List <string> >();
                if (uri.Length == 2)
                {
                    foreach (var p in uri[1].Split('&').Select(pair => pair.Split('=')))
                    {
                        if (!this._requestUriParameters.ContainsKey(p[0]))
                        {
                            this._requestUriParameters[p[0]] = new List <string>();
                        }
                        if (p.Length == 2)
                        {
                            this._requestUriParameters[p[0]].Add(p[1]);
                        }
                    }
                }
            }

            if (message.HTTPContent == null)
            {
                return;
            }

            var jsonReader = JsonReaderWriterFactory.CreateJsonReader(message.HTTPContent.Content, new XmlDictionaryReaderQuotas());

            this._root = XElement.Load(jsonReader);
        }
 public override void Clean()
 {
     this._clone                = null;
     this._content              = string.Empty;
     this._boundariesIndices    = null;
     this._boundary             = null;
     this._headerFields         = null;
     this._requestUri           = string.Empty;
     this._requestUriParameters = null;
     this._partCount            = 0;
     this._partPosition         = 0;
 }
        public override void Init(HTTPMsg message)
        {
            this._headerFields = message.HTTPHeader.Fields;
            if (message.MessageType == MessageType.REQUEST)
            {
                var reqHeader = message.HTTPHeader as HttpRequestHeader;
                var uri       = reqHeader.RequestURI.Split('?');
                this._requestUri           = uri[0];
                this._requestUriParameters = new Dictionary <string, List <string> >();
                if (uri.Length == 2)
                {
                    foreach (var p in uri[1].Split('&').Select(pair => pair.Split('=')))
                    {
                        if (!this._requestUriParameters.ContainsKey(p[0]))
                        {
                            this._requestUriParameters[p[0]] = new List <string>();
                        }
                        if (p.Length == 2)
                        {
                            this._requestUriParameters[p[0]].Add(p[1]);
                        }
                    }
                }
            }

            if (message.HTTPContent == null)
            {
                return;
            }

            this._contentFields = new Dictionary <string, List <string> >(StringComparer.OrdinalIgnoreCase);

            var encoder = this.GetEncoder(message.HTTPHeader.Fields["Content-Type"].First());

            foreach (var pair in encoder.GetString(message.HTTPContent.Content).Split('&'))
            {
                var p = pair.Split('=');
                if (p.Length < 2)
                {
                    continue;
                }

                if (!this._contentFields.ContainsKey(p[0]))
                {
                    this._contentFields.Add(p[0], new List <string>());
                }
                this._contentFields[p[0]].Add(p[1]);
            }
        }
        public override void Init(HTTPMsg message)
        {
            this._headerFields = message.HTTPHeader.Fields;
            if (message.MessageType == MessageType.REQUEST)
            {
                var reqHeader = message.HTTPHeader as HttpRequestHeader;
                var uri       = reqHeader.RequestURI.Split('?');
                this._requestUri           = uri[0];
                this._requestUriParameters = new Dictionary <string, List <string> >();
                if (uri.Length == 2)
                {
                    foreach (var p in uri[1].Split('&').Select(pair => pair.Split('=')))
                    {
                        if (!this._requestUriParameters.ContainsKey(p[0]))
                        {
                            this._requestUriParameters[p[0]] = new List <string>();
                        }
                        if (p.Length == 2)
                        {
                            this._requestUriParameters[p[0]].Add(p[1]);
                        }
                    }
                }
            }

            // Clone message is needed for later use of another soptters for every part
            this._clone             = message.Clone();
            this._clone.HTTPContent = this._clone.HTTPContent.Clone();

            this._boundary = this.GetStringPart("boundary=", ";", message.HTTPHeader.Fields["Content-Type"].First());
            var encoder = this.GetEncoder(message.HTTPHeader.Fields["Content-Type"].First());

            this._content           = encoder.GetString(message.HTTPContent.Content);
            this._boundariesIndices = new List <Int32>();

            // mark boundaries
            var start = this._content.IndexOf(this._boundary, StringComparison.Ordinal);

            start = this._content.IndexOf("\r\n", start, StringComparison.Ordinal) + 1;
            this._boundariesIndices.Add(start);
            do
            {
                var end = this._content.IndexOf(this._boundary, start, StringComparison.Ordinal);
                if (end == -1)
                {
                    break;
                }
                end = this._content.LastIndexOf("\r\n", end, StringComparison.Ordinal);
                this._boundariesIndices.Add(end);

                this._partCount++;

                start = this._content.IndexOf(this._boundary, start, StringComparison.Ordinal);
                if (end == -1)
                {
                    break;
                }
                start = this._content.IndexOf("\r\n", start, StringComparison.Ordinal) + 1;
                this._boundariesIndices.Add(start);
            } while(true);
        }