goahead 流程
1.全局变量 Web服务器的根目录 ????static char_t??????? *rootWeb= T("/etc_ro/web"); 端口号 ????static int???????????????????? port= 80; 尝试次数 ????static int???????????????????? retries= 5; ? 2.initWebs() 2.设置UM信息 3.设置网页的根目录 ????sprintf(webdir,"%s",rootWeb); ????websSetDefaultDir(webdir) 4.设置默认访问页 ????websSetDefaultPage(T("default.asp")); 5.Web服务器端口和重试次数 ????websOpenServer(port,retries); ? 6.定义安全性处理程序,表单处理程序,默认网页处理程序 ????websUrlHandlerDefine(T(""),NULL,websSecurityHandler, ????????????? ?????? ????WEBS_HANDLER_FIRST); ????websUrlHandlerDefine(T("/goform"),websFormHandler,0); ????websUrlHandlerDefine(T("/cgi-bin"),websCgiHandler,0); ????websUrlHandlerDefine(T(""),websDefaultHandler, ????????????? ????WEBS_HANDLER_LAST); ? 7.定义自己的功能 formDefineDvbs(); ?????? formDefineUtilities(); ?????? formDefineInternet(); #if definedCONFIG_RALINKAPP_SWQOS ?????? formDefineQoS(); #endif #if definedCONFIG_RALINKAPP_HWQOS ?????? formDefineQoS(); #endif #if (definedCONFIG_USB) || (defined CONFIG_MMC) ?????? formDefineUSB(); #endif #if definedCONFIG_RALINKAPP_MPLAYER ?????? formDefineMedia(); #endif ?????? formDefineWireless(); #if defined(RTDEV_SUPPORT) ?????? formDefineInic(); #elif defined(CONFIG_RT2561_AP) || defined (CONFIG_RT2561_AP_MODULE) ?????? formDefineLegacy(); #endif #if definedCONFIG_RT2860V2_STA || defined CONFIG_RT2860V2_STA_MODULE || ?????? defined (CONFIG_RLT_STA_SUPPORT) ?????? formDefineStation(); #endif ?????? formDefineFirewall(); ?????? formDefineManagement(); ? 8.为默认主页创建一个处理程序 ????websUrlHandlerDefine(T("/"),websHomePageHandler,0); ? 3. websSecurityHandler() 2.?????am ==AM_NONE 输出404,page not found 3.?????用户名不存在 输出401(身份验证) ????????判断用户是否能访问该路径,不能则输出403(服务器拒绝) ????????获取用户密码,不匹配则输出401 ????????获取摘要认证字符串,不匹配则输出401 4.认证方法不为AM_FULL,输出401 ? 4.socketReady() 1.根据传入的sid遍历socketList(sid<0) 2.sp->flags & SOCKET_CONNRESET 该socket的flag标志为SOCKET_CONNRESET(uemf.h),则调用函数socketCloseConnection关闭socket连接,然后返回0 3.sp->currentEvents & ?sp->handlerMask 如果该socket当前事件和他要处理的事件相同,返回1,告诉调用socketReady的函数有socket准备好被处理了 4.sp->handlerMask & SOCKET_READABLE &&socketInputBuffered(sid) > 0 如果该socket要处理的事件是SOCKET_READABLE并且该socket的缓存中有可读的数据,则调用socketSelect函数,然后返回1,告诉调用socketReady的函数有socket准备好被处理了 ? 5.???socketSelect() ? 6.socketProcess() 2.如果当前不是读事件但是该socket原感兴趣的读事件并socket缓存中确有数据可读,那就置currentEvents为可读 3.如果当前是写事件,那就看看该socket的写缓存中有没有数据,如果有并且有SOCKET_FLUSHING标志就全部输出该写缓存,这是为新的写事件做清理 4.调用事件处理函数sp-handler,该函数指针分别在两个地方进行初始化 (1)???在wbsDefaulthandler()函数中注册写事件 (2)???在websAccept()函数中注册读事件 5.把currentEvent置为0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |