mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-04-28 05:46:22 +00:00
add doxygen framework to start documenting liblinphone
enhance lpconfig to be able to load additional config files. git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@781 3f6dc0c8-ddfe-455d-9043-3cd528dc4637
This commit is contained in:
parent
7c81a3370e
commit
d6037fa312
12 changed files with 474 additions and 144 deletions
|
|
@ -390,12 +390,23 @@ changequote([, ])dnl
|
|||
AC_SUBST([ORTP_VERSION])
|
||||
AC_SUBST([MS2_VERSION])
|
||||
|
||||
dnl ##################################################
|
||||
dnl # Check for doxygen
|
||||
dnl ##################################################
|
||||
|
||||
AC_PATH_PROG(DOXYGEN,doxygen,false)
|
||||
AM_CONDITIONAL(HAVE_DOXYGEN, test $DOXYGEN != false)
|
||||
|
||||
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
m4/Makefile
|
||||
po/Makefile.in
|
||||
pixmaps/Makefile
|
||||
coreapi/Makefile
|
||||
coreapi/help/Makefile
|
||||
coreapi/help/Doxyfile
|
||||
coreapi/help/doxygen.dox
|
||||
gtk-glade/Makefile
|
||||
console/Makefile
|
||||
share/Makefile
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
|
||||
SUBDIRS=help
|
||||
|
||||
## Process this file with automake to produce Makefile.in
|
||||
linphone_includedir=$(includedir)/linphone
|
||||
|
|
|
|||
|
|
@ -646,6 +646,21 @@ void linphone_core_remove_friend(LinphoneCore *lc, LinphoneFriend* fl){
|
|||
}
|
||||
}
|
||||
|
||||
void linphone_friend_set_ref_key(LinphoneFriend *lf, const char *key){
|
||||
if (lf->refkey!=NULL){
|
||||
ms_free(lf->refkey);
|
||||
lf->refkey=NULL;
|
||||
}
|
||||
if (key)
|
||||
lf->refkey=ms_strdup(key);
|
||||
if (lf->lc)
|
||||
linphone_core_write_friends_config(lf->lc);
|
||||
}
|
||||
|
||||
const char *linphone_friend_get_ref_key(const LinphoneFriend *lf){
|
||||
return lf->refkey;
|
||||
}
|
||||
|
||||
static bool_t username_match(const char *u1, const char *u2){
|
||||
if (u1==NULL && u2==NULL) return TRUE;
|
||||
if (u1 && u2 && strcasecmp(u1,u2)==0) return TRUE;
|
||||
|
|
@ -675,6 +690,18 @@ LinphoneFriend *linphone_core_get_friend_by_uri(const LinphoneCore *lc, const ch
|
|||
return lf;
|
||||
}
|
||||
|
||||
LinphoneFriend *linphone_core_get_friend_by_ref_key(const LinphoneCore *lc, const char *key){
|
||||
const MSList *elem;
|
||||
if (key==NULL) return NULL;
|
||||
for(elem=linphone_core_get_friend_list(lc);elem!=NULL;elem=elem->next){
|
||||
LinphoneFriend *lf=(LinphoneFriend*)elem->data;
|
||||
if (lf->refkey!=NULL && strcmp(lf->refkey,key)==0){
|
||||
return lf;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define key_compare(key, word) strncasecmp((key),(word),strlen(key))
|
||||
|
||||
LinphoneSubscribePolicy __policy_str_to_enum(const char* pol){
|
||||
|
|
@ -729,6 +756,7 @@ LinphoneFriend * linphone_friend_new_from_config_file(LinphoneCore *lc, int inde
|
|||
if (a!=-1) {
|
||||
linphone_friend_set_proxy(lf,__index_to_proxy(lc,a));
|
||||
}
|
||||
linphone_friend_set_ref_key(lf,lp_config_get_string(config,item,"refkey",NULL));
|
||||
return lf;
|
||||
}
|
||||
|
||||
|
|
@ -752,6 +780,7 @@ void linphone_friend_write_to_config_file(LpConfig *config, LinphoneFriend *lf,
|
|||
char key[50];
|
||||
char *tmp;
|
||||
int a;
|
||||
const char *refkey;
|
||||
|
||||
sprintf(key,"friend_%i",index);
|
||||
|
||||
|
|
@ -773,6 +802,11 @@ void linphone_friend_write_to_config_file(LpConfig *config, LinphoneFriend *lf,
|
|||
a=ms_list_index(lf->lc->sip_conf.proxies,lf->proxy);
|
||||
lp_config_set_int(config,key,"proxy",a);
|
||||
}else lp_config_set_int(config,key,"proxy",-1);
|
||||
|
||||
refkey=linphone_friend_get_ref_key(lf);
|
||||
if (refkey){
|
||||
lp_config_set_string(config,key,"refkey",refkey);
|
||||
}
|
||||
}
|
||||
|
||||
void linphone_core_write_friends_config(LinphoneCore* lc)
|
||||
|
|
|
|||
233
linphone/coreapi/help/Doxyfile.in
Normal file
233
linphone/coreapi/help/Doxyfile.in
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
# Doxyfile 1.4.1
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = liblinphone
|
||||
PROJECT_NUMBER = @LINPHONE_VERSION@
|
||||
OUTPUT_DIRECTORY = doc
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = NO
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
"The $name widget" \
|
||||
"The $name file" \
|
||||
is \
|
||||
provides \
|
||||
specifies \
|
||||
contains \
|
||||
represents \
|
||||
a \
|
||||
an \
|
||||
the
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
HIDE_UNDOC_MEMBERS = YES
|
||||
HIDE_UNDOC_CLASSES = YES
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = NO
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_DIRECTORIES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = . ../
|
||||
|
||||
FILE_PATTERNS = *.h \
|
||||
*.c \
|
||||
*.dox
|
||||
RECURSIVE = YES
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH = ../
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = NO
|
||||
REFERENCES_RELATION = NO
|
||||
VERBATIM_HEADERS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 1
|
||||
GENERATE_TREEVIEW = NO
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = YES
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH = .
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED = DOXYGEN
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = YES
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 1000
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
||||
32
linphone/coreapi/help/Makefile.am
Normal file
32
linphone/coreapi/help/Makefile.am
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
EXTRA_DIST = Doxyfile.in doxygen.dox.in
|
||||
|
||||
SOURCES=$(top_srcdir)/coreapi/*.h
|
||||
|
||||
#html doc
|
||||
if HAVE_DOXYGEN
|
||||
|
||||
# doxdir & pkgdocdir are not always defined by automake
|
||||
docdir=$(datadir)/doc
|
||||
pkgdocdir=$(docdir)/$(PACKAGE)-$(VERSION)
|
||||
doc_htmldir=$(pkgdocdir)/html
|
||||
|
||||
doc_html_DATA = $(top_builddir)/coreapi/help/doc/html/html.tar
|
||||
|
||||
$(doc_html_DATA): $(top_builddir)/coreapi/help/doc/html/index.html
|
||||
cd $(<D) && tar cf html.tar *
|
||||
|
||||
$(top_builddir)/coreapi/help/doc/html/index.html: $(SOURCES) Doxyfile Makefile.am
|
||||
rm -rf doc
|
||||
$(DOXYGEN) Doxyfile
|
||||
|
||||
install-data-hook:
|
||||
cd $(DESTDIR)$(doc_htmldir) && tar xf html.tar && rm -f html.tar
|
||||
|
||||
uninstall-hook:
|
||||
cd $(DESTDIR)$(doc_htmldir) && rm -f *
|
||||
|
||||
endif
|
||||
|
||||
clean-local:
|
||||
rm -rf doc
|
||||
37
linphone/coreapi/help/doxygen.dox.in
Normal file
37
linphone/coreapi/help/doxygen.dox.in
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* @mainpage
|
||||
* Project Website: http://savannah.gnu.org/projects/linphone
|
||||
*
|
||||
* @verbinclude README
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup liblinphone liblinphone library - high level library for building SIP applications
|
||||
* @brief liblinphone Version @LINPHONE_VERSION@
|
||||
*
|
||||
* @see http://savannah.gnu.org/projects/linphone
|
||||
*
|
||||
* @section what_is_it What is liblinphone
|
||||
*
|
||||
* Liblinphone is a high level library for bringing SIP video call functionnality
|
||||
* into an application. It aims at making easy the integration of the SIP
|
||||
* video calls into any applications. All variants of linphone are directly based
|
||||
* on it:
|
||||
* - linphone (gtk interface)
|
||||
* - linphonec (console interface)
|
||||
* Liblinphone is GPL (see COPYING file). Please understand the licencing details
|
||||
* before using it!
|
||||
*
|
||||
* For any use of this library beyond the rights granted to you by the
|
||||
* GPL license, please contact Belledonne Communications
|
||||
* (contact@belledonne-communications.com)
|
||||
*
|
||||
*
|
||||
|
||||
/**
|
||||
* @page liblinphone_license COPYING
|
||||
* @verbinclude COPYING
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -885,7 +885,7 @@ int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs)
|
|||
return 0;
|
||||
}
|
||||
|
||||
const MSList * linphone_core_get_friend_list(LinphoneCore *lc)
|
||||
const MSList * linphone_core_get_friend_list(const LinphoneCore *lc)
|
||||
{
|
||||
return lc->friends;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -234,6 +234,7 @@ typedef struct _LinphoneFriend{
|
|||
struct _LinphoneProxyConfig *proxy;
|
||||
struct _LinphoneCore *lc;
|
||||
BuddyInfo *info;
|
||||
char *refkey;
|
||||
bool_t subscribe;
|
||||
bool_t inc_subscribe_pending;
|
||||
}LinphoneFriend;
|
||||
|
|
@ -253,6 +254,8 @@ bool_t linphone_friend_get_send_subscribe(const LinphoneFriend *lf);
|
|||
LinphoneSubscribePolicy linphone_friend_get_inc_subscribe_policy(const LinphoneFriend *lf);
|
||||
LinphoneOnlineStatus linphone_friend_get_status(const LinphoneFriend *lf);
|
||||
BuddyInfo * linphone_friend_get_info(const LinphoneFriend *lf);
|
||||
void linphone_friend_set_ref_key(LinphoneFriend *lf, const char *key);
|
||||
const char *linphone_friend_get_ref_key(const LinphoneFriend *lf);
|
||||
#define linphone_friend_in_list(lf) ((lf)->lc!=NULL)
|
||||
|
||||
#define linphone_friend_url(lf) ((lf)->url)
|
||||
|
|
@ -547,9 +550,6 @@ const char *linphone_core_get_version(void);
|
|||
LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable,
|
||||
const char *config_path, void* userdata);
|
||||
|
||||
void linphone_core_init(LinphoneCore *lc, const LinphoneCoreVTable *vtable,
|
||||
const char *config_path, void * userdata);
|
||||
|
||||
/* function to be periodically called in a main loop */
|
||||
void linphone_core_iterate(LinphoneCore *lc);
|
||||
|
||||
|
|
@ -721,10 +721,11 @@ void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *fr);
|
|||
void linphone_core_remove_friend(LinphoneCore *lc, LinphoneFriend *fr);
|
||||
void linphone_core_reject_subscriber(LinphoneCore *lc, LinphoneFriend *lf);
|
||||
/* a list of LinphoneFriend */
|
||||
const MSList * linphone_core_get_friend_list(LinphoneCore *lc);
|
||||
const MSList * linphone_core_get_friend_list(const LinphoneCore *lc);
|
||||
/* notify all friends that have subscribed */
|
||||
void linphone_core_notify_all_friends(LinphoneCore *lc, LinphoneOnlineStatus os);
|
||||
LinphoneFriend *linphone_core_get_friend_by_uri(const LinphoneCore *lc, const char *uri);
|
||||
LinphoneFriend *linphone_core_get_friend_by_ref_key(const LinphoneCore *lc, const char *key);
|
||||
|
||||
/* returns a list of LinphoneCallLog */
|
||||
const MSList * linphone_core_get_call_logs(LinphoneCore *lc);
|
||||
|
|
@ -793,7 +794,6 @@ void linphone_core_set_waiting_callback(LinphoneCore *lc, LinphoneWaitingCallbac
|
|||
/*returns the list of registered SipSetup (linphonecore plugins) */
|
||||
const MSList * linphone_core_get_sip_setups(LinphoneCore *lc);
|
||||
|
||||
void linphone_core_uninit(LinphoneCore *lc);
|
||||
void linphone_core_destroy(LinphoneCore *lc);
|
||||
|
||||
/*for advanced users:*/
|
||||
|
|
|
|||
|
|
@ -38,49 +38,6 @@
|
|||
|
||||
#include "lpconfig.h"
|
||||
|
||||
#define LISTNODE(_struct_) \
|
||||
struct _struct_ *_prev;\
|
||||
struct _struct_ *_next;
|
||||
|
||||
typedef struct _ListNode{
|
||||
LISTNODE(_ListNode)
|
||||
} ListNode;
|
||||
|
||||
typedef void (*ListNodeForEachFunc)(ListNode *);
|
||||
|
||||
ListNode * list_node_append(ListNode *head,ListNode *elem){
|
||||
ListNode *e=head;
|
||||
while(e->_next!=NULL) e=e->_next;
|
||||
e->_next=elem;
|
||||
elem->_prev=e;
|
||||
return head;
|
||||
}
|
||||
|
||||
ListNode * list_node_remove(ListNode *head, ListNode *elem){
|
||||
ListNode *before,*after;
|
||||
before=elem->_prev;
|
||||
after=elem->_next;
|
||||
if (before!=NULL) before->_next=after;
|
||||
if (after!=NULL) after->_prev=before;
|
||||
elem->_prev=NULL;
|
||||
elem->_next=NULL;
|
||||
if (head==elem) return after;
|
||||
return head;
|
||||
}
|
||||
|
||||
void list_node_foreach(ListNode *head, ListNodeForEachFunc func){
|
||||
for (;head!=NULL;head=head->_next){
|
||||
func(head);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define LIST_PREPEND(e1,e2) ( (e2)->_prev=NULL,(e2)->_next=(e1),(e1)->_prev=(e2),(e2) )
|
||||
#define LIST_APPEND(head,elem) ((head)==0 ? (elem) : (list_node_append((ListNode*)(head),(ListNode*)(elem)), (head)) )
|
||||
#define LIST_REMOVE(head,elem)
|
||||
|
||||
/* returns void */
|
||||
#define LIST_FOREACH(head) list_node_foreach((ListNode*)head)
|
||||
|
||||
typedef struct _LpItem{
|
||||
char *key;
|
||||
|
|
@ -148,99 +105,6 @@ static bool_t is_first_char(const char *start, const char *pos){
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void lp_config_parse(LpConfig *lpconfig){
|
||||
char tmp[MAX_LEN];
|
||||
LpSection *cur=NULL;
|
||||
|
||||
if (lpconfig->file==NULL) return;
|
||||
|
||||
while(fgets(tmp,MAX_LEN,lpconfig->file)!=NULL){
|
||||
char *pos1,*pos2;
|
||||
pos1=strchr(tmp,'[');
|
||||
if (pos1!=NULL && is_first_char(tmp,pos1) ){
|
||||
pos2=strchr(pos1,']');
|
||||
if (pos2!=NULL){
|
||||
int nbs;
|
||||
char secname[MAX_LEN];
|
||||
secname[0]='\0';
|
||||
/* found section */
|
||||
*pos2='\0';
|
||||
nbs = sscanf(pos1+1,"%s",secname);
|
||||
if (nbs == 1 ){
|
||||
if (strlen(secname)>0){
|
||||
cur=lp_section_new(secname);
|
||||
lp_config_add_section(lpconfig,cur);
|
||||
}
|
||||
}else{
|
||||
ms_warning("parse error!");
|
||||
}
|
||||
}
|
||||
}else {
|
||||
pos1=strchr(tmp,'=');
|
||||
if (pos1!=NULL){
|
||||
char key[MAX_LEN];
|
||||
key[0]='\0';
|
||||
|
||||
*pos1='\0';
|
||||
if (sscanf(tmp,"%s",key)>0){
|
||||
|
||||
pos1++;
|
||||
pos2=strchr(pos1,'\n');
|
||||
if (pos2==NULL) pos2=pos1+strlen(pos1);
|
||||
else {
|
||||
*pos2='\0'; /*replace the '\n' */
|
||||
pos2--;
|
||||
}
|
||||
/* remove ending white spaces */
|
||||
for (; pos2>pos1 && *pos2==' ';pos2--) *pos2='\0';
|
||||
if (pos2-pos1>=0){
|
||||
/* found a pair key,value */
|
||||
if (cur!=NULL){
|
||||
lp_section_add_item(cur,lp_item_new(key,pos1));
|
||||
/*printf("Found %s %s=%s\n",cur->name,key,pos1);*/
|
||||
}else{
|
||||
ms_warning("found key,item but no sections");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LpConfig * lp_config_new(const char *filename){
|
||||
LpConfig *lpconfig=lp_new0(LpConfig,1);
|
||||
if (filename!=NULL){
|
||||
lpconfig->filename=strdup(filename);
|
||||
lpconfig->file=fopen(filename,"rw");
|
||||
if (lpconfig->file!=NULL){
|
||||
lp_config_parse(lpconfig);
|
||||
fclose(lpconfig->file);
|
||||
/* make existing configuration files non-group/world-accessible */
|
||||
if (chmod(filename, S_IRUSR | S_IWUSR) == -1)
|
||||
ms_warning("unable to correct permissions on "
|
||||
"configuration file: %s",
|
||||
strerror(errno));
|
||||
lpconfig->file=NULL;
|
||||
lpconfig->modified=0;
|
||||
}
|
||||
}
|
||||
return lpconfig;
|
||||
}
|
||||
|
||||
void lp_item_set_value(LpItem *item, const char *value){
|
||||
free(item->value);
|
||||
item->value=strdup(value);
|
||||
}
|
||||
|
||||
|
||||
void lp_config_destroy(LpConfig *lpconfig){
|
||||
if (lpconfig->filename!=NULL) free(lpconfig->filename);
|
||||
ms_list_for_each(lpconfig->sections,(void (*)(void*))lp_section_destroy);
|
||||
ms_list_free(lpconfig->sections);
|
||||
free(lpconfig);
|
||||
}
|
||||
|
||||
LpSection *lp_config_find_section(LpConfig *lpconfig, const char *name){
|
||||
LpSection *sec;
|
||||
MSList *elem;
|
||||
|
|
@ -269,6 +133,119 @@ LpItem *lp_section_find_item(LpSection *sec, const char *name){
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void lp_config_parse(LpConfig *lpconfig, FILE *file){
|
||||
char tmp[MAX_LEN];
|
||||
LpSection *cur=NULL;
|
||||
|
||||
if (file==NULL) return;
|
||||
|
||||
while(fgets(tmp,MAX_LEN,file)!=NULL){
|
||||
char *pos1,*pos2;
|
||||
pos1=strchr(tmp,'[');
|
||||
if (pos1!=NULL && is_first_char(tmp,pos1) ){
|
||||
pos2=strchr(pos1,']');
|
||||
if (pos2!=NULL){
|
||||
int nbs;
|
||||
char secname[MAX_LEN];
|
||||
secname[0]='\0';
|
||||
/* found section */
|
||||
*pos2='\0';
|
||||
nbs = sscanf(pos1+1,"%s",secname);
|
||||
if (nbs == 1 ){
|
||||
if (strlen(secname)>0){
|
||||
cur=lp_config_find_section (lpconfig,secname);
|
||||
if (cur==NULL){
|
||||
cur=lp_section_new(secname);
|
||||
lp_config_add_section(lpconfig,cur);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
ms_warning("parse error!");
|
||||
}
|
||||
}
|
||||
}else {
|
||||
pos1=strchr(tmp,'=');
|
||||
if (pos1!=NULL){
|
||||
char key[MAX_LEN];
|
||||
key[0]='\0';
|
||||
|
||||
*pos1='\0';
|
||||
if (sscanf(tmp,"%s",key)>0){
|
||||
|
||||
pos1++;
|
||||
pos2=strchr(pos1,'\n');
|
||||
if (pos2==NULL) pos2=pos1+strlen(pos1);
|
||||
else {
|
||||
*pos2='\0'; /*replace the '\n' */
|
||||
pos2--;
|
||||
}
|
||||
/* remove ending white spaces */
|
||||
for (; pos2>pos1 && *pos2==' ';pos2--) *pos2='\0';
|
||||
if (pos2-pos1>=0){
|
||||
/* found a pair key,value */
|
||||
if (cur!=NULL){
|
||||
LpItem *item=lp_section_find_item(cur,key);
|
||||
if (item==NULL){
|
||||
lp_section_add_item(cur,lp_item_new(key,pos1));
|
||||
}else{
|
||||
ms_free(item->value);
|
||||
item->value=strdup(pos1);
|
||||
}
|
||||
/*printf("Found %s %s=%s\n",cur->name,key,pos1);*/
|
||||
}else{
|
||||
ms_warning("found key,item but no sections");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LpConfig * lp_config_new(const char *filename){
|
||||
LpConfig *lpconfig=lp_new0(LpConfig,1);
|
||||
if (filename!=NULL){
|
||||
lpconfig->filename=strdup(filename);
|
||||
lpconfig->file=fopen(filename,"rw");
|
||||
if (lpconfig->file!=NULL){
|
||||
lp_config_parse(lpconfig,lpconfig->file);
|
||||
fclose(lpconfig->file);
|
||||
/* make existing configuration files non-group/world-accessible */
|
||||
if (chmod(filename, S_IRUSR | S_IWUSR) == -1)
|
||||
ms_warning("unable to correct permissions on "
|
||||
"configuration file: %s",
|
||||
strerror(errno));
|
||||
lpconfig->file=NULL;
|
||||
lpconfig->modified=0;
|
||||
}
|
||||
}
|
||||
return lpconfig;
|
||||
}
|
||||
|
||||
int lp_config_read_file(LpConfig *lpconfig, const char *filename){
|
||||
FILE* f=fopen(filename,"r");
|
||||
if (f!=NULL){
|
||||
lp_config_parse(lpconfig,f);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
ms_warning("Fail to open file %s",filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void lp_item_set_value(LpItem *item, const char *value){
|
||||
free(item->value);
|
||||
item->value=strdup(value);
|
||||
}
|
||||
|
||||
|
||||
void lp_config_destroy(LpConfig *lpconfig){
|
||||
if (lpconfig->filename!=NULL) free(lpconfig->filename);
|
||||
ms_list_for_each(lpconfig->sections,(void (*)(void*))lp_section_destroy);
|
||||
ms_list_free(lpconfig->sections);
|
||||
free(lpconfig);
|
||||
}
|
||||
|
||||
void lp_section_remove_item(LpSection *sec, LpItem *item){
|
||||
sec->items=ms_list_remove(sec->items,(void *)item);
|
||||
lp_item_destroy(item);
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
LpConfig * lp_config_new(const char *filename);
|
||||
int lp_config_read_file(LpConfig *lpconfig, const char *filename);
|
||||
const char *lp_config_get_string(LpConfig *lpconfig, const char *section, const char *key, const char *default_string);
|
||||
int lp_config_get_int(LpConfig *lpconfig,const char *section, const char *key, int default_value);
|
||||
float lp_config_get_float(LpConfig *lpconfig,const char *section, const char *key, float default_value);
|
||||
|
|
|
|||
|
|
@ -190,4 +190,8 @@ void linphone_proxy_config_get_contact(LinphoneProxyConfig *cfg, const char **ip
|
|||
LinphoneProxyConfig * linphone_core_lookup_known_proxy(LinphoneCore *lc, const LinphoneAddress *uri);
|
||||
int linphone_core_get_local_ip_for(const char *dest, char *result);
|
||||
|
||||
void linphone_core_init(LinphoneCore *lc, const LinphoneCoreVTable *vtable,
|
||||
const char *config_path, void * userdata);
|
||||
void linphone_core_uninit(LinphoneCore *lc);
|
||||
|
||||
#endif /* _PRIVATE_H */
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
|
|||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
SHELL = /bin/sh
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
|
@ -56,7 +56,7 @@ ALL_LINGUAS = @ALL_LINGUAS@
|
|||
|
||||
PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi)
|
||||
|
||||
USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep ^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep ^$$lang$$`"; then printf "$$lang "; fi; done; fi)
|
||||
USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi)
|
||||
|
||||
USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue