Thttpd源程序解析13 libhttpd.c文件解析-cgi文件

Thttpd源程序解析13 libhttpd.c文件解析-cgi文件

libhttpd.c文件是包含Thttpd服务器处理HTTP请求的相关函数是整个Thttpd的核心。下面将描述此文件中各个函数的作用。

static void check_options( void )

如果即定义了TILDE_MAP_1也定义了TILDE_MAP_2将在日志文件中输出相关信息,并退出程序。

static void free_httpd_server( httpd_server* hs )

此函数用户释放服务器创建时申请的各种资源。

httpd_server* httpd_initialize(

char* hostname, httpd_sockaddr* sa4P, httpd_sockaddr* sa6P,

unsigned short port, char* cgi_pattern, int cgi_limit, char* charset,

char* p3p, int max_age, char* cwd, int no_log, FILE* logfp,

int no_symlink_check, int vhost, int global_passwd, char* url_pattern,

char* local_pattern, int no_empty_referrers )

此函数用于根据传入的数据初始化服务器的相关参数。

static int initialize_listen_socket( httpd_sockaddr* saP )

此函数根据传入的IP地址和类型监听此IP地址的端口

void httpd_set_logfp( httpd_server* hs, FILE* logfp )

此函数用于设置http服务器的日志文件的文件描述符

void httpd_terminate( httpd_server* hs )

此函数用于关闭服务器,首先设置服务器不再监听,关闭服务器的日志文件,释放服务器创建时申请的各种资源。

void httpd_unlisten( httpd_server* hs )

此函数用于根据传入的IP地址类型和相关数据关闭http服务器的文件描述符

static void add_response( httpd_conn* hc, char* str )

此函数用于将数据添加至返回给用户数据的内存数组中。

void httpd_write_response( httpd_conn* hc )

此函数用于调用接口将数据写入返回至用户的文件描述符中。

void httpd_set_ndelay( int fd )

此函数用于设置此文件描述符为非阻塞模式。

void httpd_clear_ndelay( int fd )

此函数用户与设置此文件描述为阻塞模式

static void send_mime( httpd_conn* hc, int status, char* title, char* encodings, char* extraheads, char* type, off_t length, time_t mod )

此函数用于根据http连接对象hc的mime标志,时间mod生成返回给用户数据的响应行和响应首部,并添加至返回给用户的数据数组中。

void httpd_realloc_str( char** strP, size_t* maxsizeP, size_t size )

httpd_realloc_str函数接受3个参数strP字符串的二级指针,maxsizeP字符串的最大长度的指针,size当前需要的内存大小。根据maxsizeP的值和size的值重新给strP分配地址空间。

static void send_response( httpd_conn* hc, int status, char* title, char* extraheads, char* form, char* arg )

send_response函数根据服务器连接结构体hc,状态值status,状态字符title生成网页并发送给客户端,此函数主要用于错误时回复的网页。

static void send_response_tail( httpd_conn* hc )

send_response_tail主要是用于错误请求时发送服务器信息相关的内容

static void defang( char* str, char* dfstr, int dfsize )

defang函数主要是用于将str字符串中的大于号(>)和小于号(<)转换为>和<

void httpd_send_err( httpd_conn* hc, int status, char* title, char* extraheads, char* form, char* arg )

httpd_send_err函数主要是用于使用预订的错误网页,并将此网页发送给用户。对于订制的网页不存在则根据链接状态返回默认格式的错误信息。

static int send_err_file( httpd_conn* hc, int status, char* title, char* extraheads, char* filename )

send_err_file函数用于当用户有错误的请求的时候读取对应错误请求的文件(html文件),发送给用户。

static void send_authenticate( httpd_conn* hc, char* realm )

返回安全认证错误的网页信息

static int b64_decode( const char* str, unsigned char* space, int size )

b64_decode将base64编码转换为ASCII码。

static int auth_check( httpd_conn* hc, char* dirname )

auth_check函数返回用户认证的状态,负数表示认证失败

static int auth_check2( httpd_conn* hc, char* dirname )

auth_check2是进行认证的核心函数,对于认证失败的返回负数

static void send_dirredirect( httpd_conn* hc )

send_dirredirect函数用于处理文件路径错误的处理返回302错误

char* httpd_method_str( int method )

httpd_method_str函数将方法的代号转换为对应方法的字符串

static int hexit( char c )

hexit函数用于将16进制数转换为10进制数

static void strdecode( char* to, char* from )

strdecode函数用于将网络字符转串换为ASCII字符串

static void strencode( char* to, int tosize, char* from )

strencode函数用于将ASCII字符串转换为网络字符串

static int vhost_map( httpd_conn* hc )

vhost_map函数用于映射设备的虚拟主机名

static char* expand_symlinks( char* path, char** restP, int no_symlink_check, int tildemapped )

expand_symlinks用于根据no_symlink_check的值处理符号连接,如果no_symlink_check的值为将符号连接转换为绝对的路径

int httpd_get_conn( httpd_server* hs, int listen_fd, httpd_conn* hc )

httpd_get_conn函数用于处理用户的连接请求,对于接受的请求初始化相关的参数

int httpd_got_request( httpd_conn* hc )

httpd_got_request函数主要是分析请求的请求行并判断是否是有效的请求。

int httpd_parse_request( httpd_conn* hc )

httpd_parse_request函数用于分析请求首部并根据请求首部的相关字段初始化HTTP连接结构体的相关参数

static char* bufgets( httpd_conn* hc )

bufgets函数主要用于对获取的字符串进行将回车换行符转换为空字符,即获取一行数据

static void de_dotdot( char* file )

de_dotdot函数对文件的路径进行处理删除文件中的// ../ /../字符

void httpd_close_conn( httpd_conn* hc, struct timeval* nowP )

httpd_close_conn函数用于关闭传入的http连接结构体的连接

void httpd_destroy_conn( httpd_conn* hc )

httpd_destroy_conn函数为彻底的关闭此连接释放连接的资源

static int ext_compare( const void* v1, const void* v2 )

ext_compare函数用于判断两个mime实例字符串是否相等

static void init_mime( void )

init_mime函数用于根据字符顺序初始化mime表

static void figure_mime( httpd_conn* hc )

figure_mime函数用于根据http连接的请求的信息设置响应头中的mime字段

static void cgi_kill2( ClientData client_data, struct timeval* nowP )

cgi_kill2函数用于对于CGI过程超时的程序杀死此CGI进程。

static void cgi_kill( ClientData client_data, struct timeval* nowP )

cgi_kill函数用于定时杀死client_data中的进程标识的进程

static int name_compare( const void* v1, const void* v2 )

name_compare函数用于比较两个字符串是否相等

static int ls( httpd_conn* hc )

ls函数与linux中的ls命令一样,显示指定目录的文件信息

static char* build_env( char* fmt, char* arg )

build_env函数用于创建环境变量

static char** make_envp( httpd_conn* hc )

make_envp函数用于根据http连接状态的根据请求首部中提取的数据调用build_env创建环境变量

static char** make_argp( httpd_conn* hc )

make_argp函数用于根据请求的url生成CGI应用程序调用的参数数组

static void cgi_interpose_input( httpd_conn* hc, int wfd )

cgi_interpose_input函数用于处理POST请求将用户的数据存储在指定文件描述符中

static void post_post_garbage_hack( httpd_conn* hc )

post_post_garbage_hack函数用于在POST方法中在多读取两个字符也就是是读取数据完毕

static void cgi_interpose_output( httpd_conn* hc, int rfd )

cgi_interpose_output函数用于POST方法中将数据写入返回用户数据的描述符中

static void cgi_child( httpd_conn* hc )

cgi_child函数是处理CGI过程的主要函数,进行初始化环境变量和参数 根据方法的不同调用不同的过程。

static int cgi( httpd_conn* hc )

cgi函数主要是判断参数是否有效对于有效的参数创建子进程,并创建进程超时处理函数

static int really_start_request( httpd_conn* hc, struct timeval* nowP )

really_start_request函数是处理用户请求的主要函数,分析用户的url和用户的请求首部。

int httpd_start_request( httpd_conn* hc, struct timeval* nowP )

httpd_start_request是进行用户请求的处理函数调用really_start_request函数完成用户请求的处理

static void make_log_entry( httpd_conn* hc, struct timeval* nowP )

make_log_entry函数用于在日志文件中输出请求信息

static int check_referrer( httpd_conn* hc )

check_referrer函数用于检测请求的文件是否存在

static int really_check_referrer( httpd_conn* hc )

really_check_referrer函数用于检测请求的文件是否存在

char* httpd_ntoa( httpd_sockaddr* saP )

httpd_ntoa函数用于将数值的IP地址转换为字符串形式

static int sockaddr_check( httpd_sockaddr* saP )

sockaddr_check函数用于检测IP地址类型是否正确

static size_t sockaddr_len( httpd_sockaddr* saP )

sockaddr_len函数用于返回服务器的IP地址类型

static int my_snprintf( char* str, size_t size, const char* format, ... )

my_snprintf封装的字符串格式化输出函数

static long long atoll( const char* str )

atoll函数用于将字符串转换为长整型类型

int httpd_read_fully( int fd, void* buf, size_t nbytes )

httpd_read_fully函数用于在指定管道中读取数据

int httpd_write_fully( int fd, const char* buf, size_t nbytes )

httpd_write_fully函数用于向指定管道中写数据

void httpd_logstats( long secs )

httpd_logstats函数用于在日志文件中输出http服务器状态信息

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    鼠标不能拖动文件了

    鼠标不能拖动文件了,鼠标,拖动,本文目录鼠标不能拖动文件了电脑鼠标无法拖动软件图标了,怎么办鼠标不能滚动怎么调整电脑鼠标不能进行任何

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    公共CPU接口类型的详细描述

    公共CPU接口类型的详细描述,,我们知道CPU是电脑的大脑, CPU的处理速度直接决定电脑的性能, 那你知道CPU发展到现在, 都那些CPU接口类型吗.

    字符库快捷键|字符串快捷键

    字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行注释是 #Mac的快捷键是 command+/windows的快捷键是 Ctrl + /2、多行注