⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ne_utils.c

📁 linux subdivision ying gai ke yi le ba
💻 C
字号:
/*    HTTP utility functions   Copyright (C) 1999-2004, Joe Orton <joe@manyfish.co.uk>   This library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public   License as published by the Free Software Foundation; either   version 2 of the License, or (at your option) any later version.      This library 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   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with this library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,   MA 02111-1307, USA*/#include "config.h"#include <sys/types.h>#ifdef HAVE_STRING_H#include <string.h>#endif#include <stdio.h>#include <ctype.h> /* isdigit() for ne_parse_statusline */#ifdef NEON_SSL#include <openssl/opensslv.h>#endif/* libxml2: pick up the version string. */#if defined(HAVE_LIBXML)#include <libxml/xmlversion.h>#elif defined(HAVE_EXPAT) && !defined(HAVE_XMLPARSE_H)#include <expat.h>#endif#ifdef NEON_ZLIB#include <zlib.h>#endif#include "ne_utils.h"#include "ne_string.h" /* for ne_strdup */#include "ne_dates.h"int ne_debug_mask = 0;FILE *ne_debug_stream = NULL;void ne_debug_init(FILE *stream, int mask){    ne_debug_stream = stream;    ne_debug_mask = mask;#if defined(HAVE_SETVBUF) && defined(_IONBF)    /* If possible, turn off buffering on the debug log.  this is very     * helpful if debugging segfaults. */    if (stream) setvbuf(stream, NULL, _IONBF, 0);#endif        }void ne_debug(int ch, const char *template, ...) {    va_list params;    if ((ch & ne_debug_mask) == 0) return;    fflush(stdout);    va_start(params, template);    vfprintf(ne_debug_stream, template, params);    va_end(params);    if ((ch & NE_DBG_FLUSH) == NE_DBG_FLUSH)	fflush(ne_debug_stream);}#define NE_STRINGIFY(x) # x#define NE_EXPAT_VER(x,y,z) NE_STRINGIFY(x) "." NE_STRINGIFY(y) "." NE_STRINGIFY(z)static const char *version_string = "neon " NEON_VERSION ": " #ifdef NEON_IS_LIBRARY  "Library build"#else  "Bundled build"#endif#ifdef HAVE_EXPAT  ", Expat"/* expat >=1.95.2 exported the version */#ifdef XML_MAJOR_VERSION" " NE_EXPAT_VER(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION)#endif#else /* !HAVE_EXPAT */#ifdef HAVE_LIBXML  ", libxml " LIBXML_DOTTED_VERSION#endif /* HAVE_LIBXML */#endif /* !HAVE_EXPAT */#if defined(NEON_ZLIB) && defined(ZLIB_VERSION)  ", zlib " ZLIB_VERSION#endif /* NEON_ZLIB && ... */#ifdef NEON_SOCKS   ", SOCKSv5"#endif#ifdef NEON_SSL#ifdef OPENSSL_VERSION_TEXT    ", " OPENSSL_VERSION_TEXT#else   "OpenSSL (unknown version)"#endif /* OPENSSL_VERSION_TEXT */#endif   ".";const char *ne_version_string(void){    return version_string;}int ne_version_match(int major, int minor){    return (NEON_VERSION_MAJOR != major) || (NEON_VERSION_MINOR < minor);}int ne_supports_ssl(void){#ifdef NEON_SSL    return 1;#else    return 0;#endif}int ne_parse_statusline(const char *status_line, ne_status *st){    const char *part;    int major, minor, status_code, klass;    /* skip leading garbage if any. */    part = strstr(status_line, "HTTP/");    if (part == NULL) return -1;    minor = major = 0;    /* Parse version string, skipping leading zeroes. */    for (part += 5; *part != '\0' && isdigit(*part); part++)	major = major*10 + (*part-'0');    if (*part++ != '.') return -1;    for (;*part != '\0' && isdigit(*part); part++)	minor = minor*10 + (*part-'0');    if (*part != ' ') return -1;    /* Skip any spaces */    for (; *part == ' '; part++) /* noop */;    /* Parse the Status-Code; part now points at the first Y in     * "HTTP/x.x YYY". */    if (!isdigit(part[0]) || !isdigit(part[1]) || !isdigit(part[2]) ||	(part[3] != '\0' && part[3] != ' ')) return -1;    status_code = 100*(part[0]-'0') + 10*(part[1]-'0') + (part[2]-'0');    klass = part[0]-'0';    /* Skip whitespace between status-code and reason-phrase */    for (part+=3; *part == ' ' || *part == '\t'; part++) /* noop */;    /* part now may be pointing to \0 if reason phrase is blank */    /* Fill in the results */    st->major_version = major;    st->minor_version = minor;    st->reason_phrase = ne_strclean(ne_strdup(part));    st->code = status_code;    st->klass = klass;    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -