· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Asterisk Ver0-1-0/Loader DotC

AsteriskVer0-1-0/LoaderDotC


struct module {
        int (*load_module)(void);
        int (*unload_module)(void);
        int (*usecount)(void);
        char *(*description)(void);
        void *lib;
        char resource[256];
        struct module *next;
};

static struct module *module_list=NULL;

* int ast_load_resource(char *resource_name)
  • struct module *m = malloc(sizeof(struct module));
  • resource_name 이 절대패스면 그대로 fn 에 설정, 아니면 /usr/lib/asterisk/modules/ 을 앞에 첨부하여 fn 에 설정
  • fn 을 사용하여 dlopen, return 값을 m->lib 에 설정
  • m->lib 과 dlsym 을 사용하여 load_module, unload_module, usecount, description 을 읽어 structure m 에 각각 설정
  • m->load_module() 을 사용하여 실행시킨다.
  • pthread_mutex_lock(&modlock) asterisk Ver0-1-0 에 일부 설명있음.
  • m->next = module_list;
  • module_list = m;
  • pthread_mutex_unlock(&modlock);
  • ast_update_use_count();
  • return 0;

* dlopen dlsym dlclose dlerror: Programming interface to dynamic linking loader.
dlopen loads a dynamic library from the file named by the null terminated string filename and returns an opaque "handle" for the dynamic library.
dlsym takes a "handle" of a dynamic library returned by dlopen and the null terminated symbol name, returning the address where that symbol is loaded. If the symbol is not found, dlsym returns NULL
dlclose decrements the reference count on the dynamic library handle handle. If the reference count drops to zero and no other loaded libraries use symbols in it, then the dynamic library is unloaded.
* .so 파일의 종류와 각각의 load_module
  • apps 밑에 있는 application 은 load_module 에 의해 ast_register_application 을 수행한다.
  • channels 밑에 있는 device driver 들은 load_module 에 의해 mkif 와 ast_channel_register 을 수행하고 restart_monitor 를 통해 입력을 기다린다.
  • codecs 밑에 있는 codec 파일은 load_module 에 의해 ast_register_translator 를 수행한다.
  • format 밑에 있는 파일들은 load_module 에 의해 ast_format_register 를 수행한다.
  • pbx 밑의 파일들은

* ast_register_application
  • pbx.c:int ast_register_application(char *app, int (*execute)(struct ast_channel *, void *))

* ast_register_translator
  • translate.c:int ast_register_translator(struct ast_translator *t)

* ast_format_register
  • file.c:int ast_format_register



sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-07-03 02:06:45
Processing time 0.0066 sec