コード例 #1
0
ファイル: HttpResponse.cs プロジェクト: nickcanz/manos
        public HttpResponse(IHttpTransaction transaction, IOStream stream)
        {
            Transaction = transaction;
            IOStream = stream;

            StatusCode = 200;

            WriteHeaders = true;

            Headers = new HttpHeaders ();
            Stream = new HttpResponseStream (this, IOStream);
            Stream.Chunked = (transaction.Request.MajorVersion > 0 && transaction.Request.MinorVersion > 0);
        }
コード例 #2
0
ファイル: HttpTransaction.cs プロジェクト: nickcanz/manos
        public HttpTransaction(HttpServer server, IOStream stream, Socket socket, HttpConnectionCallback callback)
        {
            Server = server;
            IOStream = stream;
            Socket = socket;
            ConnectionCallback = callback;

            stream.OnClose (OnClose);

            parser_settings = CreateParserSettings ();
            parser = new HttpParser ();

            stream.ReadBytes (OnBytesRead);
        }
コード例 #3
0
ファイル: HttpResponse.cs プロジェクト: debackerl/manos
        public HttpResponse(IHttpTransaction transaction, IOStream stream)
        {
            Transaction = transaction;
            IOStream = stream;

            StatusCode = 200;

            WriteHeaders = true;

            Headers = new HttpHeaders ();
            Stream = new HttpResponseStream (this, IOStream);
            Stream.Chunked = (transaction.Request.MajorVersion > 0 && transaction.Request.MinorVersion > 0);

            end_watcher = new AsyncWatcher (IOLoop.Instance.EventLoop, OnEnd);
            end_watcher.Start ();
        }
コード例 #4
0
ファイル: HttpTransaction.cs プロジェクト: davidalpert/manos
        private void OnBytesRead(IOStream stream, byte [] data, int offset, int count)
        {
            ByteBuffer bytes = new ByteBuffer (data, offset, count);

            parser.Execute (parser_settings, bytes);
        }
コード例 #5
0
ファイル: HttpTransaction.cs プロジェクト: davidalpert/manos
        public static HttpTransaction BeginTransaction(HttpServer server, IOStream stream, Socket socket, HttpConnectionCallback cb)
        {
            HttpTransaction transaction = new HttpTransaction (server, stream, socket, cb);

            return transaction;
        }
コード例 #6
0
ファイル: HttpServer.cs プロジェクト: nickcanz/manos
        private void HandleIOEvents(Loop loop, IOWatcher watcher, EventTypes revents)
        {
            while (true) {
                  	Socket s = null;
                try {
                    s = Socket.Accept ();
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                        return;
                    Console.WriteLine ("Socket exception in Accept handler");
                    Console.WriteLine (se);
                    return;
                } catch (Exception e) {
                    Console.WriteLine ("Exception in Accept handler");
                    Console.WriteLine (e);
                    return;
                }

                IOStream iostream = new IOStream (s, IOLoop);
                transactions.Add (HttpTransaction.BeginTransaction (this, iostream, s, callback));
            }
        }
コード例 #7
0
ファイル: SendFileOperation.cs プロジェクト: koush/manos
        public void HandleWrite(IOStream stream)
        {
            SocketStream sstream = (SocketStream) stream;

            while (file_offset < file_length) {
                  try {
                      Mono.Unix.Native.Syscall.sendfile (sstream.socket.Handle.ToInt32 (),
                              file.Handle.ToInt32 (), ref file_offset,
                              (ulong) (file_length - file_offset));
                  } catch (SocketException se) {
                      if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                          return;
                      sstream.Close ();
                  } catch (Exception e) {
                      sstream.Close ();
                  }
            }

            if (file_offset >= file_length)
                IsComplete = true;
        }
コード例 #8
0
ファイル: IOStream.cs プロジェクト: PeteShearer/manos
 public virtual void FireReadEvent(IOStream stream, byte [] data, int offset, int count)
 {
     if (ReadEvent != null) {
         ReadEvent (stream, data, offset, count);
     }
 }
コード例 #9
0
ファイル: SendFileOperation.cs プロジェクト: JoergEg/manos
        public void HandleWrite(IOStream stream)
        {
            SocketStream sstream = (SocketStream) stream;

            if (!Chunked && Length == -1) {
                waiting_stream = sstream;
                sstream.DisableWriting ();
                return;
            }

            sstream.SendFile (filename, Chunked, Length, (length, error) => {
                IsComplete = true;
                sstream.EnableWriting ();
                OnComplete (length, error);
            });

            sstream.DisableWriting ();
        }
コード例 #10
0
ファイル: SendBytesOperation.cs プロジェクト: txdv/manos
 public void BeginWrite(IOStream stream)
 {
 }
コード例 #11
0
 public void Write(IOStream stream)
 {
     stream.SendFile (file, callback);
 }
コード例 #12
0
ファイル: NopWriteOperation.cs プロジェクト: koush/manos
 public void HandleWrite(IOStream stream)
 {
 }
コード例 #13
0
ファイル: SendFileOperation.cs プロジェクト: garuma/manos
        public void HandleWrite(IOStream stream)
        {
            SocketStream sstream = (SocketStream) stream;

            while (file_offset < file_length) {
                  try {
                      int fdin = -1;
                      try {
                          fdin = Mono.Unix.Native.Syscall.open (filename,
                                                                Mono.Unix.Native.OpenFlags.O_RDONLY);
                          if (fdin != -1)
                              Mono.Unix.Native.Syscall.sendfile (sstream.socket.Handle.ToInt32 (),
                                                                 fdin, ref file_offset,
                                                                 (ulong) (file_length - file_offset));
                      } finally {
                          if (fdin != -1)
                              Mono.Unix.Native.Syscall.close (fdin);
                      }
                  } catch (SocketException se) {
                      if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                          return;
                      sstream.Close ();
                  } catch (Exception e) {
                      sstream.Close ();
                  }
            }

            if (file_offset >= file_length)
                IsComplete = true;
        }
コード例 #14
0
        public void HandleWrite(IOStream stream)
        {
            while (bytes_index < file_length) {
                int len = -1;
                try {
                    len = stream.socket.Send (bytes, bytes_index, file_length, SocketFlags.None);
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                        return;
                    stream.Close ();
                } catch (Exception e) {
                    stream.Close ();
                } finally {
                    if (len != -1)
                        bytes_index += len;
                }
            }

            IsComplete = (bytes_index == file_length);
        }
コード例 #15
0
ファイル: HttpTransaction.cs プロジェクト: davidalpert/manos
 private void OnClose(IOStream stream)
 {
 }
コード例 #16
0
ファイル: SendFileOperation.cs プロジェクト: JoergEg/manos
 public void EndWrite(IOStream stream)
 {
     if (Callback != null)
         Callback ();
 }
コード例 #17
0
ファイル: SendBytesOperation.cs プロジェクト: txdv/manos
 public void EndWrite(IOStream stream)
 {
 }
コード例 #18
0
 public void Write(IOStream stream)
 {
     stream.Write (bytes, callback);
 }
コード例 #19
0
ファイル: WriteBytesOperation.cs プロジェクト: nickcanz/manos
        public void HandleWrite(IOStream stream)
        {
            while (bytes.Count > 0) {
                int len = -1;
                try {
                    len = stream.socket.Send (bytes);
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                        return;
                    stream.Close ();
                } catch (Exception e) {
                    stream.Close ();
                } finally {
                    if (len != -1) {
                        int num_segments = bytes.Count;
                        IOStream.AdjustSegments (len, bytes);
                        segments_written = num_segments - bytes.Count;
                    }
                }
            }

            FireCallbacks ();
            IsComplete = (bytes.Count == 0);
        }
コード例 #20
0
ファイル: SendFileOperation.cs プロジェクト: koush/manos
        public void EndWrite(IOStream stream)
        {
            if (Callback != null)
                Callback ();

            if (file != null) {
                file.Close ();
                file = null;
            }
        }
コード例 #21
0
ファイル: WriteBytesOperation.cs プロジェクト: nickcanz/manos
 public void EndWrite(IOStream stream)
 {
 }
コード例 #22
0
ファイル: SendFileOperation.cs プロジェクト: koush/manos
 public void BeginWrite(IOStream stream)
 {
 }
コード例 #23
0
ファイル: HttpTransaction.cs プロジェクト: nickcanz/manos
        private void OnBytesRead(IOStream stream, byte [] data, int offset, int count)
        {
            ByteBuffer bytes = new ByteBuffer (data, offset, count);

            try {
                parser.Execute (parser_settings, bytes);
            } catch (Exception e) {
                Console.WriteLine ("HTTP Parsing Exception:");
                Console.WriteLine (e);
                Console.WriteLine ();

                Console.WriteLine ("Parsing data:");
                Console.WriteLine (Encoding.Default.GetString (data, offset, count));
                Console.WriteLine ("Please report this exception at http://groups.google.com/group/manos-de-mono");
            }
        }
コード例 #24
0
ファイル: HttpServer.cs プロジェクト: atheken/manos
        private void HandleIOEvents(Loop loop, IOWatcher watcher, EventTypes revents)
        {
            while (true) {
                  	Socket s = null;
                try {
                    s = Socket.Accept ();
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                        return;
                    throw se;
                } catch {
                    throw;
                }

                IOStream iostream = new IOStream (s, IOLoop);
                transactions.Add (HttpTransaction.BeginTransaction (this, iostream, s, callback));
            }
        }
コード例 #25
0
ファイル: HttpResponseStream.cs プロジェクト: nickcanz/manos
 public HttpResponseStream(HttpResponse response, IOStream stream)
 {
     Response = response;
     IOStream = stream;
 }