Skip to content

Commit 9f8c545

Browse files
author
Daniel Campora
committed
cc3200: Reset the servers and close user sockets on WLAN disconection.
This is needed to avoid half-open connections.
1 parent 0d31bbc commit 9f8c545

8 files changed

Lines changed: 41 additions & 26 deletions

File tree

cc3200/ftp/ftp.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,6 @@ static ftp_result_t ftp_list_dir (char *list, uint32_t maxlistsize, uint32_t *li
224224
static void ftp_open_child (char *pwd, char *dir);
225225
static void ftp_close_child (char *pwd);
226226
static void ftp_return_to_previous_path (char *pwd, char *dir);
227-
static void ftp_reset (void);
228227

229228
/******************************************************************************
230229
DEFINE PUBLIC FUNCTIONS
@@ -408,6 +407,16 @@ void ftp_disable (void) {
408407
ftp_data.state = E_FTP_STE_DISABLED;
409408
}
410409

410+
void ftp_reset (void) {
411+
// close all connections and start all over again
412+
servers_close_socket(&ftp_data.lc_sd);
413+
servers_close_socket(&ftp_data.ld_sd);
414+
ftp_close_cmd_data();
415+
ftp_data.state = E_FTP_STE_START;
416+
ftp_data.substate.data = E_FTP_STE_SUB_DISCONNECTED;
417+
SOCKETFIFO_Flush();
418+
}
419+
411420
/******************************************************************************
412421
DEFINE PRIVATE FUNCTIONS
413422
******************************************************************************/
@@ -1079,12 +1088,3 @@ static void ftp_return_to_previous_path (char *pwd, char *dir) {
10791088
}
10801089
}
10811090

1082-
static void ftp_reset (void) {
1083-
// close all connections and start all over again
1084-
servers_close_socket(&ftp_data.lc_sd);
1085-
servers_close_socket(&ftp_data.ld_sd);
1086-
ftp_close_cmd_data();
1087-
ftp_data.state = E_FTP_STE_START;
1088-
ftp_data.substate.data = E_FTP_STE_SUB_DISCONNECTED;
1089-
SOCKETFIFO_Flush();
1090-
}

cc3200/ftp/ftp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@ extern void ftp_init (void);
3434
extern void ftp_run (void);
3535
extern void ftp_enable (void);
3636
extern void ftp_disable (void);
37+
extern void ftp_reset (void);
3738

3839
#endif /* FTP_H_ */

cc3200/mods/modusocket.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ void modusocket_enter_sleep (void) {
9494
fd_set socketset;
9595
int16_t maxfd = 0;
9696

97-
sl_LockObjLock (&modusocket_LockObj, SL_OS_WAIT_FOREVER);
9897
for (int i = 0; i < MOD_NETWORK_MAX_SOCKETS; i++) {
9998
int16_t sd;
10099
if ((sd = modusocket_sockets[i].sd) >= 0) {
@@ -105,7 +104,6 @@ void modusocket_enter_sleep (void) {
105104

106105
// wait for any of the sockets to become ready...
107106
sl_Select(maxfd + 1, &socketset, NULL, NULL, NULL);
108-
sl_LockObjUnlock (&modusocket_LockObj);
109107
}
110108

111109
void modusocket_close_all_user_sockets (void) {

cc3200/mods/modwlan.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
230230
{
231231
CLR_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION);
232232
CLR_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED);
233-
// TODO reset the servers
233+
servers_reset();
234234
}
235235
break;
236236
case SL_WLAN_STA_CONNECTED_EVENT:
@@ -245,7 +245,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
245245
break;
246246
case SL_WLAN_STA_DISCONNECTED_EVENT:
247247
wlan_obj.staconnected = false;
248-
// TODO reset the servers
248+
servers_reset();
249249
break;
250250
case SL_WLAN_P2P_DEV_FOUND_EVENT:
251251
// TODO

cc3200/serverstask.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,13 @@ typedef struct {
5353
volatile bool enabled;
5454
volatile bool do_disable;
5555
volatile bool do_enable;
56+
volatile bool do_reset;
5657
}servers_Data_t;
5758

5859
/******************************************************************************
5960
DECLARE PRIVATE DATA
6061
******************************************************************************/
61-
static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false};
62+
static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false, .do_reset = false};
6263
static volatile bool sleep_sockets = false;
6364

6465
/******************************************************************************
@@ -103,11 +104,21 @@ void TASK_Servers (void *pvParameters) {
103104
servers_data.enabled = false;
104105
}
105106

106-
if (cycle) {
107-
telnet_run();
107+
if (servers_data.do_reset) {
108+
telnet_reset();
109+
ftp_reset();
110+
servers_data.do_reset = false;
111+
// resetting the servers is needed to preven half-open sockets
112+
// and we should also close all user sockets
113+
modusocket_close_all_user_sockets();
108114
}
109115
else {
110-
ftp_run();
116+
if (cycle) {
117+
telnet_run();
118+
}
119+
else {
120+
ftp_run();
121+
}
111122
}
112123

113124
// set the alive flag for the wdt
@@ -137,6 +148,10 @@ void servers_stop (void) {
137148
HAL_Delay (SERVERS_CYCLE_TIME_MS * 5);
138149
}
139150

151+
void servers_reset (void) {
152+
servers_data.do_reset = true;
153+
}
154+
140155
bool servers_are_enabled (void) {
141156
return servers_data.enabled;
142157
}

cc3200/serverstask.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ extern char servers_pass[];
5656
extern void TASK_Servers (void *pvParameters);
5757
extern void servers_start (void);
5858
extern void servers_stop (void);
59+
extern void servers_reset (void);
5960
extern bool servers_are_enabled (void);
6061
extern void servers_close_socket (int16_t *sd);
6162
extern void servers_set_login (char *user, char *pass);

cc3200/telnet/telnet.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ static void telnet_process (void);
132132
static int telnet_process_credential (char *credential, _i16 rxLen);
133133
static void telnet_parse_input (uint8_t *str, int16_t *len);
134134
static bool telnet_send_with_retries (int16_t sd, const void *pBuf, int16_t len);
135-
static void telnet_reset (void);
136135
static void telnet_reset_buffer (void);
137136

138137
/******************************************************************************
@@ -293,6 +292,13 @@ void telnet_disable (void) {
293292
telnet_data.state = E_TELNET_STE_DISABLED;
294293
}
295294

295+
void telnet_reset (void) {
296+
// close the connection and start all over again
297+
servers_close_socket(&telnet_data.n_sd);
298+
servers_close_socket(&telnet_data.sd);
299+
telnet_data.state = E_TELNET_STE_START;
300+
}
301+
296302
bool telnet_is_enabled (void) {
297303
return telnet_data.enabled;
298304
}
@@ -499,13 +505,6 @@ static bool telnet_send_with_retries (int16_t sd, const void *pBuf, int16_t len)
499505
return false;
500506
}
501507

502-
static void telnet_reset (void) {
503-
// close the connection and start all over again
504-
servers_close_socket(&telnet_data.n_sd);
505-
servers_close_socket(&telnet_data.sd);
506-
telnet_data.state = E_TELNET_STE_START;
507-
}
508-
509508
static void telnet_reset_buffer (void) {
510509
// erase any characters present in the current line
511510
memset (telnet_data.rxBuffer, '\b', TELNET_RX_BUFFER_SIZE / 2);

cc3200/telnet/telnet.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ extern bool telnet_rx_any (void);
3838
extern int telnet_rx_char (void);
3939
extern void telnet_enable (void);
4040
extern void telnet_disable (void);
41+
extern void telnet_reset (void);
4142
extern bool telnet_is_enabled (void);
4243
extern bool telnet_is_active (void);
4344

0 commit comments

Comments
 (0)