libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] [GSoC Update] Week 11


From: Didik Setiawan
Subject: [libmicrohttpd] [GSoC Update] Week 11
Date: Thu, 17 Aug 2017 07:28:07 +0700
User-agent: Mutt/1.8.3+30 (c87d2a88308a) (2017-05-23)

================================= SUMMARY ======================================
My public fork of Wget2 project is available here [0]. I will continuously keep
pushing my work so anyone interested can track me there. Feel free to
participate in the discussions going on merge request with my mentors [1]. Your
feedback are highly appreciated.


=============================== INTRODUCTION ===================================
The purpose of this project is to use Libmicrohttpd as test suite for Wget2.  I
plan to do this by do some changes on function wget_test_start_server() also
wget_test_stop_server() on src/libtest.c of Wget2. With this approach, I don't
need to change existing test suite which call the internal server code through
functions mentioned above.
I've count there are 33 test file which use wget_test_start_server(). I must
ensure all the test passed when I've done the transition.
For installation prerequisite, I make that Libmicrohttpd support will needed
when we need to run `make check` or run test suite. Then I need to modify
configure.ac. I will give proper warning about this requirement. There is a
section in README.md where I must explain to user to provide Libmicrohttpd to
make all test running correctly.
With Libmicrohttpd I can add new test using feature that not yet implemented in
old server code, but ready on Libmicrohttpd, such as HTTP digest 
authentication. 

Mentors:
Darshit Shah <address@hidden>
Ander Juaristi <address@hidden>


================================== UPDATES =====================================
Things which were done until this week:

 * Started working on wget_test_start_server() to use Libmicrohttpd as HTTP
   server. Workflow to resolve this:
   - Remove initial process for HTTP server socket
   - Create _http_server_start() function, wrapper for Libmicrohttpd. There is
     also function _answer_to_connection() which use to create proper HTTP
     response
   - Use select method (MHD_USE_SELECT_INTERNALLY) for threading model in
     Libmicrohttpd to get better compatibility
   - http_server_port seized automatically using Libmicrohttpd function by
     passing MHD_DAEMON_INFO_BIND_PORT or MHD_DAEMON_INFO_LISTEN_FD parameter to
     MHD_get_daemon_info() 
   - Using iteration to parse urls data in _answer_to_connection(). This
     guarantee we can pass any variadic data to Libmicrohttpd and prevent
     segmentation fault 
   - Fix _answer_to_connection() function to create proper HTTP response:
     - Handle arguments (query string) on URL
     - Handle redirection
     - Handle directory creation
     - Handle URL with IRI object
     - Handle URL with IDN hostname
     - Handle URL with query string which contains space
     - Handle If-Modified-Since header
     - Handle Byte Range request
     - Handle HTTP basic authentication 
     - Handle HTTPS
     - Handle chunked transfer encoding Notes: I use
       MHD_create_response_from_callback() from Libmicrohttpd to generate
       chunked transfer method. For simulation with bad chunked data, I use
       MHD_create_response_from_buffer() with proper header and use connection
       close. I think the result of this method is most closely approached with
       the result from old HTTP server
 * Fix compiler warning -Wunused-param
 * Use persistent connection (Connection: keep-alive) instead multiple
   connection (Connection: close). This prevent hiding several problems of the
   connection between HTTP server and client
 * Fix CI testing on Travis OSX: must install Libmicrohttpd from source to get
   support for HTTPS. Maybe the Libmicrohttpd package provided by brew not
   compiled with HTTPS support
 * Fix CI testing on Gitlab MinGW64. That problem caused by variable clash
   between Wget2 and MinGW64 header have been reported and fixed
 * Add CI testing to simulate Wget2 build without Libmicrohttpd installed. This
   is just a copy of main build process but without 'make check' part, so the
   Wget2 binary can be built with skipped testing [2][3]


================================= NEXT STEPS ===================================
Things which would be done in the coming week:

 * Add HTTP digest authentication test
 * Add other tests which seems to possible to add in this time frame
   (compression test, IPv6 test, etc). I need more suggestion about this


[0]: https://gitlab.com/gnuwget/wget2/tree/tmp-use-mhd
[1]: https://gitlab.com/gnuwget/wget2/merge_requests/265 
[2]: https://gitlab.com/dstw/wget2/tree/mhd-not-install
[3]: https://github.com/dstw/wget2/tree/mhd-not-install

Regards,
Didik Setiawan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]