tcp_cmd
- Add putty compatibility - Fix debug message with garbage cmd string if you press enter twice by zero initialising variables and checking when printing
This commit is contained in:
@@ -8,6 +8,8 @@
|
|||||||
#define MAX_TOKENS 10
|
#define MAX_TOKENS 10
|
||||||
#define MAX_CMD_LEN 50
|
#define MAX_CMD_LEN 50
|
||||||
|
|
||||||
|
#define LINUX
|
||||||
|
|
||||||
static const char* TAG = "tcp_cmd";
|
static const char* TAG = "tcp_cmd";
|
||||||
static uint32_t color_txt = 0xffffffff; // Store text color
|
static uint32_t color_txt = 0xffffffff; // Store text color
|
||||||
static uint32_t color_bg = 0xff000000; // Store background color
|
static uint32_t color_bg = 0xff000000; // Store background color
|
||||||
@@ -75,7 +77,7 @@ void tcp_cmd_remove_newline(char* str, size_t len) {
|
|||||||
|
|
||||||
char* tcp_cmd_remove_leading_space(char* str, size_t len) {
|
char* tcp_cmd_remove_leading_space(char* str, size_t len) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
if (str == NULL) {
|
if (str == NULL || str[0] == '\0' || len == 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
while (str[i] != '\0' && i < len) {
|
while (str[i] != '\0' && i < len) {
|
||||||
@@ -108,6 +110,9 @@ void tcp_cmd_str_tolower(char* str) {
|
|||||||
* @return char* The next token
|
* @return char* The next token
|
||||||
*/
|
*/
|
||||||
char* tcp_cmd_get_next_token(char* input, const char* delimiters, char** next) {
|
char* tcp_cmd_get_next_token(char* input, const char* delimiters, char** next) {
|
||||||
|
if (input == NULL && *next == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (input == NULL) {
|
if (input == NULL) {
|
||||||
input = *next;
|
input = *next;
|
||||||
}
|
}
|
||||||
@@ -350,11 +355,11 @@ static bool tcp_cmd_parser(struct tcp_pcb* pcb, int argc, char** argv) {
|
|||||||
*/
|
*/
|
||||||
err_t tcp_cmd_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) {
|
err_t tcp_cmd_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) {
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
char cmd[MAX_CMD_LEN];
|
char cmd[MAX_CMD_LEN] = {0};
|
||||||
char* cmd_ptr;
|
char* cmd_ptr = NULL;
|
||||||
char* argv[MAX_TOKENS];
|
char* argv[MAX_TOKENS] = {0};
|
||||||
bool close_conn = false;
|
bool close_conn = false;
|
||||||
char* next;
|
char* next = NULL;
|
||||||
|
|
||||||
LWIP_UNUSED_ARG(arg);
|
LWIP_UNUSED_ARG(arg);
|
||||||
|
|
||||||
@@ -382,7 +387,9 @@ err_t tcp_cmd_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) {
|
|||||||
tcp_recved(pcb, p->tot_len);
|
tcp_recved(pcb, p->tot_len);
|
||||||
|
|
||||||
tcp_cmd_remove_newline(cmd, strlen(cmd));
|
tcp_cmd_remove_newline(cmd, strlen(cmd));
|
||||||
|
if (cmd[0] != '\0') {
|
||||||
LOG_INFO(TAG, "cmd: %s", cmd);
|
LOG_INFO(TAG, "cmd: %s", cmd);
|
||||||
|
}
|
||||||
// Split string into tokens by delimiter (space)
|
// Split string into tokens by delimiter (space)
|
||||||
cmd_ptr = tcp_cmd_remove_leading_space(cmd, strlen(cmd));
|
cmd_ptr = tcp_cmd_remove_leading_space(cmd, strlen(cmd));
|
||||||
argv[0] = tcp_cmd_get_next_token(cmd_ptr, " ", &next);
|
argv[0] = tcp_cmd_get_next_token(cmd_ptr, " ", &next);
|
||||||
@@ -408,9 +415,17 @@ err_t tcp_cmd_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) {
|
|||||||
if (close_conn) {
|
if (close_conn) {
|
||||||
LOG_INFO(TAG, "Closing connection");
|
LOG_INFO(TAG, "Closing connection");
|
||||||
tcp_cmd_close(pcb);
|
tcp_cmd_close(pcb);
|
||||||
|
#ifdef LINUX
|
||||||
} else {
|
} else {
|
||||||
tcp_cmd_write(pcb, "$>");
|
tcp_cmd_write(pcb, "$>");
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
} else if(argc > 0) {
|
||||||
|
tcp_cmd_write(pcb, "$>");
|
||||||
|
} else {
|
||||||
|
tcp_cmd_write(pcb, "");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
defer:
|
defer:
|
||||||
pbuf_free(p);
|
pbuf_free(p);
|
||||||
|
|||||||
Reference in New Issue
Block a user