gpointer user_data;
} gdbus_result_data_s;
-typedef struct {
- GDBusSignalCallback callback;
- gchar signal_name[50];
- GVariant *parameters;
- gpointer user_data;
-} gdbus_signal_data_s;
-
static gdbus_result_data_s _gdbus_async_result;
-static gdbus_signal_data_s _signal_data;
static gboolean __reply_async_method(gpointer data)
{
return var;
}
-static void __service_discovered(GDBusSignalCallback callback, gpointer user_data)
+static GVariant *__service_discovered()
{
- if (!callback)
- return;
-
unsigned char mac[MAC_ADDR_LEN] = {0, 0, 0, 0, 0, 0};
unsigned char specific_info[5] = {'1', '2', '3', '4', '5'};
- _signal_data.callback = callback;
- strncpy(_signal_data.signal_name, "ServiceDiscovered", 50);
- _signal_data.parameters = g_variant_new("(quvqvi)",
+ return g_variant_new("(quvqvi)",
DUMMY_SUBSCRIBE_ID, DUMMY_PEER_ID, __pack_byte_array(mac, MAC_ADDR_LEN),
5, __pack_byte_array(specific_info, 5), DUMMY_DISTANCE);
- _signal_data.user_data = user_data;
}
-static void __message_received(GDBusSignalCallback callback, gpointer user_data)
+static GVariant *__message_received(GDBusSignalCallback callback, gpointer user_data)
{
- if (!callback)
- return;
-
unsigned char mac[MAC_ADDR_LEN] = {0, 0, 0, 0, 0, 0};
unsigned char message[5] = {'1', '2', '3', '4', '5'};
- _signal_data.callback = callback;
- strncpy(_signal_data.signal_name, "MessageReceived", 50);
- _signal_data.parameters = g_variant_new("(quvqv)",
+ return g_variant_new("(quvqv)",
DUMMY_SUBSCRIBE_ID, DUMMY_PEER_ID, __pack_byte_array(mac, MAC_ADDR_LEN),
5, __pack_byte_array(message, 5));
- _signal_data.user_data = user_data;
}
-static void __data_path_open_result(GDBusSignalCallback callback, gpointer user_data)
+static GVariant *__data_path_open_result()
{
- if (!callback)
- return;
- _signal_data.callback = callback;
- strncpy(_signal_data.signal_name, "DataPathOpenResult", 50);
- _signal_data.parameters = g_variant_new("(ussii)", DUMMY_NDP_ID,
+ return g_variant_new("(ussii)", DUMMY_NDP_ID,
DUMMY_NDP_IFACE, DUMMY_PEER_IP, DUMMY_PEER_PORT,
WIFI_AWARE_ERROR_NONE);
- _signal_data.user_data = user_data;
}
struct {
const gchar *interface_name;
const gchar *signal_name;
- void(*subscribe)(GDBusSignalCallback callback, gpointer user_data);
+ GVariant *(*create_parameters)();
+ GDBusSignalCallback callback;
+ gpointer user_data;
} wifi_aware_gdbus_signal_list[] = {
[SERVICE_DISCOVERED] = {
"net.nan.discovery",
"ServiceDiscovered",
__service_discovered,
+ NULL,
+ NULL,
},
[MESSAGE_RECEIVED] = {
"net.nan.discovery",
"MessageReceived",
__message_received,
+ NULL,
+ NULL,
},
[DATA_PATH_OPENED] = {
"net.nan.discovery",
"DataPathOpenResult",
__data_path_open_result,
+ NULL,
+ NULL,
},
{
NULL,
NULL,
NULL,
+ NULL,
+ NULL,
},
};
static gboolean __emit_signal(gpointer data)
{
- gdbus_signal_data_s *signal_data = (gdbus_signal_data_s *)data;
- signal_data->callback(_get_dummy_gdbus_connection(),
- NULL, WIFI_AWARE_INTERFACE,
- WIFI_AWARE_DISCOVERY_INTERFACE, signal_data->signal_name,
- signal_data->parameters, signal_data->user_data);
+ wifi_aware_gdbus_signal_e signal = GPOINTER_TO_INT(data);
+ printf("__emit_signal %d\n", signal);
+ fflush(stdout);
+
+ wifi_aware_gdbus_signal_list[signal].callback(_get_dummy_gdbus_connection(),
+ NULL, WIFI_AWARE_INTERFACE, WIFI_AWARE_DISCOVERY_INTERFACE,
+ wifi_aware_gdbus_signal_list[signal].signal_name,
+ wifi_aware_gdbus_signal_list[signal].create_parameters(),
+ wifi_aware_gdbus_signal_list[signal].user_data);
+
return FALSE;
}
void _emit_gdbus_signal(wifi_aware_gdbus_signal_e signal)
{
- if (g_strcmp0(_signal_data.signal_name,
- wifi_aware_gdbus_signal_list[(int)signal].signal_name) != 0)
- return;
-
- g_timeout_add(SIGNAL_DELAY, __emit_signal, &_signal_data);
+ g_timeout_add(SIGNAL_DELAY, __emit_signal, GINT_TO_POINTER(signal));
}
static bool __is_same_signal(int i, const char *interface_name, const char *signal_name)
for (int i = 0; ; ++i) {
if (wifi_aware_gdbus_signal_list[i].interface_name == NULL)
break;
- if (__is_same_signal(i, interface_name, member))
- wifi_aware_gdbus_signal_list[i].subscribe(callback, user_data);
+ if (__is_same_signal(i, interface_name, member)) {
+ wifi_aware_gdbus_signal_list[i].callback = callback;
+ wifi_aware_gdbus_signal_list[i].user_data = user_data;
+ }
}
return DUMMY_SIGNAL_ID;
}