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

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字符串中的大于号(>)和小于号(<)转换为&gt;和&lt;
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服务器状态信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值