加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

goahead 流程

发布时间:2020-12-13 22:43:28 所属栏目:Linux 来源:网络整理
导读:原文:https://blog.csdn.net/qq_32419007/article/details/80756643? 1.全局变量 Web服务器的根目录 ????static char_t??????? *rootWeb= T("/etc_ro/web"); 端口号 ????static int???????????????????? port= 80; 尝试次数 ????static int???????????????


原文:https://blog.csdn.net/qq_32419007/article/details/80756643?

1.全局变量

Web服务器的根目录

????static char_t??????? *rootWeb= T("/etc_ro/web");

端口号

????static int???????????????????? port= 80;

尝试次数

????static int???????????????????? retries= 5;

?

2.initWebs()
1.用到的全局变量的初始化,打开sym hash table、打开用户管理,注册UM tables

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()
1.?????(flags& WEBS_LOCAL_REQUEST) && (debugSecurity == 0) 可以访问

2.?????am ==AM_NONE 输出404,page not found

3.?????用户名不存在 输出401(身份验证)

????????判断用户是否能访问该路径,不能则输出403(服务器拒绝)

????????获取用户密码,不匹配则输出401

????????获取摘要认证字符串,不匹配则输出401

4.认证方法不为AM_FULL,输出401

?

4.socketReady()
?????? socketReady函数检查已建立连接的socket中是否有以下事件,如果检查到其中一个,返回1,否则返回0

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()
函数首先把各个sock感兴趣的事件(sp->handlerMask)注册给三个集合(读、写、例外),然后调用select系统调用,更新各个sock的sp->currentEvent表示各个sock的当前状态
这两个函数在sockGen.c中实现,主要操作的数据是socket_t变量socketList中的handlerMask和currentEvents,socketList在sock.c中定义并主要在该文件中socketAlloc,socketFree,socketPrt三个函数中维护

?

6.socketProcess()
1.socketDoEvent函数首先对socket的当前事件进行检查,如果是读事件并且是服务器监听socket上的读事件,说明有新连接到来,调用socketAccept()欢迎新连接,并使currentEvents为0,然后返回。

2.如果当前不是读事件但是该socket原感兴趣的读事件并socket缓存中确有数据可读,那就置currentEvents为可读

3.如果当前是写事件,那就看看该socket的写缓存中有没有数据,如果有并且有SOCKET_FLUSHING标志就全部输出该写缓存,这是为新的写事件做清理

4.调用事件处理函数sp-handler,该函数指针分别在两个地方进行初始化

(1)???在wbsDefaulthandler()函数中注册写事件

(2)???在websAccept()函数中注册读事件

5.把currentEvent置为0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读