return WIFI_AWARE_ERROR_INVALID_OPERATION;
}
-static void __unpack_byte_array(unsigned char *array, GVariant *var, uint16_t len)
+static bool __unpack_byte_array(unsigned char *array, GVariant *var, uint16_t len)
{
GVariantIter *iter = NULL;
int length = 0;
if (array == NULL || var == NULL || len == 0) {
WIFI_AWARE_LOGI("Invalid parameter");
- return;
+ return false;
}
g_variant_get(var, "ay", &iter);
if (iter == NULL) {
WIFI_AWARE_LOGE("Fail to get iterator");
- return;
+ return false;
}
while (g_variant_iter_loop(iter, "y", &array[length])) {
break;
}
g_variant_iter_free(iter);
+
+ return true;
}
-static void __parsing_service_discovered_event(GVariant *parameters,
+static bool __parsing_service_discovered_event(GVariant *parameters,
uint16_t *sub_id, unsigned int *peer_id, unsigned char *peer_mac,
unsigned char *specific_info, size_t *specific_info_len)
{
g_variant_get(parameters, "(quvqv)", sub_id, peer_id, &mac_var,
specific_info_len, &info_var);
+ if (*specific_info_len > WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+ WIFI_AWARE_LOGE("Too long service specific info, %u", *specific_info_len);
+ return false;
+ }
- __unpack_byte_array(peer_mac, mac_var, WIFI_AWARE_MAC_ADDRESS_LEN);
- __unpack_byte_array(specific_info, info_var, *specific_info_len);
+ if (__unpack_byte_array(peer_mac, mac_var, WIFI_AWARE_MAC_ADDRESS_LEN) == false) {
+ WIFI_AWARE_LOGE("Fail to get peer MAC address");
+ return false;
+ }
+ if (__unpack_byte_array(specific_info, info_var, *specific_info_len) == false) {
+ WIFI_AWARE_LOGE("Fail to get service specific info");
+ return false;
+ }
g_variant_unref(mac_var);
g_variant_unref(info_var);
+
+ return true;
}
-static void __parsing_message_received_event(GVariant *parameters, unsigned int *peer_id,
+static bool __parsing_message_received_event(GVariant *parameters, unsigned int *peer_id,
unsigned char *peer_mac,
unsigned char *message, size_t *message_len)
{
g_variant_get(parameters, "(uvqv)", peer_id, &mac_var,
message_len, &msg_var);
+ if (*message_len > WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN) {
+ WIFI_AWARE_LOGE("Too long message %u", *message_len);
+ return false;
+ }
- __unpack_byte_array(peer_mac, mac_var, WIFI_AWARE_MAC_ADDRESS_LEN);
- __unpack_byte_array(message, msg_var, *message_len);
+ if (__unpack_byte_array(peer_mac, mac_var, WIFI_AWARE_MAC_ADDRESS_LEN) == false) {
+ WIFI_AWARE_LOGE("Fail to get peer MAC address");
+ return false;
+ }
+ if (__unpack_byte_array(message, msg_var, *message_len) == false) {
+ WIFI_AWARE_LOGE("fail to get message");
+ return false;
+ }
g_variant_unref(mac_var);
g_variant_unref(msg_var);
+
+ return true;
}
static int __get_peer_handle(unsigned int peer_id, wifi_aware_peer_h *peer)
RET_IF(!_wifi_aware_session_is_subscribe_type(session), "This session is not for Subscribe");
- __parsing_service_discovered_event(parameters,
+ if (__parsing_service_discovered_event(parameters,
&sub_id, &peer_id, peer_mac,
- specific_info, &specific_info_len);
-
- if (specific_info_len > WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN) {
- WIFI_AWARE_LOGE("Too long service specific info");
+ specific_info, &specific_info_len) == false) {
+ WIFI_AWARE_LOGE("Fail to get parameters");
return;
}
wifi_aware_session_h session = (wifi_aware_session_h)user_data;
wifi_aware_peer_h peer = NULL;
- __parsing_message_received_event(parameters, &peer_id, peer_mac,
- message, &message_len);
- if (message_len > WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN) {
- WIFI_AWARE_LOGE("Too long message %u", message_len);
+ if (__parsing_message_received_event(parameters, &peer_id, peer_mac,
+ message, &message_len) == false) {
+ WIFI_AWARE_LOGE("Fail to get parameters");
return;
}