From 6c24b787816ed83152c994dbea5398a9fe4dbc34 Mon Sep 17 00:00:00 2001 From: fengzero Date: Fri, 7 Apr 2023 06:21:15 +0000 Subject: [PATCH 1/4] serial: more baudrate 300/200/150 --- include/neuron/connection/neu_connection.h | 3 +++ src/connection/connection.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/neuron/connection/neu_connection.h b/include/neuron/connection/neu_connection.h index cce6b69b..cbdc1950 100644 --- a/include/neuron/connection/neu_connection.h +++ b/include/neuron/connection/neu_connection.h @@ -43,6 +43,9 @@ typedef enum neu_conn_tty_baud { NEU_CONN_TTY_BAUD_1800, NEU_CONN_TTY_BAUD_1200, NEU_CONN_TTY_BAUD_600, + NEU_CONN_TTY_BAUD_300, + NEU_CONN_TTY_BAUD_200, + NEU_CONN_TTY_BAUD_150, } neu_conn_tty_baud_e; typedef enum neu_conn_tty_parity { diff --git a/src/connection/connection.c b/src/connection/connection.c index cec4cd90..cfd7d092 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -740,6 +740,18 @@ static void conn_connect(neu_conn_t *conn) cfsetospeed(&tty_opt, B600); cfsetispeed(&tty_opt, B600); break; + case NEU_CONN_TTY_BAUD_300: + cfsetospeed(&tty_opt, B300); + cfsetispeed(&tty_opt, B300); + break; + case NEU_CONN_TTY_BAUD_200: + cfsetospeed(&tty_opt, B200); + cfsetispeed(&tty_opt, B200); + break; + case NEU_CONN_TTY_BAUD_150: + cfsetospeed(&tty_opt, B150); + cfsetispeed(&tty_opt, B150); + break; } switch (conn->param.params.tty_client.parity) { From 7548de61c61d32e8bd9abce5846b836bca26f036 Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 10 Apr 2023 03:12:12 +0000 Subject: [PATCH 2/4] improve(connection): replace old client --- src/connection/connection.c | 48 ++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/src/connection/connection.c b/src/connection/connection.c index cfd7d092..1b9ad400 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -69,6 +69,7 @@ struct neu_conn { static void conn_tcp_server_add_client(neu_conn_t *conn, int fd, struct sockaddr_in client); static void conn_tcp_server_del_client(neu_conn_t *conn, int fd); +static void conn_tcp_server_replace_client(neu_conn_t *conn, int fd); static void conn_tcp_server_listen(neu_conn_t *conn); static void conn_tcp_server_stop(neu_conn_t *conn); @@ -180,16 +181,6 @@ int neu_conn_tcp_server_accept(neu_conn_t *conn) return -1; } - if (conn->tcp_server.n_client >= conn->param.params.tcp_server.max_link) { - close(fd); - zlog_warn(conn->param.log, "%s:%d accpet max link: %d, reject", - conn->param.params.tcp_server.ip, - conn->param.params.tcp_server.port, - conn->param.params.tcp_server.max_link); - pthread_mutex_unlock(&conn->mtx); - return -1; - } - if (conn->block) { struct timeval tv = { .tv_sec = conn->param.params.tcp_server.timeout / 1000, @@ -199,7 +190,23 @@ int neu_conn_tcp_server_accept(neu_conn_t *conn) setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); } - conn_tcp_server_add_client(conn, fd, client); + if (conn->tcp_server.n_client >= conn->param.params.tcp_server.max_link) { + int free_fd = conn_tcp_server_del_first_client(conn, fd); + if (free_fd > 0) { + zlog_warn(conn->param.log, "replace old client %d with %d", free_fd, + fd); + } else { + close(fd); + zlog_warn(conn->param.log, "%s:%d accpet max link: %d, reject", + conn->param.params.tcp_server.ip, + conn->param.params.tcp_server.port, + conn->param.params.tcp_server.max_link); + pthread_mutex_unlock(&conn->mtx); + return -1; + } + } else { + conn_tcp_server_add_client(conn, fd, client); + } conn->is_connected = true; conn->connected(conn->data, fd); @@ -891,6 +898,25 @@ static void conn_tcp_server_del_client(neu_conn_t *conn, int fd) } } +static void conn_tcp_server_replace_client(neu_conn_t *conn, int fd) +{ + int ret = 0; + + for (int i = 0; i < conn->param.params.tcp_server.max_link; i++) { + if (conn->tcp_server.clients[i].fd > 0) { + ret = conn->tcp_server.clients[i].fd; + + close(conn->tcp_server.clients[i].fd); + conn->tcp_server.clients[i].fd = 0; + + conn->tcp_server.clients[i].fd = fd; + return; + } + } + + return ret; +} + int neu_conn_stream_consume(neu_conn_t *conn, void *context, neu_conn_stream_consume_fn fn) { From e4e00b2d1b6abcdcaa01a5a2ab2e60862ef16119 Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 10 Apr 2023 03:25:44 +0000 Subject: [PATCH 3/4] fix compile warning --- src/connection/connection.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/connection/connection.c b/src/connection/connection.c index 1b9ad400..10b2de0e 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -69,7 +69,7 @@ struct neu_conn { static void conn_tcp_server_add_client(neu_conn_t *conn, int fd, struct sockaddr_in client); static void conn_tcp_server_del_client(neu_conn_t *conn, int fd); -static void conn_tcp_server_replace_client(neu_conn_t *conn, int fd); +static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd); static void conn_tcp_server_listen(neu_conn_t *conn); static void conn_tcp_server_stop(neu_conn_t *conn); @@ -191,7 +191,7 @@ int neu_conn_tcp_server_accept(neu_conn_t *conn) } if (conn->tcp_server.n_client >= conn->param.params.tcp_server.max_link) { - int free_fd = conn_tcp_server_del_first_client(conn, fd); + int free_fd = conn_tcp_server_replace_client(conn, fd); if (free_fd > 0) { zlog_warn(conn->param.log, "replace old client %d with %d", free_fd, fd); @@ -898,23 +898,21 @@ static void conn_tcp_server_del_client(neu_conn_t *conn, int fd) } } -static void conn_tcp_server_replace_client(neu_conn_t *conn, int fd) +static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd) { - int ret = 0; - for (int i = 0; i < conn->param.params.tcp_server.max_link; i++) { if (conn->tcp_server.clients[i].fd > 0) { - ret = conn->tcp_server.clients[i].fd; + int ret = conn->tcp_server.clients[i].fd; close(conn->tcp_server.clients[i].fd); conn->tcp_server.clients[i].fd = 0; conn->tcp_server.clients[i].fd = fd; - return; + return ret; } } - return ret; + return 0; } int neu_conn_stream_consume(neu_conn_t *conn, void *context, From 5840ff94853914697276368970afbdd8acb15944 Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 10 Apr 2023 03:33:54 +0000 Subject: [PATCH 4/4] fix(connection): replace client --- src/connection/connection.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/connection/connection.c b/src/connection/connection.c index 10b2de0e..ca098f97 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -69,7 +69,8 @@ struct neu_conn { static void conn_tcp_server_add_client(neu_conn_t *conn, int fd, struct sockaddr_in client); static void conn_tcp_server_del_client(neu_conn_t *conn, int fd); -static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd); +static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd, + struct sockaddr_in client); static void conn_tcp_server_listen(neu_conn_t *conn); static void conn_tcp_server_stop(neu_conn_t *conn); @@ -191,7 +192,7 @@ int neu_conn_tcp_server_accept(neu_conn_t *conn) } if (conn->tcp_server.n_client >= conn->param.params.tcp_server.max_link) { - int free_fd = conn_tcp_server_replace_client(conn, fd); + int free_fd = conn_tcp_server_replace_client(conn, fd, client); if (free_fd > 0) { zlog_warn(conn->param.log, "replace old client %d with %d", free_fd, fd); @@ -898,7 +899,8 @@ static void conn_tcp_server_del_client(neu_conn_t *conn, int fd) } } -static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd) +static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd, + struct sockaddr_in client) { for (int i = 0; i < conn->param.params.tcp_server.max_link; i++) { if (conn->tcp_server.clients[i].fd > 0) { @@ -907,7 +909,8 @@ static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd) close(conn->tcp_server.clients[i].fd); conn->tcp_server.clients[i].fd = 0; - conn->tcp_server.clients[i].fd = fd; + conn->tcp_server.clients[i].fd = fd; + conn->tcp_server.clients[i].client = client; return ret; } }