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:
Mon Apr 20 15:04:23 2015 +0000
Revision:
94:61d44636f020
Parent:
93:0acd11870c6a
Child:
95:010b0f7a0a1a
Integration of new device push code base.

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 93:0acd11870c6a 4
xinlei 93:0acd11870c6a 5 const char* _username = NULL;
xinlei 93:0acd11870c6a 6 const char* _password = NULL;
xinlei 93:0acd11870c6a 7 char _authStr[100] = {0};
xinlei 93:0acd11870c6a 8 const char *_identifier = "com_cumulocity_MbedAgent_1.5.2";
xinlei 93:0acd11870c6a 9 const char _host[] = "developer.cumulocity.com";
xinlei 93:0acd11870c6a 10 // const char _host[] = "management.m2m-devicecloud.com"
xinlei 93:0acd11870c6a 11 const int _port = 80;
xinlei 94:61d44636f020 12 char fmtSmartRest[200] = {0};
xinlei 93:0acd11870c6a 13
xinlei 93:0acd11870c6a 14 const char* getAuthStr()
xinlei 93:0acd11870c6a 15 {
xinlei 93:0acd11870c6a 16 return _authStr;
xinlei 93:0acd11870c6a 17 }
xinlei 93:0acd11870c6a 18
xinlei 93:0acd11870c6a 19 void setAuthStr(const char* p1, const char* p2)
xinlei 93:0acd11870c6a 20 {
xinlei 93:0acd11870c6a 21 memset(_authStr, 0, sizeof(_authStr));
xinlei 93:0acd11870c6a 22 size_t ul = strlen(p1);
xinlei 93:0acd11870c6a 23 size_t pl = strlen(p2);
xinlei 93:0acd11870c6a 24 unsigned char input[3], output[5];
xinlei 93:0acd11870c6a 25 int inputOffset = 0;
xinlei 93:0acd11870c6a 26
xinlei 93:0acd11870c6a 27 for (size_t i = 0; i < (ul+1+pl); i++) {
xinlei 93:0acd11870c6a 28 if (i < ul)
xinlei 93:0acd11870c6a 29 input[inputOffset++] = p1[i];
xinlei 93:0acd11870c6a 30 else if (i == ul)
xinlei 93:0acd11870c6a 31 input[inputOffset++] = ':';
xinlei 93:0acd11870c6a 32 else
xinlei 93:0acd11870c6a 33 input[inputOffset++] = p2[i-(ul+1)];
xinlei 93:0acd11870c6a 34
xinlei 93:0acd11870c6a 35 if ((inputOffset == 3) || (i == ul+pl)) {
xinlei 93:0acd11870c6a 36 b64_encode(input, inputOffset, output, 4);
xinlei 93:0acd11870c6a 37 output[4] = '\0';
xinlei 93:0acd11870c6a 38 strcat(_authStr, (char*)output);
xinlei 93:0acd11870c6a 39 inputOffset = 0;
xinlei 93:0acd11870c6a 40 }
xinlei 93:0acd11870c6a 41 }
xinlei 93:0acd11870c6a 42 }
xinlei 93:0acd11870c6a 43
xinlei 93:0acd11870c6a 44 const char* getUsername()
xinlei 93:0acd11870c6a 45 {
xinlei 93:0acd11870c6a 46 return _username;
xinlei 93:0acd11870c6a 47 }
xinlei 93:0acd11870c6a 48
xinlei 93:0acd11870c6a 49 void setUsername(const char* username)
xinlei 93:0acd11870c6a 50 {
xinlei 93:0acd11870c6a 51 _username = username;
xinlei 93:0acd11870c6a 52 }
xinlei 93:0acd11870c6a 53
xinlei 93:0acd11870c6a 54 const char* getPassword()
xinlei 93:0acd11870c6a 55 {
xinlei 93:0acd11870c6a 56 return _password;
xinlei 93:0acd11870c6a 57 }
xinlei 93:0acd11870c6a 58
xinlei 93:0acd11870c6a 59 void setPassword(const char* password)
xinlei 93:0acd11870c6a 60 {
xinlei 93:0acd11870c6a 61 _password = password;
xinlei 93:0acd11870c6a 62 }
xinlei 93:0acd11870c6a 63
xinlei 93:0acd11870c6a 64 const char* getHost()
xinlei 93:0acd11870c6a 65 {
xinlei 93:0acd11870c6a 66 return _host;
xinlei 93:0acd11870c6a 67 }
xinlei 93:0acd11870c6a 68
xinlei 93:0acd11870c6a 69 int getPort()
xinlei 93:0acd11870c6a 70 {
xinlei 93:0acd11870c6a 71 return _port;
xinlei 93:0acd11870c6a 72 }
xinlei 94:61d44636f020 73
xinlei 94:61d44636f020 74 const char* getSmartRestFmt()
xinlei 94:61d44636f020 75 {
xinlei 94:61d44636f020 76 return fmtSmartRest;
xinlei 94:61d44636f020 77 }
xinlei 94:61d44636f020 78
xinlei 94:61d44636f020 79 const char* getIdentifier()
xinlei 94:61d44636f020 80 {
xinlei 94:61d44636f020 81 return _identifier;
xinlei 94:61d44636f020 82 }
xinlei 94:61d44636f020 83
xinlei 94:61d44636f020 84 void setSmartRestFmt()
xinlei 94:61d44636f020 85 {
xinlei 94:61d44636f020 86 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 94:61d44636f020 87 snprintf(fmtSmartRest, sizeof(fmtSmartRest), fmt, getHost(), getAuthStr(), getIdentifier());
xinlei 94:61d44636f020 88 }
xinlei 94:61d44636f020 89
xinlei 94:61d44636f020 90 void setIdentifier(const char* id)
xinlei 94:61d44636f020 91 {
xinlei 94:61d44636f020 92 if (id) {
xinlei 94:61d44636f020 93 _identifier = id;
xinlei 94:61d44636f020 94 setSmartRestFmt();
xinlei 94:61d44636f020 95 }
xinlei 94:61d44636f020 96 }
xinlei 94:61d44636f020 97
xinlei 94:61d44636f020 98 void setAuth(const char* username, const char* password)
xinlei 94:61d44636f020 99 {
xinlei 94:61d44636f020 100 if (username)
xinlei 94:61d44636f020 101 setUsername(username);
xinlei 94:61d44636f020 102 if (password)
xinlei 94:61d44636f020 103 setPassword(password);
xinlei 94:61d44636f020 104 if (username || password) {
xinlei 94:61d44636f020 105 setAuthStr(username, password);
xinlei 94:61d44636f020 106 setSmartRestFmt();
xinlei 94:61d44636f020 107 }
xinlei 94:61d44636f020 108 }