klhttp-internal.h
上传用户:jnmzc84
上传日期:2022-08-08
资源大小:35k
文件大小:4k
源码类别:

网络编程

开发平台:

Visual C++

  1. /**
  2.   @file klhttp-internal.h
  3.   @author Kevin Lynx
  4.   @data 7.25.2008
  5.   @brief for klhttpd internal use.
  6. */
  7. #ifndef ___KL_HTTP_INTERNAL_H_
  8. #define ___KL_HTTP_INTERNAL_H_
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #include <sys/queue.h> /* the BSD queue component */
  13. /**
  14.   http header pair.
  15. */
  16. struct http_header
  17. {
  18. /** header name */
  19. char *name;
  20. /** header value */
  21. char *value;
  22. /** for the queue */
  23. TAILQ_ENTRY( http_header ) next;
  24. };
  25. /**
  26.   http header queue head definition.
  27. */
  28. TAILQ_HEAD( http_header_head, http_header );
  29. /**
  30.   create a new header queue.
  31. */
  32. struct http_header_head *http_header_new();
  33. /**
  34.   free a header queue.
  35. */
  36. void http_header_free( struct http_header_head *header_queue );
  37. /**
  38.   add one line head to the header queue.
  39.   @param header_queue header queue to insert.
  40.   @param line a string line contains a header pair : header-name:value.
  41.   @return 0 if successful, otherwise return -1.
  42. */
  43. int http_add_header( struct http_header_head *header_queue, char *line );
  44. /**
  45.   get a header value by a header name.
  46.   @param header_queue the header queue to search in.
  47.   @param header_name the header name.
  48.   @return if found, return the header value, otherwise return null.
  49. */
  50. const char *http_get_header_value( struct http_header_head *header_queue, const char *header_name );
  51. /**
  52.   http request type.
  53. */
  54. enum 
  55. {
  56. HTTP_GET,
  57. /** only retrieve the data information */
  58. HTTP_HEAD,
  59. /** unknown method, the server does not support */
  60. HTTP_UNKNOWN,
  61. };
  62. /**
  63.   http protocol version.
  64. */
  65. struct http_pro_version
  66. {
  67. int major;
  68. int minor;
  69. };
  70. /**
  71.   http request.
  72. */
  73. struct http_request
  74. {
  75. /** request type : GET / HEAD */
  76. int type;
  77. /** request resource */
  78. char *uri;
  79. /** http version */
  80. struct http_pro_version ver;
  81. /** http headers */
  82. struct http_header_head *headers;
  83. /** optional bodies, currently it's not implemented. */
  84. };
  85. /**
  86.   parse the http request from a raw buffer from net layer.
  87. */
  88. struct evbuffer;
  89. struct http_request *http_request_parse( struct evbuffer *buf );
  90. /**
  91.   free the http request, you must call this function to free resources created by http_parse_request.
  92. */
  93. void http_request_free( struct http_request *request );
  94. /**
  95.   response status code.
  96. */
  97. enum
  98. {
  99. HTTP_OK = 200,
  100. HTTP_NOTFOUND = 404,
  101. HTTP_BADREQUEST = 400,
  102. HTTP_NOTIMPLEMENT = 501,
  103. HTTP_SERVUNAVAIL = 503,
  104. };
  105. /**
  106.   response status readable code.
  107. */
  108. #define HTTP_OK_STR "OK"
  109. #define HTTP_NOTFOUND_STR "NOT FOUND"
  110. #define HTTP_BADREQUEST_STR "BAD REQUEST"
  111. #define HTTP_NOTIMPLEMENT_STR "NOT IMPLEMENTED" 
  112. #define HTTP_SERVUNAVAIL_STR "SERVER ERROR"
  113. /** get response status readable code */
  114. #define CODE_STR( code ) code##_STR
  115. /**
  116.   resource load callback.
  117.   @return the resource file size.-1 indicates error.
  118. */
  119. typedef int (*res_load_cb)( const char *uri, struct evbuffer *buf );
  120. /** 
  121.   resource checking callback, to make sure the resource does exist.
  122.   @return -1 indicates not exist, 0 exist.
  123. */
  124. typedef int (*res_exist_cb)( const char *uri );
  125. /**
  126.   handle a http request, it will write the response to the buffer.
  127.   @param buf the output buffer, will be writen with the response.
  128. */
  129. int http_handle_request( struct evbuffer *buf, const struct http_request *request, res_exist_cb cb_exist, res_load_cb cb_load );
  130. /** 
  131.   send error info to the client.
  132.   @param buf the output buffer, will be writen with the response.
  133. */
  134. void http_response_error( struct evbuffer *buf, int status, const char *status_str, const char *more_info );
  135. #ifdef __cplusplus
  136. }
  137. #endif
  138. #endif /* ___KL_HTTP_INTERNAL_H_ */