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

📄 dynhndlr.c

📁 C语言实现的一个简易的HTTP服务器源代码
💻 C
字号:
/* *  Embedded HTTP Server Dynamic Handler Utilities * *  ./software/ch7/emhttps/dynhndlr.c * *  mtj@cogitollc.com * */#include <stdio.h>#include <string.h>#include <sys/socket.h>#include "filehdlr.h"static int init = 0;#define MAX_DYNAMIC_HANDLERS	5struct dynamicHandlerStructure {  char fileName[80];  char *(*pfunc)();} dynamicHandler[MAX_DYNAMIC_HANDLERS];/*---------------------------------------------------------------------------- * initHandlers() - Initialize the dynamic handler array        *--------------------------------------------------------------------------*/void initHandlers(){  int i;  for (i = 0 ; i < MAX_DYNAMIC_HANDLERS ; i++) {    dynamicHandler[i].fileName[0] = 0;    dynamicHandler[i].pfunc = NULL;  }}/*---------------------------------------------------------------------------- * addDynamicHandler() - Add a new handler to the dynamic handler array *--------------------------------------------------------------------------*/int addDynamicHandler(char *name, char *(*function)()) {  int i;  if (!init) {    initHandlers();    init=1;  }  /* First, ensure that the 'name' does not exist in the current list */  for (i = 0 ; i < MAX_DYNAMIC_HANDLERS ; i++) {    if (dynamicHandler[i].fileName[0] != 0) {      if (!strcmp(name, dynamicHandler[i].fileName)) {        return(-1);      }    }  }  /* Next, look for an empty slot */  for (i = 0 ; i < MAX_DYNAMIC_HANDLERS ; i++) {    if (dynamicHandler[i].fileName[0] == 0) {      strncpy(dynamicHandler[i].fileName, name, 80);      dynamicHandler[i].pfunc = function;    }  }  return(0); }/*---------------------------------------------------------------------------- * callDynamicHandler() - Call the dynamic handler for a particular entry *--------------------------------------------------------------------------*/int callDynamicHandler(char *name, char *content){  int j, found=-1;  if (!init) {    initHandlers();    init=1;  }  for (j = 0 ; j < MAX_DYNAMIC_HANDLERS ; j++) {    if (!strcmp(name, dynamicHandler[j].fileName)) {      dynamicHandler[j].pfunc(content);      found = 0;      break;    }  }  return found;}int parseVariable( char *msgbody, char *variable, char *value){  int i = 0;  /* First, find the variable in the message body */  msgbody = strstr(msgbody, variable);  if (msgbody == NULL) return -1;  /* Skip the variable and the '=' */  msgbody += strlen(variable) + 1;  /* Finally, copy the value into the value string */  while (msgbody[i] != '&') {    value[i] = msgbody[i];    i++;  }  value[i] = 0;  return 0;}/* *  Copyright (c) 2002 Charles River Media.  All rights reserved. *  *  Redistribution and use in source and binary forms, with or  *  without modification, is hereby granted without fee provided  *  that the following conditions are met: *  *    1.  Redistributions of source code must retain the above  *        copyright notice, this list of conditions and the  *        following disclaimer. *    2.  Redistributions in binary form must reproduce the above *        copyright notice, this list of conditions and the  *        following disclaimer in the documentation and/or other  *        materials provided with the distribution. *    3.  Neither the name of Charles River Media nor the names of  *        its contributors may be used to endorse or promote products  *        derived from this software without specific prior  *        written permission. *  * THIS SOFTWARE IS PROVIDED BY CHARLES RIVER MEDIA AND CONTRIBUTERS  * 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CHARLES * RIVER MEDIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  * INCIDENTAL, SPECIAL, EXEMPLARAY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE. */

⌨️ 快捷键说明

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