Commit 12c17df0 authored by smorlat's avatar smorlat
Browse files

Document again and again.

git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@789 3f6dc0c8-ddfe-455d-9043-3cd528dc4637
parent e73556f0
......@@ -32,6 +32,18 @@
*
**/
/**
* @defgroup call_control Call control
*
* The application can initiate outgoing calls with linphone_core_invite().
* It is notified of incoming call thanks to the inv_recv callback of the LinphoneCoreVTable
* structure that is passed at creation of the LinphoneCore object.
* It can then answer calls with linphone_core_accept_call().
* Calls can be terminated or declined with linphone_core_terminate_call().
* The application is notified when the remote party hangups thanks to
* bye_recv callback of the #LinphoneCoreVTable.
**/
/**
* @defgroup media_parameters Controlling media parameters
**/
......@@ -40,6 +52,10 @@
* @defgroup proxies Managing proxies
**/
/**
* @defgroup network_parameters Controlling network parameters (ports, mtu...)
**/
/**
* @defgroup authentication Managing authentication: userid and passwords
**/
......
......@@ -987,6 +987,13 @@ const MSList *linphone_core_get_video_codecs(const LinphoneCore *lc)
return lc->codecs_conf.video_codecs;
}
/**
* Sets the local "from" identity.
*
* @ingroup proxies
* This data is used in absence of any proxy configuration or when no
* default proxy configuration is set. See LinphoneProxyConfig
**/
int linphone_core_set_primary_contact(LinphoneCore *lc, const char *contact)
{
osip_from_t *ctt=NULL;
......@@ -1028,6 +1035,11 @@ void linphone_core_get_local_ip(LinphoneCore *lc, const char *dest, char *result
}
}
/**
* Returns the default identity when no proxy configuration is used.
*
* @ingroup proxies
**/
const char *linphone_core_get_primary_contact(LinphoneCore *lc)
{
char *identity;
......@@ -1072,18 +1084,41 @@ const char *linphone_core_get_primary_contact(LinphoneCore *lc)
return identity;
}
/**
* Tells LinphoneCore to guess local hostname automatically in primary contact.
*
* @ingroup proxies
**/
void linphone_core_set_guess_hostname(LinphoneCore *lc, bool_t val){
lc->sip_conf.guess_hostname=val;
}
/**
* Returns TRUE if hostname part of primary contact is guessed automatically.
*
* @ingroup proxies
**/
bool_t linphone_core_get_guess_hostname(LinphoneCore *lc){
return lc->sip_conf.guess_hostname;
}
/**
* Same as linphone_core_get_primary_contact() but the result is a LinphoneAddress object
* instead of const char*
*
* @ingroup proxies
**/
LinphoneAddress *linphone_core_get_primary_contact_parsed(LinphoneCore *lc){
return linphone_address_new(linphone_core_get_primary_contact(lc));
}
/**
* Sets the list of audio codecs.
*
* @ingroup media_parameters
* The list is taken by the LinphoneCore thus the application should not free it.
* This list is made of struct PayloadType describing the codec parameters.
**/
int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs)
{
if (lc->codecs_conf.audio_codecs!=NULL) ms_list_free(lc->codecs_conf.audio_codecs);
......@@ -1091,6 +1126,13 @@ int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs)
return 0;
}
/**
* Sets the list of video codecs.
*
* @ingroup media_parameters
* The list is taken by the LinphoneCore thus the application should not free it.
* This list is made of struct PayloadType describing the codec parameters.
**/
int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs)
{
if (lc->codecs_conf.video_codecs!=NULL) ms_list_free(lc->codecs_conf.video_codecs);
......@@ -1103,62 +1145,133 @@ const MSList * linphone_core_get_friend_list(const LinphoneCore *lc)
return lc->friends;
}
/**
* Returns the nominal jitter buffer size in milliseconds.
*
* @ingroup media_parameters
**/
int linphone_core_get_audio_jittcomp(LinphoneCore *lc)
{
return lc->rtp_conf.audio_jitt_comp;
}
/**
* Returns the UDP port used for audio streaming.
*
* @ingroup network_parameters
**/
int linphone_core_get_audio_port(const LinphoneCore *lc)
{
return lc->rtp_conf.audio_rtp_port;
}
/**
* Returns the UDP port used for video streaming.
*
* @ingroup network_parameters
**/
int linphone_core_get_video_port(const LinphoneCore *lc){
return lc->rtp_conf.video_rtp_port;
}
/**
* Returns the value in seconds of the no-rtp timeout.
*
* @ingroup media_parameters
* When no RTP or RTCP packets have been received for a while
* LinphoneCore will consider the call is broken (remote end crashed or
* disconnected from the network), and thus will terminate the call.
* The no-rtp timeout is the duration above which the call is considered broken.
**/
int linphone_core_get_nortp_timeout(const LinphoneCore *lc){
return lc->rtp_conf.nortp_timeout;
}
/**
* Sets the nominal audio jitter buffer size in milliseconds.
*
* @ingroup media_parameters
**/
void linphone_core_set_audio_jittcomp(LinphoneCore *lc, int value)
{
lc->rtp_conf.audio_jitt_comp=value;
}
/**
* Sets the UDP port used for audio streaming.
*
* @ingroup network_parameters
**/
void linphone_core_set_audio_port(LinphoneCore *lc, int port)
{
lc->rtp_conf.audio_rtp_port=port;
}
/**
* Sets the UDP port used for video streaming.
*
* @ingroup network_parameters
**/
void linphone_core_set_video_port(LinphoneCore *lc, int port){
lc->rtp_conf.video_rtp_port=port;
}
/**
* Sets the no-rtp timeout value in seconds.
*
* @ingroup media_parameters
* See linphone_core_get_nortp_timeout() for details.
**/
void linphone_core_set_nortp_timeout(LinphoneCore *lc, int nortp_timeout){
lc->rtp_conf.nortp_timeout=nortp_timeout;
}
/**
* Indicates whether SIP INFO is used for sending digits.
*
* @ingroup media_parameters
**/
bool_t linphone_core_get_use_info_for_dtmf(LinphoneCore *lc)
{
return lc->sip_conf.use_info;
}
/**
* Sets whether SIP INFO is to be used for sending digits.
*
* @ingroup media_parameters
**/
void linphone_core_set_use_info_for_dtmf(LinphoneCore *lc,bool_t use_info)
{
lc->sip_conf.use_info=use_info;
}
/**
* Indicates whether RFC2833 is used for sending digits.
*
* @ingroup media_parameters
**/
bool_t linphone_core_get_use_rfc2833_for_dtmf(LinphoneCore *lc)
{
return lc->sip_conf.use_rfc2833;
}
/**
* Sets whether RFC2833 is to be used for sending digits.
*
* @ingroup media_parameters
**/
void linphone_core_set_use_rfc2833_for_dtmf(LinphoneCore *lc,bool_t use_rfc2833)
{
lc->sip_conf.use_rfc2833=use_rfc2833;
}
/**
* Returns the UDP port used by SIP.
*
* @ingroup network_parameters
**/
int linphone_core_get_sip_port(LinphoneCore *lc)
{
return lc->sip_conf.sip_port;
......@@ -1180,11 +1293,21 @@ static void apply_user_agent(void){
eXosip_set_user_agent(ua_string);
}
/**
* Sets the user agent string used in SIP messages.
*
* @ingroup misc
**/
void linphone_core_set_user_agent(const char *name, const char *ver){
strncpy(_ua_name,name,sizeof(_ua_name)-1);
strncpy(_ua_version,ver,sizeof(_ua_version));
}
/**
* Sets the UDP port to be used by SIP.
*
* @ingroup network_parameters
**/
void linphone_core_set_sip_port(LinphoneCore *lc,int port)
{
const char *anyaddr;
......@@ -1219,9 +1342,25 @@ void linphone_core_set_sip_port(LinphoneCore *lc,int port)
exosip_running=TRUE;
}
/**
* Returns TRUE if IPv6 is enabled.
*
* @ingroup network_parameters
* See linphone_core_enable_ipv6() for more details on how IPv6 is supported in liblinphone.
**/
bool_t linphone_core_ipv6_enabled(LinphoneCore *lc){
return lc->sip_conf.ipv6_enabled;
}
/**
* Turns IPv6 support on or off.
*
* @ingroup network_parameters
*
* @note IPv6 support is exclusive with IPv4 in liblinphone:
* when IPv6 is turned on, IPv4 calls won't be possible anymore.
* By default IPv6 support is off.
**/
void linphone_core_enable_ipv6(LinphoneCore *lc, bool_t val){
if (lc->sip_conf.ipv6_enabled!=val){
lc->sip_conf.ipv6_enabled=val;
......@@ -1337,6 +1476,20 @@ static void linphone_core_do_plugin_tasks(LinphoneCore *lc){
}
}
/**
* Main loop function. It is crucial that your application call it periodically.
*
* @ingroup initializing
* linphone_core_iterate() performs various backgrounds tasks:
* - receiving of SIP messages
* - handles timers and timeout
* - performs registration to proxies
* - authentication retries
* The application MUST call this function from periodically, in its main loop.
* Be careful that this function must be call from the same thread as
* other liblinphone methods. In not the case make sure all liblinphone calls are
* serialized with a mutex.
**/
void linphone_core_iterate(LinphoneCore *lc)
{
eXosip_event_t *ev;
......@@ -1529,6 +1682,16 @@ bool_t linphone_core_interpret_url(LinphoneCore *lc, const char *url, LinphoneAd
return FALSE;
}
/**
* Returns the default identity SIP address.
*
* @ingroup proxies
* This is an helper function:
*
* If no default proxy is set, this will return the primary contact (
* see linphone_core_get_primary_contact() ). If a default proxy is set
* it returns the registered identity on the proxy.
**/
const char * linphone_core_get_identity(LinphoneCore *lc){
LinphoneProxyConfig *proxy=NULL;
const char *from;
......@@ -1605,6 +1768,13 @@ static void fix_contact(LinphoneCore *lc, osip_message_t *msg, const char *local
}
}
/**
* Initiates an outgoing call
*
* @ingroup call_control
* @param lc the LinphoneCore object
* @param url the destination of the call (sip address).
**/
int linphone_core_invite(LinphoneCore *lc, const char *url)
{
char *barmsg;
......@@ -1721,6 +1891,11 @@ int linphone_core_refer(LinphoneCore *lc, const char *url)
return 0;
}
/**
* Returns true if in incoming call is pending, ie waiting for being answered or declined.
*
* @ingroup call_control
**/
bool_t linphone_core_inc_invite_pending(LinphoneCore*lc){
if (lc->call!=NULL && lc->call->dir==LinphoneCallIncoming){
return TRUE;
......@@ -2021,6 +2196,20 @@ void linphone_core_stop_media_streams(LinphoneCore *lc){
#endif
}
/**
* Accept an incoming call.
*
* @ingroup call_control
* Basically the application is notified of incoming calls within the
* invite_recv callback of the #LinphoneCoreVTable structure.
* The application can later respond positively to the call using
* this method.
* @param lc the LinphoneCore object
* @param url the SIP address of the originator of the call, or NULL.
* This argument is useful for managing multiple calls simulatenously,
* however this feature is not supported yet.
* Using NULL will accept the unique incoming call in progress.
**/
int linphone_core_accept_call(LinphoneCore *lc, const char *url)
{
char *sdpmesg;
......@@ -2085,6 +2274,14 @@ int linphone_core_accept_call(LinphoneCore *lc, const char *url)
return 0;
}
/**
* Terminates a call.
*
* @ingroup call_control
* @param lc The LinphoneCore
* @param url the destination of the call to be terminated, use NULL if there is
* only one call (which is case in this version of liblinphone).
**/
int linphone_core_terminate_call(LinphoneCore *lc, const char *url)
{
LinphoneCall *call=lc->call;
......@@ -2109,6 +2306,11 @@ int linphone_core_terminate_call(LinphoneCore *lc, const char *url)
return 0;
}
/**
* Returns TRUE if there is a call running or pending.
*
* @ingroup call_control
**/
bool_t linphone_core_in_call(const LinphoneCore *lc){
return lc->call!=NULL;
}
......@@ -2124,10 +2326,23 @@ int linphone_core_send_publish(LinphoneCore *lc,
return 0;
}
/**
* Set the incoming call timeout in seconds.
*
* @ingroup call_control
* If an incoming call isn't answered for this timeout period, it is
* automatically declined.
**/
void linphone_core_set_inc_timeout(LinphoneCore *lc, int seconds){
lc->sip_conf.inc_timeout=seconds;
}
/**
* Returns the incoming call timeout
*
* @ingroup call_control
* See linphone_core_set_inc_timeout() for details.
**/
int linphone_core_get_inc_timeout(LinphoneCore *lc){
return lc->sip_conf.inc_timeout;
}
......@@ -2170,18 +2385,40 @@ LinphoneOnlineStatus linphone_core_get_presence_info(const LinphoneCore *lc){
return lc->presence_mode;
}
/* sound functions */
/**
* Get playback sound level in 0-100 scale.
*
* @ingroup media_parameters
**/
int linphone_core_get_play_level(LinphoneCore *lc)
{
return lc->sound_conf.play_lev;
}
/**
* Get ring sound level in 0-100 scale
*
* @ingroup media_parameters
**/
int linphone_core_get_ring_level(LinphoneCore *lc)
{
return lc->sound_conf.ring_lev;
}
/**
* Get sound capture level in 0-100 scale
*
* @ingroup media_parameters
**/
int linphone_core_get_rec_level(LinphoneCore *lc){
return lc->sound_conf.rec_lev;
}
/**
* Set sound ring level in 0-100 scale
*
* @ingroup media_parameters
**/
void linphone_core_set_ring_level(LinphoneCore *lc, int level){
MSSndCard *sndcard;
lc->sound_conf.ring_lev=level;
......@@ -2189,6 +2426,11 @@ void linphone_core_set_ring_level(LinphoneCore *lc, int level){
if (sndcard) ms_snd_card_set_level(sndcard,MS_SND_CARD_PLAYBACK,level);
}
/**
* Set sound playback level in 0-100 scale
*
* @ingroup media_parameters
**/
void linphone_core_set_play_level(LinphoneCore *lc, int level){
MSSndCard *sndcard;
lc->sound_conf.play_lev=level;
......@@ -2196,6 +2438,11 @@ void linphone_core_set_play_level(LinphoneCore *lc, int level){
if (sndcard) ms_snd_card_set_level(sndcard,MS_SND_CARD_PLAYBACK,level);
}
/**
* Set sound capture level in 0-100 scale
*
* @ingroup media_parameters
**/
void linphone_core_set_rec_level(LinphoneCore *lc, int level)
{
MSSndCard *sndcard;
......@@ -2236,6 +2483,12 @@ static MSSndCard *get_card_from_string_id(const char *devid, unsigned int cap){
return sndcard;
}
/**
* Returns true if the specified sound device can capture sound.
*
* @ingroup media_parameters
* @param devid the device name as returned by linphone_core_get_sound_devices()
**/
bool_t linphone_core_sound_device_can_capture(LinphoneCore *lc, const char *devid){
MSSndCard *sndcard;
sndcard=ms_snd_card_manager_get_card(ms_snd_card_manager_get(),devid);
......@@ -2243,6 +2496,12 @@ bool_t linphone_core_sound_device_can_capture(LinphoneCore *lc, const char *devi
return FALSE;
}
/**
* Returns true if the specified sound device can play sound.
*
* @ingroup media_parameters
* @param devid the device name as returned by linphone_core_get_sound_devices()
**/
bool_t linphone_core_sound_device_can_playback(LinphoneCore *lc, const char *devid){
MSSndCard *sndcard;
sndcard=ms_snd_card_manager_get_card(ms_snd_card_manager_get(),devid);
......@@ -2250,6 +2509,12 @@ bool_t linphone_core_sound_device_can_playback(LinphoneCore *lc, const char *dev
return FALSE;
}
/**
* Sets the sound device used for ringing.
*
* @ingroup media_parameters
* @param devid the device name as returned by linphone_core_get_sound_devices()
**/
int linphone_core_set_ringer_device(LinphoneCore *lc, const char * devid){
MSSndCard *card=get_card_from_string_id(devid,MS_SND_CARD_CAP_PLAYBACK);
lc->sound_conf.ring_sndcard=card;
......@@ -2258,6 +2523,12 @@ int linphone_core_set_ringer_device(LinphoneCore *lc, const char * devid){
return 0;
}
/**
* Sets the sound device used for playback.
*
* @ingroup media_parameters
* @param devid the device name as returned by linphone_core_get_sound_devices()
**/
int linphone_core_set_playback_device(LinphoneCore *lc, const char * devid){
MSSndCard *card=get_card_from_string_id(devid,MS_SND_CARD_CAP_PLAYBACK);
lc->sound_conf.play_sndcard=card;
......@@ -2266,6 +2537,12 @@ int linphone_core_set_playback_device(LinphoneCore *lc, const char * devid){
return 0;
}
/**
* Sets the sound device used for capture.
*
* @ingroup media_parameters
* @param devid the device name as returned by linphone_core_get_sound_devices()
**/
int linphone_core_set_capture_device(LinphoneCore *lc, const char * devid){
MSSndCard *card=get_card_from_string_id(devid,MS_SND_CARD_CAP_CAPTURE);
lc->sound_conf.capt_sndcard=card;
......@@ -2274,28 +2551,54 @@ int linphone_core_set_capture_device(LinphoneCore *lc, const char * devid){
return 0;
}
/**
* Returns the name of the currently assigned sound device for ringing.
*
* @ingroup media_parameters
**/
const char * linphone_core_get_ringer_device(LinphoneCore *lc)
{
if (lc->sound_conf.ring_sndcard) return ms_snd_card_get_string_id(lc->sound_conf.ring_sndcard);
return NULL;
}
/**
* Returns the name of the currently assigned sound device for playback.
*
* @ingroup media_parameters
**/
const char * linphone_core_get_playback_device(LinphoneCore *lc)
{
return lc->sound_conf.play_sndcard ? ms_snd_card_get_string_id(lc->sound_conf.play_sndcard) : NULL;
}
/**
* Returns the name of the currently assigned sound device for capture.
*
* @ingroup media_parameters
**/
const char * linphone_core_get_capture_device(LinphoneCore *lc)
{
return lc->sound_conf.capt_sndcard ? ms_snd_card_get_string_id(lc->sound_conf.capt_sndcard) : NULL;
}
/* returns a static array of string describing the sound devices */
/**
* Returns an unmodifiable array of available sound devices.
*
* @ingroup media_parameters
* The array is NULL terminated.
**/
const char** linphone_core_get_sound_devices(LinphoneCore *lc){
build_sound_devices_table(lc);
return lc->sound_conf.cards;
}
/**
* Returns an unmodifiable array of available video capture devices.
*
* @ingroup media_parameters
* The array is NULL terminated.
**/
const char** linphone_core_get_video_devices(const LinphoneCore *lc){
return lc->video_conf.cams;
}
......@@ -2321,6 +2624,14 @@ void linphone_core_set_sound_source(LinphoneCore *lc, char source)
}
/**
* Sets the path to a wav file used for ringing.
*
* The file must be a wav 16bit linear.
*
* @ingroup media_parameters
**/
void linphone_core_set_ring(LinphoneCore *lc,const char *path){
if (lc->sound_conf.local_ring!=0){
ms_free(lc->sound_conf.local_ring);
......@@ -2330,6 +2641,11 @@ void linphone_core_set_ring(LinphoneCore *lc,const char *path){
lp_config_set_string(lc->config,"sound","local_ring",lc->sound_conf.local_ring);
}
/**
* Returns the path to the wav file used for ringing.
*
* @ingroup media_parameters
**/
const char *linphone_core_get_ring(const LinphoneCore *lc){
return lc->sound_conf.local_ring;
}
......@@ -2353,7 +2669,14 @@ int linphone_core_preview_ring(LinphoneCore *lc, const char *ring,LinphoneCoreCb
return 0;
}
/**