SimpleSocket 1.0 examples
Dependencies: EthernetNetIf SimpleSocket 1.0 mbed
Diff: supertweet.cpp
- Revision:
- 40:84182fc63956
- Parent:
- 39:108499af2b53
--- a/supertweet.cpp Wed Jun 06 03:34:16 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -#include "EthernetNetIf.h" -#include "SimpleSocket.h" -#include <ctype.h> - -void encodeBase64(char *ibuf, char *obuf); -int encodeFormUrl(char *s, char *t); - -void supertweet() { - EthernetNetIf eth; - eth.setup(); - ClientSocket client("66.180.175.246", 80); // api.supertweet.net - - char user[16], password[16], message[64] = {}; - printf("user => "); - scanf("%s", user); - printf("password => "); - scanf("%s", password); - printf("message => "); - int c = 0; - while (c < ' ' || 0x7E < c) - c = getc(stdin); - ungetc(c, stdin); - for (int i = 0; i < sizeof(message) - 1 && (c = getc(stdin)) >= ' '; i++) - message[i] = c; - - char credential[48], credential2[64], message2[256]; - - sprintf(credential, "%s:%s", user, password); - encodeBase64(credential, credential2); - encodeFormUrl(message, message2); - - const char *request = - "POST /1/statuses/update.xml HTTP/1.1\r\n" - "Host: api.supertweet.net\r\n" - "Authorization: Basic %s\r\n" - "Content-Length: %d\r\n" - "Content-Type: application/x-www-form-urlencoded\r\n" - "\r\n" - "status=%s"; - - client.printf(request, credential2, strlen(message2) + 7, message2); - printf(request, credential2, strlen(message2) + 7, message2); - printf("\n"); - - while (client) { - if (client.available()) { - while (client.available()) { - char response[128] = {}; - client.read(response, sizeof(response) - 1); - printf("%s", response); - } - client.close(); - } - } - printf("\ndone\n"); -} - -int encodeFormUrl(char *s, char *t) { - char *head = t; - for (char c; (c = *s) != 0; s++) - switch (c) { - case '\r': - break; - case ' ' : - *t++ = '+'; - break; - default: - t += sprintf(t, isalnum(c) ? "%c" : (c == '\n') ? "\r%c" : "%%%02X", c); - } - *t = '\0'; - return t - head; -} - -void encodeBase64(char ibuf[], int length, char *obuf) { - const char BASE64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - int i, j; - for (i = j = 0; j < length; j += 3, i += 4) { - long a = ibuf[j] << 16 | (j + 1 < length ? ibuf[j + 1] << 8 : 0) | (j + 2 < length ? ibuf[j + 2] : 0); - for (int k = 3; k >= 0; k--, a >>= 6) - obuf[i + k] = (j + k - 1) < length ? BASE64[a & 63] : '='; - } - obuf[i] = '\0'; -} - -void encodeBase64(char *ibuf, char *obuf) { - encodeBase64(ibuf, strlen(ibuf), obuf); -} \ No newline at end of file