Commit 9c66aeb8 authored by Ghislain MARY's avatar Ghislain MARY

Merge branch 'master' of git.linphone.org:linphone into belle-sip

parents 390e8aa1 dfb316ea
......@@ -1226,11 +1226,11 @@ static void misc_config_read (LinphoneCore *lc) {
static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vtable, const char *config_path,
const char *factory_config_path, void * userdata)
static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vtable, LpConfig *config, void * userdata)
{
ms_message("Initializing LinphoneCore %s", linphone_core_get_version());
memset (lc, 0, sizeof (LinphoneCore));
lc->config=config;
lc->data=userdata;
lc->ringstream_autorelease=TRUE;
......@@ -1307,10 +1307,6 @@ static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vta
lc->msevq=ms_event_queue_new();
ms_set_global_event_queue(lc->msevq);
lc->config=lp_config_new(config_path);
if (factory_config_path)
lp_config_read_file(lc->config,factory_config_path);
lc->sal=sal_init();
sal_set_user_pointer(lc->sal,lc);
......@@ -1357,13 +1353,19 @@ static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vta
* It is OPTIONAL, use NULL if unneeded.
* @param userdata an opaque user pointer that can be retrieved at any time (for example in
* callbacks) using linphone_core_get_user_data().
*
* @see linphone_core_new_with_config
**/
LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable,
const char *config_path, const char *factory_config_path, void * userdata)
{
LinphoneCore *core=ms_new(LinphoneCore,1);
linphone_core_init(core,vtable,config_path, factory_config_path, userdata);
LpConfig *config = lp_config_new_with_factory(config_path, factory_config_path);
return linphone_core_new_with_config(vtable, config, userdata);
}
LinphoneCore *linphone_core_new_with_config(const LinphoneCoreVTable *vtable, struct _LpConfig *config, void *userdata)
{
LinphoneCore *core = ms_new(LinphoneCore, 1);
linphone_core_init(core, vtable, config, userdata);
return core;
}
......
......@@ -924,6 +924,20 @@ const char *linphone_core_get_user_agent_version(void);
LINPHONE_PUBLIC LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable,
const char *config_path, const char *factory_config, void* userdata);
/**
* Instantiates a LinphoneCore object with a given LpConfig.
* @ingroup initializing
*
* The LinphoneCore object is the primary handle for doing all phone actions.
* It should be unique within your application.
* @param vtable a LinphoneCoreVTable structure holding your application callbacks
* @param config a pointer to an LpConfig object holding the configuration of the LinphoneCore to be instantiated.
* @param userdata an opaque user pointer that can be retrieved at any time (for example in
* callbacks) using linphone_core_get_user_data().
* @see linphone_core_new
**/
LinphoneCore *linphone_core_new_with_config(const LinphoneCoreVTable *vtable, struct _LpConfig *config, void *userdata);
/* function to be periodically called in a main loop */
/* For ICE to work properly it should be called every 20ms */
LINPHONE_PUBLIC void linphone_core_iterate(LinphoneCore *lc);
......
......@@ -215,28 +215,35 @@ void lp_config_parse(LpConfig *lpconfig, FILE *file){
}
LpConfig * lp_config_new(const char *filename){
return lp_config_new_with_factory(filename, NULL);
}
LpConfig *lp_config_new_with_factory(const char *config_filename, const char *factory_config_filename) {
LpConfig *lpconfig=lp_new0(LpConfig,1);
struct stat fileStat;
if (filename!=NULL){
ms_message("Using (r/w) config information from %s", filename);
lpconfig->filename=ortp_strdup(filename);
lpconfig->file=fopen(filename,"r+");
if (config_filename!=NULL){
ms_message("Using (r/w) config information from %s", config_filename);
lpconfig->filename=ortp_strdup(config_filename);
lpconfig->file=fopen(config_filename,"r+");
if (lpconfig->file!=NULL){
lp_config_parse(lpconfig,lpconfig->file);
fclose(lpconfig->file);
#if !defined(WIN32)
if ((stat(filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) {
if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) {
/* make existing configuration files non-group/world-accessible */
if (chmod(filename, S_IRUSR | S_IWUSR ) == -1) {
if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) {
ms_warning("unable to correct permissions on "
"configuration file: %s", strerror(errno));
}
}
#endif /*_WIN32_WCE*/
#endif /*WIN32*/
lpconfig->file=NULL;
lpconfig->modified=0;
}
}
if (factory_config_filename != NULL) {
lp_config_read_file(lpconfig, factory_config_filename);
}
return lpconfig;
}
......
......@@ -65,7 +65,29 @@ extern "C" {
(config) ? (lp_config_get_float(config, "default_values", name, default)) : (default)
/**
* Instantiates a LpConfig object from a user config file.
*
* @ingroup misc
* @param filename the filename of the config file to read to fill the instantiated LpConfig
* @see lp_config_new_with_factory
*/
LpConfig * lp_config_new(const char *filename);
/**
* Instantiates a LpConfig object from a user config file and a factory config file.
*
* @ingroup misc
* @param config_filename the filename of the user config file to read to fill the instantiated LpConfig
* @param factory_config_filename the filename of the factory config file to read to fill the instantiated LpConfig
* @see lp_config_new
*
* The user config file is read first to fill the LpConfig and then the factory config file is read.
* Therefore the configuration parameters defined in the user config file will be overwritten by the parameters
* defined in the factory config file.
*/
LpConfig * lp_config_new_with_factory(const char *config_filename, const char *factory_config_filename);
int lp_config_read_file(LpConfig *lpconfig, const char *filename);
/**
* Retrieves a configuration item as a string, given its section, key, and default value.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment