PingPong
Dependencies: EthernetInterface_pm mbed-rtos mbed
Codes/Http_post.cpp@1:b343d9cd769a, 2014-03-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |