想要实现让别人连上自己热点,就弹出定制化的页面,可以用wifidog来实现
这段时间把wifidog分析一篇,也终于集成到盒子上面去了,写了个比较粗糙的分析文档
框架
WIFIDOG整个框架分5部分:
1. Libhttpd 开源库,用来当做小型的webServer以及与authserver进行http通信
2. PING 心跳检测模块
3. Wdctl 调试模块
4. Timeout_checkt 超时检测与流量统计模块
5. Webserver 用来与链接进来的AP通信
Wifidog在启动时会启动上面4个线程进行守护
网关协议(ping)
Wifidog将ping协议作为心跳机制向认证服务器发送当前状态信息,过程如下:
Ping线程的创建:
/* Start heartbeat thread */
result =pthread_create(&tid_ping, NULL, (void *)thread_ping, NULL);
if (result != 0) {
debug(LOG_ERR, "FATAL: Failed tocreate a new thread (ping) - exiting");
termination_handler(0);
}
pthread_detach(tid_ping);
上面的过程创建子线程后,将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。并且是非阻塞的。
Thread_ping实现:
void
thread_ping(void *arg)
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t cond_mutex =PTHREAD_MUTEX_INITIALIZER;
struct timespec timeout;
while (1) {
/* Make sure wecheck the servers at the very begining */
debug(LOG_DEBUG,"Running ping()");
ping();
/* Sleep for config.checkinterval seconds... */
timeout.tv_sec= time(NULL) + config_get_config()->checkinterval;
timeout.tv_nsec= 0;