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); }