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
util/SmartRestConf.cpp@95:010b0f7a0a1a, 2015-04-22 (annotated)
- Committer:
- xinlei
- Date:
- Wed Apr 22 11:22:25 2015 +0000
- Revision:
- 95:010b0f7a0a1a
- Parent:
- 94:61d44636f020
- Child:
- 99:e369fc75c000
v2.1rc2
Who changed what in which revision?
User | Revision | Line number | New 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 | 95:010b0f7a0a1a | 5 | const char *_username = NULL; |
xinlei | 95:010b0f7a0a1a | 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 | 95:010b0f7a0a1a | 9 | const char *_host = "developer.cumulocity.com"; |
xinlei | 95:010b0f7a0a1a | 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 | } |