GoAhead 2.5
源码分析2012-6-3
目 录
goAhead WebServer在VxWorks上的移植 .................................................................................... 6
(一)编译源代码 ................................................................................................................... 6 (二)加入web页面文件。 .................................................................................................. 6 (三)如何把页面文件压缩进数组 ....................................................................................... 6 (四)启动web server服务 ................................................................................................... 7 Goahead在ArmLinux下的移植 .......................................................................................... 8 main.c(主程序) ............................................................................................................................ 8
int websvxmain(int argc, char **argv) ...................................................................................... 8 static int initWebs(int demo) ..................................................................................................... 8 static int aspTest(int eid, webs_t wp, int argc, char_t **argv) .................................................. 9 static void formTest(webs_t wp, char_t *path, char_t *query) ................................................. 9 static int websHomePageHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, .................. 9 static void websTermSigHandler(int signo) .............................................................................. 9 Um.c(用户管理) .......................................................................................................................... 9
umconfig.txt ............................................................................................................................ 10 int umOpen() ........................................................................................................................... 11 void umClose() ........................................................................................................................ 11 int umCommit(char_t *filename) ..................................................................................... 12 int umRestore(char_t *filename) ............................................................................................. 12 static int umEncryptString(char_t *textString) ....................................................................... 12 static char_t *umGetFirstRowData(char_t *tableName, char_t *columnName) .................... 12
static char_t *umGetNextRowData(char_t *tableName, char_t *columnName, ...................... char_t *keyLast) ...................................................................................................................... 12 int umAddUser(char_t *user, char_t *pass, char_t *group, bool_t prot, bool_t disabled)12 int umDeleteUser(char_t *user) ....................................................................................... 12 char_t *umGetFirstUser() ....................................................................................................... 12 char_t *umGetNextUser(char_t *userLast) ............................................................................ 13 bool_t umUserExists(char_t *user) ......................................................................................... 13 char_t *umGetUserPassword(char_t *user) ............................................................................ 13 int umSetUserPassword(char_t *user, char_t *pass) ........................................................ 13 char_t *umGetUserGroup(char_t *user) ................................................................................. 13 int umSetUserGroup(char_t *user, char_t *group) .......................................................... 13 bool_t umGetUserEnabled(char_t *user) ........................................................................... 13 int umSetUserEnabled(char_t *user, bool_t enabled) ...................................................... 13 bool_t umGetUserProtected(char_t *user) .............................................................................. 13 int umSetUserProtected(char_t *user, bool_t protect) ...................................................... 14 int umAddGroup(char_t *group, short priv, accessMeth_t am, bool_t prot, bool_t disabled) 14 int umDeleteGroup(char_t *group) ......................................................................................... 14 bool_t umGroupExists(char_t *group).................................................................................... 14 bool_t umGetGroupInUse(char_t *group) .............................................................................. 14 char_t *umGetFirstGroup() ..................................................................................................... 14
char_t *umGetNextGroup(char_t *groupLast) ....................................................................... 14 accessMeth_t umGetGroupAccessMethod(char_t *group) .................................................... 14 int umSetGroupAccessMethod(char_t *group, accessMeth_t am) .................................. 15 short umGetGroupPrivilege(char_t *group) ........................................................................... 15 int umSetGroupPrivilege(char_t *group, short privilege) ................................................ 15 bool_t umGetGroupEnabled(char_t *group) .......................................................................... 15 int umSetGroupEnabled(char_t *group, bool_t enabled) ........................................................ 15 bool_t umGetGroupProtected(char_t *group) ........................................................................ 15 int umSetGroupProtected(char_t *group, bool_t protect) ................................................ 15 int umAddAccessLimit(char_t *url, accessMeth_t am, short secure, char_t *group) ...... 15 int umDeleteAccessLimit(char_t *url) ............................................................................. 15 char_t *umGetFirstAccessLimit() ........................................................................................... 16 char_t *umGetNextAccessLimit(char_t *urlLast) .................................................................. 16 bool_t umAccessLimitExists(char_t *url) .......................................................................... 16 accessMeth_t umGetAccessLimitMethod(char_t *url) ........................................................... 16 int umSetAccessLimitMethod(char_t *url, accessMeth_t am) ........................................ 16 short umGetAccessLimitSecure(char_t *url) .......................................................................... 16 int umSetAccessLimitSecure(char_t *url, short secure) .................................................. 16 char_t *umGetAccessLimitGroup(char_t *url) ...................................................................... 17 int umSetAccessLimitGroup(char_t *url, char_t *group) ................................................ 17 char_t *umGetAccessLimit(char_t *url) ................................................................................. 17 accessMeth_t umGetAccessMethodForURL(char_t *url) ...................................................... 17 bool_t umUserCanAccessURL(char_t *user, char_t *url) ...................................................... 17 static bool_t umCheckName(char_t *name) ........................................................................... 17 Emfdb.c(文件数据库) .................................................................................................................... 19
数据库结构体 ......................................................................................................................... 19 int dbRegisterDBSchema(dbTable_t *pTableRegister) .......................................................... 20 int dbOpen(char_t *tablename, char_t *filename, int (*gettime)(int did), int flags) .............. 20 void dbClose(int did) .............................................................................................................. 20 void dbZero(int did) ................................................................................................................ 20 int dbSearchStr(int did, char_t *tablename, char_t *colName, char_t *value, int flags) ........ 20 int dbAddRow(int did, char_t *tablename) ............................................................................. 20 int dbDeleteRow(int did, char_t *tablename, int row) ............................................................ 20 int dbSetTableNrow(int did, char_t *tablename, int nNewRows) .......................................... 21 int dbGetTableNrow(int did, char_t *tablename) .................................................................... 21 int dbReadInt(int did, char_t *table, char_t *column, int row, int *returnValue).................... 21 int dbReadStr(int did, char_t *table, char_t *column, int row, char_t **returnValue) ............ 21 int dbWriteInt(int did, char_t *table, char_t *column, int row, int iData) ............................... 21 int dbWriteStr(int did, char_t *table, char_t *column, int row, char_t *s) .............................. 21 static int dbWriteKeyValue(int fd, char_t *key, char_t *value) .............................................. 21 int dbSave(int did, char_t *filename, int flags) ....................................................................... 22 static int crack(char_t *buf, char_t **key, char_t **val) ........................................................ 22 int dbLoad(int did, char_t *filename, int flags) ...................................................................... 22 int dbGetTableId(int did, char_t *tablename) ......................................................................... 22
char_t *dbGetTableName(int did, int tid) ............................................................................... 22 static char_t *trim(char_t *str) ................................................................................................ 22 static int GetColumnIndex(int tid, char_t *colName) ............................................................. 22 void basicSetProductDir(char_t *proddir) .............................................................................. 23 char_t *basicGetProductDir() ................................................................................................. 23 Umui.c(用户管理实例) .................................................................................................................. 23
void formDefineUserMgmt(void) ........................................................................................... 23 static void formAddUser(webs_t wp, char_t *path, char_t *query) ....................................... 23 static void formDeleteUser(webs_t wp, char_t *path, char_t *query) .................................... 23 static void formDisplayUser(webs_t wp, char_t *path, char_t *query) .................................. 23 static int aspGenerateUserList(int eid, webs_t wp, int argc, char_t **argv) ........................... 24 static void formAddGroup(webs_t wp, char_t *path, char_t *query) ..................................... 24 static void formDeleteGroup(webs_t wp, char_t *path, char_t *query) ................................. 24 static int aspGenerateGroupList(int eid, webs_t wp, int argc, char_t **argv) ........................ 24 static void formAddAccessLimit(webs_t wp, char_t *path, char_t *query) ........................... 24 static void formDeleteAccessLimit(webs_t wp, char_t *path, char_t *query) ....................... 24 static int aspGenerateAccessLimitList(int eid, webs_t wp, int argc, char_t **argv) .............. 24 static int aspGenerateAccessMethodList(int eid, webs_t wp, int argc, char_t **argv) ........... 25 static int aspGeneratePrivilegeList(int eid, webs_t wp, int argc, char_t **argv) .................... 25 static void formSaveUserManagement(webs_t wp, char_t *path, char_t *query) .................. 25 static void formLoadUserManagement(webs_t wp, char_t *path, char_t *query) ................. 25 static void websMsgStart(webs_t wp) .............................................................................. 25 static void websMsgEnd(webs_t wp) ............................................................................... 25 块分配模块(h.c和balloc.c) ............................................................................................... 25
int hAlloc(void ***map) ......................................................................................................... 25 int hFree(void ***map, int handle) ......................................................................................... 26 int hAllocEntry(void ***list, int *max, int size) ..................................................................... 26 int bopen(void *buf, int bufsize, int flags) .............................................................................. 26 void *balloc(B_ARGS_DEC, int size).................................................................................... 26 void bfree(B_ARGS_DEC, void *mp) ................................................................................... 26 void bfreeSafe(B_ARGS_DEC, void *mp) ............................................................................ 26 char *bstrdupA(B_ARGS_DEC, char *s) ............................................................................... 27 char_t *bstrdup(B_ARGS_DEC, char_t *s) ........................................................................... 27 void *brealloc(B_ARGS_DEC, void *mp, int newsize) ......................................................... 27 static int ballocGetSize(int size, int *q) .................................................................................. 27 static void bFillBlock(void *buf, int bufsize) ......................................................................... 27 void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...)) ....................................... 27 static int bStatsFileSort(const void *cp1, const void *cp2) .................................................... 27 static void bStatsAlloc(B_ARGS_DEC, void *ptr, int q, int size) .......................................... 28 static void bStatsFree(B_ARGS_DEC, void *ptr, int q, int size) ............................................ 28 static void bstatsWrite(int handle, char_t *fmt, ...) ................................................................. 28 static void verifyUsedBlock(bType *bp, int q) ....................................................................... 28 static void verifyFreeBlock(bType *bp, int q) ........................................................................ 28 void verifyBallocSpace() ........................................................................................................ 28
char_t *bstrdupNoBalloc(char_t *s) ....................................................................................... 28 goAhead实现文件上传 ............................................................................................................ 29
1. 说明 ................................................................................................................................... 29 2. goAhead实现文件上传的方法 ..................................................................................... 29
2.1 实现原理 ................................................................................................................ 29 2.2 前端设计 ................................................................................................................ 29 2.3 goAhead增加文件上传功能 .............................................................................. 30 2.4 把上传文件写到存储系统 .................................................................................... 30
cgi.c(cgi) .................................................................................................................................... 31
int websCgiHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t* query) ................................................................................................... 31 void websCgiGatherOutput (cgiRec *cgip) ............................................................................ 31 void websCgiCleanup() ........................................................................................................... 31 char_t *websGetCgiCommName() ......................................................................................... 31 int websLaunchCgiProc(char_t *cgiPath, char_t **argp, char_t **envp, char_t *stdIn, char_t *stdOut) ................................................................................................................................... 31 static void vxWebsCgiEntry(void *entryAddr(int argc, char_t **argv), char_t **argp, char_t **envp, char_t *stdIn, char_t *stdOut) ................................................................................... 32 int websCheckCgiProc(int handle) ......................................................................................... 32 form.c(form请求处理) ................................................................................................................... 32
int websFormHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t *query) ................................................................................................... 32 int websFormDefine(char_t *name, void (*fn)(webs_t wp, char_t *path, char_t *query)) .... 32 void websFormOpen() ............................................................................................................ 32 void websFormClose() ............................................................................................................ 33 void websHeader(webs_t wp) ................................................................................................. 33 void websMsgHeader(webs_t wp) .......................................................................................... 33 void websFooter(webs_t wp) .................................................................................................. 33