int MyWebPage(FILE* resp,const char* page,const char* params,void* uData);
其中page是url的page部分,params是任何表单参数(只支持GET,而不是POST,这会阻止文件上传,从而使flash变得很痛苦),uData是传入的令牌,当你注册时设置函数,因此您可以使用相同的函数为多个URL或具有不同数据的范围提供服务,而resp是一个文件句柄,您可以将HTTP响应(标题和所有)写入.
CYG_HTTPD_TABLE_ENTRY(www_myPage,"/",MyWebPage,0);
其中CYG_HTTPD_TABLE_ENTRY是一个宏,其中第一个参数是变量名,第二个是页面URL(允许使用*通配符;因此页面传递给MyWebPage()),第三个是函数指针,最后一个是uData值.
这是一个简单的例子:
int HelloWorldPage(FILE* resp,const char*,void*) { fprintf("Content-Type: text/html;\n\n"); fprintf("<html><head><title>Hello World!</title></head>\n"); fprintf("<body>\n"); fprintf("<h1>Hello,World!</h1>\n"); fprintf("<p>You passed in: %s</p>\n",params); fprintf("</body></html>\n"); } CYG_HTTPD_TABLE_ENTRY(www_hello,HelloWorldPage,0);
(实际上,params将通过一个函数来逃避HTML魔术字符,我会使用另外几个函数来分割参数并从中创建一个< ul>,但为了清楚起见,我把它留了下来.)
服务器本身只是作为一个任务(即线程)运行,只要它的优先级低于关键任务,就不会妨碍它.
不用说,这对于测试和调试来说非常宝贵. (嵌入式工作的一个问题是你通常不能将XTerm作为日志使用.)因此,当Supreme Programmer反复指责我没有工作的东西时(我猜是阻力最小的路径),我可以把网页并显示他向我发送了错误的参数.在集成中节省了大量的调试时间.
所以无论如何…我想知道,有这样的东西作为一个独立的图书馆吗?我可以链接的东西,注册我的回调,产生一个线程,并让它做魔术?或者我需要自己动手?我更喜欢C,但也可以使用C库.
编辑:由于我正在给它一个赏金,我需要澄清该库需要在开源许可下.
解决方法
> http://www.gnu.org/software/libmicrohttpd/
它体积小,速度快,具有简单的C API,支持多线程,适用于嵌入式系统,支持POST,可选支持SSL / TLS,可在LGPL或eCos许可下使用(视情况而定).我相信这符合您的所有要求.如果你愿意,在C语言中包装它将是微不足道的.