From 19e380ec7442f149b5481a65bc87f39fff451c94 Mon Sep 17 00:00:00 2001 From: Forrest Zhao Date: Mon, 16 Nov 2009 15:17:47 +0800 Subject: [PATCH] obexd: Introduce target_size to struct obex_service_driver{} Because the OBEX target header length for each OBEX service layer may not be the same. --- obexd/plugins/ftp.c | 2 ++ obexd/plugins/pbap.c | 1 + obexd/src/obex.c | 7 ++++--- obexd/src/service.c | 6 ++++-- obexd/src/service.h | 3 ++- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c index ce5ee23c3..7b768d139 100644 --- a/obexd/plugins/ftp.c +++ b/obexd/plugins/ftp.c @@ -470,6 +470,7 @@ struct obex_service_driver pcsuite = { .channel = PCSUITE_CHANNEL, .record = PCSUITE_RECORD, .target = FTP_TARGET, + .target_size = TARGET_SIZE, .connect = ftp_connect, .get = ftp_get, .put = ftp_put, @@ -484,6 +485,7 @@ struct obex_service_driver ftp = { .channel = FTP_CHANNEL, .record = FTP_RECORD, .target = FTP_TARGET, + .target_size = TARGET_SIZE, .connect = ftp_connect, .get = ftp_get, .put = ftp_put, diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c index 340fb066c..be8a28796 100644 --- a/obexd/plugins/pbap.c +++ b/obexd/plugins/pbap.c @@ -564,6 +564,7 @@ struct obex_service_driver pbap = { .channel = PBAP_CHANNEL, .record = PBAP_RECORD, .target = PBAP_TARGET, + .target_size = TARGET_SIZE, .connect = pbap_connect, .get = pbap_get, .setpath = pbap_setpath, diff --git a/obexd/src/obex.c b/obexd/src/obex.c index 8d85aa3f6..57a2ba1ad 100644 --- a/obexd/src/obex.c +++ b/obexd/src/obex.c @@ -200,10 +200,11 @@ static void cmd_connect(struct obex_session *os, os->cid = ++cid; while (OBEX_ObjectGetNextHeader(obex, obj, &hi, &hd, &hlen)) { - if (hi != OBEX_HDR_TARGET || hlen != TARGET_SIZE) + if (hi != OBEX_HDR_TARGET) continue; - os->service = obex_service_driver_find(os->server->drivers, hd.bs); + os->service = obex_service_driver_find(os->server->drivers, + hd.bs, hlen); break; } @@ -890,7 +891,7 @@ gint obex_session_start(GIOChannel *io, struct server *server) os = g_new0(struct obex_session, 1); - os->service = obex_service_driver_find(server->drivers, NULL); + os->service = obex_service_driver_find(server->drivers, NULL, 0); os->current_folder = g_strdup(server->folder); os->server = server; diff --git a/obexd/src/service.c b/obexd/src/service.c index 2a5494dc8..3020acc36 100644 --- a/obexd/src/service.c +++ b/obexd/src/service.c @@ -38,7 +38,8 @@ static GSList *drivers = NULL; -struct obex_service_driver *obex_service_driver_find(GSList *list, const guint8 *target) +struct obex_service_driver *obex_service_driver_find(GSList *list, + const guint8 *target, guint target_size) { GSList *l; @@ -49,7 +50,8 @@ struct obex_service_driver *obex_service_driver_find(GSList *list, const guint8 return driver; if (driver->target && target && - memcmp(driver->target, target, TARGET_SIZE) == 0) + driver->target_size == target_size && + memcmp(driver->target, target, target_size) == 0) return driver; } diff --git a/obexd/src/service.h b/obexd/src/service.h index 966256ce5..df12e91c9 100644 --- a/obexd/src/service.h +++ b/obexd/src/service.h @@ -26,6 +26,7 @@ struct obex_service_driver { guint16 service; guint8 channel; const guint8 *target; + guint target_size; const gchar *record; void (*connect) (obex_t *obex, obex_object_t *obj); void (*progress) (obex_t *obex, obex_object_t *obj); @@ -41,4 +42,4 @@ int obex_service_driver_register(struct obex_service_driver *driver); void obex_service_driver_unregister(struct obex_service_driver *driver); GSList *obex_service_driver_list(guint16 services); struct obex_service_driver *obex_service_driver_find(GSList *drivers, - const guint8 *uuid); + const guint8 *target, guint target_size); -- 2.47.3