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

📄 cgi.c

📁 计费部分源程序。我认为该软件极好
💻 C
📖 第 1 页 / 共 3 页
字号:
int cgiHeaderLocation(char *redirectUrl)
{
  if (cgiHeaderFlag++)
    return 0;
  
  printf("Location: %s\n\n", redirectUrl);

  return 1;
}

/******************************************************************************
**
** Function  cgiHeaderStatus
**
** Purpose   Return an error status
**
** History   Date     Author Modification
**           04-03-96 JEM    First Draft
**
******************************************************************************/

int cgiHeaderStatus(int statusCode, char *statusReason, char *statusMesg)
{
  if (cgiHeaderFlag++)
    return 0;
    
  printf("Content-type: text/html\n");
  printf("Status: %i %s\n\n", statusCode, statusReason);

  cgiPrintf("<HTML>");
  cgiPrintf("<HEAD>");
  cgiPrintf("<TITLE>%i %s</TITLE>", statusCode, statusReason);
  cgiPrintf("</HEAD>");
  cgiPrintf("<BODY>");
  cgiPrintf("<H2>%i %s</H2>", statusCode, statusReason);
  cgiPrintf("<H3>%s</H3>", statusMesg);
  cgiPrintf("</BODY>");
  cgiPrintf("</HTML>");

  return 1;
}

/******************************************************************************
**
** Function  cgiHeaderNonParse
**
** Purpose   Indicate that the document is to be sent directly to the client
**           with minimal buffering.
**
** History   Date     Author Modification
**           07-03-96 JEM    First Draft
**
******************************************************************************/

int cgiHeaderNonParse(int statusCode, char *statusMesg, char *mimeType)
{
  if (cgiHeaderFlag++)
    return 0;
    
  printf("%s %i %s\n", 
	 *cgiEnv.serverProtocol?cgiEnv.serverProtocol:"unknown", 
	 statusCode, statusMesg);
  printf("Server: %s\n", 
	 *cgiEnv.serverSoftware?cgiEnv.serverSoftware:"unknown");
  printf("Content-type: %s\n\n", mimeType);

  return 1;
}

/******************************************************************************
**
** Function  cgiHtmlHead
**
** Purpose   Essentially a wrapper for the initialisation of a HTML document
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**
******************************************************************************/

int cgiHtmlHead(char *title)
{
  if (!cgiHeaderFlag)
    return 0;

  if (cgiHtmlFlag++)
    return 0;

  cgiPrintf("<HTML>");
  cgiPrintf("<HEAD>");
  cgiPrintf("<TITLE>%s</TITLE>", title);
  cgiPrintf("</HEAD>");
  cgiPrintf("<BODY>");

  return 1;
}

/******************************************************************************
**
** Function  cgiHtmlTail
**
** Purpose   Finalises a HTML document
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**
******************************************************************************/

int cgiHtmlTail()
{
  if (!cgiHeaderFlag)
    return 0;

  if (!cgiHtmlFlag)
    return 0;

  cgiPrintf("</BODY>");
  cgiPrintf("</HTML>");

  return 1;
}

/******************************************************************************
**
** Function  cgiImageOk
**
** Purpose   Determines the browser's ability to view images
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**
******************************************************************************/

int cgiImageOk()
{
  return (!strstr(cgiEnv.httpAccept, "image"));
}

/******************************************************************************
**
** Function  cgiLoad
**
** Purpose   Copy an external file into the current document
**
** History   Date     Author Modification
**           01-04-96 JEM    First Draft
**
******************************************************************************/

int cgiLoad(char *file)
{
  FILE *fp;
  int   c;

  if (!(fp = fopen(file, "r")))
    return 0;

  while ((c=getc(fp)) != EOF)
    putchar(c);

  fflush(stdout);

  fclose(fp);

  return 1;
}

/******************************************************************************
**
** Function  cgiPrintf
**
** Purpose   Same as printf, but suffixes a NL char to help keep script tidy,
**           and flushes output.
**
** History   Date     Author Modification
**           04-03-96 JEM    First Draft
**
******************************************************************************/

int cgiPrintf(char *fmt, ...)
{
  va_list argp;

  if (!cgiHeaderFlag)
    return 0;

  va_start(argp, (void)fmt);
  vfprintf(stdout, fmt, argp);
  va_end(argp);

  fprintf(stdout, "\n");

  fflush(stdout);

  return 1;
}

/******************************************************************************
** Local functions
******************************************************************************/

/******************************************************************************
**
** Function  cgiStrdup
**
** Purpose   Equivalent to non_ANSI C function strdup().
**
** History   Date     Author Modification
**           11-02-97 JEM    First Draft
**
******************************************************************************/

static char *cgiStrdup(char *s)
{
  char *m;

  if (!s)
    return NULL;
 
  if (!(m = (char*)malloc(strlen(s)+1)))
    return NULL;

  return strcpy(m, s);
}

/******************************************************************************
**
** Function  cgiDebugGetStr
**
** Purpose   Used by cgiDebugEnvLoad to get an environment string
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**           16-04-96 JEM    Return empty string, not NULL, on malloc fail
**
******************************************************************************/

static char *cgiDebugGetStr(FILE *fp)
{
  char *s;
  long  la, lb;

  la = ftell(fp);
  while (getc(fp)!='\n')
    ;
  lb = ftell(fp);

  if (!(s = (char*)malloc(lb-la)))
    return "";

  fseek(fp, la, 0);
  fgets(s, (lb-la), fp);
  fseek(fp, lb, 0);

  return s;
}

/******************************************************************************
**
** Function  cgiDebugGetInt
**
** Purpose   Used by cgiDebugEnvLoad to get an environment integer
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**
******************************************************************************/

static int cgiDebugGetInt(FILE *fp)
{
  char *s = cgiDebugGetStr(fp);
  int   i = atoi(s);

  free(s);
  
  return i;
}

/******************************************************************************
**
** Function  cgiDebugEnvLoad
**
** Purpose   Load a debug environment
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**
******************************************************************************/

static int cgiDebugEnvLoad(char *file)
{
  FILE *fp;
  int   cnt;

  if (!(fp = fopen(file, "rb")))
    return 0;

  /* --- command-line arguments --- */

  cgiArgc = cgiDebugGetInt(fp);

  if (!(cgiArgv = (char**)malloc(cgiArgc*sizeof(char*))))
    return 0;

  for (cnt=0; cnt<cgiArgc; cnt++)
    cgiArgv[cnt] = cgiDebugGetStr(fp);

  /* --- standard input --- */

  cgiStdin = cgiDebugGetStr(fp);

  /* --- CGI environment variables --- */

  cgiEnv.authType         = cgiDebugGetStr(fp);
  cgiEnv.contentLength    = cgiDebugGetInt(fp);
  cgiEnv.contentType      = cgiDebugGetStr(fp);
  cgiEnv.gatewayInterface = cgiDebugGetStr(fp);
  cgiEnv.httpAccept       = cgiDebugGetStr(fp);
  cgiEnv.httpHost         = cgiDebugGetStr(fp);
  cgiEnv.httpReferer      = cgiDebugGetStr(fp);
  cgiEnv.httpUserAgent    = cgiDebugGetStr(fp);
  cgiEnv.pathInfo         = cgiDebugGetStr(fp);
  cgiEnv.pathTranslated   = cgiDebugGetStr(fp);
  cgiEnv.queryString      = cgiDebugGetStr(fp);
  cgiEnv.remoteAddr       = cgiDebugGetStr(fp);
  cgiEnv.remoteHost       = cgiDebugGetStr(fp);
  cgiEnv.remoteIdent      = cgiDebugGetStr(fp);
  cgiEnv.remoteUser       = cgiDebugGetStr(fp);
  cgiEnv.requestMethod    = cgiDebugGetStr(fp);
  cgiEnv.scriptName       = cgiDebugGetStr(fp);
  cgiEnv.serverName       = cgiDebugGetStr(fp);
  cgiEnv.serverPort       = cgiDebugGetStr(fp);
  cgiEnv.serverProtocol   = cgiDebugGetStr(fp);
  cgiEnv.serverSoftware   = cgiDebugGetStr(fp);

  fclose(fp);

  return 1;
}

/******************************************************************************
**
** Function  cgiDebugEnvSave
**
** Purpose   Save a debug environment
**
** History   Date     Author Modification
**           29-03-96 JEM    First Draft
**
******************************************************************************/

static int cgiDebugEnvSave(char *file)
{
  FILE *fp;
  int   cnt;

  if (!(fp = fopen(file, "wb")))
    return 0;

  /* --- command-line arguments --- */

  fprintf(fp, "%i\n", cgiArgc);

  for (cnt=0; cnt<cgiArgc; cnt++)
    fprintf(fp, "%s\n", cgiArgv[cnt]);
    
  /* --- standard input --- */

  fprintf(fp, "%s\n", cgiStdin);

  /* --- CGI environment variables --- */

  fprintf(fp, "%s\n", cgiEnv.authType);
  fprintf(fp, "%i\n", cgiEnv.contentLength);
  fprintf(fp, "%s\n", cgiEnv.contentType);
  fprintf(fp, "%s\n", cgiEnv.gatewayInterface);
  fprintf(fp, "%s\n", cgiEnv.httpAccept);
  fprintf(fp, "%s\n", cgiEnv.httpHost);
  fprintf(fp, "%s\n", cgiEnv.httpReferer);
  fprintf(fp, "%s\n", cgiEnv.httpUserAgent);
  fprintf(fp, "%s\n", cgiEnv.pathInfo);
  fprintf(fp, "%s\n", cgiEnv.pathTranslated);
  fprintf(fp, "%s\n", cgiEnv.queryString);
  fprintf(fp, "%s\n", cgiEnv.remoteAddr);
  fprintf(fp, "%s\n", cgiEnv.remoteHost);
  fprintf(fp, "%s\n", cgiEnv.remoteIdent);
  fprintf(fp, "%s\n", cgiEnv.remoteUser);
  fprintf(fp, "%s\n", cgiEnv.requestMethod);

⌨️ 快捷键说明

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