Annotation of embedaddon/libpdel/http/http_status.c, revision 1.1.1.1
1.1 misho 1:
2: /*
3: * Copyright (c) 2001-2002 Packet Design, LLC.
4: * All rights reserved.
5: *
6: * Subject to the following obligations and disclaimer of warranty,
7: * use and redistribution of this software, in source or object code
8: * forms, with or without modifications are expressly permitted by
9: * Packet Design; provided, however, that:
10: *
11: * (i) Any and all reproductions of the source or object code
12: * must include the copyright notice above and the following
13: * disclaimer of warranties; and
14: * (ii) No rights are granted, in any manner or form, to use
15: * Packet Design trademarks, including the mark "PACKET DESIGN"
16: * on advertising, endorsements, or otherwise except as such
17: * appears in the above copyright notice or in the software.
18: *
19: * THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
20: * TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
21: * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
22: * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
23: * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
24: * OR NON-INFRINGEMENT. PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
25: * OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
26: * OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
27: * RELIABILITY OR OTHERWISE. IN NO EVENT SHALL PACKET DESIGN BE
28: * LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
29: * OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
30: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
31: * DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
32: * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
33: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
35: * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
36: * THE POSSIBILITY OF SUCH DAMAGE.
37: *
38: * Author: Archie Cobbs <archie@freebsd.org>
39: */
40:
41: #include <sys/types.h>
42: #include <sys/syslog.h>
43:
44: #include <stdio.h>
45: #include <stdlib.h>
46: #include <stdarg.h>
47: #include <errno.h>
48: #include <string.h>
49: #include <ctype.h>
50:
51: #include <netinet/in.h>
52:
53: #include <openssl/ssl.h>
54:
55: #include "http/http_defs.h"
56: #include "http/http_server.h"
57:
58: struct http_status {
59: int code;
60: const char *msg;
61: };
62:
63: static const struct http_status codes[] = {
64: { HTTP_STATUS_CONTINUE, "Continue" },
65: { HTTP_STATUS_SWITCHING_PROTOCOLS, "Switching Protocols" },
66: { HTTP_STATUS_OK, "OK" },
67: { HTTP_STATUS_CREATED, "Created" },
68: { HTTP_STATUS_ACCEPTED, "Accepted" },
69: { HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION, "Non-Authoritative Information" },
70: { HTTP_STATUS_NO_CONTENT, "No Content" },
71: { HTTP_STATUS_RESET_CONTENT, "Reset Content" },
72: { HTTP_STATUS_PARTIAL_CONTENT, "Partial Content" },
73: { HTTP_STATUS_MULTIPLE_CHOICES, "Multiple Choices" },
74: { HTTP_STATUS_MOVED_PERMANENTLY, "Moved Permanently" },
75: { HTTP_STATUS_FOUND, "Found" },
76: { HTTP_STATUS_SEE_OTHER, "See Other" },
77: { HTTP_STATUS_NOT_MODIFIED, "Not Modified" },
78: { HTTP_STATUS_USE_PROXY, "Use Proxy" },
79: { HTTP_STATUS_TEMPORARY_REDIRECT, "Temporary Redirect" },
80: { HTTP_STATUS_BAD_REQUEST, "Bad Request" },
81: { HTTP_STATUS_UNAUTHORIZED, "Authorization Required" },
82: { HTTP_STATUS_PAYMENT_REQUIRED, "Payment Required" },
83: { HTTP_STATUS_FORBIDDEN, "Forbidden" },
84: { HTTP_STATUS_NOT_FOUND, "Not Found" },
85: { HTTP_STATUS_METHOD_NOT_ALLOWED, "Method Not Allowed" },
86: { HTTP_STATUS_NOT_ACCEPTABLE, "Not Acceptable" },
87: { HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED, "Proxy Authentication Required" },
88: { HTTP_STATUS_REQUEST_TIME_OUT, "Request Time-out" },
89: { HTTP_STATUS_CONFLICT, "Conflict" },
90: { HTTP_STATUS_GONE, "Gone" },
91: { HTTP_STATUS_LENGTH_REQUIRED, "Length Required" },
92: { HTTP_STATUS_PRECONDITION_FAILED, "Precondition Failed" },
93: { HTTP_STATUS_REQUEST_ENTITY_TOO_LARGE, "Request Entity Too Large" },
94: { HTTP_STATUS_REQUEST_URI_TOO_LARGE, "Request-URI Too Large" },
95: { HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, "Unsupported Media Type" },
96: { HTTP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE, "Requested Range Not Satisfiable" },
97: { HTTP_STATUS_EXPECTATION_FAILED, "Expectation Failed" },
98: { HTTP_STATUS_INTERNAL_SERVER_ERROR, "Internal Server Error" },
99: { HTTP_STATUS_NOT_IMPLEMENTED, "Not Implemented" },
100: { HTTP_STATUS_BAD_GATEWAY, "Bad Gateway" },
101: { HTTP_STATUS_SERVICE_UNAVAILABLE, "Service Unavailable" },
102: { HTTP_STATUS_GATEWAY_TIME_OUT, "Gateway Time-out" },
103: { HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, "HTTP Version Not Supported" },
104: };
105: static const int num_codes = sizeof(codes) / sizeof(*codes);
106:
107: /*
108: * Internal functions
109: */
110: static int code_cmp(const void *v1, const void *v2);
111:
112: const char *
113: http_response_status_msg(int code)
114: {
115: struct http_status key;
116: struct http_status *status;
117: static char buf[32];
118:
119: key.code = code;
120: if ((status = bsearch(&key,
121: codes, num_codes, sizeof(*codes), code_cmp)) == NULL) {
122: snprintf(buf, sizeof(buf), "Unknown status code %d", code);
123: return (buf);
124: }
125: return (status->msg);
126: }
127:
128: static int
129: code_cmp(const void *v1, const void *v2)
130: {
131: const struct http_status *const s1 = v1;
132: const struct http_status *const s2 = v2;
133:
134: return (s1->code - s2->code);
135: }
136:
137: #if 0
138:
139: /*
140: * Generate the C #define's from the above list.
141: */
142: int
143: main(int ac, char **av)
144: {
145: const char *prefix = "HTTP_STATUS_";
146: char buf[128];
147: int i;
148:
149: for (i = 0; i < num_codes; i++) {
150: const struct http_status *const code = &codes[i];
151: int ntabs;
152: char *s;
153: int j;
154:
155: strlcpy(buf, code->msg, sizeof(buf));
156: for (s = buf; *s != '\0'; s++) {
157: if (isalnum(*s))
158: *s = toupper(*s);
159: else
160: *s = '_';
161: }
162: printf("#define\t%s%s", prefix, buf);
163: ntabs = 6 - (strlen(buf) + strlen(prefix)) / 8;
164: for (j = 0; j < ntabs; j++)
165: printf("\t");
166: printf("%d\n", code->code);
167: }
168: return (0);
169: }
170:
171: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>