PingPong

Dependencies:   EthernetInterface_pm mbed-rtos mbed

Revision:
0:c8f056a185d0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Codes/Http_post.cpp	Thu Mar 27 17:39:23 2014 +0000
@@ -0,0 +1,213 @@
+/*
+ * Http_post.cpp
+ *
+ *  Created on: 10/09/2013
+ *      Author: Marcelo Trindade Rebonatto
+ */
+
+#include "Configuracoes.h"
+#include "Http_post.h"
+
+static int countCnt = 0;
+static int countSnd = 0;
+
+int HttpPost::getCountCnt() { return countCnt; };
+int HttpPost::getCountSnd() { return countSnd; };
+
+void HttpPost::HttpPost_Thread(void const *arg)
+{
+    printf("HTTP POST Thread starting...\r\n");    
+  /*  
+    //inicializar socket
+   // TCPSocketConnection sock;
+    
+    CaptureMailbox& mbox = EventDetector::GetMailbox();
+    
+    osEvent evt;
+    //printf("aqui\n");
+    while(1)
+    {
+        TCPSocketConnection sock;
+        //printf("Esperando Evento\n");
+        evt = mbox.get();
+
+        if(evt.status == osEventMail)
+        {
+            //printf("Recebido osEventMail...\n");
+            CaptureEvent* cap = (CaptureEvent*)evt.value.p;
+            DoPost(sock,Settings::get_ServerUrl(),cap);    
+            mbox.free(cap);
+            //sock.reset_address();
+        }
+    }
+    */
+}
+
+void HttpPost::DoPost(TCPSocketConnection sock, char *host){
+    char http_cmd[500]; 
+    int escritos, r, i;
+    
+    //Timer t;
+    //t.start();
+    
+    //printf("HTTP Socket %s:%d\n", host, sock.get_port());
+    //printf("Antes Connect\n");
+  
+    
+    //printf("%d\n", rs);
+    //printf("Depois Connect "); 
+    
+    //t.stop();
+    //printf("HHTP: The time taken in connection was %d useconds\n", t.read_us());
+           
+    //http_cmd = (char *) malloc(500);
+    memset(http_cmd, 0, 500);
+    PreparePost( http_cmd );
+    //printf("%d\n", strlen(http_cmd));
+    
+    //http_cmd = prepare_POST( dados );
+    
+    //printf("Tamanho comando %d\n", strlen(http_cmd));     
+
+
+    //Timer t1;
+    //t1.start();
+    
+    //printf("Antes Send\n");        
+
+    //printf("Apos Send\n");        
+    //sock.send_all(http_cmd, strlen(http_cmd));
+        
+    //t1.stop();
+    //printf("HHTP: The time taken in send was %d useconds\n", t1.read_us());
+
+
+    for(i=0; i < MAXTRIES; i++){
+        r = sock.connect(host, 80);        
+        if (r < 0) {
+            if (i == 0)
+                countCnt++;
+            printf("Error %d Unable to connect to (%s) on port (%d) Try %d\n", ++countCnt, host, 80, i);
+            //wait(1);
+        }
+        else
+            break;            
+    } 
+    if (r == 0){
+        for(i=0; i < MAXTRIES; i++){
+            escritos = sock.send_all(http_cmd, strlen(http_cmd));        
+            if(escritos != strlen(http_cmd)){
+                if (i == 0)
+                    countSnd++ ; 
+                printf("Erro %d ao gravar no socket HTTP!! Escritos %d\t Tam %d Try %d\n", countSnd, escritos, strlen(http_cmd), i);            
+                wait_ms(DELAYTRY);
+            }
+            else 
+                break;
+        }
+        wait_ms(DELAY);
+  
+    //Codigo para buscar o retorno do servidor HTTP
+    /*
+    char buffer[300];
+    int ret;
+    while (true) {
+        ret = sock.receive(buffer, sizeof(buffer)-1);
+        if (ret <= 0)
+            break;
+        buffer[ret] = '\0';
+        printf("Received %d chars from server:\n%s\n", ret, buffer);
+    }
+    */
+    }
+    sock.close();    
+}
+
+void HttpPost::PreparePost(char *strfinal){
+    char str[400];
+    char aux[12];
+    int i;
+
+    const char *header1 = "POST /capture.php HTTP/1.1\r\n";
+                //"Host: 192.168.1.26\r\n"
+                //"Content-Length: "
+                
+    const char *header2 = "\r\n"
+                "Content-Type: application/x-www-form-urlencoded\r\n"
+                "\r\n";
+    
+    //str = (char *) malloc(450);
+    //strfinal = (char *) malloc(450);
+    memset(str,0,400);
+    memset(strfinal,0,500);
+            
+    strcat(strfinal, header1);    
+    strcat(strfinal, "Host: ");
+    strcat(strfinal, "192.168.1.26" );
+    strcat(strfinal, "\r\n");
+    
+    i = 1;
+    sprintf(aux,"TYPE=0%d",i);
+    strcat(str, aux);
+    
+    i++;
+    sprintf(aux,"&OUTLET=%02d",i);
+    strcat(str, aux);
+    
+    sprintf(aux,"&RFID=%s", "ABCDEFGH");
+    strcat(str,aux);
+    
+    i++;
+    sprintf(aux,"&OFFSET=%04d",i);
+    strcat(str,aux);
+    
+    float f = i++;
+    sprintf(aux,"&GAIN=%08X", *(unsigned int*)&f);
+    strcat(str,aux);
+    
+    f = i++;
+    sprintf(aux,"&RMS=%08X",*(unsigned int*)&f);
+    strcat(str,aux);
+
+    f = i++;
+    sprintf(aux,"&MV=%08X",*(unsigned int*)&f);
+    strcat(str,aux);        
+
+    strcat(str,"&SIN=");
+    for(i=0;i<12;i++)
+    {
+        char s[10];
+        //According to RFC1738,RFC3986 the semicolon is a reserved character and must be encoded
+        f += i;
+        sprintf(s,"%08X",*(unsigned int*)&f);
+        strcat(str,s);
+        if (i < (12 - 1))
+            strcat(str, "%3B");
+    }
+
+    strcat(str,"&COS=");
+    for(i=0;i<12;i++)
+    {
+        char c[10];
+        //According to RFC1738,RFC3986 the semicolon is a reserved character and must be encoded
+        f += i;
+        sprintf(c,"%08X",*(unsigned int*)&f);
+        strcat(str,c);
+        if (i < (12-1))
+            strcat(str, "%3B");
+    }
+    strcat(str,"\r\n");
+    
+    char len[5];
+    sprintf(len,"%d",strlen(str));        
+    
+    strcat(strfinal, "Content-Length: ");
+    strcat(strfinal, len);
+    strcat(strfinal, header2);
+    strcat(strfinal, str);    
+    strcat(strfinal, "\r\n");
+    
+    //printf("Request=[%s]\n",strfinal);
+    //printf("Tamanho STR %d\n", strlen(str));
+    //printf("Tamanho STRFINAL %d\n", strlen(strfinal));       
+ }
\ No newline at end of file