struct _GIsiClient {
GIsiModem *modem;
+ unsigned timeout;
uint8_t resource;
GSList *pending;
};
return NULL;
}
+ client->timeout = G_ISI_CLIENT_DEFAULT_TIMEOUT;
client->resource = resource;
client->modem = modem;
client->pending = NULL;
g_free(client);
}
+void g_isi_client_set_timeout(GIsiClient *client, unsigned timeout)
+{
+ if (client == NULL)
+ return;
+
+ client->timeout = timeout;
+}
+
static struct pending_data *pending_data_create(GIsiClient *client,
GIsiNotifyFunc notify,
void *data,
return pd;
}
-GIsiPending *g_isi_client_send(GIsiClient *client, const void *__restrict buf,
- size_t len, unsigned timeout,
+gboolean g_isi_client_send(GIsiClient *client,
+ const void *__restrict msg, size_t len,
+ GIsiNotifyFunc notify, void *data,
+ GDestroyNotify destroy)
+{
+ if (client == NULL)
+ return FALSE;
+
+ return g_isi_client_send_with_timeout(client, msg, len,
+ client->timeout,
+ notify, data, destroy);
+}
+
+gboolean g_isi_client_send_with_timeout(GIsiClient *client,
+ const void *__restrict buf, size_t len,
+ unsigned timeout,
GIsiNotifyFunc notify, void *data,
GDestroyNotify destroy)
{
pd = pending_data_create(client, notify, data, destroy);
if (pd == NULL)
- return NULL;
+ return FALSE;
op = g_isi_request_send(client->modem, client->resource, buf, len,
timeout, pending_resp_notify, pd,
pending_destroy);
if (op == NULL) {
g_free(pd);
- return NULL;
+ return FALSE;
}
client->pending = g_slist_append(client->pending, op);
- return op;
+ return TRUE;
}
-GIsiPending *g_isi_client_vsend(GIsiClient *client,
+gboolean g_isi_client_vsend(GIsiClient *client,
+ const struct iovec *iov, size_t iovlen,
+ GIsiNotifyFunc notify, void *data,
+ GDestroyNotify destroy)
+{
+ if (client == NULL)
+ return FALSE;
+
+ return g_isi_client_vsend_with_timeout(client, iov, iovlen,
+ client->timeout,
+ notify, data, destroy);
+}
+
+gboolean g_isi_client_vsend_with_timeout(GIsiClient *client,
const struct iovec *__restrict iov,
size_t iovlen, unsigned timeout,
GIsiNotifyFunc notify, void *data,
pd = pending_data_create(client, notify, data, destroy);
if (pd == NULL)
- return NULL;
+ return FALSE;
op = g_isi_request_vsend(client->modem, client->resource, iov, iovlen,
timeout, pending_resp_notify, pd,
pending_destroy);
if (op == NULL) {
g_free(pd);
- return NULL;
+ return FALSE;
}
client->pending = g_slist_append(client->pending, op);
- return op;
+ return TRUE;
}
-GIsiPending *g_isi_client_ind_subscribe(GIsiClient *client, uint8_t type,
+gboolean g_isi_client_ind_subscribe(GIsiClient *client, uint8_t type,
GIsiNotifyFunc notify, void *data)
{
struct pending_data *pd;
pd = pending_data_create(client, notify, data, NULL);
if (pd == NULL)
- return NULL;
+ return FALSE;
op = g_isi_ind_subscribe(client->modem, client->resource, type,
pending_notify, pd, pending_destroy);
if (op == NULL) {
g_free(pd);
- return NULL;
+ return FALSE;
}
client->pending = g_slist_append(client->pending, op);
- return op;
+ return TRUE;
}
-GIsiPending *g_isi_client_ntf_subscribe(GIsiClient *client, uint8_t type,
+gboolean g_isi_client_ntf_subscribe(GIsiClient *client, uint8_t type,
GIsiNotifyFunc notify, void *data)
{
struct pending_data *pd;
pd = pending_data_create(client, notify, data, NULL);
if (pd == NULL)
- return NULL;
+ return FALSE;
op = g_isi_ntf_subscribe(client->modem, client->resource, type,
pending_notify, pd, pending_destroy);
if (op == NULL) {
g_free(pd);
- return NULL;
+ return FALSE;
}
client->pending = g_slist_append(client->pending, op);
- return op;
+ return TRUE;
}
-GIsiPending *g_isi_client_verify(GIsiClient *client, GIsiNotifyFunc notify,
+gboolean g_isi_client_verify(GIsiClient *client, GIsiNotifyFunc notify,
void *data, GDestroyNotify destroy)
{
struct pending_data *pd;
pd = pending_data_create(client, notify, data, destroy);
if (pd == NULL)
- return NULL;
+ return FALSE;
op = g_isi_resource_ping(client->modem, client->resource,
pending_resp_notify, pd,
pending_destroy);
if (op == NULL) {
g_free(pd);
- return NULL;
+ return FALSE;
}
client->pending = g_slist_append(client->pending, op);
- return op;
+ return TRUE;
}
#include "modem.h"
+#define G_ISI_CLIENT_DEFAULT_TIMEOUT (5)
+
struct _GIsiClient;
typedef struct _GIsiClient GIsiClient;
void g_isi_client_reset(GIsiClient *client);
void g_isi_client_destroy(GIsiClient *client);
-GIsiPending *g_isi_client_send(GIsiClient *client, const void *__restrict msg,
+void g_isi_client_set_timeout(GIsiClient *client, unsigned timeout);
+
+gboolean g_isi_client_send(GIsiClient *client,
+ const void *__restrict msg, size_t len,
+ GIsiNotifyFunc notify, void *data,
+ GDestroyNotify destroy);
+
+gboolean g_isi_client_vsend(GIsiClient *client,
+ const struct iovec *iov, size_t iovlen,
+ GIsiNotifyFunc notify, void *data,
+ GDestroyNotify destroy);
+
+gboolean g_isi_client_send_with_timeout(GIsiClient *client, const void *__restrict msg,
size_t len, unsigned timeout,
GIsiNotifyFunc notify, void *data,
GDestroyNotify destroy);
-GIsiPending *g_isi_client_vsend(GIsiClient *client, const struct iovec *iov,
+gboolean g_isi_client_vsend_with_timeout(GIsiClient *client, const struct iovec *iov,
size_t iovlen, unsigned timeout,
GIsiNotifyFunc notify, void *data,
GDestroyNotify destroy);
-GIsiPending *g_isi_client_ind_subscribe(GIsiClient *client, uint8_t type,
+gboolean g_isi_client_ind_subscribe(GIsiClient *client, uint8_t type,
GIsiNotifyFunc notify, void *data);
-GIsiPending *g_isi_client_ntf_subscribe(GIsiClient *client, uint8_t type,
+gboolean g_isi_client_ntf_subscribe(GIsiClient *client, uint8_t type,
GIsiNotifyFunc notify, void *data);
-GIsiPending *g_isi_client_verify(GIsiClient *client, GIsiNotifyFunc notify,
- void *data, GDestroyNotify destroy);
+gboolean g_isi_client_verify(GIsiClient *client, GIsiNotifyFunc notify,
+ void *data, GDestroyNotify destroy);
#ifdef __cplusplus
}
.type2 = type2,
.n_sb = 0,
};
+ size_t len = sizeof(msg);
GIsiPipe *pipe;
pipe = g_try_new0(GIsiPipe, 1);
pipe->enabled = FALSE;
pipe->handle = PN_PIPE_INVALID_HANDLE;
- if (g_isi_client_send(pipe->client, &msg, sizeof(msg), 3,
- g_isi_pipe_created, pipe, NULL))
+ if (g_isi_client_send(pipe->client, &msg, len,
+ g_isi_pipe_created, pipe, NULL))
return pipe;
g_isi_client_destroy(pipe->client);
pipe->enabled = TRUE;
}
-static GIsiPending *g_isi_pipe_enable(GIsiPipe *pipe)
+static void g_isi_pipe_enable(GIsiPipe *pipe)
{
struct isi_pipe_enable_req msg = {
.cmd = PNS_PIPE_ENABLE_REQ,
.pipe_handle = pipe->handle,
};
- size_t len = sizeof(struct isi_pipe_enable_req);
+ size_t len = sizeof(msg);
- return g_isi_client_send(pipe->client, &msg, len, 5, g_isi_pipe_enabled,
- pipe, NULL);
+ g_isi_client_send(pipe->client, &msg, len,
+ g_isi_pipe_enabled, pipe, NULL);
}
/**
}
-static GIsiPending *g_isi_pipe_remove(GIsiPipe *pipe)
+static void g_isi_pipe_remove(GIsiPipe *pipe)
{
struct isi_pipe_remove_req msg = {
.cmd = PNS_PIPE_REMOVE_REQ,
.pipe_handle = pipe->handle,
};
- size_t len = sizeof(struct isi_pipe_remove_req);
+ size_t len = sizeof(msg);
- return g_isi_client_send(pipe->client, &msg, len, 5, g_isi_pipe_removed,
- pipe, NULL);
+ g_isi_client_send(pipe->client, &msg, len,
+ g_isi_pipe_removed, pipe, NULL);
}
/**