Skip to content

Commit 73a8e58

Browse files
committed
fix: refactor server connection initialization with improved parameter validation and error handling
Signed-off-by: Dengfeng Liu <[email protected]>
1 parent 5c36eca commit 73a8e58

File tree

2 files changed

+66
-14
lines changed

2 files changed

+66
-14
lines changed

control.c

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -682,25 +682,67 @@ keep_control_alive()
682682
set_ticker_ping_timer(main_ctl->ticker_ping);
683683
}
684684

685-
static void
686-
start_base_connect()
685+
static int init_server_connection(struct bufferevent **bev_out,
686+
struct event_base *base,
687+
const char *server_addr,
688+
int server_port)
689+
{
690+
if (!bev_out || !base || !server_addr) {
691+
debug(LOG_ERR, "Invalid parameters for server connection");
692+
return -1;
693+
}
694+
695+
// Free existing connection if any
696+
if (*bev_out) {
697+
bufferevent_free(*bev_out);
698+
*bev_out = NULL;
699+
}
700+
701+
// Create new connection
702+
*bev_out = connect_server(base, server_addr, server_port);
703+
if (!*bev_out) {
704+
debug(LOG_ERR, "Failed to connect to server [%s:%d]: [%d: %s]",
705+
server_addr, server_port, errno, strerror(errno));
706+
return -1;
707+
}
708+
709+
debug(LOG_INFO, "Connecting to server [%s:%d]...", server_addr, server_port);
710+
return 0;
711+
}
712+
713+
static int setup_server_callbacks(struct bufferevent *bev)
714+
{
715+
if (!bev) {
716+
debug(LOG_ERR, "Invalid bufferevent for callback setup");
717+
return -1;
718+
}
719+
720+
bufferevent_enable(bev, EV_WRITE|EV_READ);
721+
bufferevent_setcb(bev, recv_cb, NULL, connect_event_cb, NULL);
722+
return 0;
723+
}
724+
725+
static void start_base_connect()
687726
{
688727
struct common_conf *c_conf = get_common_config();
689-
if (main_ctl->connect_bev)
690-
bufferevent_free(main_ctl->connect_bev);
728+
if (!c_conf) {
729+
debug(LOG_ERR, "Failed to get common config");
730+
exit(1);
731+
}
691732

692-
main_ctl->connect_bev = connect_server(main_ctl->connect_base,
693-
c_conf->server_addr,
694-
c_conf->server_port);
695-
if ( ! main_ctl->connect_bev) {
696-
debug(LOG_ERR, "error: connect server [%s:%d] failed: [%d: %s]",
697-
c_conf->server_addr, c_conf->server_port, errno, strerror(errno));
698-
exit(0);
733+
// Initialize server connection
734+
if (init_server_connection(&main_ctl->connect_bev,
735+
main_ctl->connect_base,
736+
c_conf->server_addr,
737+
c_conf->server_port) != 0) {
738+
exit(1);
699739
}
700740

701-
debug(LOG_INFO, "connect server [%s:%d]...", c_conf->server_addr, c_conf->server_port);
702-
bufferevent_enable(main_ctl->connect_bev, EV_WRITE|EV_READ);
703-
bufferevent_setcb(main_ctl->connect_bev, recv_cb, NULL, connect_event_cb, NULL);
741+
// Setup callbacks for the connection
742+
if (setup_server_callbacks(main_ctl->connect_bev) != 0) {
743+
bufferevent_free(main_ctl->connect_bev);
744+
exit(1);
745+
}
704746
}
705747

706748
static int prepare_login_message(char **msg_out, int *len_out) {

xfrpc.ini

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[common]
2+
server_addr = 82.157.174.2
3+
server_port = 7000
4+
token=abc123
5+
6+
[ssh]
7+
type = tcp
8+
local_ip = 192.168.67.1
9+
local_port = 22
10+
remote_port = 6000

0 commit comments

Comments
 (0)