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