LRSD stephane / Mbed 2 deprecated WEBserverv3

Dependencies:   mbed

Committer:
geiineuville
Date:
Thu Sep 08 08:57:21 2011 +0000
Revision:
0:9cf1d79ebe04
v0 v1 v2   \"v3\"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
geiineuville 0:9cf1d79ebe04 1 #ifndef HTTPATTRIBUTE_H
geiineuville 0:9cf1d79ebe04 2 #define HTTPATTRIBUTE_H
geiineuville 0:9cf1d79ebe04 3
geiineuville 0:9cf1d79ebe04 4 #include "HTTPServer.h"
geiineuville 0:9cf1d79ebe04 5
geiineuville 0:9cf1d79ebe04 6 /**
geiineuville 0:9cf1d79ebe04 7 * A simple HTTPHandler which will add new fields to the httpresult header.
geiineuville 0:9cf1d79ebe04 8 * It can be used for adding caching strtegies.
geiineuville 0:9cf1d79ebe04 9 */
geiineuville 0:9cf1d79ebe04 10 class HTTPFields : public HTTPHandler {
geiineuville 0:9cf1d79ebe04 11 public:
geiineuville 0:9cf1d79ebe04 12 /**
geiineuville 0:9cf1d79ebe04 13 * Create new HTTPFields
geiineuville 0:9cf1d79ebe04 14 * @param prefix The prefix path on witch we will execute the Handler. Means add the fields.
geiineuville 0:9cf1d79ebe04 15 * @param fields The Fields wicht are added to all Handlers with the same prefix and which are added after this one.
geiineuville 0:9cf1d79ebe04 16 */
geiineuville 0:9cf1d79ebe04 17 HTTPFields(const char *prefix, const char *fields) : HTTPHandler(prefix) { _fields = fields; }
geiineuville 0:9cf1d79ebe04 18 HTTPFields(HTTPServer *server, const char *prefix, const char *fields) : HTTPHandler(prefix) { _fields = fields; server->addHandler(this); }
geiineuville 0:9cf1d79ebe04 19
geiineuville 0:9cf1d79ebe04 20 private:
geiineuville 0:9cf1d79ebe04 21 /**
geiineuville 0:9cf1d79ebe04 22 * The Action methon should work on a Connection.
geiineuville 0:9cf1d79ebe04 23 * If the result is HTTP_AddFields the Server will know that we modified the connection header.
geiineuville 0:9cf1d79ebe04 24 * If the result is HTTP_Deliver the server will use this object to anwere the request.
geiineuville 0:9cf1d79ebe04 25 *
geiineuville 0:9cf1d79ebe04 26 * In this case we add new fields to the header.
geiineuville 0:9cf1d79ebe04 27 */
geiineuville 0:9cf1d79ebe04 28 virtual HTTPHandle action(HTTPConnection *con) const {
geiineuville 0:9cf1d79ebe04 29 char *old = (char *)con->getHeaderFields();
geiineuville 0:9cf1d79ebe04 30 int oldlen = strlen(old);
geiineuville 0:9cf1d79ebe04 31 int atrlen = strlen(_fields);
geiineuville 0:9cf1d79ebe04 32 char *fields = new char[atrlen+oldlen+3];
geiineuville 0:9cf1d79ebe04 33 strcpy(fields,old);
geiineuville 0:9cf1d79ebe04 34 fields[oldlen+0] = '\r';
geiineuville 0:9cf1d79ebe04 35 fields[oldlen+1] = '\n';
geiineuville 0:9cf1d79ebe04 36 strcpy(&fields[oldlen+2], _fields);
geiineuville 0:9cf1d79ebe04 37 fields[atrlen+2+oldlen] = '\0';
geiineuville 0:9cf1d79ebe04 38 con->setHeaderFields(fields);
geiineuville 0:9cf1d79ebe04 39 if(*old) {
geiineuville 0:9cf1d79ebe04 40 delete old;
geiineuville 0:9cf1d79ebe04 41 }
geiineuville 0:9cf1d79ebe04 42 return HTTP_AddFields;
geiineuville 0:9cf1d79ebe04 43 }
geiineuville 0:9cf1d79ebe04 44
geiineuville 0:9cf1d79ebe04 45 const char *_fields;
geiineuville 0:9cf1d79ebe04 46 };
geiineuville 0:9cf1d79ebe04 47
geiineuville 0:9cf1d79ebe04 48 #endif
geiineuville 0:9cf1d79ebe04 49