Fix several issues for session connection over P2P 72/87672/2
authorYu Jiung <jiung.yu@samsung.com>
Fri, 9 Sep 2016 05:16:03 +0000 (14:16 +0900)
committerJiung Yu <jiung.yu@samsung.com>
Fri, 9 Sep 2016 05:31:17 +0000 (22:31 -0700)
Change-Id: I4689c7853b86e6dbe3b95df84306ebc194c61cb9
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
packaging/asp-manager.spec
src/asp-manager-gdbus.c
src/session/asp-session-peer.c
src/session/asp-session.c
src/session/gfsm.c

index 708961a..5bcd678 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       asp-manager
 Summary:    ASP(application service platform) manager
-Version:    0.0.7
+Version:    0.0.8
 Release:    2
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index f19e2e6..461d740 100755 (executable)
@@ -689,7 +689,7 @@ static gboolean __asp_manager_gdbus_set_session_ready(AspSession *object,
                goto out;
        }
 
-       if (session_id == 0 || session_mac == NULL) {
+       if (session_mac == NULL) {
                ASP_LOGE("Invalid parameter");
                ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
                goto out;
@@ -735,7 +735,7 @@ static gboolean __asp_manager_gdbus_close_session(AspSession *object,
                goto out;
        }
 
-       if (session_id == 0 || session_mac == NULL) {
+       if (session_mac == NULL) {
                ASP_LOGE("Invalid parameter");
                ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
                goto out;
index 0e1050a..a74ac1d 100644 (file)
@@ -426,7 +426,6 @@ gboolean asp_sess_peer_add_session(GSocketAddress *p_sock_addr,
                gfsm_process_event(p_peer->context, gfsm_create_event(ASP_S_PEER_EVENT_START,
                                   NULL, NULL));
        }
-
        gfsm_process_event(p_peer->context,
                           gfsm_create_event(ASP_S_PEER_EVENT_ADD_SESSION,
                                             _asp_sess_peer_sess_tree_create_key(session_mac, session_id), g_free));
@@ -439,8 +438,12 @@ gboolean asp_sess_peer_del_session(GSocketAddress *p_sock_addr,
 {
        INFO_MSG;
 
-       asp_sess_peer_s *p_peer = _asp_sess_peer_tree_find_peer(p_sock_addr);
+       asp_sess_peer_s *p_peer = NULL;
+
+       if (p_sock_addr == NULL)
+               return TRUE;
 
+       p_peer = _asp_sess_peer_tree_find_peer(p_sock_addr);
        if (NULL == p_peer)
                return TRUE;
 
index 79e3545..76f7b49 100644 (file)
@@ -78,6 +78,7 @@ typedef struct asp_session {
        /*GSocketFamily sock_family; // ipv4 or ipv6 */
        asp_session_closed_state_e closed_state;
        gboolean over_p2p;                      /*p2p or infra */
+       gboolean confirmed;
 } asp_session_s;
 
 typedef struct session_request_cb {
@@ -647,6 +648,7 @@ gboolean asp_session_confirm_session(const guint8 *session_mac,
                                sizeof(confirm_session_param_s));
        confirmed_param->confirmed = confirmed;
        confirmed_param->pin = pin;
+       session->confirmed = confirmed;
 
        gfsm_process_event(session->context,
                           gfsm_create_event(SESSION_EVENT_CONFIRM_SESSION_CALLED, confirmed_param,
@@ -907,6 +909,11 @@ void asp_session_recv_req(GSocketAddress *sock_addr, gpointer p_msg)
                return;
        }
 
+       if(session->over_p2p && session->sock_addr == NULL) {
+               ASP_LOGD("IpAssigned signal isn't yet received, discard event");
+               return;
+       }
+
        switch (p_header->opcode) {
        case ASP_OPCODE_REQUEST_SESSION: {
                        gchar peer_ip[ASP_SESSION_IPV4_STR_LEN];
@@ -2391,23 +2398,25 @@ gfsm_state_id_t _state_group_formation_completed_reaction_ip_assigned(
        void *p_context_data, void *p_event_data)
 {
        INFO_MSG;
+       gfsm_state_id_t ret_state = GFSM_DISCARD_EVENT;
 
        asp_session_s *session = (asp_session_s *)p_context_data;
        g_assert(session);
 
-       if (session->asp_role == ASP_ROLE_ADVERTIZER)
-               return GFSM_DISCARD_EVENT;
-
        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);
+       if (session->asp_role == ASP_ROLE_SEEKER) {
+               _send_request_session(session, NULL, 0);
+               ret_state = SESSION_STATE_REQUEST_SESSION_SENT;
+       } else {
+               ret_state = GFSM_DISCARD_EVENT;
+       }
 
-       _send_request_session(session, NULL, 0);
-
-       return SESSION_STATE_REQUEST_SESSION_SENT;
+       return ret_state;
 }
 
 gfsm_state_id_t
@@ -2541,13 +2550,18 @@ void _state_request_session_received_entry_action(void *p_context_data)
        INFO_MSG;
 
        asp_session_s *session = (asp_session_s *)p_context_data;
-
-       /* session_request_cb */
-       /* what is user data ? */
-       _call_session_status_cb(0, session->session_mac, session->session_id,
-                               ASP_SESSION_CLOSED_STATE_NONE);
-       _call_connect_status_cb(0, session->session_mac, session->session_id,
-                               ASP_SESSION_CONNECT_STATUS_SESSION_REQUEST_RECEIVED);
+       g_assert(session);
+       if (session->over_p2p && session->confirmed &&
+                       session->asp_role == ASP_ROLE_ADVERTIZER ) {
+               /* TODO: Set Session should done after this  event*/
+       } else {
+               /* session_request_cb */
+               /* what is user data ? */
+               _call_session_status_cb(0, session->session_mac, session->session_id,
+                                       ASP_SESSION_CLOSED_STATE_NONE);
+               _call_connect_status_cb(0, session->session_mac, session->session_id,
+                                       ASP_SESSION_CONNECT_STATUS_SESSION_REQUEST_RECEIVED);
+       }
 }
 
 void _state_request_session_received_exit_action(void *p_context_data)
index cc19275..399f241 100644 (file)
 #include <string.h>
 #include <assert.h>
 #include <stdio.h>
+#include <glib.h>
 #include "gfsm.h"
+#include "asp-manager-util.h"
+
 
 typedef struct gfsm_event_queue {
        gfsm_event_s *p_head;
@@ -304,6 +307,9 @@ void gfsm_process_event(gfsm_context_s *p_context, gfsm_event_s *p_event)
 {
        gfsm_s *p_fsm;
 
+       ASP_LOGD("process event");
+       if(p_context == NULL)
+               ASP_LOGD("context is NULL");
        assert(p_context && p_event);
 
        p_fsm = p_context->p_fsm;
@@ -342,6 +348,7 @@ void _gfsm_process_event(gfsm_context_s *p_context, gfsm_event_s *p_event)
        gfsm_state_id_t next_state_id = GFSM_DISCARD_EVENT;
        gfsm_event_id_t event_id;
 
+       ASP_LOGD("inner process event");
        assert(p_context && p_event);
 
        event_id = p_event->event_id;
@@ -502,6 +509,7 @@ void gfsm_destroy_event_queue(gfsm_event_queue_s *p_queue)
 
 void gfsm_enqueue_event(gfsm_event_queue_s *p_queue, gfsm_event_s *p_event)
 {
+       ASP_LOGD("enqueue");
        assert(p_queue);
 
        if (p_queue->p_tail == NULL) {