guint write_source;
+ gssize io_rx_mtu;
+ gssize io_tx_mtu;
+
guint16 rx_mtu;
guint16 tx_mtu;
memcpy(&u16, &data->mtu, sizeof(u16));
obex->tx_mtu = g_ntohs(u16);
+ if (obex->io_tx_mtu > 0 && obex->tx_mtu > obex->io_tx_mtu)
+ obex->tx_mtu = obex->io_tx_mtu;
obex->tx_buf = g_realloc(obex->tx_buf, obex->tx_mtu);
}
return FALSE;
}
-GObex *g_obex_new(GIOChannel *io, GObexTransportType transport_type)
+GObex *g_obex_new(GIOChannel *io, GObexTransportType transport_type,
+ gssize io_rx_mtu, gssize io_tx_mtu)
{
GObex *obex;
GIOCondition cond;
if (io == NULL)
return NULL;
+ if (io_rx_mtu >= 0 && io_rx_mtu < G_OBEX_MINIMUM_MTU)
+ return NULL;
+
+ if (io_tx_mtu >= 0 && io_tx_mtu < G_OBEX_MINIMUM_MTU)
+ return NULL;
+
obex = g_new0(GObex, 1);
obex->io = io;
obex->ref_count = 1;
- obex->rx_mtu = G_OBEX_DEFAULT_MTU;
+
+ obex->io_rx_mtu = io_rx_mtu;
+ obex->io_tx_mtu = io_tx_mtu;
+
+ if (io_rx_mtu > G_OBEX_MAXIMUM_MTU)
+ obex->rx_mtu = G_OBEX_MAXIMUM_MTU;
+ else
+ obex->rx_mtu = io_rx_mtu;
+
obex->tx_mtu = G_OBEX_MINIMUM_MTU;
+
obex->tx_queue = g_queue_new();
obex->rx_buf = g_malloc(obex->rx_mtu);
obex->tx_buf = g_malloc(obex->tx_mtu);
void g_obex_set_disconnect_function(GObex *obex, GObexDisconnectFunc func,
gpointer user_data);
-GObex *g_obex_new(GIOChannel *io, GObexTransportType transport_type);
+GObex *g_obex_new(GIOChannel *io, GObexTransportType transport_type,
+ gssize rx_mtu, gssize tx_mtu);
GObex *g_obex_ref(GObex *obex);
void g_obex_unref(GObex *obex);
g_io_channel_set_close_on_unref(io, close_on_unref);
- return g_obex_new(io, transport_type);
+ return g_obex_new(io, transport_type, -1, -1);
}
static void create_endpoints(GObex **obex, GIOChannel **io, int sock_type)
{
GObex *obex;
- obex = g_obex_new(NULL, 0);
+ obex = g_obex_new(NULL, 0, -1, -1);
g_assert(obex == NULL);
}