diff --git a/obexd/src/mimetype.c b/obexd/src/mimetype.c
index 0f638a0..da281fc 100644
--- a/obexd/src/mimetype.c
+++ b/obexd/src/mimetype.c
return 0;
}
-struct obex_mime_type_driver *obex_mime_type_driver_find(const uint8_t *target,
+static struct obex_mime_type_driver *find_driver(const uint8_t *target,
const char *mimetype, const uint8_t *who,
unsigned int who_size)
{
return NULL;
}
+struct obex_mime_type_driver *obex_mime_type_driver_find(const uint8_t *target,
+ const char *mimetype, const uint8_t *who,
+ unsigned int who_size)
+{
+ struct obex_mime_type_driver *driver;
+
+ driver = find_driver(target, mimetype, who, who_size);
+ if (driver == NULL) {
+ if (who != NULL) {
+ /* Fallback to non-who specific */
+ driver = find_driver(target, mimetype, NULL, 0);
+ if (driver != NULL)
+ return driver;
+ }
+
+ if (mimetype != NULL)
+ /* Fallback to target default */
+ driver = find_driver(target, NULL, NULL, 0);
+
+ if (driver == NULL)
+ /* Fallback to general default */
+ driver = find_driver(NULL, NULL, NULL, 0);
+ }
+
+ return driver;
+}
+
int obex_mime_type_driver_register(struct obex_mime_type_driver *driver)
{
if (!driver) {
return -EINVAL;
}
- if (obex_mime_type_driver_find(driver->target, driver->mimetype,
+ if (find_driver(driver->target, driver->mimetype,
driver->who, driver->who_size)) {
error("Permission denied: %s could not be registered",
driver->mimetype);
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index ad6bee1..337c834 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
}
}
- if (!os->driver) {
- /* Fallback to target default */
+ if (os->type == NULL)
os->driver = obex_mime_type_driver_find(os->service->target,
- NULL, NULL, 0);
- if (!os->driver) {
- /* Fallback to general default */
- os->driver = obex_mime_type_driver_find(NULL,
- NULL, NULL, 0);
- if (!os->driver) {
- error("No driver found");
- OBEX_ObjectSetRsp(obj,
- OBEX_RSP_NOT_IMPLEMENTED,
- OBEX_RSP_NOT_IMPLEMENTED);
- return;
- }
- }
+ NULL,
+ os->service->who,
+ os->service->who_size);
+
+ if (!os->driver) {
+ error("No driver found");
+ OBEX_ObjectSetRsp(obj, OBEX_RSP_NOT_IMPLEMENTED,
+ OBEX_RSP_NOT_IMPLEMENTED);
+ return;
}
err = os->service->get(os, obj, &stream, os->service_data);
OBEX_ObjectReParseHeaders(obex, obj);
- if (!os->driver) {
- /* Fallback to target default */
+ if (os->type == NULL)
os->driver = obex_mime_type_driver_find(os->service->target,
- NULL, NULL, 0);
- if (!os->driver) {
- /* Fallback to general default */
- os->driver = obex_mime_type_driver_find(NULL,
- NULL, NULL, 0);
- if (!os->driver) {
- error("No driver found");
- OBEX_ObjectSetRsp(obj,
- OBEX_RSP_NOT_IMPLEMENTED,
- OBEX_RSP_NOT_IMPLEMENTED);
- return FALSE;
- }
- }
+ NULL,
+ os->service->who,
+ os->service->who_size);
+
+ if (!os->driver) {
+ error("No driver found");
+ OBEX_ObjectSetRsp(obj, OBEX_RSP_NOT_IMPLEMENTED,
+ OBEX_RSP_NOT_IMPLEMENTED);
+ return FALSE;
}
if (!os->service->chkput)