Пример #1
0
        private void doWork()
        {
            while (isActive)
            {
                socket = requestQueue.Take();

                // init
                NetworkStream stream = socket.GetStream();
                stream.ReadTimeout = 5000;
                inputStream        = new BufferedStream(stream);
                outputStream       = new StreamWriter(new BufferedStream(socket.GetStream()));

                Object[] rdatas = null;
                // handle request
                try
                {
                    parseRequest();
                    parseHeader();
                    //Tool.WriteLine("http_method: " + http_method);
                    //Tool.WriteLine("http_url: " + http_url);
                    if (http_method.Equals("POST"))
                    {
                        if (http_url.Contains("/test/"))
                        {
                            rdatas = (Object[])handleMultipartFormData();
                        }
                    }

                    outputStream.Flush();
                }
                catch (IOException ioe)
                {
                    logger.Warn(ioe.ToString(), ioe);
                }
                catch (Exception e)
                {
                    logger.Warn(e.ToString(), e);
                    HttpResponse.writeFailure(outputStream);

                    outputStream.Flush();
                }
                finally
                {
                    inputStream  = null;
                    outputStream = null;
                    socket.Close();
                    socket = null;
                }
            }
        }
Пример #2
0
        private Object[] handleMultipartFormData()
        {
            Object[] rdatas = null;

            int          content_len = 0;
            MemoryStream ms          = new MemoryStream();

            if (this.httpHeaders.ContainsKey("Content-Length"))
            {
                content_len = Convert.ToInt32(this.httpHeaders["Content-Length"]);
                if (content_len > MAX_POST_SIZE)
                {
                    logger.Warn(String.Format("POST Content-Length({0}) too big for this simple server", content_len));
                    throw new Exception(
                              String.Format("POST Content-Length({0}) too big for this simple server", content_len));
                }
                // read image
                byte[] buf     = new byte[BUF_SIZE];
                int    to_read = content_len;
                while (to_read > 0)
                {
                    //Tool.logDebug("start inputStream.Read");
                    try
                    {
                        int numread = this.inputStream.Read(buf, 0, Math.Min(BUF_SIZE, to_read));
                        if (numread == 0)
                        {
                            if (to_read == 0)
                            {
                                break;
                            }
                            else
                            {
                                logger.Warn("client disconnected during post");
                                throw new Exception("Client disconnected during post");
                            }
                        }
                        to_read -= numread;
                        ms.Write(buf, 0, numread);
                    }
                    catch (Exception e)
                    {
                        logger.Warn(e);
                        content_len = 0;
                        break;
                    }
                }
                ms.Seek(0, SeekOrigin.Begin);
            }
            if (content_len == 0)
            {
                logger.Warn("Content-Length is 0");
                HttpResponse.writeFailure(outputStream);
            }
            else
            {
                HttpRequestHandler handler = new HttpRequestHandler();
                rdatas = (Object[])handler.handle(httpHeaders, ms);

                if (rdatas == null || rdatas.Length == 0)
                {
                    HttpResponse.writeSuccess(outputStream, "text/html");
                }
                else
                {
                    HttpResponse.writeSuccess(outputStream, rdatas, "text/html");
                }
            }
            ms.Dispose();
            ms.Close();
            ms = null;

            return(rdatas);
        }