#define ASP_SESS_PEER_FSM_TRACE_ENTER()
#define ASP_SESS_PEER_FSM_TRACE_LEAVE()
+#define ASP_SESS_PEER_HEADER "SESSION_PEER_FSM"
+
typedef struct asp_sess_peer {
gfsm_context_s *context;
GSocketAddress *p_sock_addr;
asp_sess_peer_s *p_peer = _asp_sess_peer_tree_find_peer(p_sock_addr);
if (NULL == p_peer) {
+ ASP_LOGD("create peer");
p_peer = _asp_sess_peer_create_peer(p_sock_addr);
g_assert(p_peer);
_asp_sess_peer_sess_tree_key_destructor_cb,
_asp_sess_peer_sess_tree_value_destructor_cb);
+ ASP_LOGD("insert peer");
_asp_sess_peer_tree_insert_peer(p_sock_addr, p_peer);
p_peer->context = gfsm_create_context(asm_sess_peer_fsm,
{
asp_sess_peer_s *p_peer = (asp_sess_peer_s *) p_context_data;
+ INFO_MSG;
if (p_peer->p_sock_addr) {
g_object_unref(p_peer->p_sock_addr);
p_peer->p_sock_addr = 0;
asp_sess_peer_sess_key_s *_asp_sess_peer_sess_tree_create_key(
guint8 session_mac[], guint32 session_id)
{
+ INFO_MSG;
asp_sess_peer_sess_key_s *p_key = (asp_sess_peer_sess_key_s *) g_malloc(sizeof(
asp_sess_peer_sess_key_s));
gint _asp_sess_peer_sess_tree_compare_cb(gconstpointer a, gconstpointer b,
gpointer user_data)
{
+ INFO_MSG;
asp_sess_peer_sess_key_s *p_l = (asp_sess_peer_sess_key_s *) a;
asp_sess_peer_sess_key_s *p_r = (asp_sess_peer_sess_key_s *) b;
void _asp_sess_peer_sess_tree_key_destructor_cb(gpointer p_data)
{
+ INFO_MSG;
asp_sess_peer_sess_key_s *p_key = (asp_sess_peer_sess_key_s *) p_data;
asp_session_peer_destroyed(p_key->sess_mac, p_key->sess_id);
g_free(p_key);
void _asp_sess_peer_sess_tree_value_destructor_cb(gpointer p_value)
{
+ INFO_MSG;
/*do nothing. */
/*p_key and p_value is same pointer. */
}
asp_coordination_protocol_send_msg(p_sock_addr, &nack_msg);
}
+const char *_asp_sess_peer_fsm_get_state_name_cb(gfsm_state_id_t state_id)
+{
+ const char *ret_val = NULL;
+
+ switch (state_id) {
+ case ASP_S_PEER_STATE_INIT:
+ ret_val = "ASP_S_PEER_STATE_INIT";
+ break;
+ case ASP_S_PEER_STATE_CREATED:
+ ret_val = "ASP_S_PEER_STATE_CREATED";
+ break;
+ case ASP_S_PEER_STATE_VERSION_SENT:
+ ret_val = "ASP_S_PEER_STATE_VERSION_SENT";
+ break;
+ case ASP_S_PEER_STATE_WAIT_VERSION:
+ ret_val = "ASP_S_PEER_STATE_WAIT_VERSION";
+ break;
+ case ASP_S_PEER_STATE_WAIT_ACK:
+ ret_val = "ASP_S_PEER_STATE_WAIT_ACK";
+ break;
+ case ASP_S_PEER_STATE_OPENED:
+ ret_val = "ASP_S_PEER_STATE_OPENED";
+ break;
+ case ASP_S_PEER_STATE_IDLE:
+ ret_val = "ASP_S_PEER_STATE_IDLE";
+ break;
+ /*
+ case ASP_S_PEER_STATE_REQ_SENT:
+ ret_val = "ASP_S_PEER_STATE_REQ_SENT";
+ break;
+ */
+ case ASP_S_PEER_STATE_CLOSED:
+ ret_val = "ASP_S_PEER_STATE_CLOSED";
+ break;
+ default:
+ ret_val = "ASP_S_PEER_STATE_MAX";
+ break;
+ }
+
+ return ret_val;
+}
+
+const char *_asp_sess_peer_gfsm_get_event_name_cb(gfsm_event_id_t event_id)
+{
+ const char *ret_val = NULL;
+
+ switch (event_id) {
+ case ASP_S_PEER_EVENT_START:
+ ret_val = "ASP_S_PEER_EVENT_START";
+ break;
+ case ASP_S_PEER_EVENT_ADD_SESSION:
+ ret_val = "ASP_S_PEER_EVENT_ADD_SESSION";
+ break;
+ case ASP_S_PEER_EVENT_DEL_SESSION:
+ ret_val = "ASP_S_PEER_EVENT_DEL_SESSION";
+ break;
+ case ASP_S_PEER_EVENT_SEND_REQ:
+ ret_val = "ASP_S_PEER_EVENT_SEND_REQ";
+ break;
+ case ASP_S_PEER_EVENT_SEND_ACK:
+ ret_val = "ASP_S_PEER_EVENT_SEND_ACK";
+ break;
+ case ASP_S_PEER_EVENT_SEND_NACK:
+ ret_val = "ASP_S_PEER_EVENT_SEND_NACK";
+ break;
+ case ASP_S_PEER_EVENT_RECV_VERSION:
+ ret_val = "ASP_S_PEER_EVENT_RECV_VERSION";
+ break;
+ case ASP_S_PEER_EVENT_RECV_REQ:
+ ret_val = "ASP_S_PEER_EVENT_RECV_REQ";
+ break;
+ case ASP_S_PEER_EVENT_RECV_ACK:
+ ret_val = "ASP_S_PEER_EVENT_RECV_ACK";
+ break;
+ case ASP_S_PEER_EVENT_RECV_NACK:
+ ret_val = "ASP_S_PEER_EVENT_RECV_NACK";
+ break;
+ case ASP_S_PEER_EVENT_TIMEOUT:
+ ret_val = "ASP_S_PEER_EVENT_TIMEOUT";
+ break;
+ case ASP_S_PEER_EVENT_CLOSE:
+ ret_val = "ASP_S_PEER_EVENT_CLOSE";
+ break;
+ default:
+ ret_val = "ASP_S_PEER_EVENT_MAX";
+ break;
+ }
+
+ return ret_val;
+}
+
+int _asp_sess_peer_fsm_log_func(const char *format, ...)
+{
+ gchar buffer[256];
+ va_list args;
+ va_start (args, format);
+ g_vsnprintf (buffer, 255, format, args);
+ va_end (args);
+
+ ASP_LOGD("%s", buffer);
+
+ return 0;
+}
+
void asp_sess_peer_fsm_init()
{
INFO_MSG;
/*gfsm_add_state(&asm_sess_peer_fsm,&asp_sess_peer_state_req_sent); */
gfsm_add_state(asm_sess_peer_fsm, asp_sess_peer_state_wait_ack);
gfsm_add_state(asm_sess_peer_fsm, asp_sess_peer_state_closed);
+
+ gfsm_set_logger(asm_sess_peer_fsm, _asp_sess_peer_fsm_log_func,
+ ASP_SESS_PEER_HEADER,
+ _asp_sess_peer_fsm_get_state_name_cb,
+ _asp_sess_peer_gfsm_get_event_name_cb);
}
void _asp_sess_peer_state_init_entry_action(void *p_context_data)
#define ASP_MAX_DEVICE_NAME_LEN 32
#define SESSION_STATUS_ADDITIONAL_INFO "REQUEST_SESSION"
+#define ASP_SESSION_HEADER "SESSION_FSM"
+
typedef enum asp_role {
ASP_ROLE_NONE,
ASP_ROLE_ADVERTIZER,
void _store_peer_ip_addr(asp_session_s *session, char *peer_ip, size_t length)
{
+ INFO_MSG;
g_strlcpy(session->peer_ip, peer_ip, length);
session->sock_addr = g_inet_socket_address_new_from_string(peer_ip,
(guint) g_asp_cordination_port);
+
+ if (session->sock_addr == NULL)
+ ASP_LOGD("Failed to create socket IP %s", peer_ip);
+ else
+ ASP_LOGD("Succeeded to create socket IP %s", peer_ip);
+
}
#ifdef HAVE_ASP_P2P_CONN
* Local Function for state machine
*****************************************************************************/
+const char *_asp_session_fsm_get_state_name_cb(gfsm_state_id_t state_id)
+{
+ const char *ret_val = NULL;
+
+ switch (state_id) {
+ case SESSION_STATE_NONE:
+ ret_val = "SESSION_STATE_NONE";
+ break;
+ case SESSION_STATE_CLOSED:
+ ret_val = "SESSION_STATE_CLOSED";
+ break;
+ case SESSION_STATE_RUNNING:
+ ret_val = "SESSION_STATE_RUNNING";
+ break;
+ case SESSION_STATE_L2CONNECTING:
+ ret_val = "SESSION_STATE_L2CONNECTING";
+ break;
+ case SESSION_STATE_SESSION_REQUEST_SENT:
+ ret_val = "SESSION_STATE_SESSION_REQUEST_SENT";
+ break;
+ case SESSION_STATE_SESSION_REQUEST_RECEIVED:
+ ret_val = "SESSION_STATE_SESSION_REQUEST_RECEIVED";
+ break;
+ case SESSION_STATE_SESSION_REQUEST_DEFERED:
+ ret_val = "SESSION_STATE_SESSION_REQUEST_DEFERED";
+ break;
+ case SESSION_STATE_SESSION_REQUEST_ACCEPTED:
+ ret_val = "SESSION_STATE_SESSION_REQUEST_ACCEPTED";
+ break;
+ case SESSION_STATE_ENTERING_PIN:
+ ret_val = "SESSION_STATE_ENTERING_PIN";
+ break;
+ case SESSION_STATE_GROUP_FORMATION_COMPLETED:
+ ret_val = "SESSION_STATE_GROUP_FORMATION_COMPLETED";
+ break;
+ case SESSION_STATE_L2CONNECTED:
+ ret_val = "SESSION_STATE_L2CONNECTED";
+ break;
+ case SESSION_STATE_REQUEST_SESSION_SENT:
+ ret_val = "SESSION_STATE_REQUEST_SESSION_SENT";
+ break;
+ case SESSION_STATE_OPEN:
+ ret_val = "SESSION_STATE_OPEN";
+ break;
+ case SESSION_STATE_REQUEST_SESSION_RECEIVED:
+ ret_val = "SESSION_STATE_REQUEST_SESSION_RECEIVED";
+ break;
+ case SESSION_STATE_REJECT_SESSION_SENT:
+ ret_val = "SESSION_STATE_REJECT_SESSION_SENT";
+ break;
+ case SESSION_STATE_REMOVE_SESSION_SENT:
+ ret_val = "SESSION_STATE_REMOVE_SESSION_SENT";
+ break;
+ default:
+ ret_val = "SESSION_STATE_MAX";
+ break;
+ }
+
+ return ret_val;
+}
+
+const char *_asp_session_gfsm_get_event_name_cb(gfsm_event_id_t event_id)
+{
+ const char *ret_val = NULL;
+
+ switch (event_id) {
+ case SESSION_EVENT_BOUND_PORT_CALLED:
+ ret_val = "SESSION_EVENT_BOUND_PORT_CALLED";
+ break;
+ case SESSION_EVENT_CLOSE_SESSION_CALLED:
+ ret_val = "SESSION_EVENT_CLOSE_SESSION_CALLED";
+ break;
+ case SESSION_EVENT_CONNECT_SESSION_CALLED:
+ ret_val = "SESSION_EVENT_CONNECT_SESSION_CALLED";
+ break;
+ case SESSION_EVENT_CONFIRM_SESSION_CALLED:
+ ret_val = "SESSION_EVENT_CONFIRM_SESSION_CALLED";
+ break;
+ case SESSION_EVENT_DEFER_SESSION_CALLED:
+ ret_val = "SESSION_EVENT_DEFER_SESSION_CALLED";
+ break;
+ case SESSION_EVENT_SET_SESSION_READY_CALLED:
+ ret_val = "SESSION_EVENT_SET_SESSION_READY_CALLED";
+ break;
+ case SESSION_EVENT_SESSION_REQUEST_CALLED:
+ ret_val = "SESSION_EVENT_SESSION_REQUEST_CALLED";
+ break;
+ case SESSION_EVENT_SESSION_CONFIG_REQUEST_CALLED:
+ ret_val = "SESSION_EVENT_SESSION_CONFIG_REQUEST_CALLED";
+ break;
+ case SESSION_EVENT_CONNECT_STATUS_CALLED:
+ ret_val = "SESSION_EVENT_CONNECT_STATUS_CALLED";
+ break;
+ case SESSION_EVENT_IP_ASSIGNED:
+ ret_val = "SESSION_EVENT_IP_ASSIGNED";
+ break;
+ case SESSION_EVENT_REMOVE_SESSION_RECEIVED:
+ ret_val = "SESSION_EVENT_REMOVE_SESSION_RECEIVED";
+ break;
+ case SESSION_EVENT_ALLOWED_PORT_RECEIVED:
+ ret_val = "SESSION_EVENT_ALLOWED_PORT_RECEIVED";
+ break;
+ case SESSION_EVENT_DEFERRED_SESSION_RECEIVED:
+ ret_val = "SESSION_EVENT_DEFERRED_SESSION_RECEIVED";
+ break;
+ case SESSION_EVENT_REJECTED_SESSION_RECEIVED:
+ ret_val = "SESSION_EVENT_REJECTED_SESSION_RECEIVED";
+ break;
+ case SESSION_EVENT_ADDED_SESSION_RECEIVED:
+ ret_val = "SESSION_EVENT_ADDED_SESSION_RECEIVED";
+ break;
+ case SESSION_EVENT_REQUEST_SESSION_RECEIVED:
+ ret_val = "SESSION_EVENT_REQUEST_SESSION_RECEIVED";
+ break;
+ case SESSION_EVENT_ACK_RECEIVED:
+ ret_val = "SESSION_EVENT_ACK_RECEIVED";
+ break;
+ case SESSION_EVENT_NACK_RECEIVED:
+ ret_val = "SESSION_EVENT_NACK_RECEIVED";
+ break;
+ case SESSION_EVENT_PEER_DESTROYED:
+ ret_val = "SESSION_EVENT_PEER_DESTROYED";
+ break;
+ case SESSION_EVENT_TIMEOUT:
+ ret_val = "SESSION_EVENT_TIMEOUT";
+ break;
+ case SESSION_EVENT_DELETE_SESSION:
+ ret_val = "SESSION_EVENT_DELETE_SESSION";
+ break;
+ default:
+ ret_val = "SESSION_EVENT_MAX";
+ break;
+ }
+
+ return ret_val;
+}
+
+int _asp_session_fsm_log_func(const char *format, ...)
+{
+ gchar buffer[256];
+ va_list args;
+ va_start (args, format);
+ g_vsnprintf (buffer, 255, format, args);
+ va_end (args);
+
+ ASP_LOGD("%s", buffer);
+
+ return 0;
+}
+
+
void _asp_session_fsm_init()
{
INFO_MSG;
gfsm_add_state(session_fsm, session_state_reject_session_sent);
gfsm_add_state(session_fsm, session_state_remove_session_sent);
+
+ gfsm_set_logger(session_fsm, _asp_session_fsm_log_func,
+ ASP_SESSION_HEADER,
+ _asp_session_fsm_get_state_name_cb,
+ _asp_session_gfsm_get_event_name_cb);
}
void _asp_session_fsm_terminate()
ip_assigned_param_s *p_ip_assigned_param = (ip_assigned_param_s *)p_event_data;
g_assert(p_ip_assigned_param);
+ ASP_LOGD("peer IP %s", p_ip_assigned_param->peer_ip_addr);
_store_peer_ip_addr(session, p_ip_assigned_param->peer_ip_addr,
p_ip_assigned_param->length);