PKG_CHECK_MODULES(json-c REQUIRED json-c)
PKG_CHECK_MODULES(libmicrohttpd REQUIRED libmicrohttpd)
PKG_CHECK_MODULES(uuid REQUIRED uuid)
+PKG_CHECK_MODULES(dbus REQUIRED dbus-1)
# Optional plugin dependencies
PKG_CHECK_MODULES(alsa alsa)
PKG_CHECK_MODULES(librtlsdr librtlsdr>=0.5.0)
INCLUDE(FindThreads)
FIND_PACKAGE(Threads)
-SET(include_dirs ${INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/include ${json-c_INCLUDE_DIRS} ${libmicrohttpd_INCLUDE_DIRS} ${uuid_INCLUDE_DIRS} ${alsa_INCLUDE_DIRS} ${librtlsdr_INCLUDE_DIRS})
-SET(link_libraries ${json-c_LIBRARIES} ${libmicrohttpd_LIBRARIES} ${uuid_LIBRARIES} ${alsa_LIBRARIES} ${librtlsdr_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${libefence_LIBRARIES} -lmagic -lm -ldl)
+SET(include_dirs ${INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/include ${json-c_INCLUDE_DIRS} ${libmicrohttpd_INCLUDE_DIRS} ${uuid_INCLUDE_DIRS} ${dbus_INCLUDE_DIRS} ${alsa_INCLUDE_DIRS} ${librtlsdr_INCLUDE_DIRS})
+SET(link_libraries ${json-c_LIBRARIES} ${libmicrohttpd_LIBRARIES} ${uuid_LIBRARIES} ${dbus_LIBRARIES} ${alsa_LIBRARIES} ${librtlsdr_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${libefence_LIBRARIES} -lmagic -lm -ldl)
SET(plugin_install_dir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/afb)
ADD_DEFINITIONS(-DPLUGIN_INSTALL_DIR="${plugin_install_dir}")
* libmicrohttpd ("libmicrohttpd-dev/devel");
* json-c ("libjson-c-dev/devel");
* uuid ("uuid-dev/libuuid-devel");
+ * dbus ("libdbus-1-dev/dbus-1-devel");
optionally, for plugins :
int fakemod; // respond to GET/POST request without interacting with sndboard
int forceexit; // when autoconfig from script force exit before starting server
AFB_plugin **plugins; // pointer to REST/API plugins
+ int pluginCount; // loaded plugins count
magic_t magic; // Mime type file magic lib
sigjmp_buf restartCkpt; // context save for restart set/longjmp
} AFB_session;
+ADD_SUBDIRECTORY(afm-main-plugin)
ADD_SUBDIRECTORY(session)
ADD_SUBDIRECTORY(samples)
ADD_SUBDIRECTORY(audio)
ADD_SUBDIRECTORY(radio)
-ADD_SUBDIRECTORY(afm-main-plugin)
-
-pkg_check_modules(EXTRAS REQUIRED dbus-1)
-add_compile_options(${EXTRAS_CFLAGS})
-include_directories(${EXTRAS_INCLUDE_DIRS})
-link_libraries(${EXTRAS_LIBRARIES})
-
ADD_LIBRARY(afm-main-api MODULE afm-main-plugin.c utils-jbus.c)
SET_TARGET_PROPERTIES(afm-main-api PROPERTIES PREFIX "")
TARGET_LINK_LIBRARIES(afm-main-api ${link_libraries})
INCLUDE_DIRECTORIES(${include_dirs})
INSTALL(TARGETS afm-main-api
LIBRARY DESTINATION ${plugin_install_dir})
-
struct dirent *pluginDir;
DIR *dir;
afbJsonType = json_object_new_string (AFB_MSG_JTYPE);
- int i = 0;
+ int num = 0;
- plugins = (AFB_plugin **) malloc (sizeof(AFB_plugin));
+ /* pre-allocate for 20 plugins, we will downsize if necessary */
+ plugins = (AFB_plugin **) malloc (20*sizeof(AFB_plugin));
if ((dir = opendir(session->config->plugins)) == NULL) {
fprintf(stderr, "Could not open plugin directory [%s], exiting...\n", session->config->plugins);
pluginRegisterFct = dlsym (plugin, "pluginRegister");
free (pluginPath);
if (!plugin) {
- if (verbose) fprintf(stderr, "[%s] is not a binary plugin, continuing...\n", pluginDir->d_name);
+ if (verbose) fprintf(stderr, "[%s] is not loadable, continuing...\n", pluginDir->d_name);
continue;
} else if (!pluginRegisterFct) {
if (verbose) fprintf(stderr, "[%s] is not an AFB plugin, continuing...\n", pluginDir->d_name);
}
if (verbose) fprintf(stderr, "[%s] is a valid AFB plugin, loading it\n", pluginDir->d_name);
- plugins = (AFB_plugin **) realloc (plugins, (i+1)*sizeof(AFB_plugin));
- plugins[i] = (AFB_plugin *) malloc (sizeof(AFB_plugin));
- plugins[i] = (**pluginRegisterFct)();
- i++;
+ plugins[num] = (AFB_plugin *) malloc (sizeof(AFB_plugin));
+ plugins[num] = (**pluginRegisterFct)();
+ num++;
+ /* only 20 plugins are supported at that time */
+ if (num == 20) break;
}
- plugins[i] = NULL;
+ plugins = (AFB_plugin **) realloc (plugins, (num+1)*sizeof(AFB_plugin));
+ plugins[num] = NULL;
closedir (dir);
// complete plugins and save them within current sessions
session->plugins = RegisterJsonPlugins(plugins);
+ session->pluginCount = num;
}