summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--cc3200/Makefile2
-rw-r--r--cc3200/ftp/ftp.c13
-rw-r--r--cc3200/serverstask.c15
-rw-r--r--cc3200/serverstask.h7
-rw-r--r--cc3200/telnet/telnet.c55
5 files changed, 57 insertions, 35 deletions
diff --git a/cc3200/Makefile b/cc3200/Makefile
index 29318d44ec..cdc6bddb1d 100644
--- a/cc3200/Makefile
+++ b/cc3200/Makefile
@@ -16,7 +16,7 @@ include ../py/mkenv.mk
CROSS_COMPILE ?= arm-none-eabi-
CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -march=armv7e-m -mabi=aapcs -mcpu=cortex-m4 -msoft-float -mfloat-abi=soft -fsingle-precision-constant -Wdouble-promotion
-CFLAGS = -Wall -Wpointer-arith -Werror -ansi -std=gnu99 -nostdlib $(CFLAGS_CORTEX_M4)
+CFLAGS = -Wall -Wpointer-arith -Werror -ansi -std=gnu99 -nostdlib -lgcc $(CFLAGS_CORTEX_M4)
CFLAGS += -g -ffunction-sections -fdata-sections -fno-common -fsigned-char -mno-unaligned-access
CFLAGS += -Iboards/$(BOARD)
diff --git a/cc3200/ftp/ftp.c b/cc3200/ftp/ftp.c
index 8a2afa2728..ebc9dcd9a0 100644
--- a/cc3200/ftp/ftp.c
+++ b/cc3200/ftp/ftp.c
@@ -671,7 +671,7 @@ static void ftp_process_cmd (void) {
case E_FTP_CMD_USER:
ftp_pop_param (&bufptr, ftp_scratch_buffer);
if (!memcmp(ftp_scratch_buffer, servers_user, MAX(strlen(ftp_scratch_buffer), strlen(servers_user)))) {
- ftp_data.loggin.uservalid = true;
+ ftp_data.loggin.uservalid = true && (strlen(servers_user) == strlen(ftp_scratch_buffer));
}
ftp_send_reply(331, NULL);
break;
@@ -679,12 +679,13 @@ static void ftp_process_cmd (void) {
ftp_pop_param (&bufptr, ftp_scratch_buffer);
if (!memcmp(ftp_scratch_buffer, servers_pass, MAX(strlen(ftp_scratch_buffer), strlen(servers_pass))) &&
ftp_data.loggin.uservalid) {
- ftp_data.loggin.passvalid = true;
- ftp_send_reply(230, NULL);
- }
- else {
- ftp_send_reply(530, NULL);
+ ftp_data.loggin.passvalid = true && (strlen(servers_pass) == strlen(ftp_scratch_buffer));
+ if (ftp_data.loggin.passvalid) {
+ ftp_send_reply(230, NULL);
+ break;
+ }
}
+ ftp_send_reply(530, NULL);
break;
case E_FTP_CMD_PASV:
{
diff --git a/cc3200/serverstask.c b/cc3200/serverstask.c
index 55c0bbfbf8..528c480ee1 100644
--- a/cc3200/serverstask.c
+++ b/cc3200/serverstask.c
@@ -25,15 +25,14 @@
*/
#include <stdint.h>
+#include <string.h>
#include "py/mpconfig.h"
#include MICROPY_HAL_H
#include "py/misc.h"
-#include "simplelink.h"
#include "serverstask.h"
-#include "modwlan.h"
+#include "simplelink.h"
#include "debug.h"
-#include "mpexception.h"
#include "telnet.h"
#include "ftp.h"
#include "pybwdt.h"
@@ -67,8 +66,8 @@ static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do
/******************************************************************************
DECLARE PUBLIC DATA
******************************************************************************/
-char *servers_user;
-char *servers_pass;
+char servers_user[SERVERS_USER_PASS_LEN_MAX + 1];
+char servers_pass[SERVERS_USER_PASS_LEN_MAX + 1];
/******************************************************************************
DECLARE PUBLIC FUNCTIONS
@@ -77,8 +76,6 @@ void TASK_Servers (void *pvParameters) {
bool cycle = false;
- ASSERT ((servers_user = mem_Malloc(SERVERS_USER_LEN_MAX + 1)) != NULL);
- ASSERT ((servers_pass = mem_Malloc(SERVERS_PASS_LEN_MAX + 1)) != NULL);
strcpy (servers_user, SERVERS_DEF_USER);
strcpy (servers_pass, SERVERS_DEF_PASS);
@@ -148,8 +145,8 @@ void servers_close_socket (int16_t *sd) {
}
void servers_set_login (char *user, char *pass) {
- memcpy(servers_user, user, SERVERS_USER_LEN_MAX);
- memcpy(servers_pass, pass, SERVERS_PASS_LEN_MAX);
+ memcpy(servers_user, user, SERVERS_USER_PASS_LEN_MAX);
+ memcpy(servers_pass, pass, SERVERS_USER_PASS_LEN_MAX);
}
/******************************************************************************
diff --git a/cc3200/serverstask.h b/cc3200/serverstask.h
index ae44ac4376..04b1367ff2 100644
--- a/cc3200/serverstask.h
+++ b/cc3200/serverstask.h
@@ -36,8 +36,7 @@
#define SERVERS_SSID_LEN_MAX 16
#define SERVERS_KEY_LEN_MAX 16
-#define SERVERS_USER_LEN_MAX 16
-#define SERVERS_PASS_LEN_MAX 16
+#define SERVERS_USER_PASS_LEN_MAX 16
#define SERVERS_CYCLE_TIME_MS 5
@@ -48,8 +47,8 @@
/******************************************************************************
EXPORTED DATA
******************************************************************************/
-extern char *servers_user;
-extern char *servers_pass;
+extern char servers_user[];
+extern char servers_pass[];
/******************************************************************************
DECLARE PUBLIC FUNCTIONS
diff --git a/cc3200/telnet/telnet.c b/cc3200/telnet/telnet.c
index 4100cec61a..b96a09521e 100644
--- a/cc3200/telnet/telnet.c
+++ b/cc3200/telnet/telnet.c
@@ -142,6 +142,28 @@ void telnet_init (void) {
telnet_data.state = E_TELNET_STE_DISABLED;
}
+
+static int telnet_process_credential (char *credential, _i16 rxLen) {
+ telnet_data.rxWindex += rxLen;
+ if (telnet_data.rxWindex >= SERVERS_USER_PASS_LEN_MAX) {
+ telnet_data.rxWindex = SERVERS_USER_PASS_LEN_MAX;
+ }
+
+ uint8_t *p = telnet_data.rxBuffer + SERVERS_USER_PASS_LEN_MAX;
+ // if a '\r' is found, or the length exceeds the max username length
+ if ((p = memchr(telnet_data.rxBuffer, '\r', telnet_data.rxWindex)) || (telnet_data.rxWindex >= SERVERS_USER_PASS_LEN_MAX)) {
+ uint8_t len = p - telnet_data.rxBuffer;
+
+ telnet_data.rxWindex = 0;
+ if ((len > 0) && (memcmp(credential, telnet_data.rxBuffer, MAX(len, strlen(credential))) == 0)) {
+ return 1;
+ }
+ return -1;
+ }
+ return 0;
+}
+
+
void telnet_run (void) {
_i16 rxLen;
switch (telnet_data.state) {
@@ -170,12 +192,14 @@ void telnet_run (void) {
telnet_send_and_proceed((void *)telnet_request_user, strlen(telnet_request_user), E_TELNET_STE_SUB_GET_USER);
break;
case E_TELNET_STE_SUB_GET_USER:
- if (E_TELNET_RESULT_OK == telnet_recv_text_non_blocking(telnet_data.rxBuffer, TELNET_RX_BUFFER_SIZE, &rxLen)) {
- // Skip /r/n
- if (rxLen < 2 || memcmp(servers_user, (const char *)telnet_data.rxBuffer, MAX((rxLen - 2), strlen(servers_user)))) {
- telnet_data.credentialsValid = false;
+ if (E_TELNET_RESULT_OK == telnet_recv_text_non_blocking(telnet_data.rxBuffer + telnet_data.rxWindex,
+ TELNET_RX_BUFFER_SIZE - telnet_data.rxWindex,
+ &rxLen)) {
+ int result;
+ if ((result = telnet_process_credential (servers_user, rxLen))) {
+ telnet_data.credentialsValid = result > 0 ? true : false;
+ telnet_data.substate.connected = E_TELNET_STE_SUB_REQ_PASSWORD;
}
- telnet_data.substate.connected = E_TELNET_STE_SUB_REQ_PASSWORD;
}
break;
case E_TELNET_STE_SUB_REQ_PASSWORD:
@@ -187,16 +211,17 @@ void telnet_run (void) {
telnet_send_and_proceed((void *)telnet_options_pass, sizeof(telnet_options_pass), E_TELNET_STE_SUB_GET_PASSWORD);
break;
case E_TELNET_STE_SUB_GET_PASSWORD:
- if (E_TELNET_RESULT_OK == telnet_recv_text_non_blocking(telnet_data.rxBuffer, TELNET_RX_BUFFER_SIZE, &rxLen)) {
- // skip /r/n
- if (rxLen < 2 || memcmp(servers_pass, (const char *)telnet_data.rxBuffer, MAX((rxLen - 2), strlen(servers_pass)))) {
- telnet_data.credentialsValid = false;
- }
- if (telnet_data.credentialsValid) {
- telnet_data.substate.connected = E_TELNET_STE_SUB_SND_REPL_OPTIONS;
- }
- else {
- telnet_data.substate.connected = E_TELNET_STE_SUB_INVALID_LOGGIN;
+ if (E_TELNET_RESULT_OK == telnet_recv_text_non_blocking(telnet_data.rxBuffer + telnet_data.rxWindex,
+ TELNET_RX_BUFFER_SIZE - telnet_data.rxWindex,
+ &rxLen)) {
+ int result;
+ if ((result = telnet_process_credential (servers_pass, rxLen))) {
+ if ((telnet_data.credentialsValid = telnet_data.credentialsValid && (result > 0 ? true : false))) {
+ telnet_data.substate.connected = E_TELNET_STE_SUB_SND_REPL_OPTIONS;
+ }
+ else {
+ telnet_data.substate.connected = E_TELNET_STE_SUB_INVALID_LOGGIN;
+ }
}
}
break;