Example node for Yodiwo's Plegma API

Dependencies:   EthernetInterface FXOS8700Q HTTPClient HTTPD MQTTS SDFileSystem YodiwoPlegma mbed-rpc mbed-rtos mbed wolfSSL

Revision:
2:b7489c070d1f
Child:
5:1ef168357347
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pairing_http_handler.cpp	Fri Sep 04 08:41:34 2015 +0000
@@ -0,0 +1,79 @@
+#include "EthernetInterface.h"
+#include "HTTPD.h"
+#include "string.h"
+#include "pairing_backend.h"
+#include "pairing_http_handler.h"
+
+HTTPD *httpd;
+pairing_context pairing_state;
+onPaired_callback pairing_done_cb;
+EthernetInterface *interface;
+void pairing_handler (int id);
+
+int start_pairing_http_server(EthernetInterface *eth, int port, onPaired_callback onPaired)
+{
+    pairing_done_cb = onPaired;
+    interface = eth;
+    httpd = new HTTPD;
+//    httpd->attach("/cgi-bin/", &callback_cgi);
+//    httpd->attach("/ws/", &callback_ws);
+    httpd->attach("/pairing/", &pairing_handler);
+    httpd->attach("/", "/sd/www/");
+    return httpd->start(port);
+}
+
+void pairing_handler (int id)
+{
+    int i, n;
+    int ret;
+    char buf[256];
+    char backUrl[100];
+    
+    if (!strcmp(httpd->getFilename(id), "startpairing")) {
+        printf("starting pairing...\n");
+        pairing_context_init_from_config(&pairing_state, pairing_done_cb);
+        pairing_get_tokens(&pairing_state);
+        
+        int idx = 0;
+        i = 0;
+        sprintf(backUrl, "http://%s", interface->getIPAddress());
+        char *uri = httpd->getUri(id);
+        printf("1st url part: %s\n",backUrl);
+        while (uri[i] != '\0') {
+            if (uri[i] == '/') {
+                idx = i;
+            }
+            i++;
+        }
+        strncat(backUrl, uri, idx + 1);
+        printf("more of url: %s\n", backUrl);
+        char *redirect = get_server_phase2_url(&pairing_state, backUrl);
+        printf("redirect url: %s\n", redirect);
+        if (redirect) {
+            httpd->redirect(id, 302, redirect, NULL, 0, NULL);
+//            free(redirect);
+            return;
+        }
+
+    } else if (!strcmp(httpd->getFilename(id), "next")) {
+        ret = pairing_get_keys(&pairing_state);
+        pairing_done_cb(pairing_state.nodeKey, pairing_state.secretKey);
+        sprintf(buf, "OK\r\nnodeKey: %s\r\nsecretKey: %s\r\n", pairing_state.nodeKey, pairing_state.secretKey);
+        httpd->send(id, buf, strlen(buf), "Content-Type: text/plain\r\n");
+    } else {
+        httpd->httpdError(id, 404);
+    }
+    strcpy(buf, httpd->getFilename(id));
+    strcat(buf, "\r\n");
+    strcat(buf, httpd->getQueryString(id));
+    strcat(buf, "\r\n");
+    n = strlen(buf);
+ 
+    i = httpd->receive(id, &buf[n], sizeof(buf) - n);
+    if (i < 0) return;
+    i += n;
+    buf[i] = 0;
+ 
+    printf("CGI %d %s\r\n", id, buf);
+//    httpd->send(id, buf, i, "Content-Type: text/plain\r\n");
+}
\ No newline at end of file