//------------------------------------------------------------------------------------
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);
}
Exemple #2
0
//------------------------------------------------------------------------------------
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);
}
Exemple #4
0
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;
}