Port of LwIP performed by Ralf in 2010. Not recommended for use with recent mbed libraries, but good demos of raw LwIP possible

Dependents:   LwIP_raw_API_serverExample tiny-dtls

Revision:
0:0791c1fece8e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPServer/HTTPFields.h	Tue Sep 18 14:41:24 2012 +0000
@@ -0,0 +1,49 @@
+#ifndef HTTPATTRIBUTE_H
+#define HTTPATTRIBUTE_H
+
+#include "HTTPServer.h"
+
+/**
+ * A simple HTTPHandler which will add new fields to the httpresult header.
+ * It can be used for adding caching strtegies.
+ */
+class HTTPFields : public HTTPHandler {
+  public:
+    /**
+     * Create new HTTPFields
+     * @param prefix The prefix path on witch we will execute the Handler. Means add the fields.
+     * @param fields The Fields wicht are added to all Handlers with the same prefix and which are added after this one.
+     */
+    HTTPFields(const char *prefix, const char *fields) : HTTPHandler(prefix) { _fields = fields; }
+    HTTPFields(HTTPServer *server, const char *prefix, const char *fields) : HTTPHandler(prefix) { _fields = fields; server->addHandler(this); }
+
+  private:
+    /**
+     * The Action methon should work on a Connection.
+     * If the result is HTTP_AddFields the Server will know that we modified the connection header.
+     * If the result is HTTP_Deliver the server will use this object to anwere the request.
+     *
+     * In this case we add new fields to the header.
+     */
+    virtual HTTPHandle action(HTTPConnection *con) const {
+      char *old = (char *)con->getHeaderFields();
+      int oldlen = strlen(old);
+      int atrlen = strlen(_fields);
+      char *fields = new char[atrlen+oldlen+3];
+      strcpy(fields,old);
+      fields[oldlen+0] = '\r';
+      fields[oldlen+1] = '\n';
+      strcpy(&fields[oldlen+2], _fields);
+      fields[atrlen+2+oldlen] = '\0';
+      con->setHeaderFields(fields);
+      if(*old) {
+        delete old;
+      }
+      return HTTP_AddFields;
+    }
+
+    const char *_fields;
+};
+
+#endif
+