Clean up. Return error also when we don't found key in query string.
[bertos.git] / bertos / net / http.h
index 6b5b3bc1721c81654ebdf145c65cc4a73ceb2d76..b03b93b27bc076de20477bd0a0a42e8731b31b71 100644 (file)
 #ifndef NET_HTTP_H
 #define NET_HTTP_H
 
-
-#include <netif/ethernetif.h>
-
-#include <lwip/ip.h>
-#include <lwip/ip_addr.h>
-#include <lwip/netif.h>
 #include <lwip/tcpip.h>
-#include <lwip/dhcp.h>
 
-typedef int (*http_gci_handler_t)(char *revc_buf, struct netconn *client);
+typedef int (*http_handler_t)(struct netconn *client, const char *name, char *revc_buf, size_t revc_len);
 
 typedef struct HttpCGI
 {
-       const char *name;
-       http_gci_handler_t handler;
+       unsigned type;          ///< Strategy to find string in the cgi table.
+       const char *name;       ///< Request string from GET request
+       http_handler_t handler; ///< Callback to process the special request
 } HttpCGI;
 
+#define CGI_MATCH_NONE   0
+#define CGI_MATCH_WORD   1  ///< Select item in table only if string match
+#define CGI_MATCH_EXT    2  ///< Select item in table if the extention match
+#define CGI_MATCH_NAME   3  ///< Select item in table if the string is content
+
+int http_getValue(char *tolenized_buf, size_t tolenized_buf_len, const char *key, char *value, size_t len);
+int http_tokenizeGetRequest(char *raw_buf, size_t raw_len);
+void http_getPageName(const char *recv_buf, size_t recv_len, char *page_name, size_t len);
+void http_decodeUrl(const char *raw_buf, size_t raw_len, char *decodec_buf, size_t len);
+
 void http_sendOk(struct netconn *client);
 void http_sendFileNotFound(struct netconn *client);
-void http_server(struct netconn *server, struct HttpCGI *gci);
+void http_sendInternalErr(struct netconn *client);
+
+void http_poll(struct netconn *server);
+void http_init(http_handler_t default_callback, struct HttpCGI *table);
+
+int http_testSetup(void);
+int http_testRun(void);
+int http_testTearDown(void);
 
 #endif /* NET_HTTP_H */