When the server does not use a file system the user must be responsible
to provide a C language callback function for each URL that will be
requested by the client. This means locating the data and sending it out
using either cyg_httpd_write() or
cyg_httpd_write_chunked().
In order to simplify this process the server allows registering
any number of URLs as internal resources, by providing the URL name, the
pointer to the resource data and its size. When a URL is requested the
server will look it up among all internal resources, and if found, it
will send out the resource.
Internal resource can also be used along with a file system. In this
case the file system is searched first, and if a file is found, it it
sent. If a file is not found, the internal resources are searched and
if a match if found it is sent.
The drawback of this approach is, of course, that all these
resources are going to add to the size of the operating system image, and thus
it should be used only when memory is not a major constraint of the
design.
As always, to provide this type of customization, ecos tables are used.
The format for adding a new resource to the internal table is the following:
CYG_HTTPD_IRES_TABLE_ENTRY(entry, name, buffp, len)
entry : an identifier unique to this entry.
name : name of the URL including leading '/'
buffp : a pointer to a buffer of characters where to store the value
of the form variable.
len : size of the array
As an example, if the user wants to provide his own web page by
hardcoding it in the application code, here is how he would do it:
The extension of the file name determines the MIME type to be used for
internal resources.
When using directory listing you are implicitly making use of internal
resources. The small icons that appear to the left of file names and
directories are internal resources. Unchecking CYGOPT_NET_HTTP_USE_DIRLIST
will prevent the addition of these files.
In order to use internal resources, a generic file must first be
turned into a c language array, which is then compiled in the application
code. To create this array you can use the tcl script that comes with the
ecos distribution at packages/fs/rom/current/support/file2.tcl.