Embedded WebSockets Experiment

Dependencies:   mbed MD5

Committer:
nandgate
Date:
Tue Jul 26 05:30:53 2011 +0000
Revision:
0:6dee052a3fa4

        

Who changed what in which revision?

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