Check pubsub Id before invoking received message callback 51/236251/2
authorCheoleun Moon <chleun.moon@samsung.com>
Tue, 16 Jun 2020 02:46:04 +0000 (11:46 +0900)
committercheoleun moon <chleun.moon@samsung.com>
Tue, 16 Jun 2020 04:05:46 +0000 (04:05 +0000)
Change-Id: I2c1900358705aac933e0e12dd5dbea72e7ef5641

packaging/capi-network-wifi-aware.spec
src/wifi-aware-private.c

index 08c97c2..ed3e808 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-network-wifi-aware
 Summary:    An Wi-Fi Aware libraries in Native API
-Version:    0.1.3
+Version:    0.1.4
 Release:    1
 Group:      Network & Connectivity/API
 License:    Apache-2.0
index 452b9ee..521aa82 100644 (file)
@@ -1117,14 +1117,14 @@ static bool __parsing_service_discovered_event(GVariant *parameters,
        return true;
 }
 
-static bool __parsing_message_received_event(GVariant *parameters, unsigned int *peer_id,
-               unsigned char *peer_mac,
+static bool __parsing_message_received_event(GVariant *parameters, uint16_t *pub_sub_id,
+               unsigned int *peer_id, unsigned char *peer_mac,
                unsigned char *message, size_t *message_len)
 {
        GVariant *mac_var = NULL;
        GVariant *msg_var = NULL;
 
-       g_variant_get(parameters, "(uvqv)", peer_id, &mac_var,
+       g_variant_get(parameters, "(quvqv)", pub_sub_id, peer_id, &mac_var,
                        message_len, &msg_var);
        if (*message_len > WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN) {
                WIFI_AWARE_LOGE("Too long message %zd", *message_len);
@@ -1215,6 +1215,7 @@ static void __message_received_cb(GDBusConnection *connection,
        __WIFI_AWARE_FUNC_ENTER__;
        WIFI_AWARE_LOGD("NAN Service is discovered");
 
+       uint16_t pub_sub_id = 0;
        unsigned int peer_id = 0;
        unsigned char peer_mac[WIFI_AWARE_MAC_ADDRESS_LEN];
        unsigned char message[WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN];
@@ -1223,12 +1224,17 @@ static void __message_received_cb(GDBusConnection *connection,
        wifi_aware_session_h session = (wifi_aware_session_h)user_data;
        wifi_aware_peer_h peer = NULL;
 
-       if (__parsing_message_received_event(parameters, &peer_id, peer_mac,
+       if (__parsing_message_received_event(parameters, &pub_sub_id, &peer_id, peer_mac,
                        message, &message_len) == false) {
                WIFI_AWARE_LOGE("Fail to get parameters");
                return;
        }
 
+       if (pub_sub_id != _wifi_aware_session_get_pub_sub_id(session)) {
+               WIFI_AWARE_LOGE("Ignore the message. not matched session[%p]", session);
+               return;
+       }
+
        WIFI_AWARE_LOGD("Peer ID: %u", peer_id);
        if (__get_peer_handle(peer_id, &peer) != WIFI_AWARE_ERROR_NONE) {
                WIFI_AWARE_LOGE("Invalid peer %u", peer_id);