Ejemplo n.º 1
0
int s2e_web_get_port(char buf[], int app_state, int connection_state)
{
    chanend c_uart_config = (chanend) ((app_state_t *) app_state)->c_uart_config;

    int id = get_id_param(connection_state);
    if (id == -1)
        return 0;

    int len = itoa(telnet_to_uart_get_port(id), buf, 10, 0);
    return len;
}
static void execute_command(chanend c_xtcp,
                            chanend c_uart_config,
                            chanend c_flash_data,
                            xtcp_connection_t *conn,
                            connection_state_t *st)
{
  int out_channel_id;
  int flash_result;
  uart_config_data_t data1;
  int telnet_port1;

  switch (st->cmd)
    {
    case TELNET_CONFIG_CMD_SET:
      st->err = s2e_validate_uart_config(&st->config_in);
      if (st->err) {
        xtcp_init_send(c_xtcp, conn);
        return;
      }

      st->err = s2e_validate_telnet_port(st->config_in.channel_id,
                                         st->telnet_port_in);
      if (st->err) {
        xtcp_init_send(c_xtcp, conn);
        return;
      }

      uart_config_data_t *config = uart_get_config(st->config_in.channel_id);
      *config = st->config_in;
      uart_set_config(c_uart_config, &st->config_in);
      telnet_to_uart_set_port(c_xtcp,
                              st->config_in.channel_id,
                              st->telnet_port_in);

      out_channel_id = st->config_in.channel_id;
      break;
    case TELNET_CONFIG_CMD_GET:
      st->err = s2e_validate_channel_id(st->config_in.channel_id);
      if (st->err) {
        xtcp_init_send(c_xtcp, conn);
        return;
      }
      out_channel_id = st->config_in.channel_id;
      break;
    case TELNET_CONFIG_CMD_SAVE:
        // Received Save request from web page
        send_cmd_to_flash_thread(c_flash_data, UART_CONFIG, FLASH_CMD_SAVE);

        for(int i = 0; i < NUM_UART_CHANNELS; i++)
        {
            uart_config_data_t *data1 = uart_get_config(i);
            send_data_to_flash_thread(c_flash_data, data1);
        }

        flash_result = get_flash_access_result(c_flash_data);

        if (flash_result != S2E_FLASH_OK)
        {
            st->err = flash_err_msg;
            xtcp_init_send(c_xtcp, conn);
            return;
        }
        out_channel_id = 7;
        break;

    case TELNET_CONFIG_CMD_RESTORE:
        // Received Restore request from web page
        send_cmd_to_flash_thread(c_flash_data, UART_CONFIG, FLASH_CMD_RESTORE);
        flash_result = get_flash_access_result(c_flash_data);

        if (flash_result == S2E_FLASH_OK)
        {
            for (int i = 0; i < NUM_UART_CHANNELS; i++)
            {
                get_data_from_flash_thread(c_flash_data, &data1, &telnet_port1);
                uart_config_data_t *config = uart_get_config(data1.channel_id);
                *config = data1;
                uart_set_config(c_uart_config, &data1);
                telnet_to_uart_set_port(c_xtcp, data1.channel_id, telnet_port1);
            }
        }
        else
        {
            st->err = flash_err_msg;
            xtcp_init_send(c_xtcp, conn);
            return;
        }

        out_channel_id = 7;
        break;

    default:
      st->err = invalid_cmd_msg;
      xtcp_init_send(c_xtcp, conn);
      return;
      break;
  }
  st->config_out = *uart_get_config(out_channel_id);
  st->telnet_port_out = telnet_to_uart_get_port(out_channel_id);
  st->cmd_out = st->cmd;
  st->sending_ack = 1;
  xtcp_init_send(c_xtcp, conn);
}