PingPong

Dependencies:   EthernetInterface_pm mbed-rtos mbed

Committer:
rebonatto
Date:
Thu Mar 27 17:42:00 2014 +0000
Revision:
1:b343d9cd769a
Parent:
0:c8f056a185d0
PingPong para Testar Jose

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rebonatto 0:c8f056a185d0 1 /*
rebonatto 0:c8f056a185d0 2 * Http_post.cpp
rebonatto 0:c8f056a185d0 3 *
rebonatto 0:c8f056a185d0 4 * Created on: 10/09/2013
rebonatto 0:c8f056a185d0 5 * Author: Marcelo Trindade Rebonatto
rebonatto 0:c8f056a185d0 6 */
rebonatto 0:c8f056a185d0 7
rebonatto 0:c8f056a185d0 8 #include "Configuracoes.h"
rebonatto 0:c8f056a185d0 9 #include "Http_post.h"
rebonatto 0:c8f056a185d0 10
rebonatto 0:c8f056a185d0 11 static int countCnt = 0;
rebonatto 0:c8f056a185d0 12 static int countSnd = 0;
rebonatto 0:c8f056a185d0 13
rebonatto 0:c8f056a185d0 14 int HttpPost::getCountCnt() { return countCnt; };
rebonatto 0:c8f056a185d0 15 int HttpPost::getCountSnd() { return countSnd; };
rebonatto 0:c8f056a185d0 16
rebonatto 0:c8f056a185d0 17 void HttpPost::HttpPost_Thread(void const *arg)
rebonatto 0:c8f056a185d0 18 {
rebonatto 0:c8f056a185d0 19 printf("HTTP POST Thread starting...\r\n");
rebonatto 0:c8f056a185d0 20 /*
rebonatto 0:c8f056a185d0 21 //inicializar socket
rebonatto 0:c8f056a185d0 22 // TCPSocketConnection sock;
rebonatto 0:c8f056a185d0 23
rebonatto 0:c8f056a185d0 24 CaptureMailbox& mbox = EventDetector::GetMailbox();
rebonatto 0:c8f056a185d0 25
rebonatto 0:c8f056a185d0 26 osEvent evt;
rebonatto 0:c8f056a185d0 27 //printf("aqui\n");
rebonatto 0:c8f056a185d0 28 while(1)
rebonatto 0:c8f056a185d0 29 {
rebonatto 0:c8f056a185d0 30 TCPSocketConnection sock;
rebonatto 0:c8f056a185d0 31 //printf("Esperando Evento\n");
rebonatto 0:c8f056a185d0 32 evt = mbox.get();
rebonatto 0:c8f056a185d0 33
rebonatto 0:c8f056a185d0 34 if(evt.status == osEventMail)
rebonatto 0:c8f056a185d0 35 {
rebonatto 0:c8f056a185d0 36 //printf("Recebido osEventMail...\n");
rebonatto 0:c8f056a185d0 37 CaptureEvent* cap = (CaptureEvent*)evt.value.p;
rebonatto 0:c8f056a185d0 38 DoPost(sock,Settings::get_ServerUrl(),cap);
rebonatto 0:c8f056a185d0 39 mbox.free(cap);
rebonatto 0:c8f056a185d0 40 //sock.reset_address();
rebonatto 0:c8f056a185d0 41 }
rebonatto 0:c8f056a185d0 42 }
rebonatto 0:c8f056a185d0 43 */
rebonatto 0:c8f056a185d0 44 }
rebonatto 0:c8f056a185d0 45
rebonatto 0:c8f056a185d0 46 void HttpPost::DoPost(TCPSocketConnection sock, char *host){
rebonatto 0:c8f056a185d0 47 char http_cmd[500];
rebonatto 0:c8f056a185d0 48 int escritos, r, i;
rebonatto 0:c8f056a185d0 49
rebonatto 0:c8f056a185d0 50 //Timer t;
rebonatto 0:c8f056a185d0 51 //t.start();
rebonatto 0:c8f056a185d0 52
rebonatto 0:c8f056a185d0 53 //printf("HTTP Socket %s:%d\n", host, sock.get_port());
rebonatto 0:c8f056a185d0 54 //printf("Antes Connect\n");
rebonatto 0:c8f056a185d0 55
rebonatto 0:c8f056a185d0 56
rebonatto 0:c8f056a185d0 57 //printf("%d\n", rs);
rebonatto 0:c8f056a185d0 58 //printf("Depois Connect ");
rebonatto 0:c8f056a185d0 59
rebonatto 0:c8f056a185d0 60 //t.stop();
rebonatto 0:c8f056a185d0 61 //printf("HHTP: The time taken in connection was %d useconds\n", t.read_us());
rebonatto 0:c8f056a185d0 62
rebonatto 0:c8f056a185d0 63 //http_cmd = (char *) malloc(500);
rebonatto 0:c8f056a185d0 64 memset(http_cmd, 0, 500);
rebonatto 0:c8f056a185d0 65 PreparePost( http_cmd );
rebonatto 0:c8f056a185d0 66 //printf("%d\n", strlen(http_cmd));
rebonatto 0:c8f056a185d0 67
rebonatto 0:c8f056a185d0 68 //http_cmd = prepare_POST( dados );
rebonatto 0:c8f056a185d0 69
rebonatto 0:c8f056a185d0 70 //printf("Tamanho comando %d\n", strlen(http_cmd));
rebonatto 0:c8f056a185d0 71
rebonatto 0:c8f056a185d0 72
rebonatto 0:c8f056a185d0 73 //Timer t1;
rebonatto 0:c8f056a185d0 74 //t1.start();
rebonatto 0:c8f056a185d0 75
rebonatto 0:c8f056a185d0 76 //printf("Antes Send\n");
rebonatto 0:c8f056a185d0 77
rebonatto 0:c8f056a185d0 78 //printf("Apos Send\n");
rebonatto 0:c8f056a185d0 79 //sock.send_all(http_cmd, strlen(http_cmd));
rebonatto 0:c8f056a185d0 80
rebonatto 0:c8f056a185d0 81 //t1.stop();
rebonatto 0:c8f056a185d0 82 //printf("HHTP: The time taken in send was %d useconds\n", t1.read_us());
rebonatto 0:c8f056a185d0 83
rebonatto 0:c8f056a185d0 84
rebonatto 0:c8f056a185d0 85 for(i=0; i < MAXTRIES; i++){
rebonatto 0:c8f056a185d0 86 r = sock.connect(host, 80);
rebonatto 0:c8f056a185d0 87 if (r < 0) {
rebonatto 0:c8f056a185d0 88 if (i == 0)
rebonatto 0:c8f056a185d0 89 countCnt++;
rebonatto 0:c8f056a185d0 90 printf("Error %d Unable to connect to (%s) on port (%d) Try %d\n", ++countCnt, host, 80, i);
rebonatto 0:c8f056a185d0 91 //wait(1);
rebonatto 0:c8f056a185d0 92 }
rebonatto 0:c8f056a185d0 93 else
rebonatto 0:c8f056a185d0 94 break;
rebonatto 0:c8f056a185d0 95 }
rebonatto 0:c8f056a185d0 96 if (r == 0){
rebonatto 0:c8f056a185d0 97 for(i=0; i < MAXTRIES; i++){
rebonatto 0:c8f056a185d0 98 escritos = sock.send_all(http_cmd, strlen(http_cmd));
rebonatto 0:c8f056a185d0 99 if(escritos != strlen(http_cmd)){
rebonatto 0:c8f056a185d0 100 if (i == 0)
rebonatto 0:c8f056a185d0 101 countSnd++ ;
rebonatto 0:c8f056a185d0 102 printf("Erro %d ao gravar no socket HTTP!! Escritos %d\t Tam %d Try %d\n", countSnd, escritos, strlen(http_cmd), i);
rebonatto 0:c8f056a185d0 103 wait_ms(DELAYTRY);
rebonatto 0:c8f056a185d0 104 }
rebonatto 0:c8f056a185d0 105 else
rebonatto 0:c8f056a185d0 106 break;
rebonatto 0:c8f056a185d0 107 }
rebonatto 0:c8f056a185d0 108 wait_ms(DELAY);
rebonatto 0:c8f056a185d0 109
rebonatto 0:c8f056a185d0 110 //Codigo para buscar o retorno do servidor HTTP
rebonatto 0:c8f056a185d0 111 /*
rebonatto 0:c8f056a185d0 112 char buffer[300];
rebonatto 0:c8f056a185d0 113 int ret;
rebonatto 0:c8f056a185d0 114 while (true) {
rebonatto 0:c8f056a185d0 115 ret = sock.receive(buffer, sizeof(buffer)-1);
rebonatto 0:c8f056a185d0 116 if (ret <= 0)
rebonatto 0:c8f056a185d0 117 break;
rebonatto 0:c8f056a185d0 118 buffer[ret] = '\0';
rebonatto 0:c8f056a185d0 119 printf("Received %d chars from server:\n%s\n", ret, buffer);
rebonatto 0:c8f056a185d0 120 }
rebonatto 0:c8f056a185d0 121 */
rebonatto 0:c8f056a185d0 122 }
rebonatto 0:c8f056a185d0 123 sock.close();
rebonatto 0:c8f056a185d0 124 }
rebonatto 0:c8f056a185d0 125
rebonatto 0:c8f056a185d0 126 void HttpPost::PreparePost(char *strfinal){
rebonatto 0:c8f056a185d0 127 char str[400];
rebonatto 0:c8f056a185d0 128 char aux[12];
rebonatto 0:c8f056a185d0 129 int i;
rebonatto 0:c8f056a185d0 130
rebonatto 0:c8f056a185d0 131 const char *header1 = "POST /capture.php HTTP/1.1\r\n";
rebonatto 0:c8f056a185d0 132 //"Host: 192.168.1.26\r\n"
rebonatto 0:c8f056a185d0 133 //"Content-Length: "
rebonatto 0:c8f056a185d0 134
rebonatto 0:c8f056a185d0 135 const char *header2 = "\r\n"
rebonatto 0:c8f056a185d0 136 "Content-Type: application/x-www-form-urlencoded\r\n"
rebonatto 0:c8f056a185d0 137 "\r\n";
rebonatto 0:c8f056a185d0 138
rebonatto 0:c8f056a185d0 139 //str = (char *) malloc(450);
rebonatto 0:c8f056a185d0 140 //strfinal = (char *) malloc(450);
rebonatto 0:c8f056a185d0 141 memset(str,0,400);
rebonatto 0:c8f056a185d0 142 memset(strfinal,0,500);
rebonatto 0:c8f056a185d0 143
rebonatto 0:c8f056a185d0 144 strcat(strfinal, header1);
rebonatto 0:c8f056a185d0 145 strcat(strfinal, "Host: ");
rebonatto 0:c8f056a185d0 146 strcat(strfinal, "192.168.1.26" );
rebonatto 0:c8f056a185d0 147 strcat(strfinal, "\r\n");
rebonatto 0:c8f056a185d0 148
rebonatto 0:c8f056a185d0 149 i = 1;
rebonatto 0:c8f056a185d0 150 sprintf(aux,"TYPE=0%d",i);
rebonatto 0:c8f056a185d0 151 strcat(str, aux);
rebonatto 0:c8f056a185d0 152
rebonatto 0:c8f056a185d0 153 i++;
rebonatto 0:c8f056a185d0 154 sprintf(aux,"&OUTLET=%02d",i);
rebonatto 0:c8f056a185d0 155 strcat(str, aux);
rebonatto 0:c8f056a185d0 156
rebonatto 0:c8f056a185d0 157 sprintf(aux,"&RFID=%s", "ABCDEFGH");
rebonatto 0:c8f056a185d0 158 strcat(str,aux);
rebonatto 0:c8f056a185d0 159
rebonatto 0:c8f056a185d0 160 i++;
rebonatto 0:c8f056a185d0 161 sprintf(aux,"&OFFSET=%04d",i);
rebonatto 0:c8f056a185d0 162 strcat(str,aux);
rebonatto 0:c8f056a185d0 163
rebonatto 0:c8f056a185d0 164 float f = i++;
rebonatto 0:c8f056a185d0 165 sprintf(aux,"&GAIN=%08X", *(unsigned int*)&f);
rebonatto 0:c8f056a185d0 166 strcat(str,aux);
rebonatto 0:c8f056a185d0 167
rebonatto 0:c8f056a185d0 168 f = i++;
rebonatto 0:c8f056a185d0 169 sprintf(aux,"&RMS=%08X",*(unsigned int*)&f);
rebonatto 0:c8f056a185d0 170 strcat(str,aux);
rebonatto 0:c8f056a185d0 171
rebonatto 0:c8f056a185d0 172 f = i++;
rebonatto 0:c8f056a185d0 173 sprintf(aux,"&MV=%08X",*(unsigned int*)&f);
rebonatto 0:c8f056a185d0 174 strcat(str,aux);
rebonatto 0:c8f056a185d0 175
rebonatto 0:c8f056a185d0 176 strcat(str,"&SIN=");
rebonatto 0:c8f056a185d0 177 for(i=0;i<12;i++)
rebonatto 0:c8f056a185d0 178 {
rebonatto 0:c8f056a185d0 179 char s[10];
rebonatto 0:c8f056a185d0 180 //According to RFC1738,RFC3986 the semicolon is a reserved character and must be encoded
rebonatto 0:c8f056a185d0 181 f += i;
rebonatto 0:c8f056a185d0 182 sprintf(s,"%08X",*(unsigned int*)&f);
rebonatto 0:c8f056a185d0 183 strcat(str,s);
rebonatto 0:c8f056a185d0 184 if (i < (12 - 1))
rebonatto 0:c8f056a185d0 185 strcat(str, "%3B");
rebonatto 0:c8f056a185d0 186 }
rebonatto 0:c8f056a185d0 187
rebonatto 0:c8f056a185d0 188 strcat(str,"&COS=");
rebonatto 0:c8f056a185d0 189 for(i=0;i<12;i++)
rebonatto 0:c8f056a185d0 190 {
rebonatto 0:c8f056a185d0 191 char c[10];
rebonatto 0:c8f056a185d0 192 //According to RFC1738,RFC3986 the semicolon is a reserved character and must be encoded
rebonatto 0:c8f056a185d0 193 f += i;
rebonatto 0:c8f056a185d0 194 sprintf(c,"%08X",*(unsigned int*)&f);
rebonatto 0:c8f056a185d0 195 strcat(str,c);
rebonatto 0:c8f056a185d0 196 if (i < (12-1))
rebonatto 0:c8f056a185d0 197 strcat(str, "%3B");
rebonatto 0:c8f056a185d0 198 }
rebonatto 0:c8f056a185d0 199 strcat(str,"\r\n");
rebonatto 0:c8f056a185d0 200
rebonatto 0:c8f056a185d0 201 char len[5];
rebonatto 0:c8f056a185d0 202 sprintf(len,"%d",strlen(str));
rebonatto 0:c8f056a185d0 203
rebonatto 0:c8f056a185d0 204 strcat(strfinal, "Content-Length: ");
rebonatto 0:c8f056a185d0 205 strcat(strfinal, len);
rebonatto 0:c8f056a185d0 206 strcat(strfinal, header2);
rebonatto 0:c8f056a185d0 207 strcat(strfinal, str);
rebonatto 0:c8f056a185d0 208 strcat(strfinal, "\r\n");
rebonatto 0:c8f056a185d0 209
rebonatto 0:c8f056a185d0 210 //printf("Request=[%s]\n",strfinal);
rebonatto 0:c8f056a185d0 211 //printf("Tamanho STR %d\n", strlen(str));
rebonatto 0:c8f056a185d0 212 //printf("Tamanho STRFINAL %d\n", strlen(strfinal));
rebonatto 0:c8f056a185d0 213 }