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