Off-code HTTP server pages

Hi all,
I'm using RL-TCPNet HTTP embedded web server for developing a data publishing application. The "site" requires static (htm) and dynamic (cgi) pages, together with resources like images, javascripts and css.

I can successfully deploy the site by compiling-in pages with FCARM and the resulting web.c module.

Project contraints force me to explore a different approach now. I need to strip off the pages from the application code and store them on an external flash device.

I implemented a minimal access to pages stored on flash by redefining the interfaces for http_fopen(), http_fclose() and http_fread() in http_uif.c module and including it in the project (while removing web.c). It seems to work ok for static pages and images, but, as far as I can see, these functions are not called by the http server when client requires a cgi file and this kind of resources are still looked for as statically linked to the code, resulting in a HTTP 404 error to the client.

Is there any configuration I miss to make http server ALWAYS use my file interface functions? If not, does anybody there have an idea how I can keep storing web resources in flash and make the http server access them. At moment RL-FlashFS is preferrably not an option.

TIA
Andrea

Parents
  • You do realize that dynamic pages are generated by execution some code? On a "real" web server, you have an OS that can start the cgi program and pipe the output back into the web server.

    In an embedded environment, you haven't that. You have to figure out a way to either compile a script parser into your application, and create the cgi pages using a script language, or figure out how to distribute the cgi pages as some form of runnable object code that can be loaded into memory and run through a function pointer to their load address. Basically, you have to implement a "dll" interface. If the cgi code can't use relative addressing to support loading at any address, you must either load them to a fixed address (only one module loaded at a time to that address) or teach your application how to relocate the contents of the cgi.

    The second alternative requires that you trust the writer of the cgi pages, since any error in them will bring down the web server application and require a watchdog reboot.

    I would definitely recommend that you look again at the requirements for cgi pages. Do they have to be general, or can you use scripting and replace macros together with static template files? Going fully dynamic may be really expensive...

Reply
  • You do realize that dynamic pages are generated by execution some code? On a "real" web server, you have an OS that can start the cgi program and pipe the output back into the web server.

    In an embedded environment, you haven't that. You have to figure out a way to either compile a script parser into your application, and create the cgi pages using a script language, or figure out how to distribute the cgi pages as some form of runnable object code that can be loaded into memory and run through a function pointer to their load address. Basically, you have to implement a "dll" interface. If the cgi code can't use relative addressing to support loading at any address, you must either load them to a fixed address (only one module loaded at a time to that address) or teach your application how to relocate the contents of the cgi.

    The second alternative requires that you trust the writer of the cgi pages, since any error in them will bring down the web server application and require a watchdog reboot.

    I would definitely recommend that you look again at the requirements for cgi pages. Do they have to be general, or can you use scripting and replace macros together with static template files? Going fully dynamic may be really expensive...

Children
More questions in this forum