Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
connector_tcp_close.h
00001 /* 00002 * Copyright (c) 2013 Digi International Inc., 00003 * All rights not expressly granted are reserved. 00004 * 00005 * This Source Code Form is subject to the terms of the Mozilla Public 00006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 00007 * You can obtain one at http://mozilla.org/MPL/2.0/. 00008 * 00009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 00010 * ======================================================================= 00011 */ 00012 static connector_status_t layer_remove_facilities(connector_data_t * const connector_ptr, connector_supported_facility_cb_index_t cb_index); 00013 00014 #if (defined CONNECTOR_DEBUG) 00015 00016 static char const * close_status_to_string(connector_close_status_t const value) 00017 { 00018 char const * result = NULL; 00019 switch (value) 00020 { 00021 enum_to_case(connector_close_status_cloud_disconnected); 00022 enum_to_case(connector_close_status_cloud_redirected); 00023 enum_to_case(connector_close_status_device_terminated); 00024 enum_to_case(connector_close_status_device_stopped); 00025 enum_to_case(connector_close_status_no_keepalive); 00026 enum_to_case(connector_close_status_abort); 00027 enum_to_case(connector_close_status_device_error); 00028 00029 default: 00030 { 00031 connector_debug_printf("Unknown close status %d\n", value); 00032 } 00033 } 00034 return result; 00035 } 00036 #else 00037 00038 #define close_status_to_string(value) NULL 00039 #endif 00040 00041 static connector_status_t tcp_close_cloud(connector_data_t * const connector_ptr) 00042 { 00043 connector_status_t result = connector_idle; 00044 connector_close_status_t close_status = edp_get_close_status(connector_ptr); 00045 00046 if (edp_get_edp_state(connector_ptr) != edp_communication_connect_to_cloud) 00047 { 00048 connector_callback_status_t status; 00049 connector_request_id_t request_id; 00050 00051 connector_network_close_t close_data; 00052 00053 close_data.handle = connector_ptr->edp_data.network_handle; 00054 close_data.status = edp_get_close_status(connector_ptr); 00055 close_data.reconnect = connector_true; 00056 00057 connector_debug_printf("tcp_close_cloud: status = %s\n", close_status_to_string(close_data.status)); 00058 request_id.network_request = connector_request_id_network_close; 00059 00060 status = connector_callback(connector_ptr->callback, connector_class_id_network_tcp, request_id, &close_data); 00061 ASSERT(status != connector_callback_unrecognized); 00062 switch (status) 00063 { 00064 case connector_callback_busy: 00065 result = connector_pending; 00066 goto done; 00067 00068 case connector_callback_continue: 00069 result = connector_working; 00070 break; 00071 00072 default: 00073 result = connector_abort; 00074 close_status = connector_close_status_abort; 00075 break; 00076 } 00077 00078 00079 { 00080 connector_ptr->edp_data.stop.auto_connect = close_data.reconnect; 00081 edp_set_active_state(connector_ptr, connector_transport_idle); 00082 00083 tcp_send_complete_callback(connector_ptr, connector_abort); 00084 00085 } 00086 edp_set_edp_state(connector_ptr, edp_communication_connect_to_cloud); 00087 00088 layer_remove_facilities(connector_ptr, facility_callback_cleanup); 00089 00090 edp_reset_initial_data(connector_ptr); 00091 } 00092 else 00093 edp_set_active_state(connector_ptr, connector_transport_idle); 00094 00095 switch (close_status) 00096 { 00097 case connector_close_status_device_terminated: 00098 case connector_close_status_abort: 00099 { 00100 /* 00101 * Terminated by connector_dispatch call 00102 * Free all memory. 00103 */ 00104 connector_status_t const status = layer_remove_facilities(connector_ptr, facility_callback_delete); 00105 if (status != connector_working && status != connector_idle) 00106 { 00107 connector_debug_printf("tcp_close_cloud: layer_remove_facilities failed %d\n", result); 00108 } 00109 edp_set_active_state(connector_ptr, connector_transport_terminate); 00110 result = (close_status == connector_close_status_device_terminated) ? connector_device_terminated : connector_abort; 00111 goto done; 00112 } 00113 default: 00114 break; 00115 } 00116 00117 done: 00118 return result; 00119 } 00120 00121 static connector_status_t edp_close_process(connector_data_t * const connector_ptr) 00122 { 00123 connector_status_t result; 00124 00125 result = tcp_close_cloud(connector_ptr); 00126 00127 return result; 00128 } 00129
Generated on Tue Jul 12 2022 19:18:38 by
1.7.2