Require an apache plug in (mod?) that does the following
a) intercepts the HTTP stream
b) opens a socket connection to a host on port *
c) sends the HTTP stream to host:port
d) receives a response in text stream from the host:port
e) forwards this to the user
Basically all I want is apache to do the HTTP handling of the inbound connection from the user and pass the HTTP stream to my app which will process and return a HTML compat. response. Am using Apahce instead of writing my own HTTP server so i can utilise Apache built in functions like
etc etc etc.
Basically using Apache as a HTTP front end only.
*Host and port will be set in config file that will be read at startup.
Must either a) be multi threaded to scale, or architected so it can be multi threaded and scale.
After submissions from people and suggestions that I use mod_proxy I felt it was worthwhile to add more info to the spec.
The reason I can't use mod_proxy is because I want to manipulate the http stream at a low level (potentially) in the future. At the moment, i have a CGI C# app that does the following
HTTP from user
Apache Picks up request
C# CGI program collects all env variables (ALL OF THEM)
and opens port to server:port
all collected env variables
waits for a response
passes response to apache via stdout
apache passes back to user
Basically what i want to do is replicate this, i.e. the collection of the info and send to my program but CGI is slow and cumbersome, a resident apache mod is a much better solution. Happy to hear any other suggestions anyone may have.
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
* * *This broadcast message was sent to all bidders on Tuesday Nov 21, 2006 5:31:08 PM:
Must be programmed in C/C++.
Source code must be
Must collect and send ALL environment variables that are produced are visible as standard by a CGI shell
(because by CGI program sends these and are expected at the other end by my server)
* * *This broadcast message was sent to all bidders on Wednesday Nov 22, 2006 7:29:32 AM:
You listed Apache 2.2, so I assume you want a mod that conforms to the Apache2 model as opposed to the Apache1.x model. Is that correct?
1. yes 2.2 only. no requirement for back compat. to 1.X apache
In the steps you listed, the final step is "forwards this to the user". Is this text blob that the module will get back from that app on host:port going to be a valid HTTP response, or is it going to have to be wrapped with the appropriate headers, etc... before it is sent back to the browser?
2. yes this will be text returned as binary stream which will be the complete response to be forwarded to the user. no changes (maybe strip off a header and a footer but not 100% on this yet but if so this will be minor header is "\n" footer is "\n").
You list one of the requirements as "must be multithreaded to scale". Since Apache2, and by extension the mods, a re multithreaded, can you clarify what you mean by this? Are you simply looking for as few locks/mutexes/points of contention as possible or is there a more specific requirement here?
3. multithreaded so it will scale. yes. only requirement is if i throw 1000 req. second at it and apache uses multithreading it doesnt all collapse. other than that if this means apache will handle this with a standard mod then all is ok. if we need special mutex locks then this should be factored in.
In terms of platforms, do you require a fully working and compiled module on both Linux and Windows? Or is it sufficient to test on one platform (all the while avoiding platform specific code, of course...)?
4. needs to be source and compiled code, for both platforms,
(i am happy to do the testing if this is required so sign off or provide a server for the testing)
Windows 2003/Apache 2.2