First source code changes for security.

This basically parameterizes the serial bridges to ports 23 and 2323.
pull/206/merge^2
dannybackx 9 years ago
parent bd38e2e00b
commit 49fc8c9643
  1. 11
      Makefile
  2. 4
      esp-link/config.h
  3. 11
      esp-link/main.c
  4. 55
      serial/serbridge.c
  5. 3
      serial/serbridge.h

@ -99,6 +99,15 @@ MCU_ISP_PIN ?= 13
LED_CONN_PIN ?= 0 LED_CONN_PIN ?= 0
# GPIO pin used for "serial activity" LED, active low # GPIO pin used for "serial activity" LED, active low
LED_SERIAL_PIN ?= 14 LED_SERIAL_PIN ?= 14
#
# Default settings for access over TCP/IP connections
#
# Modes are 0 (unsecure), 1 (disabled), 2 (secure)
#
PORT1_MODE ?= 0
PORT1_PORTNUMBER ?= 23
PORT2_MODE ?= 0
PORT2_PORTNUMBER ?= 2323
# --------------- esp-link modules config options --------------- # --------------- esp-link modules config options ---------------
@ -243,6 +252,8 @@ CFLAGS += -Os -ggdb -std=c99 -Werror -Wpointer-arith -Wundef -Wall -Wl,-EL -fno-
-D__ets__ -DICACHE_FLASH -Wno-address -DFIRMWARE_SIZE=$(ESP_FLASH_MAX) \ -D__ets__ -DICACHE_FLASH -Wno-address -DFIRMWARE_SIZE=$(ESP_FLASH_MAX) \
-DMCU_RESET_PIN=$(MCU_RESET_PIN) -DMCU_ISP_PIN=$(MCU_ISP_PIN) \ -DMCU_RESET_PIN=$(MCU_RESET_PIN) -DMCU_ISP_PIN=$(MCU_ISP_PIN) \
-DLED_CONN_PIN=$(LED_CONN_PIN) -DLED_SERIAL_PIN=$(LED_SERIAL_PIN) \ -DLED_CONN_PIN=$(LED_CONN_PIN) -DLED_SERIAL_PIN=$(LED_SERIAL_PIN) \
-DPORT1_PORTNUMBER=$(PORT1_PORTNUMBER) -DPORT1_MODE=$(PORT1_MODE) \
-DPORT2_PORTNUMBER=$(PORT2_PORTNUMBER) -DPORT2_MODE=$(PORT2_MODE) \
-DVERSION="$(VERSION)" -DVERSION="$(VERSION)"
# linker flags used to generate the main object file # linker flags used to generate the main object file

@ -41,6 +41,10 @@ typedef struct {
int8_t data_bits; int8_t data_bits;
int8_t parity; int8_t parity;
int8_t stop_bits; int8_t stop_bits;
int8_t port1_mode, // Security
port2_mode;
uint16_t port1_portnumber,
port2_portnumber;
} FlashConfig; } FlashConfig;
extern FlashConfig flashConfig; extern FlashConfig flashConfig;

@ -89,6 +89,7 @@ HttpdBuiltInUrl builtInUrls[] = {
{ "/wifi/connstatus", cgiWiFiConnStatus, NULL }, { "/wifi/connstatus", cgiWiFiConnStatus, NULL },
{ "/wifi/setmode", cgiWiFiSetMode, NULL }, { "/wifi/setmode", cgiWiFiSetMode, NULL },
{ "/wifi/special", cgiWiFiSpecial, NULL }, { "/wifi/special", cgiWiFiSpecial, NULL },
{ "/wifi/security", jsonWiFiSecurity, NULL },
{ "/wifi/apinfo", cgiApSettingsInfo, NULL }, { "/wifi/apinfo", cgiApSettingsInfo, NULL },
{ "/wifi/apchange", cgiApSettingsChange, NULL }, { "/wifi/apchange", cgiApSettingsChange, NULL },
{ "/system/info", cgiSystemInfo, NULL }, { "/system/info", cgiSystemInfo, NULL },
@ -179,7 +180,15 @@ user_init(void) {
WEB_Init(); WEB_Init();
// init the wifi-serial transparent bridge (port 23) // init the wifi-serial transparent bridge (port 23)
serbridgeInit(23, 2323); flashConfig.port1_portnumber = 23;
flashConfig.port2_portnumber = 2323;
flashConfig.port1_mode = 0;
flashConfig.port2_mode = 0;
serbridgeInit();
serbridgeStart(0, flashConfig.port1_portnumber, flashConfig.port1_mode);
serbridgeStart(1, flashConfig.port2_portnumber, flashConfig.port2_mode);
uart_add_recv_cb(&serbridgeUartCb); uart_add_recv_cb(&serbridgeUartCb);
#ifdef SHOW_HEAP_USE #ifdef SHOW_HEAP_USE
os_timer_disarm(&prHeapTimer); os_timer_disarm(&prHeapTimer);

@ -16,9 +16,8 @@
#define syslog(X1...) #define syslog(X1...)
#endif #endif
static struct espconn serbridgeConn1; // plain bridging port static struct espconn serbridgeConn[2]; // plain bridging port
static struct espconn serbridgeConn2; // programming port static esp_tcp serbridgeTcp[2];
static esp_tcp serbridgeTcp1, serbridgeTcp2;
static int8_t mcu_reset_pin, mcu_isp_pin; static int8_t mcu_reset_pin, mcu_isp_pin;
uint8_t in_mcu_flashing; // for disabling slip during MCU flashing uint8_t in_mcu_flashing; // for disabling slip during MCU flashing
@ -421,7 +420,7 @@ serbridgeConnectCb(void *arg)
connData[i].readytosend = true; connData[i].readytosend = true;
connData[i].conn_mode = cmInit; connData[i].conn_mode = cmInit;
// if it's the second port we start out in programming mode // if it's the second port we start out in programming mode
if (conn->proto.tcp->local_port == serbridgeConn2.proto.tcp->local_port) if (conn->proto.tcp->local_port == serbridgeConn[1].proto.tcp->local_port)
connData[i].conn_mode = cmPGMInit; connData[i].conn_mode = cmPGMInit;
espconn_regist_recvcb(conn, serbridgeRecvCb); espconn_regist_recvcb(conn, serbridgeRecvCb);
@ -470,35 +469,33 @@ serbridgeInitPins()
// Start transparent serial bridge TCP server on specified port (typ. 23) // Start transparent serial bridge TCP server on specified port (typ. 23)
void ICACHE_FLASH_ATTR void ICACHE_FLASH_ATTR
serbridgeInit(int port1, int port2) serbridgeInit()
{ {
serbridgeInitPins(); serbridgeInitPins();
os_memset(connData, 0, sizeof(connData)); os_memset(connData, 0, sizeof(connData));
os_memset(&serbridgeTcp1, 0, sizeof(serbridgeTcp1)); os_memset(&serbridgeTcp[0], 0, sizeof(serbridgeTcp[0]));
os_memset(&serbridgeTcp2, 0, sizeof(serbridgeTcp2)); os_memset(&serbridgeTcp[1], 0, sizeof(serbridgeTcp[1]));
}
// set-up the primary port for plain bridging
serbridgeConn1.type = ESPCONN_TCP; // Start transparent serial bridge TCP server on specified port (typ. 23)
serbridgeConn1.state = ESPCONN_NONE; void ICACHE_FLASH_ATTR
serbridgeTcp1.local_port = port1; serbridgeStart(int ix, int port, int mode)
serbridgeConn1.proto.tcp = &serbridgeTcp1; {
if (ix < 0 || ix > 2) // FIXME hardcoded limit
espconn_regist_connectcb(&serbridgeConn1, serbridgeConnectCb); return;
espconn_accept(&serbridgeConn1); if (0 < port && port < 65536) {
espconn_tcp_set_max_con_allow(&serbridgeConn1, MAX_CONN); // set-up the primary port for plain bridging
espconn_regist_time(&serbridgeConn1, SER_BRIDGE_TIMEOUT, 0); serbridgeConn[ix].type = ESPCONN_TCP;
serbridgeConn[ix].state = ESPCONN_NONE;
// set-up the secondary port for programming serbridgeTcp[ix].local_port = port;
serbridgeConn2.type = ESPCONN_TCP; serbridgeConn[ix].proto.tcp = &serbridgeTcp[ix];
serbridgeConn2.state = ESPCONN_NONE;
serbridgeTcp2.local_port = port2; espconn_regist_connectcb(&serbridgeConn[ix], serbridgeConnectCb);
serbridgeConn2.proto.tcp = &serbridgeTcp2; espconn_accept(&serbridgeConn[ix]);
espconn_tcp_set_max_con_allow(&serbridgeConn[ix], MAX_CONN);
espconn_regist_connectcb(&serbridgeConn2, serbridgeConnectCb); espconn_regist_time(&serbridgeConn[ix], SER_BRIDGE_TIMEOUT, 0);
espconn_accept(&serbridgeConn2); }
espconn_tcp_set_max_con_allow(&serbridgeConn2, MAX_CONN);
espconn_regist_time(&serbridgeConn2, SER_BRIDGE_TIMEOUT, 0);
} }
int ICACHE_FLASH_ATTR serbridgeInMCUFlashing() int ICACHE_FLASH_ATTR serbridgeInMCUFlashing()

@ -31,7 +31,8 @@ typedef struct serbridgeConnData {
} serbridgeConnData; } serbridgeConnData;
// port1 is transparent&programming, second port is programming only // port1 is transparent&programming, second port is programming only
void ICACHE_FLASH_ATTR serbridgeInit(int port1, int port2); void ICACHE_FLASH_ATTR serbridgeInit();
void ICACHE_FLASH_ATTR serbridgeStart(int ix, int port, int mode);
void ICACHE_FLASH_ATTR serbridgeInitPins(void); void ICACHE_FLASH_ATTR serbridgeInitPins(void);
void ICACHE_FLASH_ATTR serbridgeUartCb(char *buf, short len); void ICACHE_FLASH_ATTR serbridgeUartCb(char *buf, short len);
void ICACHE_FLASH_ATTR serbridgeReset(); void ICACHE_FLASH_ATTR serbridgeReset();

Loading…
Cancel
Save