//------------------------------------------------------------------------------------ static int gTR_E07(void) { // Leo y Evaluo la respuesta al comando AT*E2IPO ( open socket ) // La respuesta correcta debe ser CONNECT // La evalua la tarea tkGprsRX !!! pero de todos modos lo confirmo aqui. size_t pos; GPRS_stateVars.flags.modemResponse = MRSP_NONE; if ( g_strstr("CONNECT\0", &pos ) == TRUE ) { GPRS_stateVars.flags.modemResponse = MRSP_CREG; g_setSocketStatus(SOCKET_OPEN); } if ( g_strstr("ERROR\0", &pos ) == TRUE ) { GPRS_stateVars.flags.modemResponse = MRSP_ERROR; g_setSocketStatus(SOCKET_CLOSED); } g_printRxBuffer(); g_printExitMsg("E07\0"); return(gSST_OPENSOCKET_05); }
//------------------------------------------------------------------------------------ void tkGprsRx(void * pvParameters) { // Esta tarea lee y procesa las respuestas del GPRS. u08 c; size_t pos; ( void ) pvParameters; while ( !startTask ) vTaskDelay( ( TickType_t)( 100 / portTICK_RATE_MS ) ); snprintf_P( gprsRX_printfBuff,sizeof(gprsRX_printfBuff),PSTR("starting tkGprsRx..\r\n\0")); FreeRTOS_write( &pdUART1, gprsRX_printfBuff, sizeof(gprsRX_printfBuff) ); g_setSocketStatus(SOCKET_CLOSED); g_setModemResponse(MRSP_NONE); g_flushRXBuffer(); // loop for( ;; ) { u_clearWdg(WDG_GPRSRX); // el read se bloquea 50ms. lo que genera la espera. while ( FreeRTOS_read( &pdUART0, &c, 1 ) == 1 ) { gprsRx.buffer[gprsRx.ptr] = c; // Avanzo en modo circular gprsRx.ptr = ( gprsRx.ptr + 1 ) % ( UART0_RXBUFFER_LEN ); // Los comandos vienen terminados en CR if (c == '\r') { if ( g_strstr("OK\r", &pos ) == TRUE ) { // FreeRTOS_write( &pdUART1, "DEBUG ** MRSP_OK\r\n\0", sizeof("DEBUG ** MRSP_OK\r\n\0") ); // No podemos asumir que el socket este cerrado ya que en las respuestas HTTP puede venir // un OK\r. } if ( g_strstr("ERROR\r", &pos ) == TRUE ) { //FreeRTOS_write( &pdUART1, "DEBUG ** MRSP_ERROR\r\n\0", sizeof("DEBUG ** MRSP_ERROR\r\n\0") ); } if ( g_strstr("CONNECT", &pos ) == TRUE ) { g_setSocketStatus(SOCKET_OPEN); // FreeRTOS_write( &pdUART1, "DEBUG ** MRSP_CONNECT\r\n\0", sizeof("DEBUG ** MRSP_CONNECT\r\n\0") ); } if ( g_strstr("NO CARRIER", &pos ) == TRUE ) { g_setSocketStatus(SOCKET_CLOSED); // FreeRTOS_write( &pdUART1, "DEBUG ** MRSP_NO CARRIER\r\n\0", sizeof("DEBUG ** MRSP_NO CARRIER\r\n\0") ); } } } } }
//------------------------------------------------------------------------------------ static int gTR_A12(void) { // Envio un comando AT y espero 1s para evaluar la respuesta size_t pos; FreeRTOS_ioctl( &pdUART0,ioctl_UART_CLEAR_RX_BUFFER, NULL); FreeRTOS_ioctl( &pdUART0,ioctl_UART_CLEAR_TX_BUFFER, NULL); g_flushRXBuffer(); FreeRTOS_write( &pdUART0, "AT\r\0", sizeof("AT\r\0") ); vTaskDelay( ( TickType_t)( 1000 / portTICK_RATE_MS ) ); // Leo y Evaluo la respuesta al comando AT GPRS_flags.modemResponse = MRSP_NONE; if ( g_strstr("OK\0", &pos ) == TRUE ) { GPRS_flags.modemResponse = MRSP_OK; } // Muestro el resultado. g_printRxBuffer(); g_printExitMsg("A12\0"); return(gSST_OFF_06); }
bool APP_CC xrdp_iso_parse_connection_request(struct xrdp_iso* self, struct stream* s, int code) { unsigned char type; unsigned char flags; unsigned short length; unsigned int protocol; // Get cookie char* p = g_strstr(s->p, "\r\n"); if (p != NULL) // There is a cookie or a routingToken { int cookie_len = p - s->p; if (cookie_len > 0) { char* cookie = g_malloc(cookie_len + 1, 1); g_strncpy(cookie, s->p, cookie_len); printf("cookie: %s\n", cookie); s->p += (cookie_len + 2); // CR+LF g_free(cookie); } } if (s->p == s->end) { return true; } // parse rdpNegData in_uint8(s, type); // type in_uint8(s, flags); // flags in_uint16_le(s, length); // length in_uint32_le(s, protocol); // selectedProtocol if (type == TYPE_RDP_NEG_REQ && length == RDP_NEG_REQ_LEN) { self->need_negotiation_response = true; return true; } self->mcs_layer->sec_layer->rdp_layer->client_info.support_network_detection = false; return true; }