Student project by David Berlin and Boris Dogadov made for the Embedded Systems Workshop course given in Tel-Aviv University on 2010 by Sivan Toledo. Visit the project website for more details: http://davidberlin.co.il/sadna/ .

Dependencies:   EthernetNetIf NTPClient_NetServices mbed HTTPServer HTTPClient CyaSSL

Revision:
1:b05231650f32
Parent:
0:3e7d6f496a67
--- a/Dropbox/Dropbox.cpp	Sun Apr 17 21:30:10 2011 +0000
+++ b/Dropbox/Dropbox.cpp	Mon Apr 25 12:31:46 2011 +0000
@@ -1,158 +1,181 @@
-#include "Dropbox.h"
-#include "HTTPClient.h"
-#include "HTTPFileSender.h"
-#include "base64.h"
-#include "url.h"
-#include "ctc_hmac.h"
-#include "NTPClient.h"
-#include "HTTPData.h"
-
-// NET
-NTPClient ntpClient;
-HTTPResult result;
-
-// Dropbox
-string consumer_token = "p4t8cn8b3ddci2d";
-string consumer_token_secret = "wtib99x350qo5l6";
-char token[16] = {0};
-char token_secret[16] = {0};
-bool completed = false;
-int v = 6000;
-char buffer[1024] = {0};
-
-extern DigitalOut led1;
-extern DigitalOut led3;
-extern void USBLoop();
-
-Timer timer;
-
-void request_callback(HTTPResult r)
-{
-  result = r;
-  completed = true;
-}
-
-bool dropbox_getToken(char* username, char* password)
-{
-    HTTPClient client;
-    HTTPText data;
-    
-    /* Request Token */ 
-    printf("Requesting token\r\n");
-    
-    char request[128] = {0};
-    sprintf(request,
-            "http://api.getdropbox.com/0/token?oauth_consumer_key=p4t8cn8b3ddci2d&email=%s&password=%s",
-            username,
-            password);
-    
-    printf(request);
-    HTTPResult result = client.get(request, &data);
-                                   
-    if (result != HTTP_OK)
-    {
-        printf("R: %d", result);
-        return false;
-    }
-    
-    const char *dataContent = data.gets();    
-
-    memcpy(token, dataContent + 11, 15); 
-    memcpy(token_secret, dataContent + 40, 15); 
-    
-    printf("Got token %s %s %s\r\n", dataContent, token, token_secret);
-    
-    return true;
-}
-
-bool dropbox_syncTime()
-{
-    /* Get Time */
-    printf("Synchronizing time\r\n");
-    Host server(IpAddr(), 123, "0.pool.ntp.org");
-    NTPResult result = ntpClient.setTime(server);
-    
-    //srand(time(NULL));
-    
-    return (result == NTP_OK);
-}
-
-    
-bool dropbox_upload(string srcFile, string dstFile)
-{
-    HTTPClient client;
-    string dst = dstFile;
-    
-    time_t currentTime = time(NULL);
-      
-    v++; //= (rand() % 9999999) + 1000;
-
-    //printf("T: %d NONCE: %d\r\n", currentTime, v); 
-    
-    memset(buffer, 0x00, 1024);
-    sprintf(buffer, 
-            "POST&http%%3A%%2F%%2Fapi-content.dropbox.com%%2F0%%2Ffiles%%2Fdropbox%%2F&file%%3D%s%%26oauth_consumer_key%%3D%s%%26oauth_nonce%%3D%d%%26oauth_signature_method%%3DHMAC-SHA1%%26oauth_timestamp%%3D%d%%26oauth_token%%3D%s",
-            dst.c_str(),
-            consumer_token.c_str(),
-            v,
-            currentTime,
-            token);
-   
-    //printf("Sig: %s %d\n\r", buffer, strlen(buffer)); 
-              
-    string key = consumer_token_secret + "&" + token_secret;
-    
-    //printf("Key: %s %d\n\r", key.c_str(), key.size()); 
-    
-    byte hash[SHA_DIGEST_SIZE];
-    Hmac hmac;
-    HmacSetKey(&hmac, SHA, (const byte*)key.c_str(), key.size());
-    HmacUpdate(&hmac, (const byte*)buffer, strlen(buffer));
-    HmacFinal(&hmac, hash);
-
-    char sig[128] = {0};
-    base64enc((char*)hash, SHA_DIGEST_SIZE, sig);
-
-    char *encodedSig = url_encode(sig);
-    
-    memset(buffer, 0x00, 1024);
-    sprintf(buffer, 
-            "http://api-content.dropbox.com/0/files/dropbox/?file=%s&oauth_consumer_key=%s&oauth_nonce=%d&oauth_timestamp=%d&oauth_token=%s&oauth_signature_method=HMAC-SHA1&oauth_signature=%s",
-            dst.c_str(),
-            consumer_token.c_str(),
-            v,
-            currentTime,
-            token,
-            encodedSig);
-            
-    //printf("Req: %s %d\n\r", buffer, strlen(buffer));
-
-    HTTPFileSender httpFile(srcFile.c_str(), dst.c_str());
-
-    HTTPText res;
-
-    //client.setTimeout(5000);
-    
-    completed = false;
-    HTTPResult postResult = client.post(buffer, httpFile, &res, request_callback);
-    
-    timer.start();
-    
-    while (!completed)
-    {
-        led1 = (timer.read_ms() % 250) >= 125;
-        USBLoop();
-        Net::poll();
-    }
-    
-    timer.stop();
-    timer.reset();
-    
-    led1 = 1;
-    
-    printf("Res: %s %d %d\n\r", res.gets(), postResult, result);
-    
-    free(encodedSig);
-    
-    return (result == HTTP_OK);
+#include "Dropbox.h"
+#include "HTTPClient.h"
+#include "HTTPFileSender.h"
+#include "base64.h"
+#include "url.h"
+#include "ctc_hmac.h"
+#include "NTPClient.h"
+#include "HTTPData.h"
+
+// NET
+NTPClient ntpClient;
+HTTPResult result;
+
+// Dropbox
+string consumer_token = "p4t8cn8b3ddci2d";
+string consumer_token_secret = "wtib99x350qo5l6";
+char token[16] = {0};
+char token_secret[16] = {0};
+volatile bool completed = false;
+int v = 6000;
+char buffer[1024] = {0};
+
+Timer timer;
+
+extern DigitalOut led1;
+extern DigitalOut led3;
+extern void USBLoop();
+
+void request_callback(HTTPResult r)
+{
+  result = r;
+  completed = true;
+}
+
+bool dropbox_getToken(char* username, char* password)
+{
+    HTTPText data;
+    HTTPClient client;
+    
+    /* Request Token */ 
+    printf("Requesting token\r\n");
+    
+    char request[128] = {0};
+    sprintf(request,
+            "http://api.getdropbox.com/0/token?oauth_consumer_key=p4t8cn8b3ddci2d&email=%s&password=%s",
+            username,
+            password);
+    
+    printf(request);
+    HTTPResult result = client.get(request, &data);
+                                   
+    if (result != HTTP_OK)
+    {
+        printf("R: %d", result);
+        return false;
+    }
+    
+    const char *dataContent = data.gets();    
+
+    memcpy(token, dataContent + 11, 15); 
+    memcpy(token_secret, dataContent + 40, 15); 
+    
+    printf("Got token %s %s %s\r\n", dataContent, token, token_secret);
+    
+    return true;
+}
+
+bool dropbox_syncTime()
+{
+    /* Get Time */
+    printf("Synchronizing time\r\n");
+    Host server(IpAddr(), 123, "0.pool.ntp.org");
+    NTPResult result = ntpClient.setTime(server);
+    
+    //srand(time(NULL));
+    
+    return (result == NTP_OK);
+}
+
+bool dropbox_upload(string srcFile, string dstFile)
+{    
+    HTTPClient client;
+    string dst = dstFile;
+    
+    time_t currentTime = time(NULL);
+      
+    v++; //= (rand() % 9999999) + 1000;
+
+    //printf("T: %d NONCE: %d\r\n", currentTime, v); 
+    
+    memset(buffer, 0x00, 1024);
+    sprintf(buffer, 
+            "POST&http%%3A%%2F%%2Fapi-content.dropbox.com%%2F0%%2Ffiles%%2Fdropbox%%2F&file%%3D%s%%26oauth_consumer_key%%3D%s%%26oauth_nonce%%3D%d%%26oauth_signature_method%%3DHMAC-SHA1%%26oauth_timestamp%%3D%d%%26oauth_token%%3D%s",
+            dst.c_str(),
+            consumer_token.c_str(),
+            v,
+            currentTime,
+            token);
+   
+    //printf("Sig: %s %d\n\r", buffer, strlen(buffer)); 
+              
+    string key = consumer_token_secret + "&" + token_secret;
+    
+    //printf("Key: %s %d\n\r", key.c_str(), key.size()); 
+    
+    byte hash[SHA_DIGEST_SIZE];
+    Hmac hmac;
+    HmacSetKey(&hmac, SHA, (const byte*)key.c_str(), key.size());
+    HmacUpdate(&hmac, (const byte*)buffer, strlen(buffer));
+    HmacFinal(&hmac, hash);
+
+    char sig[128] = {0};
+    base64enc((char*)hash, SHA_DIGEST_SIZE, sig);
+
+    char *encodedSig = url_encode(sig);
+    
+    memset(buffer, 0x00, 1024);
+    sprintf(buffer, 
+            "http://api-content.dropbox.com/0/files/dropbox/?file=%s&oauth_consumer_key=%s&oauth_nonce=%d&oauth_timestamp=%d&oauth_token=%s&oauth_signature_method=HMAC-SHA1&oauth_signature=%s",
+            dst.c_str(),
+            consumer_token.c_str(),
+            v,
+            currentTime,
+            token,
+            encodedSig);
+            
+    //printf("Req: %s %d\n\r", buffer, strlen(buffer));
+
+    HTTPFileSender httpFile(srcFile.c_str(), dst.c_str());
+
+    HTTPText res;
+
+    //client.setTimeout(5000);
+    
+    completed = false;
+    HTTPResult postResult = client.post(buffer, httpFile, &res, request_callback);
+    
+    timer.start();
+    
+    while (!completed)
+    {
+        led1 = (timer.read_ms() % 250) >= 125;
+        USBLoop();
+        Net::poll();
+    }
+    
+    timer.stop();
+    timer.reset();
+    
+    led1 = 1;
+    
+    printf("Res: %s %d %d\n\r", res.gets(), postResult, result);
+    
+    free(encodedSig);
+    
+    return (result == HTTP_OK);
+}
+
+bool send_email(char* email)
+{
+    HTTPText txt;
+    HTTPClient client;
+    //char request[128] = "http://www.davidberlin.co.il/mail.php?pass=borisdavid&email=";    
+    //strcpy(request + 60, email);
+    char request[128] = "http://holev.com/hello.txt";
+    
+    //printf(request);
+    
+    completed = false;
+    HTTPResult result2 = client.get(request, &txt, request_callback);
+    
+    while (!completed)
+    {
+        Net::poll();
+    }
+    led1 = 1;
+    
+    printf("Result %d:\"%s\"\r\n", result, txt.gets());
+    
+    return result == HTTP_OK;
 }
\ No newline at end of file