HTTP C server using libh2o
Budget: €250 – €750 EUR
We want to create a simple H2O server using libh2o that will receive HTTP requests with support for TLS, CORS, http1, http2 and preferably http3 at least experimentally as h2o supports this.
The server will be receiving requests and passing them along to NATS (nats.io) using the NATS C client. Another service (will be provided) will then process the information and send back an appropriate valid response or error (you will be provided of such an example service for your tests along with detailed test cases that will be pretty straight forward and simple).
NATS allows for publish and request/response so when a POST request is made at the /publish endpoint it will be sent using the publish approach while when a POST request is sent at the /request endpoint it will publish the message to NATS and wait for the asynchronous response without blocking the server from receiving other requests.
Regarding CORS domains, this information can be retrieved by making a NATS request/response at a specific topic using the domain name and some API key that will be found in the headers and then caching this information at an appropriate in-memory data structure. Finally, regarding GET requests we should be able to dynamically capture the request path and pass it in the NATS request in order to have dynamic endpoints (e.g. /get/firstPath/secondPath/nPath?param1=value¶m2=value -> path: ['firstPath', 'secondPath', 'nPath'], params: [{key: 'firstParam', value: 'value'}, {key: 'secondParam', value: 'value'}] etc.)
NATS topics etc. will be passed to the server using environment variables.
The implementation should run in a docker container and should not degrade H2O's high performance and there should be no memory leaks. The result will be load tested and you will not be paid if there are memory leaks or if it has poor performance or if any tests fail. The project should be organised and thoroughly documented and will be released using an Apache 2.0 or MIT license.
The server will be receiving requests and passing them along to NATS (nats.io) using the NATS C client. Another service (will be provided) will then process the information and send back an appropriate valid response or error (you will be provided of such an example service for your tests along with detailed test cases that will be pretty straight forward and simple).
NATS allows for publish and request/response so when a POST request is made at the /publish endpoint it will be sent using the publish approach while when a POST request is sent at the /request endpoint it will publish the message to NATS and wait for the asynchronous response without blocking the server from receiving other requests.
Regarding CORS domains, this information can be retrieved by making a NATS request/response at a specific topic using the domain name and some API key that will be found in the headers and then caching this information at an appropriate in-memory data structure. Finally, regarding GET requests we should be able to dynamically capture the request path and pass it in the NATS request in order to have dynamic endpoints (e.g. /get/firstPath/secondPath/nPath?param1=value¶m2=value -> path: ['firstPath', 'secondPath', 'nPath'], params: [{key: 'firstParam', value: 'value'}, {key: 'secondParam', value: 'value'}] etc.)
NATS topics etc. will be passed to the server using environment variables.
The implementation should run in a docker container and should not degrade H2O's high performance and there should be no memory leaks. The result will be load tested and you will not be paid if there are memory leaks or if it has poor performance or if any tests fail. The project should be organised and thoroughly documented and will be released using an Apache 2.0 or MIT license.