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

📄 request.c

📁 resinweb服务器源文件
💻 C
字号:
/* * Copyright (c) 1999 Caucho Technology.  All rights reserved. * * Caucho Technology permits redistribution, modification and use * of this file in source and binary form ("the Software") under the * Caucho Developer Source License ("the License").  In particular, the following * conditions must be met: * * 1. Each copy or derived work of the Software must preserve the copyright *    notice and this notice unmodified. * * 2. Redistributions of the Software in source or binary form must include  *    an unmodified copy of the License, normally in a plain ASCII text * * 3. The names "Resin" or "Caucho" are trademarks of Caucho Technology and *    may not be used to endorse products derived from this software. *    "Resin" or "Caucho" may not appear in the names of products derived *    from this software. * * 4. Caucho Technology requests that attribution be given to Resin *    in any manner possible.  We suggest using the "Resin Powered" *    button or creating a "powered by Resin(tm)" link to *    http://www.caucho.com for each page served by Resin. * * This Software is provided "AS IS," without a warranty of any kind.  * ALL EXPRESS OR IMPLIED REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * CAUCHO TECHNOLOGY AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES * SUFFERED BY LICENSEE OR ANY THIRD PARTY AS A RESULT OF USING OR * DISTRIBUTING SOFTWARE. IN NO EVENT WILL CAUCHO OR ITS LICENSORS BE LIABLE * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR * INABILITY TO USE SOFTWARE, EVEN IF HE HAS BEEN ADVISED OF THE POSSIBILITY * OF SUCH DAMAGES. * * @author Scott Ferguson * * $Id: request.c,v 1.2 2000/10/13 01:50:38 ferg Exp $ */#include <stdlib.h>#include <errno.h>#include <ctype.h>#include "rws.h"intrws_scan_request(stream_t *stream, request_t *request){  int ch;  int i;  while (isspace(ch = rws_read_byte(stream))) {  }  i = 0;  request->method = rws_pin_alloc(request->pool, SMALL_LENGTH);  for (;       ch > 0 && ! isspace(ch) && i < SMALL_LENGTH;       ch = rws_read_byte(stream)) {    request->method[i++] = ch;  }  request->method[i] = 0;  rws_free_pin(request->pool, i + 1);  for (; isspace(ch); ch = rws_read_byte(stream)) {  }  i = 0;  request->uri = rws_pin_alloc(request->pool, SMALL_LENGTH);  for (;       ch > 0 && ! isspace(ch) && i < SMALL_LENGTH;       ch = rws_read_byte(stream)) {    if (ch != '?' || request->query)      request->uri[i++] = ch;    else {      request->uri[i++] = 0;      request->query = &request->uri[i];    }  }  request->uri[i] = 0;  rws_free_pin(request->pool, i + 1);  for (; ch == ' ' || ch == '\t'; ch = rws_read_byte(stream)) {  }  i = 0;  request->protocol = rws_pin_alloc(request->pool, SMALL_LENGTH);  for (;       ch > 0 && ! isspace(ch) && i < SMALL_LENGTH;       ch = rws_read_byte(stream)) {    request->protocol[i++] = ch;  }  request->protocol[i] = 0;  rws_free_pin(request->pool, i + 1);    for (; ch > 0 && ch != '\n'; ch = rws_read_byte(stream)) {  }  return 1;}  intrws_scan_headers(stream_t *stream, request_t *request){  pool_t *pool = request->pool;  int ch;  int i;  while ((ch = rws_read_byte(stream)) >= 0) {    header_t *header;    char *key;    char *value;          if (ch == '\n') {      return 1;    }    else if (ch == '\r') {      /* should be '\n' */      ch = rws_read_byte(stream);      return 1;     }    key = rws_pin_alloc(pool, SMALL_LENGTH);    i = 0;    for (;	 ch >= 0 && ! isspace(ch) && ch != ':';  	 ch = rws_read_byte(stream)) {      key[i++] = ch;    }    key[i++] = 0;    rws_free_pin(pool, i);        if (ch != ':')      return 0;    while ((ch = rws_read_byte(stream)) >= 0 && (ch == ' ' || ch == '\t')) {    }            value = rws_pin_alloc(pool, SMALL_LENGTH);    i = 0;    for (;	 ch >= 0 && ch != '\n';	 ch = rws_read_byte(stream)) {      value[i++] = ch;    }    if (value[i] == '\r')      value[i] = 0;    else      value[i++] = 0;        rws_free_pin(pool, i);    header = rws_malloc(pool, sizeof(header_t));    header->next = request->headers;        request->headers = header;    header->key = key;    header->value = value;    return 1;  }}

⌨️ 快捷键说明

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