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

📄 http_basic.c

📁 Internet Phone, Chat, Conferencing
💻 C
📖 第 1 页 / 共 4 页
字号:
 * header. * * The http_referer_t is defined as follows: * @code * typedef struct http_referer_s * { *   msg_common_t         loc_common[1]; *   msg_error_t         *loc_next; *   url_t                loc_url[1]; * } http_referer_t; * @endcode */#define http_referer_d http_location_d#define http_referer_e http_location_emsg_hclass_t http_referer_class[] =HTTP_HEADER_CLASS(referer, "Referer", loc_common, single, location);/* ====================================================================== *//**@HTTP_HEADER http_mime_version MIME-Version header. * * We use MIME MIME-Version header. *//* ====================================================================== *//**@HTTP_HEADER http_retry_after Retry-After header. * * The Retry-After response-header field can be used with a 503 (Service * Unavailable) response to indicate how long the service is expected to be * unavailable to the requesting client. This field MAY also be used with * any 3xx (Redirection) response to indicate the minimum time the * user-agent is asked wait before issuing the redirected request. Its * syntax is defined in RFC 2616 section 14.37 as follows: * * @code *    Retry-After   =  "Retry-After" ":" ( HTTP-date / delta-seconds ) * @endcode * *//**@ingroup http_retry_after * @typedef typedef struct http_retry_after_s http_retry_after_t; * * The structure #http_retry_after_t contains representation of @b * Retry-After header. * * The #http_retry_after_t is defined as follows: * @code * typedef struct { *   msg_common_t         ra_common[1]; // Common fragment info *   msg_error_t         *ra_next;      // Link to next (dummy) *   http_time_t          ra_date;      // When to retry *   http_time_t          ra_delta;     // Seconds to before retry * } http_retry_after_t; * @endcode */int http_retry_after_d(su_home_t *home, http_header_t *h, char *s, int slen){  http_retry_after_t *ra = h->sh_retry_after;  if (msg_date_delta_d((char const **)&s,		       &ra->ra_date,		       &ra->ra_delta) < 0 || *s)    return -1;  else    return 0;}int http_retry_after_e(char b[], int bsiz, http_header_t const *h, int f){  http_retry_after_t const *ra = h->sh_retry_after;  if (ra->ra_date)    return msg_date_e(b, bsiz, ra->ra_date + ra->ra_delta);  else    return msg_delta_e(b, bsiz, ra->ra_delta);}msg_hclass_t http_retry_after_class[] =HTTP_HEADER_CLASS(retry_after, "Retry-After", ra_common, single, default);/* ====================================================================== *//**@HTTP_HEADER http_server Server header. */#define http_server_d msg_generic_d#define http_server_e msg_generic_emsg_hclass_t http_server_class[] =HTTP_HEADER_CLASS_G(server, "Server", single);/* ====================================================================== *//**@HTTP_HEADER http_te TE header. * * The TE request-header field indicates what extension transfer-codings it * is willing to accept in the response and whether or not it is willing to * accept trailer fields in a chunked transfer-coding. Its value may consist * of the keyword "trailers" and/or a comma-separated list of extension * transfer-coding names with optional accept parameters. Its syntax is * defined in [H14.39] as follows: * * @code *     TE        = "TE" ":" #( t-codings ) *     t-codings = "trailers" | ( transfer-extension [ accept-params ] ) * @endcode * *//**@ingroup http_te * @typedef typedef strucy http_te_s http_te_t; * * The structure http_te_t contains representation of @b TE header. * * The http_te_t is defined as follows: * @code * typedef struct http_te_s { * } http_te_t; * @endcode */static inlinevoid http_te_update(http_te_t *te){  te->te_q = msg_header_find_param(te->te_common, "q");}int http_te_d(su_home_t *home, msg_header_t *h, char *s, int slen){  msg_header_t **hh = &h->sh_succ, *h0 = h;  http_te_t *te = (http_te_t *)h;  assert(h); assert(sizeof(*h));  for (;*s;) {    /* Ignore empty entries (comma-whitespace) */    if (*s == ',') { *s++ = '\0'; skip_lws(&s); continue; }    if (!h) {      /* Allocate next header structure */      if (!(h = msg_header_alloc(home, h0->sh_class, 0)))	break;      *hh = h; h->sh_prev = hh; hh = &h->sh_succ;      te = te->te_next = (http_te_t *)h;    }    /* "TE:" #(transfer-extension ; *(parameters))) */    if (msg_token_d(&s, &te->te_extension) == -1)      return -1;    if (*s == ';' && msg_params_d(home, &s, &te->te_params) == -1)      return -1;    if (*s != '\0' && *s != ',')      return -1;    if (te->te_params)      http_te_update(te);    h = NULL;  }  return 0;}int http_te_e(char b[], int bsiz, msg_header_t const *h, int flags){  char *b0 = b, *end = b + bsiz;  http_te_t const *te = (http_te_t *)h;  assert(http_is_te(h));  MSG_STRING_E(b, end, te->te_extension);  MSG_PARAMS_E(b, end, te->te_params, flags);  MSG_TERM_E(b, end);  return b - b0;}int http_te_dup_xtra(msg_header_t const *h, int offset){  int rv = offset;  http_te_t const *te = (http_te_t const *)h;  MSG_PARAMS_SIZE(rv, te->te_params);  rv += MSG_STRING_SIZE(te->te_extension);  return rv;}/** Duplicate one http_te_t object */char *http_te_dup_one(msg_header_t *dst, msg_header_t const *src,		      char *b, int xtra){  http_te_t *te = (http_te_t *)dst;  http_te_t const *o = (http_te_t const *)src;  char *end = b + xtra;  b = msg_params_dup(&te->te_params, o->te_params, b, xtra);  MSG_STRING_DUP(b, te->te_extension, o->te_extension);  if (te->te_params) http_te_update(te);  assert(b <= end);  return b;}msg_hclass_t http_te_class[] =HTTP_HEADER_CLASS(te, "TE", te_params, append, te);/* ====================================================================== *//**@HTTP_HEADER http_trailer Trailer header. */#define http_trailer_d msg_list_d#define http_trailer_e msg_list_emsg_hclass_t http_trailer_class[] =HTTP_HEADER_CLASS_LIST(trailer, "Trailer", list_critical);/* ====================================================================== *//**@HTTP_HEADER http_transfer_encoding Transfer-Encoding header. */#define http_transfer_encoding_d msg_list_d#define http_transfer_encoding_e msg_list_emsg_hclass_t http_transfer_encoding_class[] =HTTP_HEADER_CLASS_LIST(transfer_encoding, "Transfer-Encoding", list_critical);/* ====================================================================== *//**@HTTP_HEADER http_upgrade Upgrade header. */#define http_upgrade_d msg_list_d#define http_upgrade_e msg_list_emsg_hclass_t http_upgrade_class[] =HTTP_HEADER_CLASS_LIST(upgrade, "Upgrade", list_critical);/* ====================================================================== *//**@HTTP_HEADER http_user_agent User-Agent header. */#define http_user_agent_d msg_generic_d#define http_user_agent_e msg_generic_emsg_hclass_t http_user_agent_class[] =HTTP_HEADER_CLASS_G(user_agent, "User-Agent", single);/* ====================================================================== *//**@HTTP_HEADER http_vary Vary header. */#define http_vary_d msg_list_d#define http_vary_e msg_list_emsg_hclass_t http_vary_class[] =HTTP_HEADER_CLASS_LIST(vary, "Vary", list);/* ====================================================================== *//**@HTTP_HEADER http_via Via header. * * @code *    Via =  "Via" ":" 1#( received-protocol received-by [ comment ] ) *    received-protocol = [ protocol-name "/" ] protocol-version *    protocol-name     = token *    protocol-version  = token *    received-by       = ( host [ ":" port ] ) | pseudonym *    pseudonym         = token * @endcode */int http_via_d(su_home_t *home,	       http_header_t *h,	       char *s,	       int slen){  http_header_t **hh = &h->sh_succ, *h0 = h;  http_via_t *v = h->sh_via;  assert(h && h->sh_class);  for (;*s;) {    /* Ignore empty entries (comma-whitespace) */    if (*s == ',') { *s++ = '\0'; skip_lws(&s); continue; }    if (!h) {      /* Allocate next header structure */      if (!(h = msg_header_alloc(home, h0->sh_class, 0)))	return -1;      *hh = h; h->sh_prev = hh; hh = &h->sh_succ;      v = v->v_next = h->sh_via;    }    if (http_version_d(&s, &v->v_version) == -1) /* Parse protocol version */      return -1;    if (msg_hostport_d(&s, &v->v_host, &v->v_port) == -1) /* Host (and port) */      return -1;    if (*s == '(' && msg_comment_d(&s, &v->v_comment) == -1) /* Comment */      return -1;    if (*s != '\0' && *s != ',') /* Extra before next header field? */      return -1;    h = NULL;  }  if (h)		/* List without valid header via */    return -1;  return 0;}int http_via_e(char b[], int bsiz, http_header_t const *h, int flags){  int const compact = MSG_IS_COMPACT(flags);  char *b0 = b, *end = b + bsiz;  http_via_t const *v = h->sh_via;  MSG_STRING_E(b, end, v->v_version);  MSG_CHAR_E(b, end, ' ');  MSG_STRING_E(b, end, v->v_host);  if (v->v_port) {    MSG_CHAR_E(b, end, ':');    MSG_STRING_E(b, end, v->v_port);  }  if (v->v_comment) {    if (!compact) MSG_CHAR_E(b, end, ' ');    MSG_CHAR_E(b, end, '(');    MSG_STRING_E(b, end, v->v_comment);    MSG_CHAR_E(b, end, ')');  }  MSG_TERM_E(b, end);  return b - b0;}static int http_via_dup_xtra(http_header_t const *h, int offset){  http_via_t const *v = h->sh_via;  offset += MSG_STRING_SIZE(v->v_version);  offset += MSG_STRING_SIZE(v->v_host);  offset += MSG_STRING_SIZE(v->v_port);  offset += MSG_STRING_SIZE(v->v_comment);  return offset;}/** Duplicate one http_via_t object */static char *http_via_dup_one(http_header_t *dst, http_header_t const *src,			      char *b, int xtra){  http_via_t *v = dst->sh_via;  http_via_t const *o = src->sh_via;  char *end = b + xtra;  MSG_STRING_DUP(b, v->v_version, o->v_version);  MSG_STRING_DUP(b, v->v_host, o->v_host);  MSG_STRING_DUP(b, v->v_port, o->v_port);  MSG_STRING_DUP(b, v->v_comment, o->v_comment);  assert(b <= end);  return b;}msg_hclass_t http_via_class[] =HTTP_HEADER_CLASS(via, "Via", v_common, prepend, via);/* ====================================================================== *//**@HTTP_HEADER http_warning Warning header. */#define http_warning_d msg_warning_d#define http_warning_e msg_warning_e#define http_warning_dup_xtra msg_warning_dup_xtra#define http_warning_dup_one msg_warning_dup_onemsg_hclass_t http_warning_class[] =  HTTP_HEADER_CLASS(warning, "Warning", w_common, append, warning);/* ====================================================================== *//**@HTTP_HEADER http_www_authenticate WWW-Authenticate header. */#define http_www_authenticate_d msg_auth_d#define http_www_authenticate_e msg_auth_emsg_hclass_t http_www_authenticate_class[] =HTTP_HEADER_CLASS_AUTH(www_authenticate, "WWW-Authenticate", single);/* ====================================================================== *//**@HTTP_HEADER http_error Erroneous headers. * * We use erroneous header object from @b msg module. *//* ====================================================================== *//**@HTTP_HEADER http_unknown Unknown headers. * * We use unknown header object from @b msg module. *//* ====================================================================== *//**@HTTP_HEADER http_separator Header separator. * * We use header separator object from @b msg module. *//* ====================================================================== *//**@HTTP_HEADER http_payload Message payload. * * We use message body object from @b msg module. */

⌨️ 快捷键说明

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