mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-20 12:38:09 +00:00
Added linphonecore exports
This commit is contained in:
parent
d5f35010c7
commit
e531acae12
3 changed files with 588 additions and 574 deletions
|
|
@ -83,12 +83,12 @@ typedef struct SalAddress LinphoneAddress;
|
|||
#include "linphone/linphonefriend.h"
|
||||
#endif
|
||||
|
||||
LinphoneAddress * linphone_address_new(const char *uri);
|
||||
LINPHONE_PUBLIC LinphoneAddress * linphone_address_new(const char *uri);
|
||||
LinphoneAddress * linphone_address_clone(const LinphoneAddress *uri);
|
||||
const char *linphone_address_get_scheme(const LinphoneAddress *u);
|
||||
const char *linphone_address_get_display_name(const LinphoneAddress* u);
|
||||
const char *linphone_address_get_username(const LinphoneAddress *u);
|
||||
const char *linphone_address_get_domain(const LinphoneAddress *u);
|
||||
LINPHONE_PUBLIC const char *linphone_address_get_display_name(const LinphoneAddress* u);
|
||||
LINPHONE_PUBLIC const char *linphone_address_get_username(const LinphoneAddress *u);
|
||||
LINPHONE_PUBLIC const char *linphone_address_get_domain(const LinphoneAddress *u);
|
||||
/**
|
||||
* Get port number as an integer value.
|
||||
*
|
||||
|
|
@ -98,17 +98,17 @@ int linphone_address_get_port_int(const LinphoneAddress *u);
|
|||
* Get port number, null if not present.
|
||||
*/
|
||||
const char* linphone_address_get_port(const LinphoneAddress *u);
|
||||
void linphone_address_set_display_name(LinphoneAddress *u, const char *display_name);
|
||||
void linphone_address_set_username(LinphoneAddress *uri, const char *username);
|
||||
void linphone_address_set_domain(LinphoneAddress *uri, const char *host);
|
||||
LINPHONE_PUBLIC void linphone_address_set_display_name(LinphoneAddress *u, const char *display_name);
|
||||
LINPHONE_PUBLIC void linphone_address_set_username(LinphoneAddress *uri, const char *username);
|
||||
LINPHONE_PUBLIC void linphone_address_set_domain(LinphoneAddress *uri, const char *host);
|
||||
void linphone_address_set_port(LinphoneAddress *uri, const char *port);
|
||||
void linphone_address_set_port_int(LinphoneAddress *uri, int port);
|
||||
/*remove tags, params etc... so that it is displayable to the user*/
|
||||
void linphone_address_clean(LinphoneAddress *uri);
|
||||
char *linphone_address_as_string(const LinphoneAddress *u);
|
||||
LINPHONE_PUBLIC void linphone_address_clean(LinphoneAddress *uri);
|
||||
LINPHONE_PUBLIC char *linphone_address_as_string(const LinphoneAddress *u);
|
||||
char *linphone_address_as_string_uri_only(const LinphoneAddress *u);
|
||||
bool_t linphone_address_weak_equal(const LinphoneAddress *a1, const LinphoneAddress *a2);
|
||||
void linphone_address_destroy(LinphoneAddress *u);
|
||||
LINPHONE_PUBLIC bool_t linphone_address_weak_equal(const LinphoneAddress *a1, const LinphoneAddress *a2);
|
||||
LINPHONE_PUBLIC void linphone_address_destroy(LinphoneAddress *u);
|
||||
|
||||
struct _SipSetupContext;
|
||||
|
||||
|
|
@ -190,9 +190,9 @@ typedef struct _LinphoneCallParams LinphoneCallParams;
|
|||
|
||||
const PayloadType* linphone_call_params_get_used_audio_codec(const LinphoneCallParams *cp);
|
||||
const PayloadType* linphone_call_params_get_used_video_codec(const LinphoneCallParams *cp);
|
||||
LinphoneCallParams * linphone_call_params_copy(const LinphoneCallParams *cp);
|
||||
void linphone_call_params_enable_video(LinphoneCallParams *cp, bool_t enabled);
|
||||
bool_t linphone_call_params_video_enabled(const LinphoneCallParams *cp);
|
||||
LINPHONE_PUBLIC LinphoneCallParams * linphone_call_params_copy(const LinphoneCallParams *cp);
|
||||
LINPHONE_PUBLIC void linphone_call_params_enable_video(LinphoneCallParams *cp, bool_t enabled);
|
||||
LINPHONE_PUBLIC bool_t linphone_call_params_video_enabled(const LinphoneCallParams *cp);
|
||||
LinphoneMediaEncryption linphone_call_params_get_media_encryption(const LinphoneCallParams *cp);
|
||||
void linphone_call_params_set_media_encryption(LinphoneCallParams *cp, LinphoneMediaEncryption e);
|
||||
void linphone_call_params_enable_early_media_sending(LinphoneCallParams *cp, bool_t enabled);
|
||||
|
|
@ -372,28 +372,28 @@ typedef enum _LinphoneCallState{
|
|||
LinphoneCallReleased /**< The call object is no more retained by the core */
|
||||
} LinphoneCallState;
|
||||
|
||||
const char *linphone_call_state_to_string(LinphoneCallState cs);
|
||||
LINPHONE_PUBLIC const char *linphone_call_state_to_string(LinphoneCallState cs);
|
||||
|
||||
LinphoneCore *linphone_call_get_core(const LinphoneCall *call);
|
||||
LinphoneCallState linphone_call_get_state(const LinphoneCall *call);
|
||||
LINPHONE_PUBLIC LinphoneCallState linphone_call_get_state(const LinphoneCall *call);
|
||||
bool_t linphone_call_asked_to_autoanswer(LinphoneCall *call);
|
||||
const LinphoneAddress * linphone_core_get_current_call_remote_address(struct _LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC const LinphoneAddress * linphone_core_get_current_call_remote_address(struct _LinphoneCore *lc);
|
||||
const LinphoneAddress * linphone_call_get_remote_address(const LinphoneCall *call);
|
||||
char *linphone_call_get_remote_address_as_string(const LinphoneCall *call);
|
||||
LinphoneCallDir linphone_call_get_dir(const LinphoneCall *call);
|
||||
LinphoneCall * linphone_call_ref(LinphoneCall *call);
|
||||
void linphone_call_unref(LinphoneCall *call);
|
||||
LinphoneCallLog *linphone_call_get_call_log(const LinphoneCall *call);
|
||||
LINPHONE_PUBLIC LinphoneCall * linphone_call_ref(LinphoneCall *call);
|
||||
LINPHONE_PUBLIC void linphone_call_unref(LinphoneCall *call);
|
||||
LINPHONE_PUBLIC LinphoneCallLog *linphone_call_get_call_log(const LinphoneCall *call);
|
||||
const char *linphone_call_get_refer_to(const LinphoneCall *call);
|
||||
bool_t linphone_call_has_transfer_pending(const LinphoneCall *call);
|
||||
LinphoneCall *linphone_call_get_replaced_call(LinphoneCall *call);
|
||||
LINPHONE_PUBLIC LinphoneCall *linphone_call_get_replaced_call(LinphoneCall *call);
|
||||
int linphone_call_get_duration(const LinphoneCall *call);
|
||||
const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call);
|
||||
LINPHONE_PUBLIC const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call);
|
||||
const LinphoneCallParams * linphone_call_get_remote_params(LinphoneCall *call);
|
||||
void linphone_call_enable_camera(LinphoneCall *lc, bool_t enabled);
|
||||
bool_t linphone_call_camera_enabled(const LinphoneCall *lc);
|
||||
int linphone_call_take_video_snapshot(LinphoneCall *call, const char *file);
|
||||
LinphoneReason linphone_call_get_reason(const LinphoneCall *call);
|
||||
LINPHONE_PUBLIC LinphoneReason linphone_call_get_reason(const LinphoneCall *call);
|
||||
const char *linphone_call_get_remote_user_agent(LinphoneCall *call);
|
||||
const char *linphone_call_get_remote_contact(LinphoneCall *call);
|
||||
float linphone_call_get_play_volume(LinphoneCall *call);
|
||||
|
|
@ -403,10 +403,10 @@ float linphone_call_get_average_quality(LinphoneCall *call);
|
|||
const char* linphone_call_get_authentication_token(LinphoneCall *call);
|
||||
bool_t linphone_call_get_authentication_token_verified(LinphoneCall *call);
|
||||
void linphone_call_set_authentication_token_verified(LinphoneCall *call, bool_t verified);
|
||||
void linphone_call_send_vfu_request(LinphoneCall *call);
|
||||
void *linphone_call_get_user_pointer(LinphoneCall *call);
|
||||
LINPHONE_PUBLIC void linphone_call_send_vfu_request(LinphoneCall *call);
|
||||
LINPHONE_PUBLIC void *linphone_call_get_user_pointer(LinphoneCall *call);
|
||||
void linphone_call_set_user_pointer(LinphoneCall *call, void *user_pointer);
|
||||
void linphone_call_set_next_video_frame_decoded_callback(LinphoneCall *call, LinphoneCallCbFunc cb, void* user_data);
|
||||
LINPHONE_PUBLIC void linphone_call_set_next_video_frame_decoded_callback(LinphoneCall *call, LinphoneCallCbFunc cb, void* user_data);
|
||||
LinphoneCallState linphone_call_get_transfer_state(LinphoneCall *call);
|
||||
void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float* cx, float* cy);
|
||||
void linphone_call_start_recording(LinphoneCall *call);
|
||||
|
|
@ -493,23 +493,23 @@ typedef enum _LinphoneRegistrationState{
|
|||
* Human readable version of the #LinphoneRegistrationState
|
||||
* @param cs sate
|
||||
*/
|
||||
const char *linphone_registration_state_to_string(LinphoneRegistrationState cs);
|
||||
LINPHONE_PUBLIC const char *linphone_registration_state_to_string(LinphoneRegistrationState cs);
|
||||
|
||||
LinphoneProxyConfig *linphone_proxy_config_new(void);
|
||||
int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char *server_addr);
|
||||
int linphone_proxy_config_set_identity(LinphoneProxyConfig *obj, const char *identity);
|
||||
int linphone_proxy_config_set_route(LinphoneProxyConfig *obj, const char *route);
|
||||
void linphone_proxy_config_expires(LinphoneProxyConfig *obj, int expires);
|
||||
LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_new(void);
|
||||
LINPHONE_PUBLIC int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char *server_addr);
|
||||
LINPHONE_PUBLIC int linphone_proxy_config_set_identity(LinphoneProxyConfig *obj, const char *identity);
|
||||
LINPHONE_PUBLIC int linphone_proxy_config_set_route(LinphoneProxyConfig *obj, const char *route);
|
||||
LINPHONE_PUBLIC void linphone_proxy_config_expires(LinphoneProxyConfig *obj, int expires);
|
||||
/**
|
||||
* Indicates either or not, REGISTRATION must be issued for this #LinphoneProxyConfig .
|
||||
* <br> In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule.
|
||||
* @param obj object pointer
|
||||
* @param val if true, registration will be engaged
|
||||
*/
|
||||
void linphone_proxy_config_enable_register(LinphoneProxyConfig *obj, bool_t val);
|
||||
LINPHONE_PUBLIC void linphone_proxy_config_enable_register(LinphoneProxyConfig *obj, bool_t val);
|
||||
#define linphone_proxy_config_enableregister linphone_proxy_config_enable_register
|
||||
void linphone_proxy_config_edit(LinphoneProxyConfig *obj);
|
||||
int linphone_proxy_config_done(LinphoneProxyConfig *obj);
|
||||
LINPHONE_PUBLIC void linphone_proxy_config_edit(LinphoneProxyConfig *obj);
|
||||
LINPHONE_PUBLIC int linphone_proxy_config_done(LinphoneProxyConfig *obj);
|
||||
/**
|
||||
* Indicates either or not, PUBLISH must be issued for this #LinphoneProxyConfig .
|
||||
* <br> In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule.
|
||||
|
|
@ -517,18 +517,18 @@ int linphone_proxy_config_done(LinphoneProxyConfig *obj);
|
|||
* @param val if true, publish will be engaged
|
||||
*
|
||||
*/
|
||||
void linphone_proxy_config_enable_publish(LinphoneProxyConfig *obj, bool_t val);
|
||||
LINPHONE_PUBLIC void linphone_proxy_config_enable_publish(LinphoneProxyConfig *obj, bool_t val);
|
||||
void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyConfig *cfg, bool_t val);
|
||||
void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char *prefix);
|
||||
|
||||
LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *obj);
|
||||
bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *obj);
|
||||
LINPHONE_PUBLIC bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *obj);
|
||||
const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg);
|
||||
|
||||
const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *obj);
|
||||
const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *obj);
|
||||
LINPHONE_PUBLIC const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *obj);
|
||||
bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *obj);
|
||||
const char *linphone_proxy_config_get_addr(const LinphoneProxyConfig *obj);
|
||||
LINPHONE_PUBLIC const char *linphone_proxy_config_get_addr(const LinphoneProxyConfig *obj);
|
||||
int linphone_proxy_config_get_expires(const LinphoneProxyConfig *obj);
|
||||
bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *obj);
|
||||
void linphone_proxy_config_refresh_register(LinphoneProxyConfig *obj);
|
||||
|
|
@ -617,7 +617,7 @@ struct _LinphoneAuthInfo;
|
|||
**/
|
||||
typedef struct _LinphoneAuthInfo LinphoneAuthInfo;
|
||||
|
||||
LinphoneAuthInfo *linphone_auth_info_new(const char *username, const char *userid,
|
||||
LINPHONE_PUBLIC LinphoneAuthInfo *linphone_auth_info_new(const char *username, const char *userid,
|
||||
const char *passwd, const char *ha1,const char *realm);
|
||||
void linphone_auth_info_set_passwd(LinphoneAuthInfo *info, const char *passwd);
|
||||
void linphone_auth_info_set_username(LinphoneAuthInfo *info, const char *username);
|
||||
|
|
@ -668,23 +668,23 @@ typedef enum _LinphoneChatMessageStates {
|
|||
*/
|
||||
typedef void (*LinphoneChatMessageStateChangeCb)(LinphoneChatMessage* msg,LinphoneChatMessageState state,void* ud);
|
||||
|
||||
LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to);
|
||||
LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to);
|
||||
void linphone_chat_room_destroy(LinphoneChatRoom *cr);
|
||||
LinphoneChatMessage* linphone_chat_room_create_message(LinphoneChatRoom *cr,const char* message);
|
||||
LINPHONE_PUBLIC LinphoneChatMessage* linphone_chat_room_create_message(LinphoneChatRoom *cr,const char* message);
|
||||
const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr);
|
||||
void linphone_chat_room_send_message(LinphoneChatRoom *cr, const char *msg);
|
||||
void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangeCb status_cb,void* ud);
|
||||
LINPHONE_PUBLIC void linphone_chat_room_send_message(LinphoneChatRoom *cr, const char *msg);
|
||||
LINPHONE_PUBLIC void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangeCb status_cb,void* ud);
|
||||
LinphoneCore* linphone_chat_room_get_lc(LinphoneChatRoom *cr);
|
||||
void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void * ud);
|
||||
void * linphone_chat_room_get_user_data(LinphoneChatRoom *cr);
|
||||
|
||||
const char* linphone_chat_message_state_to_string(const LinphoneChatMessageState state);
|
||||
LINPHONE_PUBLIC const char* linphone_chat_message_state_to_string(const LinphoneChatMessageState state);
|
||||
LinphoneChatMessage* linphone_chat_message_clone(const LinphoneChatMessage* message);
|
||||
void linphone_chat_message_set_from(LinphoneChatMessage* message, const LinphoneAddress* from);
|
||||
LinphoneAddress* linphone_chat_message_get_from(const LinphoneChatMessage* message);
|
||||
const char* linphone_chat_message_get_external_body_url(const LinphoneChatMessage* message);
|
||||
void linphone_chat_message_set_external_body_url(LinphoneChatMessage* message,const char* url);
|
||||
const char * linphone_chat_message_get_text(const LinphoneChatMessage* message);
|
||||
LINPHONE_PUBLIC LinphoneAddress* linphone_chat_message_get_from(const LinphoneChatMessage* message);
|
||||
LINPHONE_PUBLIC const char* linphone_chat_message_get_external_body_url(const LinphoneChatMessage* message);
|
||||
LINPHONE_PUBLIC void linphone_chat_message_set_external_body_url(LinphoneChatMessage* message,const char* url);
|
||||
LINPHONE_PUBLIC const char * linphone_chat_message_get_text(const LinphoneChatMessage* message);
|
||||
time_t linphone_chat_message_get_time(const LinphoneChatMessage* message);
|
||||
void* linphone_chat_message_get_user_data(const LinphoneChatMessage* message);
|
||||
void linphone_chat_message_set_user_data(LinphoneChatMessage* message,void*);
|
||||
|
|
@ -847,7 +847,7 @@ typedef void * (*LinphoneWaitingCallback)(struct _LinphoneCore *lc, void *contex
|
|||
|
||||
/* THE main API */
|
||||
|
||||
void linphone_core_enable_logs(FILE *file);
|
||||
LINPHONE_PUBLIC void linphone_core_enable_logs(FILE *file);
|
||||
void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc);
|
||||
void linphone_core_disable_logs(void);
|
||||
const char *linphone_core_get_version(void);
|
||||
|
|
@ -859,7 +859,7 @@ LINPHONE_PUBLIC LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable
|
|||
|
||||
/* function to be periodically called in a main loop */
|
||||
/* For ICE to work properly it should be called every 20ms */
|
||||
void linphone_core_iterate(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC void linphone_core_iterate(LinphoneCore *lc);
|
||||
#if 0 /*not implemented yet*/
|
||||
/**
|
||||
* @ingroup initializing
|
||||
|
|
@ -884,43 +884,43 @@ void linphone_core_set_user_agent(LinphoneCore *lc, const char *ua_name, const c
|
|||
|
||||
LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url);
|
||||
|
||||
LinphoneCall * linphone_core_invite(LinphoneCore *lc, const char *url);
|
||||
LINPHONE_PUBLIC LinphoneCall * linphone_core_invite(LinphoneCore *lc, const char *url);
|
||||
|
||||
LinphoneCall * linphone_core_invite_address(LinphoneCore *lc, const LinphoneAddress *addr);
|
||||
LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_address(LinphoneCore *lc, const LinphoneAddress *addr);
|
||||
|
||||
LinphoneCall * linphone_core_invite_with_params(LinphoneCore *lc, const char *url, const LinphoneCallParams *params);
|
||||
|
||||
LinphoneCall * linphone_core_invite_address_with_params(LinphoneCore *lc, const LinphoneAddress *addr, const LinphoneCallParams *params);
|
||||
|
||||
int linphone_core_transfer_call(LinphoneCore *lc, LinphoneCall *call, const char *refer_to);
|
||||
LINPHONE_PUBLIC int linphone_core_transfer_call(LinphoneCore *lc, LinphoneCall *call, const char *refer_to);
|
||||
|
||||
int linphone_core_transfer_call_to_another(LinphoneCore *lc, LinphoneCall *call, LinphoneCall *dest);
|
||||
LINPHONE_PUBLIC int linphone_core_transfer_call_to_another(LinphoneCore *lc, LinphoneCall *call, LinphoneCall *dest);
|
||||
|
||||
bool_t linphone_core_inc_invite_pending(LinphoneCore*lc);
|
||||
LINPHONE_PUBLIC bool_t linphone_core_inc_invite_pending(LinphoneCore*lc);
|
||||
|
||||
bool_t linphone_core_in_call(const LinphoneCore *lc);
|
||||
|
||||
LinphoneCall *linphone_core_get_current_call(const LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC LinphoneCall *linphone_core_get_current_call(const LinphoneCore *lc);
|
||||
|
||||
int linphone_core_accept_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
LINPHONE_PUBLIC int linphone_core_accept_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
|
||||
int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params);
|
||||
|
||||
int linphone_core_terminate_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
LINPHONE_PUBLIC int linphone_core_terminate_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
|
||||
int linphone_core_redirect_call(LinphoneCore *lc, LinphoneCall *call, const char *redirect_uri);
|
||||
|
||||
int linphone_core_decline_call(LinphoneCore *lc, LinphoneCall * call, LinphoneReason reason);
|
||||
|
||||
int linphone_core_terminate_all_calls(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC int linphone_core_terminate_all_calls(LinphoneCore *lc);
|
||||
|
||||
int linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
LINPHONE_PUBLIC int linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
|
||||
int linphone_core_pause_all_calls(LinphoneCore *lc);
|
||||
|
||||
int linphone_core_resume_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
LINPHONE_PUBLIC int linphone_core_resume_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
|
||||
int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params);
|
||||
LINPHONE_PUBLIC int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params);
|
||||
|
||||
int linphone_core_defer_call_update(LinphoneCore *lc, LinphoneCall *call);
|
||||
|
||||
|
|
@ -964,7 +964,7 @@ void linphone_core_set_upload_ptime(LinphoneCore *lc, int ptime);
|
|||
int linphone_core_get_upload_ptime(LinphoneCore *lc);
|
||||
|
||||
/* returns a MSList of PayloadType */
|
||||
const MSList *linphone_core_get_audio_codecs(const LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC const MSList *linphone_core_get_audio_codecs(const LinphoneCore *lc);
|
||||
|
||||
int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs);
|
||||
/* returns a MSList of PayloadType */
|
||||
|
|
@ -974,7 +974,7 @@ int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs);
|
|||
|
||||
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, const PayloadType *pt);
|
||||
|
||||
int linphone_core_enable_payload_type(LinphoneCore *lc, PayloadType *pt, bool_t enable);
|
||||
LINPHONE_PUBLIC int linphone_core_enable_payload_type(LinphoneCore *lc, PayloadType *pt, bool_t enable);
|
||||
|
||||
/**
|
||||
* Wildcard value used by #linphone_core_find_payload_type to ignore rate in search algirithm
|
||||
|
|
@ -996,7 +996,7 @@ int linphone_core_enable_payload_type(LinphoneCore *lc, PayloadType *pt, bool_t
|
|||
* @param channels number of channels, can be #LINPHONE_FIND_PAYLOAD_IGNORE_CHANNELS
|
||||
* @return Returns NULL if not found.
|
||||
*/
|
||||
PayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const char* type, int rate, int channels) ;
|
||||
LINPHONE_PUBLIC PayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const char* type, int rate, int channels) ;
|
||||
|
||||
int linphone_core_get_payload_type_number(LinphoneCore *lc, const PayloadType *pt);
|
||||
|
||||
|
|
@ -1012,21 +1012,21 @@ bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, PayloadType
|
|||
*/
|
||||
LinphoneProxyConfig * linphone_core_create_proxy_config(LinphoneCore *lc);
|
||||
|
||||
int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config);
|
||||
LINPHONE_PUBLIC int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config);
|
||||
|
||||
void linphone_core_clear_proxy_config(LinphoneCore *lc);
|
||||
|
||||
void linphone_core_remove_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config);
|
||||
|
||||
const MSList *linphone_core_get_proxy_config_list(const LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC const MSList *linphone_core_get_proxy_config_list(const LinphoneCore *lc);
|
||||
|
||||
void linphone_core_set_default_proxy(LinphoneCore *lc, LinphoneProxyConfig *config);
|
||||
LINPHONE_PUBLIC void linphone_core_set_default_proxy(LinphoneCore *lc, LinphoneProxyConfig *config);
|
||||
|
||||
void linphone_core_set_default_proxy_index(LinphoneCore *lc, int index);
|
||||
|
||||
int linphone_core_get_default_proxy(LinphoneCore *lc, LinphoneProxyConfig **config);
|
||||
LINPHONE_PUBLIC int linphone_core_get_default_proxy(LinphoneCore *lc, LinphoneProxyConfig **config);
|
||||
|
||||
void linphone_core_add_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *info);
|
||||
LINPHONE_PUBLIC void linphone_core_add_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *info);
|
||||
|
||||
void linphone_core_remove_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *info);
|
||||
|
||||
|
|
@ -1086,9 +1086,9 @@ void linphone_core_set_sip_port(LinphoneCore *lc, int port);
|
|||
|
||||
int linphone_core_get_sip_port(LinphoneCore *lc);
|
||||
|
||||
int linphone_core_set_sip_transports(LinphoneCore *lc, const LCSipTransports *transports);
|
||||
LINPHONE_PUBLIC int linphone_core_set_sip_transports(LinphoneCore *lc, const LCSipTransports *transports);
|
||||
|
||||
int linphone_core_get_sip_transports(LinphoneCore *lc, LCSipTransports *transports);
|
||||
LINPHONE_PUBLIC int linphone_core_get_sip_transports(LinphoneCore *lc, LCSipTransports *transports);
|
||||
/**
|
||||
*
|
||||
* Give access to the UDP sip socket. Can be useful to configure this socket as persistent I.E kCFStreamNetworkServiceType set to kCFStreamNetworkServiceTypeVoIP)
|
||||
|
|
@ -1181,13 +1181,13 @@ int linphone_core_set_playback_device(LinphoneCore *lc, const char * devid);
|
|||
int linphone_core_set_capture_device(LinphoneCore *lc, const char * devid);
|
||||
char linphone_core_get_sound_source(LinphoneCore *lc);
|
||||
void linphone_core_set_sound_source(LinphoneCore *lc, char source);
|
||||
void linphone_core_set_ring(LinphoneCore *lc, const char *path);
|
||||
LINPHONE_PUBLIC void linphone_core_set_ring(LinphoneCore *lc, const char *path);
|
||||
const char *linphone_core_get_ring(const LinphoneCore *lc);
|
||||
void linphone_core_verify_server_certificates(LinphoneCore *lc, bool_t yesno);
|
||||
void linphone_core_verify_server_cn(LinphoneCore *lc, bool_t yesno);
|
||||
void linphone_core_set_root_ca(LinphoneCore *lc, const char *path);
|
||||
const char *linphone_core_get_root_ca(LinphoneCore *lc);
|
||||
void linphone_core_set_ringback(LinphoneCore *lc, const char *path);
|
||||
LINPHONE_PUBLIC void linphone_core_set_ringback(LinphoneCore *lc, const char *path);
|
||||
const char * linphone_core_get_ringback(const LinphoneCore *lc);
|
||||
|
||||
void linphone_core_set_remote_ringback_tone(LinphoneCore *lc,const char *);
|
||||
|
|
@ -1226,9 +1226,9 @@ void linphone_core_remove_call_log(LinphoneCore *lc, LinphoneCallLog *call_log);
|
|||
|
||||
/* video support */
|
||||
bool_t linphone_core_video_supported(LinphoneCore *lc);
|
||||
void linphone_core_enable_video(LinphoneCore *lc, bool_t vcap_enabled, bool_t display_enabled);
|
||||
LINPHONE_PUBLIC void linphone_core_enable_video(LinphoneCore *lc, bool_t vcap_enabled, bool_t display_enabled);
|
||||
bool_t linphone_core_video_enabled(LinphoneCore *lc);
|
||||
void linphone_core_set_video_policy(LinphoneCore *lc, const LinphoneVideoPolicy *policy);
|
||||
LINPHONE_PUBLIC void linphone_core_set_video_policy(LinphoneCore *lc, const LinphoneVideoPolicy *policy);
|
||||
const LinphoneVideoPolicy *linphone_core_get_video_policy(LinphoneCore *lc);
|
||||
|
||||
typedef struct MSVideoSizeDef{
|
||||
|
|
@ -1296,7 +1296,7 @@ void linphone_core_set_mtu(LinphoneCore *lc, int mtu);
|
|||
* Calling this method with true trigger linphone to initiate a registration process for all proxies.
|
||||
* Calling this method disables the automatic network detection mode. It means you must call this method after each network state changes.
|
||||
*/
|
||||
void linphone_core_set_network_reachable(LinphoneCore* lc,bool_t value);
|
||||
LINPHONE_PUBLIC void linphone_core_set_network_reachable(LinphoneCore* lc,bool_t value);
|
||||
/**
|
||||
* @ingroup network_parameters
|
||||
* return network state either as positioned by the application or by linphone itself.
|
||||
|
|
@ -1314,8 +1314,8 @@ void linphone_core_enable_keep_alive(LinphoneCore* lc,bool_t enable);
|
|||
*/
|
||||
bool_t linphone_core_keep_alive_enabled(LinphoneCore* lc);
|
||||
|
||||
void *linphone_core_get_user_data(LinphoneCore *lc);
|
||||
void linphone_core_set_user_data(LinphoneCore *lc, void *userdata);
|
||||
LINPHONE_PUBLIC void *linphone_core_get_user_data(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC void linphone_core_set_user_data(LinphoneCore *lc, void *userdata);
|
||||
|
||||
/* returns LpConfig object to read/write to the config file: usefull if you wish to extend
|
||||
the config file with your own sections */
|
||||
|
|
@ -1327,7 +1327,7 @@ 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_destroy(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC void linphone_core_destroy(LinphoneCore *lc);
|
||||
|
||||
/*for advanced users:*/
|
||||
typedef RtpTransport * (*LinphoneRtpTransportFactoryFunc)(void *data, int port);
|
||||
|
|
@ -1349,7 +1349,7 @@ int linphone_core_get_current_call_stats(LinphoneCore *lc, rtp_stats_t *local, r
|
|||
|
||||
int linphone_core_get_calls_nb(const LinphoneCore *lc);
|
||||
|
||||
const MSList *linphone_core_get_calls(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC const MSList *linphone_core_get_calls(LinphoneCore *lc);
|
||||
|
||||
LinphoneGlobalState linphone_core_get_global_state(const LinphoneCore *lc);
|
||||
/**
|
||||
|
|
@ -1364,16 +1364,16 @@ const char *linphone_core_get_zrtp_secrets_file(LinphoneCore *lc);
|
|||
|
||||
const LinphoneCall* linphone_core_find_call_from_uri(LinphoneCore *lc, const char *uri);
|
||||
|
||||
int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call);
|
||||
LINPHONE_PUBLIC int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call);
|
||||
int linphone_core_add_all_to_conference(LinphoneCore *lc);
|
||||
int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call);
|
||||
bool_t linphone_core_is_in_conference(const LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC bool_t linphone_core_is_in_conference(const LinphoneCore *lc);
|
||||
int linphone_core_enter_conference(LinphoneCore *lc);
|
||||
int linphone_core_leave_conference(LinphoneCore *lc);
|
||||
float linphone_core_get_conference_local_input_volume(LinphoneCore *lc);
|
||||
|
||||
int linphone_core_terminate_conference(LinphoneCore *lc);
|
||||
int linphone_core_get_conference_size(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC int linphone_core_terminate_conference(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC int linphone_core_get_conference_size(LinphoneCore *lc);
|
||||
int linphone_core_start_conference_recording(LinphoneCore *lc, const char *path);
|
||||
int linphone_core_stop_conference_recording(LinphoneCore *lc);
|
||||
|
||||
|
|
@ -1387,8 +1387,8 @@ bool_t linphone_core_media_encryption_supported(const LinphoneCore *lc, Linphone
|
|||
/**
|
||||
* Choose media encryption policy to be used for RTP packets
|
||||
*/
|
||||
int linphone_core_set_media_encryption(LinphoneCore *lc, enum LinphoneMediaEncryption menc);
|
||||
LinphoneMediaEncryption linphone_core_get_media_encryption(LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC int linphone_core_set_media_encryption(LinphoneCore *lc, enum LinphoneMediaEncryption menc);
|
||||
LINPHONE_PUBLIC LinphoneMediaEncryption linphone_core_get_media_encryption(LinphoneCore *lc);
|
||||
|
||||
bool_t linphone_core_is_media_encryption_mandatory(LinphoneCore *lc);
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ LinphoneFriend * linphone_friend_new();
|
|||
* @param addr a buddy address, must be a sip uri like sip:joe@sip.linphone.org
|
||||
* @return a new #LinphoneFriend with \link linphone_friend_get_address() address initialized \endlink
|
||||
*/
|
||||
LinphoneFriend *linphone_friend_new_with_addr(const char *addr);
|
||||
LINPHONE_PUBLIC LinphoneFriend *linphone_friend_new_with_addr(const char *addr);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
|
|
@ -137,7 +137,7 @@ int linphone_friend_set_addr(LinphoneFriend *fr, const LinphoneAddress* address)
|
|||
* @param lf #LinphoneFriend object
|
||||
* @return #LinphoneAddress
|
||||
*/
|
||||
const LinphoneAddress *linphone_friend_get_address(const LinphoneFriend *lf);
|
||||
LINPHONE_PUBLIC const LinphoneAddress *linphone_friend_get_address(const LinphoneFriend *lf);
|
||||
/**
|
||||
* get subscription flag value
|
||||
* @param lf #LinphoneFriend object
|
||||
|
|
@ -153,7 +153,7 @@ bool_t linphone_friend_subscribes_enabled(const LinphoneFriend *lf);
|
|||
* @param val if TRUE this friend will receive subscription message
|
||||
*/
|
||||
|
||||
int linphone_friend_enable_subscribes(LinphoneFriend *fr, bool_t val);
|
||||
LINPHONE_PUBLIC int linphone_friend_enable_subscribes(LinphoneFriend *fr, bool_t val);
|
||||
|
||||
#define linphone_friend_send_subscribe linphone_friend_enable_subscribes
|
||||
/**
|
||||
|
|
@ -179,12 +179,12 @@ LinphoneSubscribePolicy linphone_friend_get_inc_subscribe_policy(const LinphoneF
|
|||
* Once the modifications are done, then the application must call
|
||||
* linphone_friend_done() to commit the changes.
|
||||
**/
|
||||
void linphone_friend_edit(LinphoneFriend *fr);
|
||||
LINPHONE_PUBLIC void linphone_friend_edit(LinphoneFriend *fr);
|
||||
/**
|
||||
* Commits modification made to the friend configuration.
|
||||
* @param fr #LinphoneFriend object
|
||||
**/
|
||||
void linphone_friend_done(LinphoneFriend *fr);
|
||||
LINPHONE_PUBLIC void linphone_friend_done(LinphoneFriend *fr);
|
||||
|
||||
|
||||
|
||||
|
|
@ -229,7 +229,7 @@ void linphone_core_interpret_friend_uri(LinphoneCore *lc, const char *uri, char
|
|||
* @param lc #LinphoneCore object
|
||||
* @param fr #LinphoneFriend to add
|
||||
*/
|
||||
void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *fr);
|
||||
LINPHONE_PUBLIC void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *fr);
|
||||
/**
|
||||
* remove a friend from the buddy list
|
||||
* @param lc #LinphoneCore object
|
||||
|
|
@ -246,7 +246,7 @@ void linphone_core_reject_subscriber(LinphoneCore *lc, LinphoneFriend *lf);
|
|||
* get Buddy list of LinphoneFriend
|
||||
* @param lc #LinphoneCore object
|
||||
* */
|
||||
const MSList * linphone_core_get_friend_list(const LinphoneCore *lc);
|
||||
LINPHONE_PUBLIC const MSList * linphone_core_get_friend_list(const LinphoneCore *lc);
|
||||
/**
|
||||
* notify all friends that have subscribed
|
||||
* @param lc #LinphoneCore object
|
||||
|
|
|
|||
|
|
@ -1,479 +1,493 @@
|
|||
/*
|
||||
linphone
|
||||
Copyright (C) 2010 Simon MORLAT (simon.morlat@free.fr)
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
This header files defines the Signaling Abstraction Layer.
|
||||
The purpose of this layer is too allow experiment different call signaling
|
||||
protocols and implementations under linphone, for example SIP, JINGLE...
|
||||
**/
|
||||
|
||||
#ifndef sal_h
|
||||
#define sal_h
|
||||
|
||||
#include "mediastreamer2/mscommon.h"
|
||||
#include "ortp/ortp_srtp.h"
|
||||
|
||||
/*Dirty hack, keep in sync with mediastreamer2/include/mediastream.h */
|
||||
#ifndef PAYLOAD_TYPE_FLAG_CAN_RECV
|
||||
#define PAYLOAD_TYPE_FLAG_CAN_RECV PAYLOAD_TYPE_USER_FLAG_1
|
||||
#define PAYLOAD_TYPE_FLAG_CAN_SEND PAYLOAD_TYPE_USER_FLAG_2
|
||||
#endif
|
||||
struct Sal;
|
||||
|
||||
typedef struct Sal Sal;
|
||||
|
||||
struct SalOp;
|
||||
|
||||
typedef struct SalOp SalOp;
|
||||
|
||||
struct SalAddress;
|
||||
|
||||
typedef struct SalAddress SalAddress;
|
||||
|
||||
struct SalCustomHeader;
|
||||
|
||||
typedef struct SalCustomHeader SalCustomHeader;
|
||||
|
||||
typedef enum {
|
||||
SalTransportUDP, /*UDP*/
|
||||
SalTransportTCP, /*TCP*/
|
||||
SalTransportTLS, /*TLS*/
|
||||
SalTransportDTLS /*DTLS*/
|
||||
}SalTransport;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00
|
||||
#define SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED 0x01
|
||||
#define SAL_MEDIA_DESCRIPTION_CODEC_CHANGED 0x02
|
||||
#define SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED 0x04
|
||||
#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED | SAL_MEDIA_DESCRIPTION_CODEC_CHANGED | SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED)
|
||||
|
||||
const char* sal_transport_to_string(SalTransport transport);
|
||||
SalTransport sal_transport_parse(const char*);
|
||||
/* Address manipulation API*/
|
||||
SalAddress * sal_address_new(const char *uri);
|
||||
SalAddress * sal_address_clone(const SalAddress *addr);
|
||||
const char *sal_address_get_scheme(const SalAddress *addr);
|
||||
const char *sal_address_get_display_name(const SalAddress* addr);
|
||||
char *sal_address_get_display_name_unquoted(const SalAddress *addr);
|
||||
const char *sal_address_get_username(const SalAddress *addr);
|
||||
const char *sal_address_get_domain(const SalAddress *addr);
|
||||
const char * sal_address_get_port(const SalAddress *addr);
|
||||
int sal_address_get_port_int(const SalAddress *addr);
|
||||
SalTransport sal_address_get_transport(const SalAddress* addr);
|
||||
|
||||
void sal_address_set_display_name(SalAddress *addr, const char *display_name);
|
||||
void sal_address_set_username(SalAddress *addr, const char *username);
|
||||
void sal_address_set_domain(SalAddress *addr, const char *host);
|
||||
void sal_address_set_port(SalAddress *addr, const char *port);
|
||||
void sal_address_set_port_int(SalAddress *uri, int port);
|
||||
void sal_address_clean(SalAddress *addr);
|
||||
char *sal_address_as_string(const SalAddress *u);
|
||||
char *sal_address_as_string_uri_only(const SalAddress *u);
|
||||
void sal_address_destroy(SalAddress *u);
|
||||
void sal_address_set_param(SalAddress *u,const char* name,const char* value);
|
||||
void sal_address_set_transport(SalAddress* addr,SalTransport transport);
|
||||
|
||||
|
||||
Sal * sal_init();
|
||||
void sal_uninit(Sal* sal);
|
||||
void sal_set_user_pointer(Sal *sal, void *user_data);
|
||||
void *sal_get_user_pointer(const Sal *sal);
|
||||
|
||||
|
||||
typedef enum {
|
||||
SalAudio,
|
||||
SalVideo,
|
||||
SalOther
|
||||
} SalStreamType;
|
||||
|
||||
typedef enum{
|
||||
SalProtoUnknown,
|
||||
SalProtoRtpAvp,
|
||||
SalProtoRtpSavp
|
||||
}SalMediaProto;
|
||||
|
||||
typedef enum{
|
||||
SalStreamSendRecv,
|
||||
SalStreamSendOnly,
|
||||
SalStreamRecvOnly,
|
||||
SalStreamInactive
|
||||
}SalStreamDir;
|
||||
|
||||
#define SAL_ENDPOINT_CANDIDATE_MAX 2
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN 64
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_FOUNDATION_LEN 32
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_TYPE_LEN 6
|
||||
|
||||
typedef struct SalIceCandidate {
|
||||
char addr[SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN];
|
||||
char raddr[SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN];
|
||||
char foundation[SAL_MEDIA_DESCRIPTION_MAX_ICE_FOUNDATION_LEN];
|
||||
char type[SAL_MEDIA_DESCRIPTION_MAX_ICE_TYPE_LEN];
|
||||
unsigned int componentID;
|
||||
unsigned int priority;
|
||||
int port;
|
||||
int rport;
|
||||
} SalIceCandidate;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_CANDIDATES 10
|
||||
|
||||
typedef struct SalIceRemoteCandidate {
|
||||
char addr[SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN];
|
||||
int port;
|
||||
} SalIceRemoteCandidate;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_REMOTE_CANDIDATES 2
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_UFRAG_LEN 256
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_PWD_LEN 256
|
||||
|
||||
typedef struct SalSrtpCryptoAlgo {
|
||||
unsigned int tag;
|
||||
enum ortp_srtp_crypto_suite_t algo;
|
||||
/* 41= 40 max(key_length for all algo) + '\0' */
|
||||
char master_key[41];
|
||||
} SalSrtpCryptoAlgo;
|
||||
|
||||
#define SAL_CRYPTO_ALGO_MAX 4
|
||||
|
||||
typedef struct SalStreamDescription{
|
||||
SalMediaProto proto;
|
||||
SalStreamType type;
|
||||
char typeother[32];
|
||||
char rtp_addr[64];
|
||||
char rtcp_addr[64];
|
||||
int rtp_port;
|
||||
int rtcp_port;
|
||||
MSList *payloads; //<list of PayloadType
|
||||
int bandwidth;
|
||||
int ptime;
|
||||
SalStreamDir dir;
|
||||
SalSrtpCryptoAlgo crypto[SAL_CRYPTO_ALGO_MAX];
|
||||
unsigned int crypto_local_tag;
|
||||
int max_rate;
|
||||
SalIceCandidate ice_candidates[SAL_MEDIA_DESCRIPTION_MAX_ICE_CANDIDATES];
|
||||
SalIceRemoteCandidate ice_remote_candidates[SAL_MEDIA_DESCRIPTION_MAX_ICE_REMOTE_CANDIDATES];
|
||||
char ice_ufrag[SAL_MEDIA_DESCRIPTION_MAX_ICE_UFRAG_LEN];
|
||||
char ice_pwd[SAL_MEDIA_DESCRIPTION_MAX_ICE_PWD_LEN];
|
||||
bool_t ice_mismatch;
|
||||
bool_t ice_completed;
|
||||
} SalStreamDescription;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_STREAMS 4
|
||||
|
||||
typedef struct SalMediaDescription{
|
||||
int refcount;
|
||||
char addr[64];
|
||||
char username[64];
|
||||
int n_active_streams;
|
||||
int n_total_streams;
|
||||
int bandwidth;
|
||||
unsigned int session_ver;
|
||||
unsigned int session_id;
|
||||
SalStreamDescription streams[SAL_MEDIA_DESCRIPTION_MAX_STREAMS];
|
||||
char ice_ufrag[SAL_MEDIA_DESCRIPTION_MAX_ICE_UFRAG_LEN];
|
||||
char ice_pwd[SAL_MEDIA_DESCRIPTION_MAX_ICE_PWD_LEN];
|
||||
bool_t ice_lite;
|
||||
bool_t ice_completed;
|
||||
} SalMediaDescription;
|
||||
|
||||
typedef struct SalMessage{
|
||||
const char *from;
|
||||
const char *text;
|
||||
const char *url;
|
||||
const char *message_id;
|
||||
time_t time;
|
||||
}SalMessage;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_MESSAGE_ATTRIBUTES 5
|
||||
|
||||
SalMediaDescription *sal_media_description_new();
|
||||
void sal_media_description_ref(SalMediaDescription *md);
|
||||
void sal_media_description_unref(SalMediaDescription *md);
|
||||
bool_t sal_media_description_empty(const SalMediaDescription *md);
|
||||
int sal_media_description_equals(const SalMediaDescription *md1, const SalMediaDescription *md2);
|
||||
bool_t sal_media_description_has_dir(const SalMediaDescription *md, SalStreamDir dir);
|
||||
SalStreamDescription *sal_media_description_find_stream(SalMediaDescription *md,
|
||||
SalMediaProto proto, SalStreamType type);
|
||||
void sal_media_description_set_dir(SalMediaDescription *md, SalStreamDir stream_dir);
|
||||
|
||||
/*this structure must be at the first byte of the SalOp structure defined by implementors*/
|
||||
typedef struct SalOpBase{
|
||||
Sal *root;
|
||||
char *route; /*or request-uri for REGISTER*/
|
||||
char *contact;
|
||||
char *from;
|
||||
char *to;
|
||||
char *origin;
|
||||
char *remote_ua;
|
||||
SalMediaDescription *local_media;
|
||||
SalMediaDescription *remote_media;
|
||||
void *user_pointer;
|
||||
char* call_id;
|
||||
char *remote_contact;
|
||||
SalCustomHeader *custom_headers;
|
||||
} SalOpBase;
|
||||
|
||||
|
||||
typedef enum SalError{
|
||||
SalErrorNoResponse,
|
||||
SalErrorProtocol,
|
||||
SalErrorFailure, /* see SalReason for more details */
|
||||
SalErrorUnknown
|
||||
} SalError;
|
||||
|
||||
typedef enum SalReason{
|
||||
SalReasonDeclined,
|
||||
SalReasonBusy,
|
||||
SalReasonRedirect,
|
||||
SalReasonTemporarilyUnavailable,
|
||||
SalReasonNotFound,
|
||||
SalReasonDoNotDisturb,
|
||||
SalReasonMedia,
|
||||
SalReasonForbidden,
|
||||
SalReasonUnknown
|
||||
}SalReason;
|
||||
|
||||
typedef enum SalPresenceStatus{
|
||||
SalPresenceOffline,
|
||||
SalPresenceOnline,
|
||||
SalPresenceBusy,
|
||||
SalPresenceBerightback,
|
||||
SalPresenceAway,
|
||||
SalPresenceOnthephone,
|
||||
SalPresenceOuttolunch,
|
||||
SalPresenceDonotdisturb,
|
||||
SalPresenceMoved,
|
||||
SalPresenceAltService,
|
||||
}SalPresenceStatus;
|
||||
|
||||
typedef enum SalReferStatus{
|
||||
SalReferTrying,
|
||||
SalReferSuccess,
|
||||
SalReferFailed
|
||||
}SalReferStatus;
|
||||
|
||||
typedef enum SalSubscribeStatus{
|
||||
SalSubscribeActive,
|
||||
SalSubscribeTerminated
|
||||
}SalSubscribeStatus;
|
||||
|
||||
typedef enum SalTextDeliveryStatus{
|
||||
SalTextDeliveryInProgress,
|
||||
SalTextDeliveryDone,
|
||||
SalTextDeliveryFailed
|
||||
}SalTextDeliveryStatus;
|
||||
|
||||
typedef void (*SalOnCallReceived)(SalOp *op);
|
||||
typedef void (*SalOnCallRinging)(SalOp *op);
|
||||
typedef void (*SalOnCallAccepted)(SalOp *op);
|
||||
typedef void (*SalOnCallAck)(SalOp *op);
|
||||
typedef void (*SalOnCallUpdating)(SalOp *op);/*< Called when a reINVITE is received*/
|
||||
typedef void (*SalOnCallTerminated)(SalOp *op, const char *from);
|
||||
typedef void (*SalOnCallFailure)(SalOp *op, SalError error, SalReason reason, const char *details, int code);
|
||||
typedef void (*SalOnCallReleased)(SalOp *salop);
|
||||
typedef void (*SalOnAuthRequested)(SalOp *op, const char *realm, const char *username);
|
||||
typedef void (*SalOnAuthSuccess)(SalOp *op, const char *realm, const char *username);
|
||||
typedef void (*SalOnRegisterSuccess)(SalOp *op, bool_t registered);
|
||||
typedef void (*SalOnRegisterFailure)(SalOp *op, SalError error, SalReason reason, const char *details);
|
||||
typedef void (*SalOnVfuRequest)(SalOp *op);
|
||||
typedef void (*SalOnDtmfReceived)(SalOp *op, char dtmf);
|
||||
typedef void (*SalOnRefer)(Sal *sal, SalOp *op, const char *referto);
|
||||
typedef void (*SalOnTextReceived)(SalOp *op, const SalMessage *msg);
|
||||
typedef void (*SalOnTextDeliveryUpdate)(SalOp *op, SalTextDeliveryStatus status);
|
||||
typedef void (*SalOnNotify)(SalOp *op, const char *from, const char *event);
|
||||
typedef void (*SalOnNotifyRefer)(SalOp *op, SalReferStatus state);
|
||||
typedef void (*SalOnNotifyPresence)(SalOp *op, SalSubscribeStatus ss, SalPresenceStatus status, const char *msg);
|
||||
typedef void (*SalOnSubscribeReceived)(SalOp *salop, const char *from);
|
||||
typedef void (*SalOnSubscribeClosed)(SalOp *salop, const char *from);
|
||||
typedef void (*SalOnPingReply)(SalOp *salop);
|
||||
|
||||
typedef struct SalCallbacks{
|
||||
SalOnCallReceived call_received;
|
||||
SalOnCallRinging call_ringing;
|
||||
SalOnCallAccepted call_accepted;
|
||||
SalOnCallAck call_ack;
|
||||
SalOnCallUpdating call_updating;
|
||||
SalOnCallTerminated call_terminated;
|
||||
SalOnCallFailure call_failure;
|
||||
SalOnCallReleased call_released;
|
||||
SalOnAuthRequested auth_requested;
|
||||
SalOnAuthSuccess auth_success;
|
||||
SalOnRegisterSuccess register_success;
|
||||
SalOnRegisterFailure register_failure;
|
||||
SalOnVfuRequest vfu_request;
|
||||
SalOnDtmfReceived dtmf_received;
|
||||
SalOnRefer refer_received;
|
||||
SalOnTextReceived text_received;
|
||||
SalOnTextDeliveryUpdate text_delivery_update;
|
||||
SalOnNotify notify;
|
||||
SalOnNotifyPresence notify_presence;
|
||||
SalOnNotifyRefer notify_refer;
|
||||
SalOnSubscribeReceived subscribe_received;
|
||||
SalOnSubscribeClosed subscribe_closed;
|
||||
SalOnPingReply ping_reply;
|
||||
}SalCallbacks;
|
||||
|
||||
typedef struct SalAuthInfo{
|
||||
char *username;
|
||||
char *userid;
|
||||
char *password;
|
||||
char *realm;
|
||||
}SalAuthInfo;
|
||||
|
||||
SalAuthInfo* sal_auth_info_new();
|
||||
SalAuthInfo* sal_auth_info_clone(const SalAuthInfo* auth_info);
|
||||
void sal_auth_info_delete(const SalAuthInfo* auth_info);
|
||||
|
||||
void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs);
|
||||
int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure);
|
||||
int sal_unlisten_ports(Sal *ctx);
|
||||
void sal_set_dscp(Sal *ctx, int dscp);
|
||||
int sal_reset_transports(Sal *ctx);
|
||||
ortp_socket_t sal_get_socket(Sal *ctx);
|
||||
void sal_set_user_agent(Sal *ctx, const char *user_agent);
|
||||
/*keepalive period in ms*/
|
||||
void sal_set_keepalive_period(Sal *ctx,unsigned int value);
|
||||
void sal_use_tcp_tls_keepalive(Sal *ctx, bool_t enabled);
|
||||
/**
|
||||
* returns keepalive period in ms
|
||||
* 0 desactiaved
|
||||
* */
|
||||
unsigned int sal_get_keepalive_period(Sal *ctx);
|
||||
void sal_use_session_timers(Sal *ctx, int expires);
|
||||
void sal_use_double_registrations(Sal *ctx, bool_t enabled);
|
||||
void sal_expire_old_registration_contacts(Sal *ctx, bool_t enabled);
|
||||
void sal_use_dates(Sal *ctx, bool_t enabled);
|
||||
void sal_reuse_authorization(Sal *ctx, bool_t enabled);
|
||||
void sal_use_one_matching_codec_policy(Sal *ctx, bool_t one_matching_codec);
|
||||
void sal_use_rport(Sal *ctx, bool_t use_rports);
|
||||
void sal_use_101(Sal *ctx, bool_t use_101);
|
||||
void sal_set_root_ca(Sal* ctx, const char* rootCa);
|
||||
const char *sal_get_root_ca(Sal* ctx);
|
||||
void sal_verify_server_certificates(Sal *ctx, bool_t verify);
|
||||
void sal_verify_server_cn(Sal *ctx, bool_t verify);
|
||||
|
||||
int sal_iterate(Sal *sal);
|
||||
MSList * sal_get_pending_auths(Sal *sal);
|
||||
|
||||
/*create an operation */
|
||||
SalOp * sal_op_new(Sal *sal);
|
||||
|
||||
/*generic SalOp API, working for all operations */
|
||||
Sal *sal_op_get_sal(const SalOp *op);
|
||||
void sal_op_set_contact(SalOp *op, const char *contact);
|
||||
void sal_op_set_route(SalOp *op, const char *route);
|
||||
void sal_op_set_from(SalOp *op, const char *from);
|
||||
void sal_op_set_to(SalOp *op, const char *to);
|
||||
void sal_op_release(SalOp *h);
|
||||
void sal_op_authenticate(SalOp *h, const SalAuthInfo *info);
|
||||
void sal_op_cancel_authentication(SalOp *h);
|
||||
void sal_op_set_user_pointer(SalOp *h, void *up);
|
||||
int sal_op_get_auth_requested(SalOp *h, const char **realm, const char **username);
|
||||
const char *sal_op_get_from(const SalOp *op);
|
||||
const char *sal_op_get_to(const SalOp *op);
|
||||
const char *sal_op_get_contact(const SalOp *op);
|
||||
const char *sal_op_get_route(const SalOp *op);
|
||||
const char *sal_op_get_proxy(const SalOp *op);
|
||||
const char *sal_op_get_remote_contact(const SalOp *op);
|
||||
/*for incoming requests, returns the origin of the packet as a sip uri*/
|
||||
const char *sal_op_get_network_origin(const SalOp *op);
|
||||
/*returns far-end "User-Agent" string */
|
||||
const char *sal_op_get_remote_ua(const SalOp *op);
|
||||
void *sal_op_get_user_pointer(const SalOp *op);
|
||||
const char* sal_op_get_call_id(const SalOp *op);
|
||||
|
||||
/*Call API*/
|
||||
int sal_call_set_local_media_description(SalOp *h, SalMediaDescription *desc);
|
||||
int sal_call(SalOp *h, const char *from, const char *to);
|
||||
int sal_call_notify_ringing(SalOp *h, bool_t early_media);
|
||||
/*accept an incoming call or, during a call accept a reINVITE*/
|
||||
int sal_call_accept(SalOp*h);
|
||||
int sal_call_decline(SalOp *h, SalReason reason, const char *redirection /*optional*/);
|
||||
int sal_call_update(SalOp *h, const char *subject);
|
||||
SalMediaDescription * sal_call_get_remote_media_description(SalOp *h);
|
||||
SalMediaDescription * sal_call_get_final_media_description(SalOp *h);
|
||||
int sal_call_refer(SalOp *h, const char *refer_to);
|
||||
int sal_call_refer_with_replaces(SalOp *h, SalOp *other_call_h);
|
||||
int sal_call_accept_refer(SalOp *h);
|
||||
/*informs this call is consecutive to an incoming refer */
|
||||
int sal_call_set_referer(SalOp *h, SalOp *refered_call);
|
||||
/* returns the SalOp of a call that should be replaced by h, if any */
|
||||
SalOp *sal_call_get_replaces(SalOp *h);
|
||||
int sal_call_send_dtmf(SalOp *h, char dtmf);
|
||||
int sal_call_terminate(SalOp *h);
|
||||
bool_t sal_call_autoanswer_asked(SalOp *op);
|
||||
void sal_call_send_vfu_request(SalOp *h);
|
||||
int sal_call_is_offerer(const SalOp *h);
|
||||
int sal_call_notify_refer_state(SalOp *h, SalOp *newcall);
|
||||
|
||||
/*Registration*/
|
||||
int sal_register(SalOp *op, const char *proxy, const char *from, int expires);
|
||||
int sal_register_refresh(SalOp *op, int expires);
|
||||
int sal_unregister(SalOp *h);
|
||||
|
||||
/*Messaging */
|
||||
int sal_text_send(SalOp *op, const char *from, const char *to, const char *text);
|
||||
int sal_message_send(SalOp *op, const char *from, const char *to, const char* content_type, const char *msg);
|
||||
|
||||
/*presence Subscribe/notify*/
|
||||
int sal_subscribe_presence(SalOp *op, const char *from, const char *to);
|
||||
int sal_unsubscribe(SalOp *op);
|
||||
int sal_subscribe_accept(SalOp *op);
|
||||
int sal_subscribe_decline(SalOp *op);
|
||||
int sal_notify_presence(SalOp *op, SalPresenceStatus status, const char *status_message);
|
||||
int sal_notify_close(SalOp *op);
|
||||
|
||||
/*presence publish */
|
||||
int sal_publish(SalOp *op, const char *from, const char *to, SalPresenceStatus status);
|
||||
|
||||
|
||||
/*ping: main purpose is to obtain its own contact address behind firewalls*/
|
||||
int sal_ping(SalOp *op, const char *from, const char *to);
|
||||
|
||||
|
||||
|
||||
#define payload_type_set_number(pt,n) (pt)->user_data=(void*)((long)n);
|
||||
#define payload_type_get_number(pt) ((int)(long)(pt)->user_data)
|
||||
|
||||
/*misc*/
|
||||
void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen);
|
||||
|
||||
struct SalCustomHeader{
|
||||
MSList node;
|
||||
char *header_name;
|
||||
char *header_value;
|
||||
};
|
||||
|
||||
SalCustomHeader *sal_custom_header_append(SalCustomHeader *ch, const char *name, const char *value);
|
||||
const char *sal_custom_header_find(const SalCustomHeader *ch, const char *name);
|
||||
void sal_custom_header_free(SalCustomHeader *ch);
|
||||
SalCustomHeader *sal_custom_header_clone(const SalCustomHeader *ch);
|
||||
const SalCustomHeader *sal_op_get_custom_header(SalOp *op);
|
||||
void sal_op_set_custom_header(SalOp *op, SalCustomHeader* ch);
|
||||
|
||||
|
||||
/*internal API */
|
||||
void __sal_op_init(SalOp *b, Sal *sal);
|
||||
void __sal_op_set_network_origin(SalOp *op, const char *origin /*a sip uri*/);
|
||||
void __sal_op_set_remote_contact(SalOp *op, const char *ct);
|
||||
void __sal_op_free(SalOp *b);
|
||||
|
||||
#endif
|
||||
/*
|
||||
linphone
|
||||
Copyright (C) 2010 Simon MORLAT (simon.morlat@free.fr)
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
This header files defines the Signaling Abstraction Layer.
|
||||
The purpose of this layer is too allow experiment different call signaling
|
||||
protocols and implementations under linphone, for example SIP, JINGLE...
|
||||
**/
|
||||
|
||||
#ifndef sal_h
|
||||
#define sal_h
|
||||
|
||||
#include "mediastreamer2/mscommon.h"
|
||||
#include "ortp/ortp_srtp.h"
|
||||
|
||||
#ifdef LIBLINPHONE_EXPORTS
|
||||
#define LINPHONE_PUBLIC __declspec(dllexport)
|
||||
#else
|
||||
#define LINPHONE_PUBLIC __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
/*Dirty hack, keep in sync with mediastreamer2/include/mediastream.h */
|
||||
#ifndef PAYLOAD_TYPE_FLAG_CAN_RECV
|
||||
#define PAYLOAD_TYPE_FLAG_CAN_RECV PAYLOAD_TYPE_USER_FLAG_1
|
||||
#define PAYLOAD_TYPE_FLAG_CAN_SEND PAYLOAD_TYPE_USER_FLAG_2
|
||||
#endif
|
||||
struct Sal;
|
||||
|
||||
typedef struct Sal Sal;
|
||||
|
||||
struct SalOp;
|
||||
|
||||
typedef struct SalOp SalOp;
|
||||
|
||||
struct SalAddress;
|
||||
|
||||
typedef struct SalAddress SalAddress;
|
||||
|
||||
struct SalCustomHeader;
|
||||
|
||||
typedef struct SalCustomHeader SalCustomHeader;
|
||||
|
||||
typedef enum {
|
||||
SalTransportUDP, /*UDP*/
|
||||
SalTransportTCP, /*TCP*/
|
||||
SalTransportTLS, /*TLS*/
|
||||
SalTransportDTLS /*DTLS*/
|
||||
}SalTransport;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00
|
||||
#define SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED 0x01
|
||||
#define SAL_MEDIA_DESCRIPTION_CODEC_CHANGED 0x02
|
||||
#define SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED 0x04
|
||||
#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED | SAL_MEDIA_DESCRIPTION_CODEC_CHANGED | SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED)
|
||||
|
||||
const char* sal_transport_to_string(SalTransport transport);
|
||||
SalTransport sal_transport_parse(const char*);
|
||||
/* Address manipulation API*/
|
||||
SalAddress * sal_address_new(const char *uri);
|
||||
SalAddress * sal_address_clone(const SalAddress *addr);
|
||||
const char *sal_address_get_scheme(const SalAddress *addr);
|
||||
const char *sal_address_get_display_name(const SalAddress* addr);
|
||||
char *sal_address_get_display_name_unquoted(const SalAddress *addr);
|
||||
const char *sal_address_get_username(const SalAddress *addr);
|
||||
const char *sal_address_get_domain(const SalAddress *addr);
|
||||
const char * sal_address_get_port(const SalAddress *addr);
|
||||
int sal_address_get_port_int(const SalAddress *addr);
|
||||
SalTransport sal_address_get_transport(const SalAddress* addr);
|
||||
|
||||
void sal_address_set_display_name(SalAddress *addr, const char *display_name);
|
||||
void sal_address_set_username(SalAddress *addr, const char *username);
|
||||
void sal_address_set_domain(SalAddress *addr, const char *host);
|
||||
void sal_address_set_port(SalAddress *addr, const char *port);
|
||||
void sal_address_set_port_int(SalAddress *uri, int port);
|
||||
void sal_address_clean(SalAddress *addr);
|
||||
char *sal_address_as_string(const SalAddress *u);
|
||||
char *sal_address_as_string_uri_only(const SalAddress *u);
|
||||
void sal_address_destroy(SalAddress *u);
|
||||
void sal_address_set_param(SalAddress *u,const char* name,const char* value);
|
||||
void sal_address_set_transport(SalAddress* addr,SalTransport transport);
|
||||
|
||||
|
||||
Sal * sal_init();
|
||||
void sal_uninit(Sal* sal);
|
||||
void sal_set_user_pointer(Sal *sal, void *user_data);
|
||||
void *sal_get_user_pointer(const Sal *sal);
|
||||
|
||||
|
||||
typedef enum {
|
||||
SalAudio,
|
||||
SalVideo,
|
||||
SalOther
|
||||
} SalStreamType;
|
||||
|
||||
typedef enum{
|
||||
SalProtoUnknown,
|
||||
SalProtoRtpAvp,
|
||||
SalProtoRtpSavp
|
||||
}SalMediaProto;
|
||||
|
||||
typedef enum{
|
||||
SalStreamSendRecv,
|
||||
SalStreamSendOnly,
|
||||
SalStreamRecvOnly,
|
||||
SalStreamInactive
|
||||
}SalStreamDir;
|
||||
|
||||
#define SAL_ENDPOINT_CANDIDATE_MAX 2
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN 64
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_FOUNDATION_LEN 32
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_TYPE_LEN 6
|
||||
|
||||
typedef struct SalIceCandidate {
|
||||
char addr[SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN];
|
||||
char raddr[SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN];
|
||||
char foundation[SAL_MEDIA_DESCRIPTION_MAX_ICE_FOUNDATION_LEN];
|
||||
char type[SAL_MEDIA_DESCRIPTION_MAX_ICE_TYPE_LEN];
|
||||
unsigned int componentID;
|
||||
unsigned int priority;
|
||||
int port;
|
||||
int rport;
|
||||
} SalIceCandidate;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_CANDIDATES 10
|
||||
|
||||
typedef struct SalIceRemoteCandidate {
|
||||
char addr[SAL_MEDIA_DESCRIPTION_MAX_ICE_ADDR_LEN];
|
||||
int port;
|
||||
} SalIceRemoteCandidate;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_REMOTE_CANDIDATES 2
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_UFRAG_LEN 256
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_ICE_PWD_LEN 256
|
||||
|
||||
typedef struct SalSrtpCryptoAlgo {
|
||||
unsigned int tag;
|
||||
enum ortp_srtp_crypto_suite_t algo;
|
||||
/* 41= 40 max(key_length for all algo) + '\0' */
|
||||
char master_key[41];
|
||||
} SalSrtpCryptoAlgo;
|
||||
|
||||
#define SAL_CRYPTO_ALGO_MAX 4
|
||||
|
||||
typedef struct SalStreamDescription{
|
||||
SalMediaProto proto;
|
||||
SalStreamType type;
|
||||
char typeother[32];
|
||||
char rtp_addr[64];
|
||||
char rtcp_addr[64];
|
||||
int rtp_port;
|
||||
int rtcp_port;
|
||||
MSList *payloads; //<list of PayloadType
|
||||
int bandwidth;
|
||||
int ptime;
|
||||
SalStreamDir dir;
|
||||
SalSrtpCryptoAlgo crypto[SAL_CRYPTO_ALGO_MAX];
|
||||
unsigned int crypto_local_tag;
|
||||
int max_rate;
|
||||
SalIceCandidate ice_candidates[SAL_MEDIA_DESCRIPTION_MAX_ICE_CANDIDATES];
|
||||
SalIceRemoteCandidate ice_remote_candidates[SAL_MEDIA_DESCRIPTION_MAX_ICE_REMOTE_CANDIDATES];
|
||||
char ice_ufrag[SAL_MEDIA_DESCRIPTION_MAX_ICE_UFRAG_LEN];
|
||||
char ice_pwd[SAL_MEDIA_DESCRIPTION_MAX_ICE_PWD_LEN];
|
||||
bool_t ice_mismatch;
|
||||
bool_t ice_completed;
|
||||
} SalStreamDescription;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_STREAMS 4
|
||||
|
||||
typedef struct SalMediaDescription{
|
||||
int refcount;
|
||||
char addr[64];
|
||||
char username[64];
|
||||
int n_active_streams;
|
||||
int n_total_streams;
|
||||
int bandwidth;
|
||||
unsigned int session_ver;
|
||||
unsigned int session_id;
|
||||
SalStreamDescription streams[SAL_MEDIA_DESCRIPTION_MAX_STREAMS];
|
||||
char ice_ufrag[SAL_MEDIA_DESCRIPTION_MAX_ICE_UFRAG_LEN];
|
||||
char ice_pwd[SAL_MEDIA_DESCRIPTION_MAX_ICE_PWD_LEN];
|
||||
bool_t ice_lite;
|
||||
bool_t ice_completed;
|
||||
} SalMediaDescription;
|
||||
|
||||
typedef struct SalMessage{
|
||||
const char *from;
|
||||
const char *text;
|
||||
const char *url;
|
||||
const char *message_id;
|
||||
time_t time;
|
||||
}SalMessage;
|
||||
|
||||
#define SAL_MEDIA_DESCRIPTION_MAX_MESSAGE_ATTRIBUTES 5
|
||||
|
||||
SalMediaDescription *sal_media_description_new();
|
||||
void sal_media_description_ref(SalMediaDescription *md);
|
||||
void sal_media_description_unref(SalMediaDescription *md);
|
||||
bool_t sal_media_description_empty(const SalMediaDescription *md);
|
||||
int sal_media_description_equals(const SalMediaDescription *md1, const SalMediaDescription *md2);
|
||||
bool_t sal_media_description_has_dir(const SalMediaDescription *md, SalStreamDir dir);
|
||||
SalStreamDescription *sal_media_description_find_stream(SalMediaDescription *md,
|
||||
SalMediaProto proto, SalStreamType type);
|
||||
void sal_media_description_set_dir(SalMediaDescription *md, SalStreamDir stream_dir);
|
||||
|
||||
/*this structure must be at the first byte of the SalOp structure defined by implementors*/
|
||||
typedef struct SalOpBase{
|
||||
Sal *root;
|
||||
char *route; /*or request-uri for REGISTER*/
|
||||
char *contact;
|
||||
char *from;
|
||||
char *to;
|
||||
char *origin;
|
||||
char *remote_ua;
|
||||
SalMediaDescription *local_media;
|
||||
SalMediaDescription *remote_media;
|
||||
void *user_pointer;
|
||||
char* call_id;
|
||||
char *remote_contact;
|
||||
SalCustomHeader *custom_headers;
|
||||
} SalOpBase;
|
||||
|
||||
|
||||
typedef enum SalError{
|
||||
SalErrorNoResponse,
|
||||
SalErrorProtocol,
|
||||
SalErrorFailure, /* see SalReason for more details */
|
||||
SalErrorUnknown
|
||||
} SalError;
|
||||
|
||||
typedef enum SalReason{
|
||||
SalReasonDeclined,
|
||||
SalReasonBusy,
|
||||
SalReasonRedirect,
|
||||
SalReasonTemporarilyUnavailable,
|
||||
SalReasonNotFound,
|
||||
SalReasonDoNotDisturb,
|
||||
SalReasonMedia,
|
||||
SalReasonForbidden,
|
||||
SalReasonUnknown
|
||||
}SalReason;
|
||||
|
||||
typedef enum SalPresenceStatus{
|
||||
SalPresenceOffline,
|
||||
SalPresenceOnline,
|
||||
SalPresenceBusy,
|
||||
SalPresenceBerightback,
|
||||
SalPresenceAway,
|
||||
SalPresenceOnthephone,
|
||||
SalPresenceOuttolunch,
|
||||
SalPresenceDonotdisturb,
|
||||
SalPresenceMoved,
|
||||
SalPresenceAltService,
|
||||
}SalPresenceStatus;
|
||||
|
||||
typedef enum SalReferStatus{
|
||||
SalReferTrying,
|
||||
SalReferSuccess,
|
||||
SalReferFailed
|
||||
}SalReferStatus;
|
||||
|
||||
typedef enum SalSubscribeStatus{
|
||||
SalSubscribeActive,
|
||||
SalSubscribeTerminated
|
||||
}SalSubscribeStatus;
|
||||
|
||||
typedef enum SalTextDeliveryStatus{
|
||||
SalTextDeliveryInProgress,
|
||||
SalTextDeliveryDone,
|
||||
SalTextDeliveryFailed
|
||||
}SalTextDeliveryStatus;
|
||||
|
||||
typedef void (*SalOnCallReceived)(SalOp *op);
|
||||
typedef void (*SalOnCallRinging)(SalOp *op);
|
||||
typedef void (*SalOnCallAccepted)(SalOp *op);
|
||||
typedef void (*SalOnCallAck)(SalOp *op);
|
||||
typedef void (*SalOnCallUpdating)(SalOp *op);/*< Called when a reINVITE is received*/
|
||||
typedef void (*SalOnCallTerminated)(SalOp *op, const char *from);
|
||||
typedef void (*SalOnCallFailure)(SalOp *op, SalError error, SalReason reason, const char *details, int code);
|
||||
typedef void (*SalOnCallReleased)(SalOp *salop);
|
||||
typedef void (*SalOnAuthRequested)(SalOp *op, const char *realm, const char *username);
|
||||
typedef void (*SalOnAuthSuccess)(SalOp *op, const char *realm, const char *username);
|
||||
typedef void (*SalOnRegisterSuccess)(SalOp *op, bool_t registered);
|
||||
typedef void (*SalOnRegisterFailure)(SalOp *op, SalError error, SalReason reason, const char *details);
|
||||
typedef void (*SalOnVfuRequest)(SalOp *op);
|
||||
typedef void (*SalOnDtmfReceived)(SalOp *op, char dtmf);
|
||||
typedef void (*SalOnRefer)(Sal *sal, SalOp *op, const char *referto);
|
||||
typedef void (*SalOnTextReceived)(SalOp *op, const SalMessage *msg);
|
||||
typedef void (*SalOnTextDeliveryUpdate)(SalOp *op, SalTextDeliveryStatus status);
|
||||
typedef void (*SalOnNotify)(SalOp *op, const char *from, const char *event);
|
||||
typedef void (*SalOnNotifyRefer)(SalOp *op, SalReferStatus state);
|
||||
typedef void (*SalOnNotifyPresence)(SalOp *op, SalSubscribeStatus ss, SalPresenceStatus status, const char *msg);
|
||||
typedef void (*SalOnSubscribeReceived)(SalOp *salop, const char *from);
|
||||
typedef void (*SalOnSubscribeClosed)(SalOp *salop, const char *from);
|
||||
typedef void (*SalOnPingReply)(SalOp *salop);
|
||||
|
||||
typedef struct SalCallbacks{
|
||||
SalOnCallReceived call_received;
|
||||
SalOnCallRinging call_ringing;
|
||||
SalOnCallAccepted call_accepted;
|
||||
SalOnCallAck call_ack;
|
||||
SalOnCallUpdating call_updating;
|
||||
SalOnCallTerminated call_terminated;
|
||||
SalOnCallFailure call_failure;
|
||||
SalOnCallReleased call_released;
|
||||
SalOnAuthRequested auth_requested;
|
||||
SalOnAuthSuccess auth_success;
|
||||
SalOnRegisterSuccess register_success;
|
||||
SalOnRegisterFailure register_failure;
|
||||
SalOnVfuRequest vfu_request;
|
||||
SalOnDtmfReceived dtmf_received;
|
||||
SalOnRefer refer_received;
|
||||
SalOnTextReceived text_received;
|
||||
SalOnTextDeliveryUpdate text_delivery_update;
|
||||
SalOnNotify notify;
|
||||
SalOnNotifyPresence notify_presence;
|
||||
SalOnNotifyRefer notify_refer;
|
||||
SalOnSubscribeReceived subscribe_received;
|
||||
SalOnSubscribeClosed subscribe_closed;
|
||||
SalOnPingReply ping_reply;
|
||||
}SalCallbacks;
|
||||
|
||||
typedef struct SalAuthInfo{
|
||||
char *username;
|
||||
char *userid;
|
||||
char *password;
|
||||
char *realm;
|
||||
}SalAuthInfo;
|
||||
|
||||
SalAuthInfo* sal_auth_info_new();
|
||||
SalAuthInfo* sal_auth_info_clone(const SalAuthInfo* auth_info);
|
||||
void sal_auth_info_delete(const SalAuthInfo* auth_info);
|
||||
|
||||
void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs);
|
||||
int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure);
|
||||
int sal_unlisten_ports(Sal *ctx);
|
||||
void sal_set_dscp(Sal *ctx, int dscp);
|
||||
int sal_reset_transports(Sal *ctx);
|
||||
ortp_socket_t sal_get_socket(Sal *ctx);
|
||||
void sal_set_user_agent(Sal *ctx, const char *user_agent);
|
||||
/*keepalive period in ms*/
|
||||
void sal_set_keepalive_period(Sal *ctx,unsigned int value);
|
||||
void sal_use_tcp_tls_keepalive(Sal *ctx, bool_t enabled);
|
||||
/**
|
||||
* returns keepalive period in ms
|
||||
* 0 desactiaved
|
||||
* */
|
||||
unsigned int sal_get_keepalive_period(Sal *ctx);
|
||||
void sal_use_session_timers(Sal *ctx, int expires);
|
||||
void sal_use_double_registrations(Sal *ctx, bool_t enabled);
|
||||
void sal_expire_old_registration_contacts(Sal *ctx, bool_t enabled);
|
||||
void sal_use_dates(Sal *ctx, bool_t enabled);
|
||||
void sal_reuse_authorization(Sal *ctx, bool_t enabled);
|
||||
void sal_use_one_matching_codec_policy(Sal *ctx, bool_t one_matching_codec);
|
||||
void sal_use_rport(Sal *ctx, bool_t use_rports);
|
||||
void sal_use_101(Sal *ctx, bool_t use_101);
|
||||
void sal_set_root_ca(Sal* ctx, const char* rootCa);
|
||||
const char *sal_get_root_ca(Sal* ctx);
|
||||
void sal_verify_server_certificates(Sal *ctx, bool_t verify);
|
||||
void sal_verify_server_cn(Sal *ctx, bool_t verify);
|
||||
|
||||
int sal_iterate(Sal *sal);
|
||||
MSList * sal_get_pending_auths(Sal *sal);
|
||||
|
||||
/*create an operation */
|
||||
SalOp * sal_op_new(Sal *sal);
|
||||
|
||||
/*generic SalOp API, working for all operations */
|
||||
Sal *sal_op_get_sal(const SalOp *op);
|
||||
void sal_op_set_contact(SalOp *op, const char *contact);
|
||||
void sal_op_set_route(SalOp *op, const char *route);
|
||||
void sal_op_set_from(SalOp *op, const char *from);
|
||||
void sal_op_set_to(SalOp *op, const char *to);
|
||||
void sal_op_release(SalOp *h);
|
||||
void sal_op_authenticate(SalOp *h, const SalAuthInfo *info);
|
||||
void sal_op_cancel_authentication(SalOp *h);
|
||||
void sal_op_set_user_pointer(SalOp *h, void *up);
|
||||
int sal_op_get_auth_requested(SalOp *h, const char **realm, const char **username);
|
||||
const char *sal_op_get_from(const SalOp *op);
|
||||
const char *sal_op_get_to(const SalOp *op);
|
||||
const char *sal_op_get_contact(const SalOp *op);
|
||||
const char *sal_op_get_route(const SalOp *op);
|
||||
const char *sal_op_get_proxy(const SalOp *op);
|
||||
const char *sal_op_get_remote_contact(const SalOp *op);
|
||||
/*for incoming requests, returns the origin of the packet as a sip uri*/
|
||||
const char *sal_op_get_network_origin(const SalOp *op);
|
||||
/*returns far-end "User-Agent" string */
|
||||
const char *sal_op_get_remote_ua(const SalOp *op);
|
||||
void *sal_op_get_user_pointer(const SalOp *op);
|
||||
const char* sal_op_get_call_id(const SalOp *op);
|
||||
|
||||
/*Call API*/
|
||||
int sal_call_set_local_media_description(SalOp *h, SalMediaDescription *desc);
|
||||
int sal_call(SalOp *h, const char *from, const char *to);
|
||||
int sal_call_notify_ringing(SalOp *h, bool_t early_media);
|
||||
/*accept an incoming call or, during a call accept a reINVITE*/
|
||||
int sal_call_accept(SalOp*h);
|
||||
int sal_call_decline(SalOp *h, SalReason reason, const char *redirection /*optional*/);
|
||||
int sal_call_update(SalOp *h, const char *subject);
|
||||
SalMediaDescription * sal_call_get_remote_media_description(SalOp *h);
|
||||
SalMediaDescription * sal_call_get_final_media_description(SalOp *h);
|
||||
int sal_call_refer(SalOp *h, const char *refer_to);
|
||||
int sal_call_refer_with_replaces(SalOp *h, SalOp *other_call_h);
|
||||
int sal_call_accept_refer(SalOp *h);
|
||||
/*informs this call is consecutive to an incoming refer */
|
||||
int sal_call_set_referer(SalOp *h, SalOp *refered_call);
|
||||
/* returns the SalOp of a call that should be replaced by h, if any */
|
||||
SalOp *sal_call_get_replaces(SalOp *h);
|
||||
int sal_call_send_dtmf(SalOp *h, char dtmf);
|
||||
int sal_call_terminate(SalOp *h);
|
||||
bool_t sal_call_autoanswer_asked(SalOp *op);
|
||||
void sal_call_send_vfu_request(SalOp *h);
|
||||
int sal_call_is_offerer(const SalOp *h);
|
||||
int sal_call_notify_refer_state(SalOp *h, SalOp *newcall);
|
||||
|
||||
/*Registration*/
|
||||
int sal_register(SalOp *op, const char *proxy, const char *from, int expires);
|
||||
int sal_register_refresh(SalOp *op, int expires);
|
||||
int sal_unregister(SalOp *h);
|
||||
|
||||
/*Messaging */
|
||||
int sal_text_send(SalOp *op, const char *from, const char *to, const char *text);
|
||||
int sal_message_send(SalOp *op, const char *from, const char *to, const char* content_type, const char *msg);
|
||||
|
||||
/*presence Subscribe/notify*/
|
||||
int sal_subscribe_presence(SalOp *op, const char *from, const char *to);
|
||||
int sal_unsubscribe(SalOp *op);
|
||||
int sal_subscribe_accept(SalOp *op);
|
||||
int sal_subscribe_decline(SalOp *op);
|
||||
int sal_notify_presence(SalOp *op, SalPresenceStatus status, const char *status_message);
|
||||
int sal_notify_close(SalOp *op);
|
||||
|
||||
/*presence publish */
|
||||
int sal_publish(SalOp *op, const char *from, const char *to, SalPresenceStatus status);
|
||||
|
||||
|
||||
/*ping: main purpose is to obtain its own contact address behind firewalls*/
|
||||
int sal_ping(SalOp *op, const char *from, const char *to);
|
||||
|
||||
|
||||
|
||||
#define payload_type_set_number(pt,n) (pt)->user_data=(void*)((long)n);
|
||||
#define payload_type_get_number(pt) ((int)(long)(pt)->user_data)
|
||||
|
||||
/*misc*/
|
||||
void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen);
|
||||
|
||||
struct SalCustomHeader{
|
||||
MSList node;
|
||||
char *header_name;
|
||||
char *header_value;
|
||||
};
|
||||
|
||||
SalCustomHeader *sal_custom_header_append(SalCustomHeader *ch, const char *name, const char *value);
|
||||
const char *sal_custom_header_find(const SalCustomHeader *ch, const char *name);
|
||||
void sal_custom_header_free(SalCustomHeader *ch);
|
||||
SalCustomHeader *sal_custom_header_clone(const SalCustomHeader *ch);
|
||||
const SalCustomHeader *sal_op_get_custom_header(SalOp *op);
|
||||
void sal_op_set_custom_header(SalOp *op, SalCustomHeader* ch);
|
||||
|
||||
|
||||
/*internal API */
|
||||
void __sal_op_init(SalOp *b, Sal *sal);
|
||||
void __sal_op_set_network_origin(SalOp *op, const char *origin /*a sip uri*/);
|
||||
void __sal_op_set_remote_contact(SalOp *op, const char *ct);
|
||||
void __sal_op_free(SalOp *b);
|
||||
|
||||
/*test api*/
|
||||
/*0 for no error*/
|
||||
LINPHONE_PUBLIC void sal_set_send_error(Sal *sal,int value);
|
||||
/*1 for no error*/
|
||||
LINPHONE_PUBLIC void sal_set_recv_error(Sal *sal,int value);
|
||||
/*enable contact fixing*/
|
||||
void sal_nat_helper_enable(Sal *sal,bool_t enable);
|
||||
bool_t sal_nat_helper_enabled(Sal *sal);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue