diff --git a/obexd/src/main.c b/obexd/src/main.c
index 114c215..992a646 100644
--- a/obexd/src/main.c
+++ b/obexd/src/main.c
plugin_init(option_plugin, option_noplugin);
- obex_server_init(OBEX_OPP);
-
- obex_server_init(OBEX_FTP);
-
- obex_server_init(OBEX_PCSUITE);
-
- obex_server_init(OBEX_PBAP);
-
- obex_server_init(OBEX_IRMC);
-
- obex_server_init(OBEX_SYNCEVOLUTION);
-
- obex_server_init(OBEX_MAS);
+ if (obex_server_init() < 0) {
+ error("obex_server_init failed");
+ exit(EXIT_FAILURE);
+ }
if (!root_folder_setup(option_root, option_root_setup)) {
error("Unable to setup root folder %s", option_root);
diff --git a/obexd/src/server.c b/obexd/src/server.c
index bf234ea..f91a622 100644
--- a/obexd/src/server.c
+++ b/obexd/src/server.c
static GSList *servers = NULL;
-int obex_server_init(uint16_t service)
+static void init_server(uint16_t service, GSList *transports)
{
- GSList *drivers;
- GSList *transports;
GSList *l;
- drivers = obex_service_driver_list(service);
- if (drivers == NULL) {
- DBG("No service driver registered");
- return -EINVAL;
- }
-
- transports = obex_transport_driver_list();
- if (transports == NULL) {
- DBG("No transport driver registered");
- return -EINVAL;
- }
-
for (l = transports; l; l = l->next) {
struct obex_transport_driver *transport = l->data;
struct obex_server *server;
server = g_new0(struct obex_server, 1);
server->transport = transport;
- server->drivers = drivers;
+ server->drivers = obex_service_driver_list(service);
server->transport_data = transport->start(server, &err);
if (server->transport_data == NULL) {
servers = g_slist_prepend(servers, server);
}
+}
+
+int obex_server_init(void)
+{
+ GSList *drivers;
+ GSList *transports;
+ GSList *l;
+
+ drivers = obex_service_driver_list(0);
+ if (drivers == NULL) {
+ DBG("No service driver registered");
+ return -EINVAL;
+ }
+
+ transports = obex_transport_driver_list();
+ if (transports == NULL) {
+ DBG("No transport driver registered");
+ return -EINVAL;
+ }
+
+ for (l = drivers; l; l = l->next) {
+ struct obex_service_driver *driver = l->data;
+
+ init_server(driver->service, transports);
+ }
return 0;
}
diff --git a/obexd/src/server.h b/obexd/src/server.h
index dd0df00..81c0b5d 100644
--- a/obexd/src/server.h
+++ b/obexd/src/server.h
GSList *drivers;
};
-int obex_server_init(uint16_t service);
+int obex_server_init(void);
void obex_server_exit(void);
diff --git a/obexd/src/service.c b/obexd/src/service.c
index f7c5a61..8116fc2 100644
--- a/obexd/src/service.c
+++ b/obexd/src/service.c
GSList *l;
GSList *list = NULL;
+ if (services == 0)
+ return drivers;
+
for (l = drivers; l && services; l = l->next) {
struct obex_service_driver *driver = l->data;