return TRUE;
}
-GObexPacket *g_obex_packet_new(guint8 opcode, gboolean final)
+GObexPacket *g_obex_packet_new(guint8 opcode, gboolean final, GSList *headers)
{
GObexPacket *pkt;
pkt->opcode = opcode;
pkt->final = final;
+ pkt->headers = headers;
pkt->data_policy = G_OBEX_DATA_COPY;
final = (opcode & FINAL_BIT) ? TRUE : FALSE;
opcode &= ~FINAL_BIT;
- pkt = g_obex_packet_new(opcode, final);
+ pkt = g_obex_packet_new(opcode, final, NULL);
if (header_offset == 0)
goto headers;
gboolean g_obex_packet_set_data(GObexPacket *pkt, const void *data, gsize len,
GObexDataPolicy data_policy);
const void *g_obex_packet_get_data(GObexPacket *pkt, gsize *len);
-GObexPacket *g_obex_packet_new(guint8 opcode, gboolean final);
+GObexPacket *g_obex_packet_new(guint8 opcode, gboolean final, GSList *headers);
void g_obex_packet_free(GObexPacket *pkt);
GObexPacket *g_obex_packet_decode(const void *data, gsize len,
obex->pending_req->cancelled = TRUE;
- pkt = g_obex_packet_new(G_OBEX_OP_ABORT, TRUE);
+ pkt = g_obex_packet_new(G_OBEX_OP_ABORT, TRUE, NULL);
return g_obex_send(obex, pkt, err);
}
obex->disconn_func_data = user_data;
}
+static void init_connect_data(GObex *obex, struct connect_data *data)
+{
+ guint16 u16;
+
+ memset(data, 0, sizeof(*data));
+
+ data->version = 0x10;
+ data->flags = 0;
+
+ u16 = g_htons(obex->rx_mtu);
+ memcpy(&data->mtu, &u16, sizeof(u16));
+}
+
static void parse_connect_data(GObex *obex, GObexPacket *pkt)
{
const struct connect_data *data;
/* Higher level functions */
+gboolean g_obex_response(GObex *obex, GObexPacket *req, guint8 rspcode,
+ GSList *headers, GError **err)
+{
+ GObexPacket *rsp;
+
+ rsp = g_obex_packet_new(rspcode, TRUE, headers);
+
+ if (g_obex_packet_get_operation(req, NULL) == G_OBEX_OP_CONNECT) {
+ struct connect_data data;
+ init_connect_data(obex, &data);
+ g_obex_packet_set_data(rsp, &data, sizeof(data),
+ G_OBEX_DATA_COPY);
+ }
+
+ return g_obex_send(obex, rsp, err);
+}
+
guint g_obex_connect(GObex *obex, void *target, gsize target_len,
GObexResponseFunc func, gpointer user_data,
GError **err)
{
GObexPacket *req;
struct connect_data data;
- guint16 u16;
- req = g_obex_packet_new(G_OBEX_OP_CONNECT, TRUE);
-
- memset(&data, 0, sizeof(data));
- data.version = 0x10;
- data.flags = 0;
- u16 = g_htons(obex->rx_mtu);
- memcpy(&data.mtu, &u16, sizeof(u16));
+ req = g_obex_packet_new(G_OBEX_OP_CONNECT, TRUE, NULL);
+ init_connect_data(obex, &data);
g_obex_packet_set_data(req, &data, sizeof(data), G_OBEX_DATA_COPY);
if (target != NULL) {
guint g_obex_connect(GObex *obex, void *target, gsize target_len,
GObexResponseFunc func, gpointer user_data,
GError **err);
+gboolean g_obex_response(GObex *obex, GObexPacket *req, guint8 rspcode,
+ GSList *headers, GError **err);
#endif /* __GOBEX_H */
{
GObexPacket *pkt;
- pkt = g_obex_packet_new(G_OBEX_OP_PUT, TRUE);
+ pkt = g_obex_packet_new(G_OBEX_OP_PUT, TRUE, NULL);
g_assert(pkt != NULL);
uint8_t buf[255];
gssize len;
- pkt = g_obex_packet_new(G_OBEX_OP_PUT, FALSE);
+ pkt = g_obex_packet_new(G_OBEX_OP_PUT, FALSE, NULL);
hdr = g_obex_header_new_on_demand(G_OBEX_HDR_ID_BODY,
get_body_data, NULL);
GObexPacket *req;
guint8 connect_data[] = { 0x10, 0x00, 0x10, 0x00 };
- req = g_obex_packet_new(G_OBEX_OP_CONNECT, TRUE);
+ req = g_obex_packet_new(G_OBEX_OP_CONNECT, TRUE, NULL);
g_assert(req != NULL);
g_obex_packet_set_data(req, connect_data, sizeof(connect_data),
r.err = NULL;
- req = g_obex_packet_new(G_OBEX_OP_PUT, TRUE);
+ req = g_obex_packet_new(G_OBEX_OP_PUT, TRUE, NULL);
r.id = g_obex_send_req(r.obex, req, -1, req_done, &r, &r.err);
g_assert_no_error(r.err);
g_assert(r.id != 0);
r.err = NULL;
- req = g_obex_packet_new(G_OBEX_OP_PUT, TRUE);
+ req = g_obex_packet_new(G_OBEX_OP_PUT, TRUE, NULL);
r.id = g_obex_send_req(r.obex, req, -1, req_done, &r, &r.err);
g_assert_no_error(r.err);
g_assert(r.id != 0);
r.buf = pkt_connect_req;
r.len = sizeof(pkt_connect_req);
- req = g_obex_packet_new(G_OBEX_OP_CONNECT, TRUE);
+ req = g_obex_packet_new(G_OBEX_OP_CONNECT, TRUE, NULL);
g_assert(req != NULL);
g_obex_packet_set_data(req, connect_data, sizeof(connect_data),
r.buf = pkt_put_body;
r.len = sizeof(pkt_put_body);
- req = g_obex_packet_new(G_OBEX_OP_PUT, FALSE);
+ req = g_obex_packet_new(G_OBEX_OP_PUT, FALSE, NULL);
hdr = g_obex_header_new_on_demand(G_OBEX_HDR_ID_BODY,
get_body_data, NULL);