uint32_t adapter_idx, uint32_t target_idx,
near_tag_io_cb cb,
near_server_io req_get,
- near_server_io req_put);
+ near_server_io req_put,
+ gpointer data);
int near_snep_core_push(int fd, uint32_t adapter_idx, uint32_t target_idx,
struct near_ndef_message *ndef,
- near_device_io_cb cb);
+ near_device_io_cb cb,
+ gpointer data);
-void near_snep_core_close(int client_fd, int err);
+void near_snep_core_close(int client_fd, int err, gpointer data);
void near_snep_core_response_noinfo(int client_fd, uint8_t response);
void near_snep_core_response_with_info(int client_fd, uint8_t response,
g_free(ndef);
}
-static void handover_close(int client_fd, int err)
+static void handover_close(int client_fd, int err, gpointer data)
{
struct hr_ndef *ndef;
fail:
near_error("ndef parsing failed %d", err);
- handover_close(client_fd, 0);
+ handover_close(client_fd, 0, NULL);
return err;
}
err = handover_ndef_parse(client_fd, ndef);
if (err > 0) {
/* clean memory */
- handover_close(client_fd, 0);
+ handover_close(client_fd, 0, NULL);
return true;
}
*/
static bool handover_read(int client_fd,
uint32_t adapter_idx, uint32_t target_idx,
- near_tag_io_cb cb)
+ near_tag_io_cb cb,
+ gpointer data)
{
struct hr_ndef *ndef;
{
DBG("");
- handover_close(client->fd, 0);
+ handover_close(client->fd, 0, NULL);
if (client->cb)
client->cb(client->adapter_idx, client->target_idx, status);
ret = handover_read(client->fd,
client->adapter_idx, client->target_idx,
- client->cb);
+ client->cb, data);
if (!ret)
free_hr_push_client(client, 0);
static int handover_push(int client_fd,
uint32_t adapter_idx, uint32_t target_idx,
struct near_ndef_message *ndef,
- near_device_io_cb cb)
+ near_device_io_cb cb,
+ gpointer data)
{
int err;
struct hr_push_client *client;
}
/* clean on close */
-static void llcp_validation_close(int client_fd, int err)
+static void llcp_validation_close(int client_fd, int err, gpointer data)
{
DBG("");
/* Connection Oriented: Wrapper for read function */
static bool llcp_validation_read_co(int client_fd, uint32_t adapter_idx,
uint32_t target_idx,
- near_tag_io_cb cb)
+ near_tag_io_cb cb,
+ gpointer data)
{
DBG("CO client with fd: %d", client_fd);
return llcp_common_read(client_fd, adapter_idx, target_idx, cb,
/* Connection less: Wrapper for read function */
static bool llcp_validation_read_cl(int client_fd, uint32_t adapter_idx,
uint32_t target_idx,
- near_tag_io_cb cb)
+ near_tag_io_cb cb,
+ gpointer data)
{
DBG("CL client with fd: %d", client_fd);
return llcp_common_read(client_fd, adapter_idx, target_idx, cb,
static bool npp_read(int client_fd,
uint32_t adapter_idx, uint32_t target_idx,
- near_tag_io_cb cb)
+ near_tag_io_cb cb, gpointer data)
{
struct near_device *device;
struct p2p_npp_frame frame;
err = 0;
if (client_data->driver->close)
- client_data->driver->close(client_data->fd, err);
+ client_data->driver->close(client_data->fd, err,
+ client_data->driver->user_data);
near_error("%s client channel closed",
client_data->driver->name);
more = client_data->driver->read(client_data->fd,
client_data->adapter_idx,
client_data->target_idx,
- client_data->cb);
+ client_data->cb,
+ client_data->driver->user_data);
return more;
}
client_data = (struct p2p_data *) data;
if (client_data->driver->close)
- client_data->driver->close(client_data->fd, 0);
+ client_data->driver->close(client_data->fd, 0,
+ client_data->driver->user_data);
if (client_data->watch > 0)
g_source_remove(client_data->watch);
}
err = conn->driver->push(fd, conn->adapter_idx, conn->target_idx,
- conn->ndef, conn->cb);
+ conn->ndef, conn->cb,
+ conn->driver->user_data);
out:
if (err < 0)
}
err = conn->driver->push(fd, conn->adapter_idx, conn->target_idx,
- conn->ndef, conn->cb);
+ conn->ndef, conn->cb,
+ conn->driver->user_data);
out:
if (err < 0)
const char *fallback_service_name;
bool single_connection;
int sock_type;
- bool (*read)(int client_fd,
- uint32_t adapter_idx, uint32_t target_idx,
- near_device_io_cb cb);
+ gpointer user_data;
+
+ bool (*read)(int client_fd, uint32_t adapter_idx, uint32_t target_idx,
+ near_device_io_cb cb,
+ gpointer data);
int (*push)(int client_fd, uint32_t adapter_idx, uint32_t target_idx,
- struct near_ndef_message *ndef, near_device_io_cb cb);
- void (*close)(int client_fd, int err);
+ struct near_ndef_message *ndef,
+ near_device_io_cb cb,
+ gpointer data);
+ void (*close)(int client_fd, int err, gpointer data);
};
int npp_init(void);
/* This function is a wrapper to push post processing read functions */
static bool snep_validation_read(int client_fd, uint32_t adapter_idx,
uint32_t target_idx,
- near_tag_io_cb cb)
+ near_tag_io_cb cb,
+ gpointer data)
{
DBG("");
return near_snep_core_read(client_fd, adapter_idx, target_idx, cb,
snep_validation_server_req_get,
- snep_validation_server_req_put);
+ snep_validation_server_req_put,
+ data);
}
-static void snep_validation_close(int client_fd, int err)
+static void snep_validation_close(int client_fd, int err, gpointer data)
{
DBG("");
g_hash_table_remove(snep_validation_hash, GINT_TO_POINTER(client_fd));
/* Call core server close */
- near_snep_core_close(client_fd, err);
+ near_snep_core_close(client_fd, err, data);
}
struct near_p2p_driver validation_snep_driver = {
/* This function is a wrapper to push post processing read functions */
static bool snep_default_read(int client_fd, uint32_t adapter_idx,
uint32_t target_idx,
- near_tag_io_cb cb)
+ near_tag_io_cb cb,
+ gpointer data)
{
DBG("");
return near_snep_core_read(client_fd, adapter_idx, target_idx, cb,
snep_default_server_req_get,
- snep_default_server_req_put);
+ snep_default_server_req_put,
+ data);
}
uint32_t adapter_idx, uint32_t target_idx,
near_tag_io_cb cb,
near_server_io req_get,
- near_server_io req_put)
+ near_server_io req_put,
+ gpointer data)
{
struct p2p_snep_data *snep_data;
struct p2p_snep_req_frame frame;
/* SNEP Core: on P2P push */
int near_snep_core_push(int fd, uint32_t adapter_idx, uint32_t target_idx,
struct near_ndef_message *ndef,
- near_device_io_cb cb)
+ near_device_io_cb cb,
+ gpointer data)
{
struct p2p_snep_put_req_data *req;
GIOChannel *channel;
}
/* SNEP core functions: close */
-void near_snep_core_close(int client_fd, int err)
+void near_snep_core_close(int client_fd, int err, gpointer data)
{
struct p2p_snep_data *snep_data;
TEST_SNEP_LOG("sent 0x%02X request\n", req->request);
- ret = near_snep_core_read(sockfd[server], 0, 0, NULL, req_get, req_put);
+ ret = near_snep_core_read(sockfd[server], 0, 0, NULL, req_get, req_put,
+ NULL);
return ret;
}
g_assert(nbytes == frag_len);
near_snep_core_read(sockfd[server], 0, 0, NULL,
- test_snep_dummy_req_get, test_snep_dummy_req_put);
+ test_snep_dummy_req_get, test_snep_dummy_req_put,
+ NULL);
return true;
}
/* UUT */
ret = near_snep_core_read(sockfd[client], 0, 0, NULL,
- test_snep_dummy_req_get, test_snep_dummy_req_put);
+ test_snep_dummy_req_get, test_snep_dummy_req_put, NULL);
g_assert(ret);
resp = g_try_malloc0(frame_len);
/* UUT */
ret = near_snep_core_read(sockfd[client], 0, 0, NULL,
- test_snep_dummy_req_get, test_snep_dummy_req_put);
+ test_snep_dummy_req_get, test_snep_dummy_req_put, NULL);
g_assert(ret);
/* Get response and verify */