]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: added dso sample app
authorMoises Silva <moy@sangoma.com>
Wed, 12 May 2010 15:54:50 +0000 (11:54 -0400)
committerMoises Silva <moy@sangoma.com>
Wed, 12 May 2010 15:54:50 +0000 (11:54 -0400)
libs/freetdm/Makefile.am
libs/freetdm/sample/dso/Makefile [new file with mode: 0644]
libs/freetdm/sample/dso/ftdmload.c [new file with mode: 0644]
libs/freetdm/src/include/ftdm_dso.h [moved from libs/freetdm/src/include/private/ftdm_dso.h with 100% similarity]

index c63cefc7ecc6472a6496e87e89dd0bffc0c8fd6a..30e8b99800cf080dae64c0ba7e9260b90b19f528 100644 (file)
@@ -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)
diff --git a/libs/freetdm/sample/dso/Makefile b/libs/freetdm/sample/dso/Makefile
new file mode 100644 (file)
index 0000000..330bef0
--- /dev/null
@@ -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
+       
+
diff --git a/libs/freetdm/sample/dso/ftdmload.c b/libs/freetdm/sample/dso/ftdmload.c
new file mode 100644 (file)
index 0000000..9d313b3
--- /dev/null
@@ -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;
+}
+