Example node for Yodiwo's Plegma API

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

Committer:
mitsarionas
Date:
Mon Sep 28 09:13:43 2015 +0000
Revision:
8:66d34592c1ad
Parent:
5:1ef168357347
using published HTTPClient

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitsarionas 5:1ef168357347 1 #include <stdint.h>
mitsarionas 5:1ef168357347 2 #include <stdbool.h>
mitsarionas 5:1ef168357347 3 #include <stdio.h>
mitsarionas 5:1ef168357347 4 #include <string.h>
mitsarionas 5:1ef168357347 5 #include "jsmn.h"
mitsarionas 5:1ef168357347 6 #include "yodiwo_helpers.h"
mitsarionas 5:1ef168357347 7 #include "config.h"
mitsarionas 5:1ef168357347 8 #include "system.h"
mitsarionas 5:1ef168357347 9 #include "pairing_backend.h"
mitsarionas 5:1ef168357347 10
mitsarionas 5:1ef168357347 11 char recvBuff[1024*20];
mitsarionas 5:1ef168357347 12 void *__get_tokens(pairing_context *ctx);
mitsarionas 5:1ef168357347 13 void *__get_keys(pairing_context *ctx);
mitsarionas 5:1ef168357347 14
mitsarionas 5:1ef168357347 15 void *do_on_thread(thread_func func, void *args, unsigned int stack_size);
mitsarionas 5:1ef168357347 16
mitsarionas 5:1ef168357347 17 #define PAGE_SERVER_PHASE2 "userconfirm"
mitsarionas 5:1ef168357347 18
mitsarionas 5:1ef168357347 19 int pairing_context_init_with_defaults(pairing_context *ctx, onPaired_callback callback)
mitsarionas 5:1ef168357347 20 {
mitsarionas 5:1ef168357347 21 ctx->postUrl = "http://10.30.254.199:3334/pairing/";
mitsarionas 5:1ef168357347 22 ctx->uuid = "1337CNode";
mitsarionas 5:1ef168357347 23 ctx->name = "Nodas";
mitsarionas 5:1ef168357347 24 ctx->onPaired = callback;
mitsarionas 5:1ef168357347 25 return 0;
mitsarionas 5:1ef168357347 26 }
mitsarionas 5:1ef168357347 27
mitsarionas 5:1ef168357347 28 extern Yodiwo_Tools_APIGenerator_CNodeConfig_t *activeConfig;
mitsarionas 5:1ef168357347 29
mitsarionas 5:1ef168357347 30 int pairing_context_init_from_config(pairing_context *ctx, onPaired_callback callback)
mitsarionas 5:1ef168357347 31 {
mitsarionas 5:1ef168357347 32 printf("server url: %s\n", activeConfig->PairingServerUrl);
mitsarionas 5:1ef168357347 33 printf("uuid: %s\n", activeConfig->Uuid);
mitsarionas 5:1ef168357347 34 printf("name: %s\n", activeConfig->Name);
mitsarionas 5:1ef168357347 35 ctx->postUrl = activeConfig->PairingServerUrl;
mitsarionas 5:1ef168357347 36 ctx->uuid = activeConfig->Uuid;
mitsarionas 5:1ef168357347 37 ctx->name = activeConfig->Name;
mitsarionas 5:1ef168357347 38 ctx->onPaired = callback;
mitsarionas 5:1ef168357347 39 return 0;
mitsarionas 5:1ef168357347 40 }
mitsarionas 5:1ef168357347 41
mitsarionas 5:1ef168357347 42 #define STACK_SIZE 24000
mitsarionas 5:1ef168357347 43
mitsarionas 5:1ef168357347 44
mitsarionas 5:1ef168357347 45 int pairing_get_tokens(pairing_context *ctx)
mitsarionas 5:1ef168357347 46 {
mitsarionas 5:1ef168357347 47 printf("getting tokens from server\n");
mitsarionas 5:1ef168357347 48 return (int)do_on_thread((thread_func)__get_tokens, ctx, STACK_SIZE);
mitsarionas 5:1ef168357347 49 }
mitsarionas 5:1ef168357347 50
mitsarionas 5:1ef168357347 51 char* get_server_phase2_url(pairing_context *ctx, char *hostname, int port, char *urlBase)
mitsarionas 5:1ef168357347 52 {
mitsarionas 5:1ef168357347 53 int len = 200; //TODO: proper calculation
mitsarionas 5:1ef168357347 54 char* result = (char *)malloc(sizeof(char) * len);
mitsarionas 5:1ef168357347 55 if (!result)
mitsarionas 5:1ef168357347 56 return NULL;
mitsarionas 5:1ef168357347 57 sprintf(result, "%s" "1/" PAGE_SERVER_PHASE2 "?token2=%s&noderedirect=http://%s:%d%snext",
mitsarionas 5:1ef168357347 58 ctx->postUrl, ctx->token2, hostname, (port == 0) ? 80 : port, urlBase);
mitsarionas 5:1ef168357347 59 return result;
mitsarionas 5:1ef168357347 60 }
mitsarionas 5:1ef168357347 61
mitsarionas 5:1ef168357347 62 int pairing_get_keys(pairing_context *ctx)
mitsarionas 5:1ef168357347 63 {
mitsarionas 5:1ef168357347 64 printf("getting keys from server\n");
mitsarionas 5:1ef168357347 65 return (int)do_on_thread((thread_func)__get_keys, ctx, STACK_SIZE);
mitsarionas 5:1ef168357347 66 }
mitsarionas 5:1ef168357347 67
mitsarionas 5:1ef168357347 68 void *do_on_thread(thread_func func, void *args, unsigned int stack_size)
mitsarionas 5:1ef168357347 69 {
mitsarionas 5:1ef168357347 70 int r;
mitsarionas 5:1ef168357347 71 thread_t t;
mitsarionas 5:1ef168357347 72 r = thread_run(&t, func, args, 0, stack_size);
mitsarionas 5:1ef168357347 73 printf("run: %d\n", r);
mitsarionas 5:1ef168357347 74 if (r < 0)
mitsarionas 5:1ef168357347 75 return (void *)-1;
mitsarionas 5:1ef168357347 76 return thread_join(&t);
mitsarionas 5:1ef168357347 77 }
mitsarionas 5:1ef168357347 78
mitsarionas 5:1ef168357347 79 void *__get_tokens(pairing_context *ctx)
mitsarionas 5:1ef168357347 80 {
mitsarionas 5:1ef168357347 81 char url[100];
mitsarionas 5:1ef168357347 82 char postfields[100];
mitsarionas 5:1ef168357347 83 char response[512];
mitsarionas 5:1ef168357347 84 int ret;
mitsarionas 5:1ef168357347 85 strcpy(url, ctx->postUrl);
mitsarionas 5:1ef168357347 86 strcat(url, "/1/gettokensreq");
mitsarionas 5:1ef168357347 87
mitsarionas 5:1ef168357347 88 //POST data
mitsarionas 5:1ef168357347 89 sprintf(postfields, "name=%s&uuid=%s", ctx->name, ctx->uuid);
mitsarionas 5:1ef168357347 90 printf("\nTrying to post data...\n");
mitsarionas 5:1ef168357347 91 ret = http_post(url, postfields, response, 512);
mitsarionas 5:1ef168357347 92 Yodiwo_Plegma_NodePairing_PairingServerTokensResponse_t tokens;
mitsarionas 5:1ef168357347 93 if (ret > 0)
mitsarionas 5:1ef168357347 94 {
mitsarionas 5:1ef168357347 95 printf("Executed POST successfully - read %zu characters\n", strlen(response));
mitsarionas 5:1ef168357347 96 printf("Result: %s\n", response);
mitsarionas 5:1ef168357347 97 int jret = Yodiwo_Plegma_NodePairing_PairingServerTokensResponse_FromJson(response, strlen(response), &tokens);
mitsarionas 5:1ef168357347 98 if (jret == Yodiwo_JsonSuccessParse) {
mitsarionas 5:1ef168357347 99 ctx->token1 = tokens.token1;
mitsarionas 5:1ef168357347 100 ctx->token2 = tokens.token2;
mitsarionas 5:1ef168357347 101 return (void *)0;
mitsarionas 5:1ef168357347 102 } else {
mitsarionas 5:1ef168357347 103 printf("error parsing response");
mitsarionas 5:1ef168357347 104 return (void *)-2;
mitsarionas 5:1ef168357347 105 }
mitsarionas 5:1ef168357347 106 }
mitsarionas 5:1ef168357347 107 else
mitsarionas 5:1ef168357347 108 {
mitsarionas 5:1ef168357347 109 printf("Error HTTP Post return code = %d\n", ret);
mitsarionas 5:1ef168357347 110 }
mitsarionas 5:1ef168357347 111 return (void *)ret;
mitsarionas 5:1ef168357347 112
mitsarionas 5:1ef168357347 113 }
mitsarionas 5:1ef168357347 114
mitsarionas 5:1ef168357347 115
mitsarionas 5:1ef168357347 116 void *__get_keys(pairing_context *ctx)
mitsarionas 5:1ef168357347 117 {
mitsarionas 5:1ef168357347 118 char url[100];
mitsarionas 5:1ef168357347 119 char postfields[100];
mitsarionas 5:1ef168357347 120 char response[512];
mitsarionas 5:1ef168357347 121
mitsarionas 5:1ef168357347 122 strcpy(url, ctx->postUrl);
mitsarionas 5:1ef168357347 123 strcat(url, "/1/getkeysreq");
mitsarionas 5:1ef168357347 124 int ret;
mitsarionas 5:1ef168357347 125
mitsarionas 5:1ef168357347 126 //POST data
mitsarionas 5:1ef168357347 127 sprintf(postfields, "uuid=%s&token1=%s", ctx->uuid, ctx->token1);
mitsarionas 5:1ef168357347 128
mitsarionas 5:1ef168357347 129 printf("\nTrying to post data...\n");
mitsarionas 5:1ef168357347 130 ret = http_post(url, postfields, response, 512);
mitsarionas 5:1ef168357347 131 Yodiwo_Plegma_NodePairing_PairingServerKeysResponse_t keys;
mitsarionas 5:1ef168357347 132 if (ret > 0)
mitsarionas 5:1ef168357347 133 {
mitsarionas 5:1ef168357347 134 printf("Executed POST successfully - read %zu characters\n", strlen(response));
mitsarionas 5:1ef168357347 135 printf("Result: %s\n", response);
mitsarionas 5:1ef168357347 136 int jret = Yodiwo_Plegma_NodePairing_PairingServerKeysResponse_FromJson(response, strlen(response), &keys);
mitsarionas 5:1ef168357347 137 if (jret == Yodiwo_JsonSuccessParse) {
mitsarionas 5:1ef168357347 138 ctx->nodeKey = keys.nodeKey;
mitsarionas 5:1ef168357347 139 ctx->secretKey = keys.secretKey;
mitsarionas 5:1ef168357347 140 return (void *)0;
mitsarionas 5:1ef168357347 141 } else {
mitsarionas 5:1ef168357347 142 printf("error parsing response");
mitsarionas 5:1ef168357347 143 return (void *)-2;
mitsarionas 5:1ef168357347 144 }
mitsarionas 5:1ef168357347 145 }
mitsarionas 5:1ef168357347 146 else
mitsarionas 5:1ef168357347 147 {
mitsarionas 5:1ef168357347 148 printf("Error HTTP Post return code = %d\n", ret);
mitsarionas 5:1ef168357347 149 }
mitsarionas 5:1ef168357347 150 return (void *)ret;
mitsarionas 5:1ef168357347 151
mitsarionas 5:1ef168357347 152 }
mitsarionas 5:1ef168357347 153