fdstdio.h
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:4k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** fdstdio.c
  3. **
  4. ** Copyright (c) 1994-1995 Peter Eriksson <pen@signum.se>
  5. **
  6. ** This program is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** This program is distributed in the hope that it will be useful,
  12. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ** GNU General Public License for more details.
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software
  17. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #ifndef PHTTPD_FDSTDIO_H
  20. #define PHTTPD_FDSTDIO_H
  21. #include <synch.h>
  22. #include <stdarg.h>
  23. extern int so_sndbuf;
  24. extern int so_rcvbuf;
  25. extern int select_timeout;
  26. extern int max_fds;
  27. #define BUFFER_SIZE 8192
  28. #define FDIS_EOF     -1  /* Connection closed */
  29. #define FDIS_START    0  /* Type of connection not established */
  30. #define FDIS_CR_START 1  /* Got a CR, but type is still unknown */
  31. #define FDIS_LF_START 2  /* Got a LF, but type is still unknown */
  32. #define FDIS_CR       3  /* Single CR end-of-line (Macintosh) */
  33. #define FDIS_LF       4  /* Single LF end-of-line (Unix) */
  34. #define FDIS_CRLF     5  /* CR+LF end-of-line (HTTP Protocol) */
  35. #define FDIS_LFCR     6  /* LF+CR end-of-line (Stupid) */
  36. struct fd_stream
  37. {
  38.     int (*read)(struct fd_stream *fs, int fd, char *buf, int len);
  39.     int (*write)(struct fd_stream *fs, int fd, const char *buf, int len);
  40.     int (*close)(struct fd_stream *fs, int fd);
  41.     int (*shutdown)(struct fd_stream *fs, int fd, int how);
  42.     int (*avail)(struct fd_stream *fs, int fd);
  43.     int (*wait)(struct fd_stream *fs, int fd, int timeout);
  44.     struct fd_stream *up;
  45. };
  46.     
  47. struct fd_buffer
  48. {
  49.     int type;
  50.     struct fd_stream *fs;
  51.     
  52.     struct
  53.     {
  54. int start;
  55. int end;
  56. int save;
  57. int count;
  58. mutex_t lock;
  59. int state;
  60. int size;
  61. char *buf;
  62.     } in, out;
  63. };
  64. #define FDS_EOF         -1
  65. #define FDS_FREE        0
  66. #define FDS_OPEN        1
  67. extern int fd_foreach(int (*fcnp)(int fd,
  68.   struct fd_buffer *bp,
  69.   void *misc),
  70.       void *misc);
  71. #define FDT_SOCKET      0
  72. #define FDT_FILE        1
  73. #define FDT_TTY         2
  74. #define FDT_PIPE        3
  75. #define FDT_STRING      4
  76. extern void fd_init(void);
  77. extern void fd_reopen(int fd, int how, int type);
  78. extern int  fd_close(int fd);
  79. extern int  fd_shutdown(int fd, int how);
  80. extern int fd_open(const char *file, int how, ...);
  81. extern int fd_connect(struct sockaddr *sap, int len);
  82. extern int fd_sconnect(const char *host, char *service);
  83. struct sockaddr_in;
  84. extern int fd_mksockaddr_in(const char *host,
  85.  char *service,
  86.  struct sockaddr_in *sin);
  87. extern int fd_flush(int fd);
  88. extern int fd_putc(int c, int fd);
  89. extern int fd_puts(const char *str, int fd);
  90. extern int fd_puti(int val, int fd);
  91. extern int fd_puts2nl(const char *s1, const char *s2, int fd);
  92. extern int fd_putsinl(const char *s1, int val, int fd);
  93. extern int fd_vprintf(int fd, const char *format, va_list ap);
  94. extern int fd_printf(int fd, const char *format, ...);
  95. extern int fd_getc(int fd);
  96. extern int fd_ungetc(int c, int fd);
  97. extern char *fd_gets(char *buf, int size, int fd);
  98. extern char *fd_gets_nl(char *buf, int size, int fd);
  99. extern int fd_write(int fd, const char *buf, int len);
  100. extern int fd_read(int fd, char *buf, int len);
  101. extern int fd_relay(int fd1, int fd2, int bidir);
  102. extern int fd_nrelay(int fd1, int fd2, int bidir, int bytes);
  103. extern int fd_prelay(int fd1, int fd2, int bidir, int bytes);
  104. extern int fd_written(int fd);
  105. extern int fd_avail(int fd);
  106. extern int fd_wait(int fd);
  107. #endif