使用eclipse编译运行tinyproxy源码
一 新建eclipse tinyproxy工程
1 eclipse新建linux_gcc工程,如下图:
点击Finish即可。
2 新建的工程如下图:
3 将tinyproxy源码直接拷贝粘贴到tinyproxy_linuxgc目录下面即可。
4 在控制台进入该目录,运行./configure生成makefile文件
运行命令之后,文件目录如下图:
5 刷新eclipse,则代码加载进入eclipse当中
6 选择工程,右键属性
7 右键工程点击build project,则工程编译成功
8 右键工程运行即可
9.eclipse下的tinyproxy源码工程在这里。
二 代码中开启反向代理功能
tinyproxy的源码默认是不开启反向代理功能的,我们必须修改相关的文件,才可以使反向代理生效。
1.修改tinyproxy根目录下的config.h,添加
/* Include support for reverse proxy. */
/* #undef REVERSE_SUPPORT */
#define REVERSE_SUPPORT 1
2.修改tinyproxy/src目录下面的makefile文件,添加reverse-proxy.c reverse-proxy.h的编译以及reverse-proxy.o的链接,makefile文件修改内容如下:
PROGRAMS = $(sbin_PROGRAMS)
am_tinyproxy_OBJECTS = acl.$(OBJEXT) anonymous.$(OBJEXT) \
buffer.$(OBJEXT) child.$(OBJEXT) conf.$(OBJEXT) \
conns.$(OBJEXT) daemon.$(OBJEXT) hashmap.$(OBJEXT) \
heap.$(OBJEXT) html-error.$(OBJEXT) http-message.$(OBJEXT) \
log.$(OBJEXT) network.$(OBJEXT) reqs.$(OBJEXT) sock.$(OBJEXT) \
stats.$(OBJEXT) text.$(OBJEXT) main.$(OBJEXT) utils.$(OBJEXT) reverse-proxy.$(OBJEXT)\
vector.$(OBJEXT) upstream.$(OBJEXT) connect-ports.$(OBJEXT)
tinyproxy_OBJECTS = $(am_tinyproxy_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(top_builddir)
tinyproxy_SOURCES = \
acl.c acl.h \
anonymous.c anonymous.h \
buffer.c buffer.h \
child.c child.h \
common.h \
conf.c conf.h \
conns.c conns.h \
daemon.c daemon.h \
hashmap.c hashmap.h \
heap.c heap.h \
html-error.c html-error.h \
http-message.c http-message.h \
log.c log.h \
network.c network.h \
reqs.c reqs.h \
sock.c sock.h \
stats.c stats.h \
text.c text.h \
main.c main.h \
utils.c utils.h \
vector.c vector.h \
upstream.c upstream.h \
connect-ports.c connect-ports.h \
reverse-proxy.c reverse-proxy.h \
EXTRA_tinyproxy_SOURCES = filter.c filter.h \
reverse-proxy.c reverse-proxy.h \
transparent-proxy.c transparent-proxy.h
三 简介tinyproxy代理服务器源码思路
tinyproxy的main.c文件中根据配置文件初始化完配置文件中配置的值之后,会调用child.c中的child_main_loop函数,在该函数中会创建子进程,从而在child_main函数中开启对端口的监听,监听客户端的连接请求。当客户端有连接请求时,会调用reqs.c文件中的handle_connection函数,在该函数中进行了客户端请求头的分析、服务器端的连接、以及读取服务器端信息后发往客户端(在这个过程中涉及到的函数是:read_request_line、get_all_headers、process_request、process_client_headers、process_server_headers 、relay_connection)
relay_connection中进行了往客户单输出的操作。
四 学习tinyproxy目前仍存在的问题
1.如何修改configure文件,是生成的config.h文件中自动开启反向代理功能
2.在configure生成的所有的makefile文件当中 prefix前缀值都是/usr/local,如何修改configure文件,可以使生成的makefile文件中的prefix前缀值改变,同时使tinyproxy的tinyproxy.conf、tinyproxy.log、tinyproxy.pid文件在eclipse下运行时的默认路径改变。
3.如何使用eclipse调试守护进程