httpstatusline.c
来自「-」· C语言 代码 · 共 230 行
C
230 行
/* * $Id: HttpStatusLine.c,v 1.17.6.1 1999/02/12 19:38:20 wessels Exp $ * * DEBUG: section 57 HTTP Status-line * AUTHOR: Alex Rousskov * * SQUID Internet Object Cache http://squid.nlanr.net/Squid/ * ---------------------------------------------------------- * * Squid is the result of efforts by numerous individuals from the * Internet community. Development is led by Duane Wessels of the * National Laboratory for Applied Network Research and funded by the * National Science Foundation. Squid is Copyrighted (C) 1998 by * Duane Wessels and the University of California San Diego. Please * see the COPYRIGHT file for full details. Squid incorporates * software developed and/or copyrighted by other sources. Please see * the CREDITS file for full details. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. * */#include "squid.h"/* local constants */const char *HttpStatusLineFormat = "HTTP/%3.1f %3d %s\r\n";voidhttpStatusLineInit(HttpStatusLine * sline){ httpStatusLineSet(sline, 0.0, HTTP_STATUS_NONE, NULL);}voidhttpStatusLineClean(HttpStatusLine * sline){ httpStatusLineSet(sline, 0.0, HTTP_INTERNAL_SERVER_ERROR, NULL);}/* set values */voidhttpStatusLineSet(HttpStatusLine * sline, double version, http_status status, const char *reason){ assert(sline); sline->version = version; sline->status = status; /* Note: no xstrdup for 'reason', assumes constant 'reasons' */ sline->reason = reason;}/* parse a 0-terminating buffer and fill internal structures; returns true on success */voidhttpStatusLinePackInto(const HttpStatusLine * sline, Packer * p){ assert(sline && p); debug(57, 9) ("packing sline %p using %p:\n", sline, p); debug(57, 9) (HttpStatusLineFormat, sline->version, sline->status, sline->reason ? sline->reason : httpStatusString(sline->status)); packerPrintf(p, HttpStatusLineFormat, sline->version, sline->status, httpStatusLineReason(sline));}/* pack fields using Packer */inthttpStatusLineParse(HttpStatusLine * sline, const char *start, const char *end){ assert(sline); sline->status = HTTP_INVALID_HEADER; /* Squid header parsing error */ if (strncasecmp(start, "HTTP/", 5)) return 0; start += 5; if (!xisdigit(*start)) return 0; sline->version = atof(start); if (!(start = strchr(start, ' '))) return 0; sline->status = atoi(++start); /* we ignore 'reason-phrase' */ return 1; /* success */}const char *httpStatusLineReason(const HttpStatusLine * sline){ assert(sline); return sline->reason ? sline->reason : httpStatusString(sline->status);}const char *httpStatusString(http_status status){ /* why not to return matching string instead of using "p" ? @?@ */ const char *p = NULL; switch (status) { case 0: p = "Init"; /* we init .status with code 0 */ break; case HTTP_CONTINUE: p = "Continue"; break; case HTTP_SWITCHING_PROTOCOLS: p = "Switching Protocols"; break; case HTTP_OK: p = "OK"; break; case HTTP_CREATED: p = "Created"; break; case HTTP_ACCEPTED: p = "Accepted"; break; case HTTP_NON_AUTHORITATIVE_INFORMATION: p = "Non-Authoritative Information"; break; case HTTP_NO_CONTENT: p = "No Content"; break; case HTTP_RESET_CONTENT: p = "Reset Content"; break; case HTTP_PARTIAL_CONTENT: p = "Partial Content"; break; case HTTP_MULTIPLE_CHOICES: p = "Multiple Choices"; break; case HTTP_MOVED_PERMANENTLY: p = "Moved Permanently"; break; case HTTP_MOVED_TEMPORARILY: p = "Moved Temporarily"; break; case HTTP_SEE_OTHER: p = "See Other"; break; case HTTP_NOT_MODIFIED: p = "Not Modified"; break; case HTTP_USE_PROXY: p = "Use Proxy"; break; case HTTP_BAD_REQUEST: p = "Bad Request"; break; case HTTP_UNAUTHORIZED: p = "Unauthorized"; break; case HTTP_PAYMENT_REQUIRED: p = "Payment Required"; break; case HTTP_FORBIDDEN: p = "Forbidden"; break; case HTTP_NOT_FOUND: p = "Not Found"; break; case HTTP_METHOD_NOT_ALLOWED: p = "Method Not Allowed"; break; case HTTP_NOT_ACCEPTABLE: p = "Not Acceptable"; break; case HTTP_PROXY_AUTHENTICATION_REQUIRED: p = "Proxy Authentication Required"; break; case HTTP_REQUEST_TIMEOUT: p = "Request Time-out"; break; case HTTP_CONFLICT: p = "Conflict"; break; case HTTP_GONE: p = "Gone"; break; case HTTP_LENGTH_REQUIRED: p = "Length Required"; break; case HTTP_PRECONDITION_FAILED: p = "Precondition Failed"; break; case HTTP_REQUEST_ENTITY_TOO_LARGE: p = "Request Entity Too Large"; break; case HTTP_REQUEST_URI_TOO_LARGE: p = "Request-URI Too Large"; break; case HTTP_UNSUPPORTED_MEDIA_TYPE: p = "Unsupported Media Type"; break; case HTTP_INTERNAL_SERVER_ERROR: p = "Internal Server Error"; break; case HTTP_NOT_IMPLEMENTED: p = "Not Implemented"; break; case HTTP_BAD_GATEWAY: p = "Bad Gateway"; break; case HTTP_SERVICE_UNAVAILABLE: p = "Service Unavailable"; break; case HTTP_GATEWAY_TIMEOUT: p = "Gateway Time-out"; break; case HTTP_HTTP_VERSION_NOT_SUPPORTED: p = "HTTP Version not supported"; break; default: p = "Unknown"; debug(57, 3) ("Unknown HTTP status code: %d\n", status); break; } return p;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?