Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of WebSocketClient by
WebsocketCaptureMonitor.cpp
00001 #include "WebsocketCaptureMonitor.h" 00002 #include "Pmed_reset.h" 00003 #include "Log.h" 00004 //#include "Settings.h" 00005 00006 void WebsocketCaptureMonitor::WebsocketCaptureMonitor_Thread(void const *arg) 00007 { 00008 //Log::writeEntry("WebSocket Capture Thread Start"); 00009 char mensagem[600]; 00010 CaptureMailbox& mbox = EventDetector::GetMailbox(); 00011 osEvent evt; 00012 while(true){ 00013 evt = mbox.get(); 00014 if(evt.status == osEventMail) 00015 { 00016 //printf("Entrou monitor de captura!!!!\n\n"); 00017 CaptureEvent* cap = (CaptureEvent*)evt.value.p; 00018 00019 //printf("Request=[%s]\n",mensagem); 00020 //Websocket::ReceiveMessage(mensagem); 00021 //memset(mensagem, 0, 600); 00022 //printf("Saiu do monitor de captura!!!!\n\n"); 00023 00024 //testar porque não funciona, ideia era se o websocket não estiver conectado, abrir um socket e enviar por post direto 00025 PrepareMessage(cap, mensagem, true); 00026 Websocket::ReceiveMessage(mensagem); 00027 00028 //if(Websocket::wsIsConnected()){ 00029 //PrepareMessage(cap, mensagem, true); 00030 //Websocket::ReceiveMessage(mensagem); 00031 /* 00032 printf("WebSocket conectado para o envio de dados!!!\n"); 00033 strcpy(tmp, mensagem); 00034 strcpy(mensagem, "#*InsertCaptureDB*#"); 00035 strcat(mensagem, tmp); 00036 00037 //memset(tmp,0,600); 00038 //alguma forma de tentar conectar o websocket 00039 */ 00040 //} 00041 //else 00042 //{ 00043 //TCPSocketConnection sock; 00044 //DoPost(sock,Settings::get_networkServer(),cap); 00045 //} 00046 mbox.free(cap); 00047 } 00048 } 00049 } 00050 00051 void WebsocketCaptureMonitor::PrepareMessage(CaptureEvent* dados, char *strfinal, bool isWS){ 00052 char str[400]; 00053 char aux[_PRTGMD_SETTINGS_DEFAULT_MAX_HARMONICS_]; 00054 int i; 00055 00056 const char *header1 = "POST /Ptgm-Scripts/capture.php HTTP/1.1\r\n"; 00057 //"Host: 192.168.1.26\r\n" 00058 //"Content-Length: " 00059 00060 const char *header2 = "\r\n" 00061 "Content-Type: application/x-www-form-urlencoded\r\n" 00062 "\r\n"; 00063 00064 //str = (char *) malloc(450); 00065 //strfinal = (char *) malloc(450); 00066 memset(str,0,400); 00067 memset(strfinal,0,500); 00068 00069 if(isWS){ 00070 strcat(strfinal, "#*InsertCaptureDB*#"); 00071 } 00072 00073 strcat(strfinal, header1); 00074 strcat(strfinal, "Host: "); 00075 strcat(strfinal, Settings::get_networkServer() ); 00076 strcat(strfinal, "\r\n"); 00077 00078 sprintf(aux,"TYPE=0%d",dados->get_Type()); 00079 strcat(str, aux); 00080 00081 sprintf(aux,"&OUTLET=%02d",dados->get_OutletNumber()); 00082 strcat(str, aux); 00083 00084 sprintf(aux,"&RFID=%s", dados->get_RFID()); 00085 strcat(str,aux); 00086 00087 sprintf(aux,"&OFFSET=%04d",dados->get_Offset()); 00088 strcat(str,aux); 00089 00090 float f = dados->get_Gain(); 00091 sprintf(aux,"&GAIN=%08X", *(unsigned int*)&f); 00092 strcat(str,aux); 00093 00094 f = dados->get_RMSValue(); 00095 sprintf(aux,"&RMS=%08X",*(unsigned int*)&f); 00096 strcat(str,aux); 00097 00098 f = dados->get_MeanValue(); 00099 sprintf(aux,"&MV=%08X",*(unsigned int*)&f); 00100 strcat(str,aux); 00101 00102 /* Adicionados para alteracao */ 00103 //printf("MV %f MV2 %f\n", dados->get_MeanValue(), dados->get_MV2()); 00104 f = dados->get_MV2(); 00105 sprintf(aux,"&MV2=%08X",*(unsigned int*)&f); 00106 strcat(str,aux); 00107 00108 sprintf(aux,"&UNDER=%04d",dados->get_Under()); 00109 strcat(str,aux); 00110 00111 sprintf(aux,"&OVER=%04d",dados->get_Over()); 00112 strcat(str,aux); 00113 00114 sprintf(aux,"&DURATION=%04d",dados->get_Duration()); 00115 strcat(str,aux); 00116 /* Ate Aqui */ 00117 00118 strcat(str,"&SIN="); 00119 for(i=0;i<Settings::get_maxHarmonics();i++) 00120 { 00121 char s[10]; 00122 //According to RFC1738,RFC3986 the semicolon is a reserved character and must be encoded 00123 f = dados->get_SineValue(i); 00124 sprintf(s,"%08X",*(unsigned int*)&f); 00125 strcat(str,s); 00126 if (i < (Settings::get_maxHarmonics() - 1)) 00127 strcat(str, "%3B"); 00128 } 00129 00130 strcat(str,"&COS="); 00131 for(i=0;i<Settings::get_maxHarmonics();i++) 00132 { 00133 char c[10]; 00134 //According to RFC1738,RFC3986 the semicolon is a reserved character and must be encoded 00135 f = dados->get_CossineValue(i); 00136 sprintf(c,"%08X",*(unsigned int*)&f); 00137 strcat(str,c); 00138 if (i < (Settings::get_maxHarmonics()-1)) 00139 strcat(str, "%3B"); 00140 } 00141 strcat(str,"\r\n"); 00142 00143 char len[5]; 00144 sprintf(len,"%d",strlen(str)); 00145 00146 strcat(strfinal, "Content-Length: "); 00147 strcat(strfinal, len); 00148 strcat(strfinal, header2); 00149 strcat(strfinal, str); 00150 strcat(strfinal, "\r\n"); 00151 00152 //printf("Request=[%s]\n",strfinal); 00153 //printf("Tamanho STR %d\n", strlen(str)); 00154 //printf("Tamanho STRFINAL %d\n", strlen(strfinal)); 00155 } 00156 00157 void WebsocketCaptureMonitor::DoPost(TCPSocketConnection sock, char *host, CaptureEvent* dados){ 00158 char http_cmd[400]; 00159 int escritos, r=-1, i; 00160 //FILE *f; 00161 00162 //Timer t; 00163 //t.start(); 00164 00165 //printf("HTTP Socket %s:%d\n", host, sock.get_port()); 00166 //printf("Antes Connect\n"); 00167 //rs= sock.connect(host, 80); 00168 //printf("%d\n", rs); 00169 //printf("Depois Connect "); 00170 00171 //t.stop(); 00172 //printf("HHTP: The time taken in connection was %d useconds\n", t.read_us()); 00173 00174 //http_cmd = (char *) malloc(500); 00175 memset(http_cmd, 0, 600); 00176 PrepareMessage( dados,http_cmd, false ); 00177 //printf("Fuga\n"); 00178 //printf("Tamanho do comando %d\n", strlen(http_cmd)); 00179 //printf("Comando: /* %s */\n", http_cmd); 00180 00181 //http_cmd = prepare_POST( dados ); 00182 00183 //printf("Tamanho comando %d\n", strlen(http_cmd)); 00184 //printf("Request \n [%s]\n", http_cmd); 00185 00186 00187 for(i=0; i < _PRTGMD_SETTINGS_DEFAULT_TRIES_ ; i++){ 00188 r = sock.connect(host, 80); 00189 if (r < 0) { 00190 printf("Error: Unable to connect to (%s) on port (%d) Try %d\n", host, 80, i); 00191 Thread::wait(Settings::get_delayTry()); 00192 } 00193 else 00194 break; 00195 } 00196 if (r == 0){ 00197 for(i=0; i < _PRTGMD_SETTINGS_DEFAULT_TRIES_ ; i++){ 00198 escritos = sock.send_all(http_cmd, strlen(http_cmd)); 00199 if(escritos != strlen(http_cmd)){ 00200 printf("Erro ao gravar no socket HTTP!! Escritos %d\t Tam %d Try %d\n", escritos, strlen(http_cmd), i); 00201 Thread::wait(Settings::get_delayTry()); 00202 } 00203 else 00204 break; 00205 } 00206 if ( i != _PRTGMD_SETTINGS_DEFAULT_TRIES_ ) 00207 Thread::wait(Settings::get_delaySend()); 00208 else{ 00209 //printf("Reset\n"); 00210 /*f = fopen(FILENAMERESET, "a"); 00211 if (f == NULL) 00212 f = fopen(FILENAMERESET, "w"); 00213 fprintf(f, "Reset - Connect\n"); 00214 fclose(f);*/ 00215 00216 Pmed_reset(PMEDLOG_HTTP_CONNECT); 00217 } 00218 00219 //Codigo para buscar o retorno do servidor HTTP 00220 /* 00221 printf("Vai pegar retorno\n"); 00222 00223 char buffer[300]; 00224 int ret; 00225 while (true) { 00226 ret = sock.receive(buffer, sizeof(buffer)-1); 00227 if (ret <= 0) 00228 break; 00229 buffer[ret] = '\0'; 00230 printf("Received %d chars from server:\n%s\n", ret, buffer); 00231 } 00232 */ 00233 } 00234 else{ 00235 printf("Reset\n"); 00236 /*f = fopen(FILENAMERESET, "a"); 00237 if (f == NULL) 00238 f = fopen(FILENAMERESET, "w"); 00239 fprintf(f, "Reset - Send\n"); 00240 fclose(f);*/ 00241 00242 Pmed_reset(PMEDLOG_HTTP_SEND); 00243 } 00244 00245 sock.close(); 00246 }
Generated on Fri Jul 22 2022 00:51:42 by
1.7.2
