summaryrefslogtreecommitdiffstatshomepage
path: root/cc3200
diff options
context:
space:
mode:
authorDaniel Campora <daniel@wipy.io>2015-05-23 19:56:22 +0200
committerDaniel Campora <daniel@wipy.io>2015-05-24 11:44:06 +0200
commit9f8c5456befbf33cf8e02de99b6b9f5a417f006a (patch)
treedc1339e90c801a2361dd19b0a3b4430a930a1ae5 /cc3200
parent0d31bbc7fa3bdf10a14d92bb010a5016dc6101af (diff)
downloadmicropython-9f8c5456befbf33cf8e02de99b6b9f5a417f006a.tar.gz
micropython-9f8c5456befbf33cf8e02de99b6b9f5a417f006a.zip
cc3200: Reset the servers and close user sockets on WLAN disconection.
This is needed to avoid half-open connections.
Diffstat (limited to 'cc3200')
-rw-r--r--cc3200/ftp/ftp.c20
-rw-r--r--cc3200/ftp/ftp.h1
-rw-r--r--cc3200/mods/modusocket.c2
-rw-r--r--cc3200/mods/modwlan.c4
-rw-r--r--cc3200/serverstask.c23
-rw-r--r--cc3200/serverstask.h1
-rw-r--r--cc3200/telnet/telnet.c15
-rw-r--r--cc3200/telnet/telnet.h1
8 files changed, 41 insertions, 26 deletions
diff --git a/cc3200/ftp/ftp.c b/cc3200/ftp/ftp.c
index d812f563af..9619d92a8d 100644
--- a/cc3200/ftp/ftp.c
+++ b/cc3200/ftp/ftp.c
@@ -224,7 +224,6 @@ static ftp_result_t ftp_list_dir (char *list, uint32_t maxlistsize, uint32_t *li
static void ftp_open_child (char *pwd, char *dir);
static void ftp_close_child (char *pwd);
static void ftp_return_to_previous_path (char *pwd, char *dir);
-static void ftp_reset (void);
/******************************************************************************
DEFINE PUBLIC FUNCTIONS
@@ -408,6 +407,16 @@ void ftp_disable (void) {
ftp_data.state = E_FTP_STE_DISABLED;
}
+void ftp_reset (void) {
+ // close all connections and start all over again
+ servers_close_socket(&ftp_data.lc_sd);
+ servers_close_socket(&ftp_data.ld_sd);
+ ftp_close_cmd_data();
+ ftp_data.state = E_FTP_STE_START;
+ ftp_data.substate.data = E_FTP_STE_SUB_DISCONNECTED;
+ SOCKETFIFO_Flush();
+}
+
/******************************************************************************
DEFINE PRIVATE FUNCTIONS
******************************************************************************/
@@ -1079,12 +1088,3 @@ static void ftp_return_to_previous_path (char *pwd, char *dir) {
}
}
-static void ftp_reset (void) {
- // close all connections and start all over again
- servers_close_socket(&ftp_data.lc_sd);
- servers_close_socket(&ftp_data.ld_sd);
- ftp_close_cmd_data();
- ftp_data.state = E_FTP_STE_START;
- ftp_data.substate.data = E_FTP_STE_SUB_DISCONNECTED;
- SOCKETFIFO_Flush();
-}
diff --git a/cc3200/ftp/ftp.h b/cc3200/ftp/ftp.h
index 14f07e0df7..13b044dcfa 100644
--- a/cc3200/ftp/ftp.h
+++ b/cc3200/ftp/ftp.h
@@ -34,5 +34,6 @@ extern void ftp_init (void);
extern void ftp_run (void);
extern void ftp_enable (void);
extern void ftp_disable (void);
+extern void ftp_reset (void);
#endif /* FTP_H_ */
diff --git a/cc3200/mods/modusocket.c b/cc3200/mods/modusocket.c
index 68a3252c98..1a7cbe8525 100644
--- a/cc3200/mods/modusocket.c
+++ b/cc3200/mods/modusocket.c
@@ -94,7 +94,6 @@ void modusocket_enter_sleep (void) {
fd_set socketset;
int16_t maxfd = 0;
- sl_LockObjLock (&modusocket_LockObj, SL_OS_WAIT_FOREVER);
for (int i = 0; i < MOD_NETWORK_MAX_SOCKETS; i++) {
int16_t sd;
if ((sd = modusocket_sockets[i].sd) >= 0) {
@@ -105,7 +104,6 @@ void modusocket_enter_sleep (void) {
// wait for any of the sockets to become ready...
sl_Select(maxfd + 1, &socketset, NULL, NULL, NULL);
- sl_LockObjUnlock (&modusocket_LockObj);
}
void modusocket_close_all_user_sockets (void) {
diff --git a/cc3200/mods/modwlan.c b/cc3200/mods/modwlan.c
index cdcd375e66..88dc065215 100644
--- a/cc3200/mods/modwlan.c
+++ b/cc3200/mods/modwlan.c
@@ -230,7 +230,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
{
CLR_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION);
CLR_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED);
- // TODO reset the servers
+ servers_reset();
}
break;
case SL_WLAN_STA_CONNECTED_EVENT:
@@ -245,7 +245,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
break;
case SL_WLAN_STA_DISCONNECTED_EVENT:
wlan_obj.staconnected = false;
- // TODO reset the servers
+ servers_reset();
break;
case SL_WLAN_P2P_DEV_FOUND_EVENT:
// TODO
diff --git a/cc3200/serverstask.c b/cc3200/serverstask.c
index 80f22987fe..732e6bbcca 100644
--- a/cc3200/serverstask.c
+++ b/cc3200/serverstask.c
@@ -53,12 +53,13 @@ typedef struct {
volatile bool enabled;
volatile bool do_disable;
volatile bool do_enable;
+ volatile bool do_reset;
}servers_Data_t;
/******************************************************************************
DECLARE PRIVATE DATA
******************************************************************************/
-static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false};
+static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false, .do_reset = false};
static volatile bool sleep_sockets = false;
/******************************************************************************
@@ -103,11 +104,21 @@ void TASK_Servers (void *pvParameters) {
servers_data.enabled = false;
}
- if (cycle) {
- telnet_run();
+ if (servers_data.do_reset) {
+ telnet_reset();
+ ftp_reset();
+ servers_data.do_reset = false;
+ // resetting the servers is needed to preven half-open sockets
+ // and we should also close all user sockets
+ modusocket_close_all_user_sockets();
}
else {
- ftp_run();
+ if (cycle) {
+ telnet_run();
+ }
+ else {
+ ftp_run();
+ }
}
// set the alive flag for the wdt
@@ -137,6 +148,10 @@ void servers_stop (void) {
HAL_Delay (SERVERS_CYCLE_TIME_MS * 5);
}
+void servers_reset (void) {
+ servers_data.do_reset = true;
+}
+
bool servers_are_enabled (void) {
return servers_data.enabled;
}
diff --git a/cc3200/serverstask.h b/cc3200/serverstask.h
index 6607283136..cd9930a4e5 100644
--- a/cc3200/serverstask.h
+++ b/cc3200/serverstask.h
@@ -56,6 +56,7 @@ extern char servers_pass[];
extern void TASK_Servers (void *pvParameters);
extern void servers_start (void);
extern void servers_stop (void);
+extern void servers_reset (void);
extern bool servers_are_enabled (void);
extern void servers_close_socket (int16_t *sd);
extern void servers_set_login (char *user, char *pass);
diff --git a/cc3200/telnet/telnet.c b/cc3200/telnet/telnet.c
index 0edc00cdb1..3b77d6be00 100644
--- a/cc3200/telnet/telnet.c
+++ b/cc3200/telnet/telnet.c
@@ -132,7 +132,6 @@ static void telnet_process (void);
static int telnet_process_credential (char *credential, _i16 rxLen);
static void telnet_parse_input (uint8_t *str, int16_t *len);
static bool telnet_send_with_retries (int16_t sd, const void *pBuf, int16_t len);
-static void telnet_reset (void);
static void telnet_reset_buffer (void);
/******************************************************************************
@@ -293,6 +292,13 @@ void telnet_disable (void) {
telnet_data.state = E_TELNET_STE_DISABLED;
}
+void telnet_reset (void) {
+ // close the connection and start all over again
+ servers_close_socket(&telnet_data.n_sd);
+ servers_close_socket(&telnet_data.sd);
+ telnet_data.state = E_TELNET_STE_START;
+}
+
bool telnet_is_enabled (void) {
return telnet_data.enabled;
}
@@ -499,13 +505,6 @@ static bool telnet_send_with_retries (int16_t sd, const void *pBuf, int16_t len)
return false;
}
-static void telnet_reset (void) {
- // close the connection and start all over again
- servers_close_socket(&telnet_data.n_sd);
- servers_close_socket(&telnet_data.sd);
- telnet_data.state = E_TELNET_STE_START;
-}
-
static void telnet_reset_buffer (void) {
// erase any characters present in the current line
memset (telnet_data.rxBuffer, '\b', TELNET_RX_BUFFER_SIZE / 2);
diff --git a/cc3200/telnet/telnet.h b/cc3200/telnet/telnet.h
index 913cd73e15..983a774c8b 100644
--- a/cc3200/telnet/telnet.h
+++ b/cc3200/telnet/telnet.h
@@ -38,6 +38,7 @@ extern bool telnet_rx_any (void);
extern int telnet_rx_char (void);
extern void telnet_enable (void);
extern void telnet_disable (void);
+extern void telnet_reset (void);
extern bool telnet_is_enabled (void);
extern bool telnet_is_active (void);