예제 #1
0
        private byte[] BuildPacket()
        {
            byte[] buffer;
            if (DataBuffer == null)
            {
                DataBuffer = new Byte[0];
            }

            if (Version == "1.0")
            {
                if ((Method == "") && (ResponseCode == -1))
                {
                    return(DataBuffer);
                }
            }


            UTF8Encoding          UTF8 = new UTF8Encoding();
            String                sbuf;
            IDictionaryEnumerator en = TheHeaders.GetEnumerator();

            en.Reset();

            if (Method != "")
            {
                if (Version != "")
                {
                    sbuf = Method + " " + EscapeString(MethodData) + " HTTP/" + Version + "\r\n";
                }
                else
                {
                    sbuf = Method + " " + EscapeString(MethodData) + "\r\n";
                }
            }
            else
            {
                sbuf = "HTTP/" + Version + " " + ResponseCode.ToString() + " " + ResponseData + "\r\n";
            }
            while (en.MoveNext())
            {
                if (en.Value != null && ((String)en.Key != "CONTENT-LENGTH" || OverrideContentLength == true))
                {
                    if (en.Value.GetType() == typeof(string))
                    {
                        sbuf += (String)en.Key + ": " + (String)en.Value + "\r\n";
                    }
                    else
                    {
                        sbuf += (String)en.Key + ":";
                        foreach (string v in (ArrayList)en.Value)
                        {
                            sbuf += (" " + v + "\r\n");
                        }
                    }
                }
            }
            if (StatusCode == -1 && DontShowContentLength == false)
            {
                sbuf += "Content-Length: " + DataBuffer.Length.ToString() + "\r\n";
            }
            else if (Version != "1.0" && Version != "0.9" && Version != "" && DontShowContentLength == false)
            {
                if (OverrideContentLength == false)
                {
                    sbuf += "Content-Length: " + DataBuffer.Length.ToString() + "\r\n";
                }
            }

            sbuf += "\r\n";

            buffer = new byte[UTF8.GetByteCount(sbuf) + DataBuffer.Length];
            UTF8.GetBytes(sbuf, 0, sbuf.Length, buffer, 0);
            Array.Copy(DataBuffer, 0, buffer, buffer.Length - DataBuffer.Length, DataBuffer.Length);
            return(buffer);
        }
예제 #2
0
 public IDictionaryEnumerator GetHeaderEnumerator()
 {
     return(TheHeaders.GetEnumerator());
 }