📄 dynhndlr.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 + -