diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c
index d7f2999..b98145c 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
OBEX_ObjectSetRsp(obj, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS);
}
+static void opp_progress(obex_t *obex, obex_object_t *obj)
+{
+ struct obex_session *os = OBEX_GetUserData(obex);
+
+ emit_transfer_progress(os->cid, os->size, os->offset);
+}
+
static gint opp_chkput(obex_t *obex, obex_object_t *obj)
{
struct obex_session *os;
.channel = OPP_CHANNEL,
.record = OPP_RECORD,
.connect = opp_connect,
+ .progress = opp_progress,
.disconnect = opp_disconnect,
.get = opp_get,
.put = opp_put,
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index b333b6a..b164427 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
switch (evt) {
case OBEX_EV_PROGRESS:
- /* Just emit progress for Object Push */
- if (os->service->service == OBEX_OPP)
- emit_transfer_progress(os->cid, os->size, os->offset);
+ if (os->service->progress)
+ os->service->progress(obex, obj);
break;
case OBEX_EV_ABORT:
os->aborted = TRUE;
diff --git a/obexd/src/service.h b/obexd/src/service.h
index 32720e1..966256c 100644
--- a/obexd/src/service.h
+++ b/obexd/src/service.h
const guint8 *target;
const gchar *record;
void (*connect) (obex_t *obex, obex_object_t *obj);
+ void (*progress) (obex_t *obex, obex_object_t *obj);
void (*get) (obex_t *obex, obex_object_t *obj);
void (*put) (obex_t *obex, obex_object_t *obj);
gint (*chkput) (obex_t *obex, obex_object_t *obj);