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

📄 cgistub.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
字号:
//-< CGISTUB.CXX >---------------------------------------------------*--------*// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *// (Main Memory Database Management System)                          *   /\|  *//                                                                   *  /  \  *//                          Created:     27-Mar-99    K.A. Knizhnik  * / [] \ *//                          Last update: 30-Jul-99    K.A. Knizhnik  * GARRET *//-------------------------------------------------------------------*--------*// Stub for CGI scripts //-------------------------------------------------------------------*--------*#include "stdtp.h"#include "sockio.h"USE_FASTDB_NAMESPACEvoid message(char const* msg){    printf("Content-type: text/html\r\n\r\n"           "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">"           "<HTML><HEAD><TITLE>CGI STUB message</TITLE></HEAD><BODY>"           "<H1><FONT COLOR=\"#FF0000\">%s</FONT></H1></BODY></HTML>", msg);    exit(0);}int main() {     char*  request = getenv("QUERY_STRING");    char*  buf;    size_t length;    size_t buf_size;    char* host = getenv("HTTP_HOST");    char* script = getenv("SCRIPT_NAME");    char* peer = getenv("REMOTE_ADDR");    assert(host != NULL);    assert(script != NULL);    if (request == NULL || *request == '\0') {         char* length_str = getenv("CONTENT_LENGTH");        if (length_str == NULL || sscanf(length_str, "%d", &length) != 1) {             message("Failed to receive data using POST method");        }        buf_size = length + 14 + 6 + strlen(host) + strlen(script) + strlen(peer);        buf = new char[buf_size+1];        if (fread(buf, 1, length, stdin) != length) {             message("Failed to read data using POST method");        }    } else {        length = strlen(request);        buf_size = length + 14 + 6 + strlen(host) + strlen(script) + strlen(peer);        buf = new char[buf_size+1];        memcpy(buf, request, length);    }    if (length <= 7 || strncmp(buf, "socket=", 7) != 0) {        message("No socket field specified");    }    sprintf(buf+length, "&stub=http://%s%s&peer=%s&", host, script, peer);    char* addr = buf + 7;    char *src = addr, *dst = addr;    while (*src != '&') {         if (*src == '+') {            *dst++ = ' ';            src += 1;        } else if (*src == '%') {             *dst++ = ((src[1] >= 'A' ? src[1] - 'A'+ 10 : src[1] - '0') << 4) |                     (src[2] >= 'A' ? src[2] - 'A'+ 10 : src[2] - '0');            src += 3;        } else {             *dst++ = *src++;        }    }    *dst = '\0';    socket_t* s = socket_t::connect(addr);    if (s == NULL) {         message("Failed to connect to application");    }    *(int*)buf = buf_size;    buf[4] = src - buf - 3;    if (!s->write(buf, buf_size)) {         message("Failed to send query to application");    }    if (s->read(buf, 4, 4) != 4) {         message("Failed to read reply length");    }    nat4 reply_length = *(int4*)buf;    if (reply_length > buf_size) {         delete[] buf;        buf = new char[reply_length];    }     int size = reply_length - sizeof(reply_length);    if (s->read(buf, size, size) != size) {         message("Failed to read reply");    }    fwrite(buf, 1, reply_length - sizeof(reply_length), stdout);    delete[] buf;    s->close();    return 0;}

⌨️ 快捷键说明

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