Official reference client implementation for Cumulocity SmartREST on u-blox C027.

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Vincent Wochnik

Committer:
xinlei
Date:
Thu May 07 09:57:55 2015 +0000
Revision:
99:e369fc75c000
Parent:
95:010b0f7a0a1a
Child:
101:dbcd3bc51758
prepare for v2.1rc3.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xinlei 93:0acd11870c6a 1 #include <string.h>
xinlei 94:61d44636f020 2 #include <stdio.h>
xinlei 93:0acd11870c6a 3 #include "b64.h"
xinlei 99:e369fc75c000 4 #include "SmartRestConf.h"
xinlei 93:0acd11870c6a 5
xinlei 99:e369fc75c000 6 const char *srUsername = NULL;
xinlei 99:e369fc75c000 7 const char *srPassword = NULL;
xinlei 99:e369fc75c000 8 char srAuthStr[100] = {0};
xinlei 99:e369fc75c000 9 const char *srX_ID = "com_cumulocity_MbedAgent_1.5.2";
xinlei 99:e369fc75c000 10 const char *srHost = "developer.cumulocity.com";
xinlei 95:010b0f7a0a1a 11 // const char *_host = "management.m2m-devicecloud.com"
xinlei 99:e369fc75c000 12 const int srPort = 80;
xinlei 99:e369fc75c000 13 long deviceID = 0;
xinlei 94:61d44636f020 14 char fmtSmartRest[200] = {0};
xinlei 93:0acd11870c6a 15
xinlei 93:0acd11870c6a 16 void setAuthStr(const char* p1, const char* p2)
xinlei 93:0acd11870c6a 17 {
xinlei 99:e369fc75c000 18 memset(srAuthStr, 0, sizeof(srAuthStr));
xinlei 93:0acd11870c6a 19 size_t ul = strlen(p1);
xinlei 93:0acd11870c6a 20 size_t pl = strlen(p2);
xinlei 93:0acd11870c6a 21 unsigned char input[3], output[5];
xinlei 93:0acd11870c6a 22 int inputOffset = 0;
xinlei 93:0acd11870c6a 23
xinlei 93:0acd11870c6a 24 for (size_t i = 0; i < (ul+1+pl); i++) {
xinlei 93:0acd11870c6a 25 if (i < ul)
xinlei 93:0acd11870c6a 26 input[inputOffset++] = p1[i];
xinlei 93:0acd11870c6a 27 else if (i == ul)
xinlei 93:0acd11870c6a 28 input[inputOffset++] = ':';
xinlei 93:0acd11870c6a 29 else
xinlei 93:0acd11870c6a 30 input[inputOffset++] = p2[i-(ul+1)];
xinlei 93:0acd11870c6a 31
xinlei 93:0acd11870c6a 32 if ((inputOffset == 3) || (i == ul+pl)) {
xinlei 93:0acd11870c6a 33 b64_encode(input, inputOffset, output, 4);
xinlei 93:0acd11870c6a 34 output[4] = '\0';
xinlei 99:e369fc75c000 35 strcat(srAuthStr, (char*)output);
xinlei 93:0acd11870c6a 36 inputOffset = 0;
xinlei 93:0acd11870c6a 37 }
xinlei 93:0acd11870c6a 38 }
xinlei 93:0acd11870c6a 39 }
xinlei 93:0acd11870c6a 40
xinlei 93:0acd11870c6a 41 void setUsername(const char* username)
xinlei 93:0acd11870c6a 42 {
xinlei 99:e369fc75c000 43 srUsername = username;
xinlei 93:0acd11870c6a 44 }
xinlei 93:0acd11870c6a 45
xinlei 93:0acd11870c6a 46 void setPassword(const char* password)
xinlei 93:0acd11870c6a 47 {
xinlei 99:e369fc75c000 48 srPassword = password;
xinlei 94:61d44636f020 49 }
xinlei 94:61d44636f020 50
xinlei 94:61d44636f020 51 void setSmartRestFmt()
xinlei 94:61d44636f020 52 {
xinlei 94:61d44636f020 53 const char fmt[] = "POST %%s HTTP/1.0\r\nHost: %s\r\nAuthorization: Basic %s\r\nX-Id: %s\r\nContent-Length: %%d\r\n\r\n%%s";
xinlei 99:e369fc75c000 54 snprintf(fmtSmartRest, sizeof(fmtSmartRest), fmt, srHost, srAuthStr, srX_ID);
xinlei 94:61d44636f020 55 }
xinlei 94:61d44636f020 56
xinlei 99:e369fc75c000 57 void setX_ID(const char* id)
xinlei 94:61d44636f020 58 {
xinlei 94:61d44636f020 59 if (id) {
xinlei 99:e369fc75c000 60 srX_ID = id;
xinlei 94:61d44636f020 61 setSmartRestFmt();
xinlei 94:61d44636f020 62 }
xinlei 94:61d44636f020 63 }
xinlei 94:61d44636f020 64
xinlei 99:e369fc75c000 65 void setDeviceID(long id)
xinlei 99:e369fc75c000 66 {
xinlei 99:e369fc75c000 67 deviceID = id;
xinlei 99:e369fc75c000 68 }
xinlei 99:e369fc75c000 69
xinlei 94:61d44636f020 70 void setAuth(const char* username, const char* password)
xinlei 94:61d44636f020 71 {
xinlei 94:61d44636f020 72 if (username)
xinlei 94:61d44636f020 73 setUsername(username);
xinlei 94:61d44636f020 74 if (password)
xinlei 94:61d44636f020 75 setPassword(password);
xinlei 94:61d44636f020 76 if (username || password) {
xinlei 94:61d44636f020 77 setAuthStr(username, password);
xinlei 94:61d44636f020 78 setSmartRestFmt();
xinlei 94:61d44636f020 79 }
xinlei 94:61d44636f020 80 }