freetdm: added dso sample app
This commit is contained in:
parent
41f72fe42a
commit
19fb75740d
|
@ -77,7 +77,8 @@ library_include_HEADERS = \
|
|||
$(SRC)/include/freetdm.h \
|
||||
$(SRC)/include/ftdm_declare.h \
|
||||
$(SRC)/include/ftdm_threadmutex.h \
|
||||
$(SRC)/include/ftdm_os.h
|
||||
$(SRC)/include/ftdm_os.h \
|
||||
$(SRC)/include/ftdm_dso.h
|
||||
|
||||
lib_LTLIBRARIES = libfreetdm.la
|
||||
libfreetdm_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
CC=gcc
|
||||
CFLAGS=-Wall -I/usr/local/freeswitch/include
|
||||
LDFLAGS=-L/usr/local/freeswitch/lib -lfreetdm
|
||||
|
||||
ftdmload: ftdmload.o
|
||||
|
||||
clean:
|
||||
rm -rf ftdmload.o
|
||||
|
||||
export:
|
||||
export LD_LIBRARY_PATH=/usr/local/freeswitch/lib
|
||||
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <freetdm.h>
|
||||
#include <ftdm_dso.h>
|
||||
|
||||
#define ARRLEN(obj) (sizeof(obj)/sizeof(obj[0]))
|
||||
|
||||
struct dso_entry {
|
||||
char name[25];
|
||||
ftdm_dso_lib_t lib;
|
||||
};
|
||||
|
||||
struct dso_entry loaded[10];
|
||||
|
||||
int load(char *name)
|
||||
{
|
||||
char path[255];
|
||||
char *err;
|
||||
struct dso_entry *entry = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRLEN(loaded); i++) {
|
||||
if (!loaded[i].lib) {
|
||||
entry = &loaded[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!entry) {
|
||||
ftdm_log(FTDM_LOG_CRIT, "Cannot load more libraries\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ftdm_build_dso_path(name, path, sizeof(path));
|
||||
ftdm_log(FTDM_LOG_DEBUG, "Loading %s!\n", path);
|
||||
entry->lib = ftdm_dso_open(path, &err);
|
||||
if (!entry->lib) {
|
||||
ftdm_log(FTDM_LOG_CRIT, "Cannot load library '%s': %s\n", path, err);
|
||||
return -1;
|
||||
}
|
||||
strncpy(entry->name, name, sizeof(entry->name)-1);
|
||||
entry->name[sizeof(entry->name)-1] = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int unload(char *name)
|
||||
{
|
||||
int i;
|
||||
struct dso_entry *entry = NULL;
|
||||
ftdm_log(FTDM_LOG_DEBUG, "Unloading %s!\n", name);
|
||||
for (i = 0; i < ARRLEN(loaded); i++) {
|
||||
if (loaded[i].lib && !strcasecmp(loaded[i].name, name)) {
|
||||
entry = &loaded[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!entry) {
|
||||
ftdm_log(FTDM_LOG_CRIT, "Library %s not found\n", name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ftdm_dso_destroy(&entry->lib);
|
||||
entry->lib = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char cmdline[255];
|
||||
char name[255];
|
||||
|
||||
ftdm_global_set_default_logger(FTDM_LOG_LEVEL_DEBUG);
|
||||
|
||||
ftdm_cpu_monitor_disable();
|
||||
|
||||
if (ftdm_global_init() != FTDM_SUCCESS) {
|
||||
fprintf(stderr, "Error loading FreeTDM\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
memset(loaded, 0, sizeof(loaded));
|
||||
|
||||
printf("CLI> ");
|
||||
while (fgets(cmdline, sizeof(cmdline), stdin)) {
|
||||
if (sscanf(cmdline, "load=%s\n", name) == 1) {
|
||||
load(name);
|
||||
} else if (sscanf(cmdline, "unload=%s\n", name) == 1) {
|
||||
unload(name);
|
||||
} else if (!strncasecmp(cmdline, "exit", sizeof("exit")-1)) {
|
||||
printf("Quitting ...\n");
|
||||
sleep(1);
|
||||
break;
|
||||
} else {
|
||||
fprintf(stderr, "load=<name> | unload=<name> | exit\n");
|
||||
}
|
||||
printf("\nCLI> ");
|
||||
}
|
||||
|
||||
|
||||
ftdm_global_destroy();
|
||||
|
||||
printf("Done, press any key to die!\n");
|
||||
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue