linphonecore.h 43.6 KB
Newer Older
aymeric's avatar
aymeric committed
1 2
/*
linphone
3
Copyright (C) 2000 - 2010 Simon MORLAT (simon.morlat@linphone.org)
aymeric's avatar
aymeric committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

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.
*/
#ifndef LINPHONECORE_H
#define LINPHONECORE_H

#include "ortp/ortp.h"
#include "ortp/payloadtype.h"
#include "mediastreamer2/mscommon.h"
smorlat's avatar
smorlat committed
25
#include "mediastreamer2/msvideo.h"
26 27

#ifdef IN_LINPHONE
smorlat's avatar
smorlat committed
28
#include "sipsetup.h"
29 30 31
#else
#include "linphone/sipsetup.h"
#endif
aymeric's avatar
aymeric committed
32

smorlat's avatar
smorlat committed
33
#define LINPHONE_IPADDR_SIZE 64
smorlat's avatar
smorlat committed
34
#define LINPHONE_HOSTNAME_SIZE 128
smorlat's avatar
smorlat committed
35

aymeric's avatar
aymeric committed
36 37 38 39 40 41
#ifdef __cplusplus
extern "C" {
#endif

struct _MSSndCard;
struct _LinphoneCore;
jehan's avatar
jehan committed
42 43 44 45 46
/**
 * Linphone core main object created by function linphone_core_new() .
 * @ingroup initializing
 */
typedef struct _LinphoneCore LinphoneCore;
47
struct SalOp;
aymeric's avatar
aymeric committed
48 49 50

struct _LpConfig;

51

52 53 54 55 56 57 58 59 60
struct _LCSipTransports{
	int udp_port;
	int tcp_port;
	int dtls_port;
	int tls_port;
};

typedef struct _LCSipTransports LCSipTransports;

smorlat's avatar
smorlat committed
61 62 63 64 65 66 67 68 69 70
/**
 * Object that represents a SIP address.
 *
 * The LinphoneAddress is an opaque object to represents SIP addresses, ie
 * the content of SIP's 'from' and 'to' headers.
 * A SIP address is made of display name, username, domain name, port, and various
 * uri headers (such as tags). It looks like 'Alice <sip:alice@example.net>'.
 * The LinphoneAddress has methods to extract and manipulate all parts of the address.
 * When some part of the address (for example the username) is empty, the accessor methods
 * return NULL.
71
 *
smorlat's avatar
smorlat committed
72 73 74
 * @ingroup linphone_address
 * @var LinphoneAddress
 */
75
typedef struct SalAddress LinphoneAddress;
jehan's avatar
jehan committed
76 77 78 79 80
#ifdef IN_LINPHONE
#include "linphonefriend.h"
#else
#include "linphone/linphonefriend.h"
#endif
81 82 83 84 85 86 87

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);
jehan's avatar
jehan committed
88 89 90 91 92 93 94 95 96
/**
 * Get port number as an integer value.
 *
 */
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);
97 98 99 100 101
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);
void linphone_address_set_port(LinphoneAddress *uri, const char *port);
void linphone_address_set_port_int(LinphoneAddress *uri, int port);
102
/*remove tags, params etc... so that it is displayable to the user*/
103 104 105
void linphone_address_clean(LinphoneAddress *uri);
char *linphone_address_as_string(const LinphoneAddress *u);
char *linphone_address_as_string_uri_only(const LinphoneAddress *u);
106
bool_t linphone_address_weak_equal(const LinphoneAddress *a1, const LinphoneAddress *a2);
107
void linphone_address_destroy(LinphoneAddress *u);
aymeric's avatar
aymeric committed
108

smorlat's avatar
smorlat committed
109
struct _SipSetupContext;
110

aymeric's avatar
aymeric committed
111

smorlat's avatar
smorlat committed
112 113 114 115 116 117 118 119
/**
 * Enum representing the direction of a call.
 * @ingroup call_logs
**/
enum _LinphoneCallDir {
	LinphoneCallOutgoing, /**< outgoing calls*/
	LinphoneCallIncoming  /**< incoming calls*/
};
aymeric's avatar
aymeric committed
120

smorlat's avatar
smorlat committed
121 122 123 124 125
/**
 * Typedef for enum
 * @ingroup call_logs
**/
typedef enum _LinphoneCallDir LinphoneCallDir;
aymeric's avatar
aymeric committed
126

smorlat's avatar
smorlat committed
127 128 129 130
/**
 * Enum representing the status of a call
 * @ingroup call_logs
**/
131
typedef enum _LinphoneCallStatus {
smorlat's avatar
smorlat committed
132 133
	LinphoneCallSuccess, /**< The call was sucessful*/
	LinphoneCallAborted, /**< The call was aborted */
134 135
	LinphoneCallMissed, /**< The call was missed (unanswered)*/
	LinphoneCallDeclined /**< The call was declined, either locally or by remote end*/
aymeric's avatar
aymeric committed
136 137
} LinphoneCallStatus;

smorlat's avatar
smorlat committed
138 139 140 141
/**
 * Structure representing a call log.
 *
 * @ingroup call_logs
142
 *
smorlat's avatar
smorlat committed
143
**/
aymeric's avatar
aymeric committed
144
typedef struct _LinphoneCallLog{
smorlat's avatar
smorlat committed
145 146 147 148 149 150
	LinphoneCallDir dir; /**< The direction of the call*/
	LinphoneCallStatus status; /**< The status of the call*/
	LinphoneAddress *from; /**<Originator of the call as a LinphoneAddress object*/
	LinphoneAddress *to; /**<Destination of the call as a LinphoneAddress object*/
	char start_date[128]; /**<Human readable string containg the start date*/
	int duration; /**<Duration of the call in seconds*/
151
	char *refkey;
smorlat's avatar
smorlat committed
152
	void *user_pointer;
153 154
	rtp_stats_t local_stats;
	rtp_stats_t remote_stats;
155
	float quality;
156
	struct _LinphoneCore *lc;
aymeric's avatar
aymeric committed
157 158
} LinphoneCallLog;

159 160 161 162 163
enum LinphoneMediaEncryption {
	LinphoneMediaEncryptionNone,
	LinphoneMediaEncryptionSRTP,
	LinphoneMediaEncryptionZRTP
};
smorlat's avatar
smorlat committed
164

165
typedef enum LinphoneMediaEncryption LinphoneMediaEncryption;
aymeric's avatar
aymeric committed
166 167

/*public: */
smorlat's avatar
smorlat committed
168 169
void linphone_call_log_set_user_pointer(LinphoneCallLog *cl, void *up);
void *linphone_call_log_get_user_pointer(const LinphoneCallLog *cl);
170 171
void linphone_call_log_set_ref_key(LinphoneCallLog *cl, const char *refkey);
const char *linphone_call_log_get_ref_key(const LinphoneCallLog *cl);
172 173
const rtp_stats_t *linphone_call_log_get_local_stats(const LinphoneCallLog *cl);
const rtp_stats_t *linphone_call_log_get_remote_stats(const LinphoneCallLog *cl);
aymeric's avatar
aymeric committed
174 175
char * linphone_call_log_to_str(LinphoneCallLog *cl);

176

177
/**
Guillaume Beraudo's avatar
Typo  
Guillaume Beraudo committed
178
 * The LinphoneCallParams is an object containing various call related parameters.
179
 * It can be used to retrieve parameters from a currently running call or modify the call's characteristics
180 181 182 183 184
 * dynamically.
**/
struct _LinphoneCallParams;
typedef struct _LinphoneCallParams LinphoneCallParams;

185
LinphoneCallParams * linphone_call_params_copy(const LinphoneCallParams *cp);
186
void linphone_call_params_enable_video(LinphoneCallParams *cp, bool_t enabled);
187
bool_t linphone_call_params_video_enabled(const LinphoneCallParams *cp);
188
enum LinphoneMediaEncryption linphone_call_params_get_media_encryption(LinphoneCallParams *cp);
189
void linphone_call_params_set_media_encryption(LinphoneCallParams *cp, enum LinphoneMediaEncryption e);
190 191
void linphone_call_params_enable_early_media_sending(LinphoneCallParams *cp, bool_t enabled);
bool_t linphone_call_params_early_media_sending_enabled(const LinphoneCallParams *cp);
Simon Morlat's avatar
Simon Morlat committed
192
bool_t linphone_call_params_local_conference_mode(const LinphoneCallParams *cp);
193
void linphone_call_params_set_audio_bandwidth_limit(LinphoneCallParams *cp, int bw);
194 195
void linphone_call_params_destroy(LinphoneCallParams *cp);

Simon Morlat's avatar
Simon Morlat committed
196 197
/**
 * Enum describing failure reasons.
Simon Morlat's avatar
Simon Morlat committed
198
 * @ingroup initializing
Simon Morlat's avatar
Simon Morlat committed
199
**/
200 201 202 203 204
enum _LinphoneReason{
	LinphoneReasonNone,
	LinphoneReasonNoResponse, /**<No response received from remote*/
	LinphoneReasonBadCredentials, /**<Authentication failed due to bad or missing credentials*/
	LinphoneReasonDeclined, /**<The call has been declined*/
Simon Morlat's avatar
Simon Morlat committed
205 206
};

207
typedef enum _LinphoneReason LinphoneReason;
Simon Morlat's avatar
Simon Morlat committed
208

209
const char *linphone_reason_to_string(LinphoneReason err);
Simon Morlat's avatar
Simon Morlat committed
210

211 212 213 214 215 216
/**
 * The LinphoneCall object represents a call issued or received by the LinphoneCore
**/
struct _LinphoneCall;
typedef struct _LinphoneCall LinphoneCall;

Simon Morlat's avatar
Simon Morlat committed
217 218 219 220 221
/**
 * LinphoneCallState enum represents the different state a call can reach into.
 * The application is notified of state changes through the LinphoneCoreVTable::call_state_changed callback.
 * @ingroup call_control
**/
222
typedef enum _LinphoneCallState{
Simon Morlat's avatar
Simon Morlat committed
223
	LinphoneCallIdle,					/**<Initial call state */
224 225 226 227 228 229 230 231 232 233 234 235 236 237
	LinphoneCallIncomingReceived, /**<This is a new incoming call */
	LinphoneCallOutgoingInit, /**<An outgoing call is started */
	LinphoneCallOutgoingProgress, /**<An outgoing call is in progress */
	LinphoneCallOutgoingRinging, /**<An outgoing call is ringing at remote end */
	LinphoneCallOutgoingEarlyMedia, /**<An outgoing call is proposed early media */
	LinphoneCallConnected, /**<Connected, the call is answered */
	LinphoneCallStreamsRunning, /**<The media streams are established and running*/
	LinphoneCallPausing, /**<The call is pausing at the initiative of local end */
	LinphoneCallPaused, /**< The call is paused, remote end has accepted the pause */
	LinphoneCallResuming, /**<The call is being resumed by local end*/
	LinphoneCallRefered, /**<The call is being transfered to another party, resulting in a new outgoing call to follow immediately*/
	LinphoneCallError, /**<The call encountered an error*/
	LinphoneCallEnd, /**<The call ended normally*/
	LinphoneCallPausedByRemote, /**<The call is paused by remote end*/
238
	LinphoneCallUpdatedByRemote, /**<The call's parameters are updated, used for example when video is asked by remote */
239
	LinphoneCallIncomingEarlyMedia, /**<We are proposing early media to an incoming call */
240 241
	LinphoneCallUpdated, /**<The remote accepted the call update initiated by us */
	LinphoneCallReleased /**< The call object is no more retained by the core */
242 243
} LinphoneCallState;

244
const char *linphone_call_state_to_string(LinphoneCallState cs);
245

246
LinphoneCore *linphone_call_get_core(const LinphoneCall *call);
247
LinphoneCallState linphone_call_get_state(const LinphoneCall *call);
248 249 250 251
bool_t linphone_call_asked_to_autoanswer(LinphoneCall *call);
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);
Simon Morlat's avatar
Simon Morlat committed
252
LinphoneCallDir linphone_call_get_dir(const LinphoneCall *call);
253
LinphoneCall * linphone_call_ref(LinphoneCall *call);
254 255
void linphone_call_unref(LinphoneCall *call);
LinphoneCallLog *linphone_call_get_call_log(const LinphoneCall *call);
Simon Morlat's avatar
Simon Morlat committed
256
const char *linphone_call_get_refer_to(const LinphoneCall *call);
257
bool_t linphone_call_has_transfer_pending(const LinphoneCall *call);
258
LinphoneCall *linphone_call_get_replaced_call(LinphoneCall *call);
259
int linphone_call_get_duration(const LinphoneCall *call);
260
const LinphoneCallParams * linphone_call_get_current_params(const LinphoneCall *call);
Simon Morlat's avatar
Simon Morlat committed
261 262
void linphone_call_enable_camera(LinphoneCall *lc, bool_t enabled);
bool_t linphone_call_camera_enabled(const LinphoneCall *lc);
263
int linphone_call_take_video_snapshot(LinphoneCall *call, const char *file);
264
LinphoneReason linphone_call_get_reason(const LinphoneCall *call);
265
const char *linphone_call_get_remote_user_agent(LinphoneCall *call);
Simon Morlat's avatar
Simon Morlat committed
266 267
float linphone_call_get_play_volume(LinphoneCall *call);
float linphone_call_get_record_volume(LinphoneCall *call);
268 269
float linphone_call_get_current_quality(LinphoneCall *call);
float linphone_call_get_average_quality(LinphoneCall *call);
Simon Morlat's avatar
Simon Morlat committed
270 271 272 273
bool_t linphone_call_are_all_streams_encrypted(LinphoneCall *call);
const char* linphone_call_get_authentication_token(LinphoneCall *call);
bool_t linphone_call_get_authentication_token_verified(LinphoneCall *call);
void linphone_call_send_vfu_request(LinphoneCall *call);
Simon Morlat's avatar
Simon Morlat committed
274 275
void *linphone_call_get_user_pointer(LinphoneCall *call);
void linphone_call_set_user_pointer(LinphoneCall *call, void *user_pointer);
jehan's avatar
jehan committed
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
/**
 * Enables or disable echo cancellation for this call
 * @param call
 * @param val
 *
 * @ingroup media_parameters
**/
void linphone_call_enable_echo_cancellation(LinphoneCall *call, bool_t val) ;
/**
 * Returns TRUE if echo cancellation is enabled.
 *
 * @ingroup media_parameters
**/
bool_t linphone_call_echo_cancellation_enabled(LinphoneCall *lc);
/**
 * Enables or disable echo limiter for this call
 * @param call
 * @param val
 *
 * @ingroup media_parameters
**/
void linphone_call_enable_echo_limiter(LinphoneCall *call, bool_t val);
/**
 * Returns TRUE if echo limiter is enabled.
 *
 * @ingroup media_parameters
**/
bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *call);
Simon Morlat's avatar
Simon Morlat committed
304 305 306 307

/*keep this in sync with mediastreamer2/msvolume.h*/
#define LINPHONE_VOLUME_DB_LOWEST (-120) /**< Lowest measured that can be returned.*/

smorlat's avatar
smorlat committed
308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
/**
 * @addtogroup proxies
 * @{
**/
/**
 * The LinphoneProxyConfig object represents a proxy configuration to be used
 * by the LinphoneCore object.
 * Its fields must not be used directly in favour of the accessors methods.
 * Once created and filled properly the LinphoneProxyConfig can be given to
 * LinphoneCore with linphone_core_add_proxy_config().
 * This will automatically triggers the registration, if enabled.
 *
 * The proxy configuration are persistent to restarts because they are saved
 * in the configuration file. As a consequence, after linphone_core_new() there
 * might already be a list of configured proxy that can be examined with
 * linphone_core_get_proxy_config_list().
 *
 * The default proxy (see linphone_core_set_default_proxy() ) is the one of the list
 * that is used by default for calls.
**/
328
typedef struct _LinphoneProxyConfig LinphoneProxyConfig;
aymeric's avatar
aymeric committed
329

330 331 332 333
/**
 * LinphoneRegistrationState describes proxy registration states.
**/
typedef enum _LinphoneRegistrationState{
Simon Morlat's avatar
Simon Morlat committed
334 335 336 337 338
	LinphoneRegistrationNone, /**<Initial state for registrations */
	LinphoneRegistrationProgress, /**<Registration is in progress */
	LinphoneRegistrationOk,	/**< Registration is successful */
	LinphoneRegistrationCleared, /**< Unregistration succeeded */
	LinphoneRegistrationFailed	/**<Registration failed */
339 340
}LinphoneRegistrationState;

jehan's avatar
jehan committed
341 342 343 344
/**
 * Human readable version of the #LinphoneRegistrationState
 * @param cs sate
 */
345 346
const char *linphone_registration_state_to_string(LinphoneRegistrationState cs);

aymeric's avatar
aymeric committed
347 348
LinphoneProxyConfig *linphone_proxy_config_new(void);
int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *obj, const char *server_addr);
349 350
int linphone_proxy_config_set_identity(LinphoneProxyConfig *obj, const char *identity);
int linphone_proxy_config_set_route(LinphoneProxyConfig *obj, const char *route);
Simon Morlat's avatar
Simon Morlat committed
351
void linphone_proxy_config_expires(LinphoneProxyConfig *obj, int expires);
jehan's avatar
jehan committed
352 353 354 355 356 357
/**
 * 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
 */
aymeric's avatar
aymeric committed
358 359 360 361
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);
jehan's avatar
jehan committed
362 363 364 365 366 367 368
/**
 * 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.
 * @param obj object pointer
 * @param val if true, publish will be engaged
 *
 */
aymeric's avatar
aymeric committed
369
void linphone_proxy_config_enable_publish(LinphoneProxyConfig *obj, bool_t val);
370 371 372
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);

373
LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *obj);
smorlat's avatar
smorlat committed
374
bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *obj);
smorlat's avatar
smorlat committed
375
const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg);
376 377 378 379 380 381 382

const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *obj);
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);
int linphone_proxy_config_get_expires(const LinphoneProxyConfig *obj);
bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *obj);
383
void linphone_proxy_config_refresh_register(LinphoneProxyConfig *obj);
384 385
struct _LinphoneCore * linphone_proxy_config_get_core(const LinphoneProxyConfig *obj);

386 387 388
bool_t linphone_proxy_config_get_dial_escape_plus(const LinphoneProxyConfig *cfg);
const char * linphone_proxy_config_get_dial_prefix(const LinphoneProxyConfig *cfg);

389
LinphoneReason linphone_proxy_config_get_error(const LinphoneProxyConfig *cfg);
Simon Morlat's avatar
Simon Morlat committed
390

aymeric's avatar
aymeric committed
391 392
/* destruction is called automatically when removing the proxy config */
void linphone_proxy_config_destroy(LinphoneProxyConfig *cfg);
smorlat's avatar
smorlat committed
393 394
void linphone_proxy_config_set_sip_setup(LinphoneProxyConfig *cfg, const char *type);
SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig *cfg);
395
SipSetup *linphone_proxy_config_get_sip_setup(LinphoneProxyConfig *cfg);
396 397 398 399
/**
 * normalize a human readable phone number into a basic string. 888-444-222 becomes 888444222
 */
int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len);
jehan's avatar
jehan committed
400 401 402 403 404 405 406 407
/*
 *  attached a user data to a proxy config
 */
void linphone_proxy_config_set_user_data(LinphoneProxyConfig *cr, void * ud);
/*
 *  get user data to a proxy config. return null if any
 */
void * linphone_proxy_config_get_user_data(LinphoneProxyConfig *cr);
smorlat's avatar
smorlat committed
408

smorlat's avatar
smorlat committed
409 410 411 412
/**
 * @}
**/

smorlat's avatar
smorlat committed
413 414 415 416 417 418 419 420 421
typedef struct _LinphoneAccountCreator{
	struct _LinphoneCore *lc;
	struct _SipSetupContext *ssctx;
	char *username;
	char *password;
	char *domain;
	bool_t succeeded;
}LinphoneAccountCreator;

422
LinphoneAccountCreator *linphone_account_creator_new(struct _LinphoneCore *core, const char *type);
smorlat's avatar
smorlat committed
423 424 425
void linphone_account_creator_set_username(LinphoneAccountCreator *obj, const char *username);
void linphone_account_creator_set_password(LinphoneAccountCreator *obj, const char *password);
void linphone_account_creator_set_domain(LinphoneAccountCreator *obj, const char *domain);
smorlat's avatar
smorlat committed
426 427
const char * linphone_account_creator_get_username(LinphoneAccountCreator *obj);
const char * linphone_account_creator_get_domain(LinphoneAccountCreator *obj);
428
int linphone_account_creator_test_existence(LinphoneAccountCreator *obj);
smorlat's avatar
smorlat committed
429 430 431
LinphoneProxyConfig * linphone_account_creator_validate(LinphoneAccountCreator *obj);
void linphone_account_creator_destroy(LinphoneAccountCreator *obj);

432 433
struct _LinphoneAuthInfo;

smorlat's avatar
smorlat committed
434 435 436 437 438 439 440 441 442 443 444 445
/**
 * @ingroup authentication
 * Object holding authentication information.
 *
 * @note The object's fields should not be accessed directly. Prefer using
 * the accessor methods.
 *
 * In most case, authentication information consists of a username and password.
 * Sometimes, a userid is required by proxy, and realm can be useful to discriminate
 * different SIP domains.
 *
 * Once created and filled, a LinphoneAuthInfo must be added to the LinphoneCore in
446
 * order to become known and used automatically when needed.
smorlat's avatar
smorlat committed
447 448 449 450 451 452
 * Use linphone_core_add_auth_info() for that purpose.
 *
 * The LinphoneCore object can take the initiative to request authentication information
 * when needed to the application through the auth_info_requested callback of the
 * LinphoneCoreVTable structure.
 *
453 454
 * The application can respond to this information request later using
 * linphone_core_add_auth_info(). This will unblock all pending authentication
smorlat's avatar
smorlat committed
455 456 457
 * transactions and retry them with authentication headers.
 *
**/
458
typedef struct _LinphoneAuthInfo LinphoneAuthInfo;
aymeric's avatar
aymeric committed
459 460 461 462

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);
smorlat's avatar
smorlat committed
463
void linphone_auth_info_set_username(LinphoneAuthInfo *info, const char *username);
464
void linphone_auth_info_set_userid(LinphoneAuthInfo *info, const char *userid);
465 466 467 468 469

const char *linphone_auth_info_get_username(const LinphoneAuthInfo *i);
const char *linphone_auth_info_get_passwd(const LinphoneAuthInfo *i);
const char *linphone_auth_info_get_userid(const LinphoneAuthInfo *i);

aymeric's avatar
aymeric committed
470 471 472 473
/* you don't need those function*/
void linphone_auth_info_destroy(LinphoneAuthInfo *info);
LinphoneAuthInfo * linphone_auth_info_new_from_config_file(struct _LpConfig *config, int pos);

jehan's avatar
jehan committed
474

475
struct _LinphoneChatRoom;
jehan's avatar
jehan committed
476 477 478 479 480 481 482 483
/**
 * @addtogroup chatroom
 * @{
 */
/**
 * A chat room is the place where text messages are exchanged.
 * <br> Can be created by linphone_core_create_chat_room().
 */
aymeric's avatar
aymeric committed
484
typedef struct _LinphoneChatRoom LinphoneChatRoom;
jehan's avatar
jehan committed
485 486 487 488 489 490 491 492 493 494 495 496 497
/**
 * Create a new chat room for messaging from a sip uri like sip:joe@sip.linphone.org
 * @param lc #LinphoneCore object
 * @param to destination address for messages
 * @return #LinphoneChatRoom where messaging can take place.
 */
LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to);
/**
 * Destructor
 * @param cr #LinphoneChatRoom object
 */
void linphone_chat_room_destroy(LinphoneChatRoom *cr);

aymeric's avatar
aymeric committed
498

jehan's avatar
jehan committed
499 500 501 502 503 504 505 506 507 508 509
/**
 * get peer address \link linphone_core_create_chat_room() associated to \endlink this #LinphoneChatRoom
 * @param cr #LinphoneChatRoom object
 * @return #LinphoneAddress peer address
 */
const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr);
/**
 * send a message to peer member of this chat room.
 * @param cr #LinphoneChatRoom object
 * @param msg message to be sent
 */
aymeric's avatar
aymeric committed
510
void linphone_chat_room_send_message(LinphoneChatRoom *cr, const char *msg);
jehan's avatar
jehan committed
511

aymeric's avatar
aymeric committed
512 513 514
void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void * ud);
void * linphone_chat_room_get_user_data(LinphoneChatRoom *cr);

jehan's avatar
jehan committed
515 516 517
/**
 * @}
 */
Simon Morlat's avatar
Simon Morlat committed
518 519 520 521 522 523 524 525 526 527 528


/**
 * @addtogroup initializing
 * @{
**/

/**
 * LinphoneGlobalState describes the global state of the LinphoneCore object.
 * It is notified via the LinphoneCoreVTable::global_state_changed
**/
529 530 531 532 533 534 535
typedef enum _LinphoneGlobalState{
	LinphoneGlobalOff,
	LinphoneGlobalStartup,
	LinphoneGlobalOn,
	LinphoneGlobalShutdown
}LinphoneGlobalState;

536
const char *linphone_global_state_to_string(LinphoneGlobalState gs);
aymeric's avatar
aymeric committed
537

538 539 540 541 542

/**Call state notification callback prototype*/
typedef void (*LinphoneGlobalStateCb)(struct _LinphoneCore *lc, LinphoneGlobalState gstate, const char *message);
/**Call state notification callback prototype*/
typedef void (*LinphoneCallStateCb)(struct _LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *message);
543 544 545
/**Call encryption changed callback prototype*/
typedef void (*CallEncryptionChangedCb)(struct _LinphoneCore *lc, LinphoneCall *call, bool_t on, const char *authentication_token);

jehan's avatar
jehan committed
546 547 548
/** @ingroup Proxies
 * Registration state notification callback prototype
 * */
jehan's avatar
jehan committed
549
typedef void (*LinphoneRegistrationStateCb)(struct _LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState cstate, const char *message);
smorlat's avatar
smorlat committed
550
/** Callback prototype */
aymeric's avatar
aymeric committed
551
typedef void (*ShowInterfaceCb)(struct _LinphoneCore *lc);
smorlat's avatar
smorlat committed
552
/** Callback prototype */
aymeric's avatar
aymeric committed
553
typedef void (*DisplayStatusCb)(struct _LinphoneCore *lc, const char *message);
smorlat's avatar
smorlat committed
554
/** Callback prototype */
aymeric's avatar
aymeric committed
555
typedef void (*DisplayMessageCb)(struct _LinphoneCore *lc, const char *message);
smorlat's avatar
smorlat committed
556
/** Callback prototype */
aymeric's avatar
aymeric committed
557
typedef void (*DisplayUrlCb)(struct _LinphoneCore *lc, const char *message, const char *url);
smorlat's avatar
smorlat committed
558
/** Callback prototype */
aymeric's avatar
aymeric committed
559
typedef void (*LinphoneCoreCbFunc)(struct _LinphoneCore *lc,void * user_data);
smorlat's avatar
smorlat committed
560
/** Callback prototype */
561
typedef void (*NotifyReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call, const char *from, const char *event);
jehan's avatar
jehan committed
562 563 564
/**
 * Report status change for a friend previously \link linphone_core_add_friend() added \endlink to #LinphoneCore.
 * @param lc #LinphoneCore object .
jehan's avatar
jehan committed
565 566 567 568 569 570 571 572 573 574 575 576
 * @param lf Updated #LinphoneFriend .
 */
typedef void (*NotifyPresenceReceivedCb)(struct _LinphoneCore *lc, LinphoneFriend * lf);
/**
 *  Reports that a new subscription request has been received and wait for a decision.
 *  <br> Status on this subscription request is notified by \link linphone_friend_set_inc_subscribe_policy() changing policy \endlink for this friend
 *	@param lc #LinphoneCore object
 *	@param lf #LinphoneFriend corresponding to the subscriber
 *	@param url of the subscriber
 *  Callback prototype
 *  */
typedef void (*NewSubscribtionRequestCb)(struct _LinphoneCore *lc, LinphoneFriend *lf, const char *url);
smorlat's avatar
smorlat committed
577
/** Callback prototype */
aymeric's avatar
aymeric committed
578
typedef void (*AuthInfoRequested)(struct _LinphoneCore *lc, const char *realm, const char *username);
smorlat's avatar
smorlat committed
579
/** Callback prototype */
aymeric's avatar
aymeric committed
580
typedef void (*CallLogUpdated)(struct _LinphoneCore *lc, struct _LinphoneCallLog *newcl);
jehan's avatar
jehan committed
581 582 583 584 585 586 587 588 589
/**
 * Callback prototype
 *
 * @param lc #LinphoneCore object
 * @param room #LinphoneChatRoom involved in this conversation. Can be be created by the framework in case \link #LinphoneAddress the from \endlink is not present in any chat room.
 * @param from #LinphoneAddress from
 * @param message incoming message
 *  */
typedef void (*TextMessageReceived)(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message);
smorlat's avatar
smorlat committed
590
/** Callback prototype */
591
typedef void (*DtmfReceived)(struct _LinphoneCore* lc, LinphoneCall *call, int dtmf);
smorlat's avatar
smorlat committed
592
/** Callback prototype */
593
typedef void (*ReferReceived)(struct _LinphoneCore *lc, const char *refer_to);
smorlat's avatar
smorlat committed
594
/** Callback prototype */
595
typedef void (*BuddyInfoUpdated)(struct _LinphoneCore *lc, LinphoneFriend *lf);
aymeric's avatar
aymeric committed
596

smorlat's avatar
smorlat committed
597 598
/**
 * This structure holds all callbacks that the application should implement.
599
 *  None is mandatory.
smorlat's avatar
smorlat committed
600
**/
601 602 603 604
typedef struct _LinphoneVTable{
	LinphoneGlobalStateCb global_state_changed; /**<Notifies globlal state changes*/
	LinphoneRegistrationStateCb registration_state_changed;/**<Notifies registration state changes*/
	LinphoneCallStateCb call_state_changed;/**<Notifies call state changes*/
605
	NotifyPresenceReceivedCb notify_presence_recv; /**< Notify received presence events*/
jehan's avatar
jehan committed
606
	NewSubscribtionRequestCb new_subscription_request; /**< Notify about pending subscription request */
smorlat's avatar
smorlat committed
607 608 609 610
	AuthInfoRequested auth_info_requested; /**< Ask the application some authentication information */
	CallLogUpdated call_log_updated; /**< Notifies that call log list has been updated */
	TextMessageReceived text_received; /**< A text message has been received */
	DtmfReceived dtmf_received; /**< A dtmf has been received received */
Simon Morlat's avatar
Simon Morlat committed
611
	ReferReceived refer_received; /**< An out of call refer was received */
smorlat's avatar
smorlat committed
612
	BuddyInfoUpdated buddy_info_updated; /**< a LinphoneFriend's BuddyInfo has changed*/
613
	NotifyReceivedCb notify_recv; /**< Other notifications*/
Simon Morlat's avatar
Simon Morlat committed
614 615 616 617 618
	DisplayStatusCb display_status; /**< Callback that notifies various events with human readable text.*/
	DisplayMessageCb display_message;/**< Callback to display a message to the user */
	DisplayMessageCb display_warning;/** Callback to display a warning to the user */
	DisplayUrlCb display_url;
	ShowInterfaceCb show; /**< Notifies the application that it should show up*/
619
	CallEncryptionChangedCb call_encryption_changed; /**<Notifies on change in the encryption of call streams */
aymeric's avatar
aymeric committed
620 621
} LinphoneCoreVTable;

smorlat's avatar
smorlat committed
622 623 624 625
/**
 * @}
**/

aymeric's avatar
aymeric committed
626 627 628 629 630 631 632 633 634
typedef struct _LCCallbackObj
{
  LinphoneCoreCbFunc _func;
  void * _user_data;
}LCCallbackObj;



typedef enum _LinphoneFirewallPolicy{
635 636 637
	LinphonePolicyNoFirewall,
	LinphonePolicyUseNatAddress,
	LinphonePolicyUseStun
aymeric's avatar
aymeric committed
638 639
} LinphoneFirewallPolicy;

smorlat's avatar
smorlat committed
640 641 642 643 644 645
typedef enum _LinphoneWaitingState{
	LinphoneWaitingStart,
	LinphoneWaitingProgress,
	LinphoneWaitingFinished
} LinphoneWaitingState;
typedef void * (*LinphoneWaitingCallback)(struct _LinphoneCore *lc, void *context, LinphoneWaitingState ws, const char *purpose, float progress);
jehan's avatar
jehan committed
646

aymeric's avatar
aymeric committed
647 648 649 650 651 652

/* THE main API */

void linphone_core_enable_logs(FILE *file);
void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc);
void linphone_core_disable_logs(void);
smorlat's avatar
smorlat committed
653 654
/*sets the user-agent string in sip messages, must be set before linphone_core_new() or linphone_core_init() */
void linphone_core_set_user_agent(const char *ua_name, const char *version);
aymeric's avatar
aymeric committed
655 656 657
const char *linphone_core_get_version(void);

LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable,
658
						const char *config_path, const char *factory_config, void* userdata);
aymeric's avatar
aymeric committed
659 660 661 662

/* function to be periodically called in a main loop */
void linphone_core_iterate(LinphoneCore *lc);

663 664
LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url);

665
LinphoneCall * linphone_core_invite(LinphoneCore *lc, const char *url);
aymeric's avatar
aymeric committed
666

667
LinphoneCall * linphone_core_invite_address(LinphoneCore *lc, const LinphoneAddress *addr);
668

669 670 671 672
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);

673
int linphone_core_transfer_call(LinphoneCore *lc, LinphoneCall *call, const char *refer_to);
aymeric's avatar
aymeric committed
674

675 676
int linphone_core_transfer_call_to_another(LinphoneCore *lc, LinphoneCall *call, LinphoneCall *dest);

aymeric's avatar
aymeric committed
677 678 679 680
bool_t linphone_core_inc_invite_pending(LinphoneCore*lc);

bool_t linphone_core_in_call(const LinphoneCore *lc);

681
LinphoneCall *linphone_core_get_current_call(const LinphoneCore *lc);
682

683 684 685
int linphone_core_accept_call(LinphoneCore *lc, LinphoneCall *call);

int linphone_core_terminate_call(LinphoneCore *lc, LinphoneCall *call);
686

687 688
int linphone_core_redirect_call(LinphoneCore *lc, LinphoneCall *call, const char *redirect_uri);

689
int linphone_core_terminate_all_calls(LinphoneCore *lc);
aymeric's avatar
aymeric committed
690

691 692
int linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call);

Simon Morlat's avatar
Simon Morlat committed
693 694
int linphone_core_pause_all_calls(LinphoneCore *lc);

695
int linphone_core_resume_call(LinphoneCore *lc, LinphoneCall *call);
aymeric's avatar
aymeric committed
696

697
int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params);
698 699 700

LinphoneCallParams *linphone_core_create_default_call_parameters(LinphoneCore *lc);

701
LinphoneCall *linphone_core_get_call_by_remote_address(LinphoneCore *lc, const char *remote_address);
aymeric's avatar
aymeric committed
702 703 704 705 706 707 708

void linphone_core_send_dtmf(LinphoneCore *lc,char dtmf);

int linphone_core_set_primary_contact(LinphoneCore *lc, const char *contact);

const char *linphone_core_get_primary_contact(LinphoneCore *lc);

709 710
const char * linphone_core_get_identity(LinphoneCore *lc);

aymeric's avatar
aymeric committed
711 712 713 714 715 716
void linphone_core_set_guess_hostname(LinphoneCore *lc, bool_t val);
bool_t linphone_core_get_guess_hostname(LinphoneCore *lc);

bool_t linphone_core_ipv6_enabled(LinphoneCore *lc);
void linphone_core_enable_ipv6(LinphoneCore *lc, bool_t val);

717
LinphoneAddress *linphone_core_get_primary_contact_parsed(LinphoneCore *lc);
jehan's avatar
jehan committed
718
const char * linphone_core_get_identity(LinphoneCore *lc);
aymeric's avatar
aymeric committed
719 720 721 722 723 724
/*0= no bandwidth limit*/
void linphone_core_set_download_bandwidth(LinphoneCore *lc, int bw);
void linphone_core_set_upload_bandwidth(LinphoneCore *lc, int bw);

int linphone_core_get_download_bandwidth(const LinphoneCore *lc);
int linphone_core_get_upload_bandwidth(const LinphoneCore *lc);
725 726 727

void linphone_core_enable_adaptive_rate_control(LinphoneCore *lc, bool_t enabled);
bool_t linphone_core_adaptive_rate_control_enabled(const LinphoneCore *lc);
jehan's avatar
jehan committed
728
/**
729
 * set audio packetization time linphone expect to receive from peer
jehan's avatar
jehan committed
730 731 732 733 734
 * @ingroup media_parameters
 *
 */
void linphone_core_set_download_ptime(LinphoneCore *lc, int ptime);
/**
735
 * get audio packetization time linphone expect to receive from peer, 0 means unspecified
jehan's avatar
jehan committed
736 737 738
 * @ingroup media_parameters
 */
int  linphone_core_get_download_ptime(LinphoneCore *lc);
aymeric's avatar
aymeric committed
739

Simon Morlat's avatar
Simon Morlat committed
740 741 742 743
void linphone_core_set_upload_ptime(LinphoneCore *lc, int ptime);

int linphone_core_get_upload_ptime(LinphoneCore *lc);

aymeric's avatar
aymeric committed
744 745 746 747 748 749 750 751 752
/* returns a MSList of PayloadType */
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 */
const MSList *linphone_core_get_video_codecs(const LinphoneCore *lc);

int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs);

753 754 755 756
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, PayloadType *pt);

int linphone_core_enable_payload_type(LinphoneCore *lc, PayloadType *pt, bool_t enable);

jehan's avatar
jehan committed
757 758
PayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const char* type, int rate) ;

759 760
const char *linphone_core_get_payload_type_description(LinphoneCore *lc, PayloadType *pt);

aymeric's avatar
aymeric committed
761 762 763 764
bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, PayloadType *pt);

int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config);

smorlat's avatar
smorlat committed
765 766
void linphone_core_clear_proxy_config(LinphoneCore *lc);

aymeric's avatar
aymeric committed
767 768 769 770 771 772 773 774 775 776
void linphone_core_remove_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config);

const MSList *linphone_core_get_proxy_config_list(const LinphoneCore *lc);

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);

777
void linphone_core_add_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *info);
aymeric's avatar
aymeric committed
778

779
void linphone_core_remove_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *info);
aymeric's avatar
aymeric committed
780

smorlat's avatar
smorlat committed
781 782
const MSList *linphone_core_get_auth_info_list(const LinphoneCore *lc);

783
const LinphoneAuthInfo *linphone_core_find_auth_info(LinphoneCore *lc, const char *realm, const char *username);
smorlat's avatar
smorlat committed
784

aymeric's avatar
aymeric committed
785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808
void linphone_core_abort_authentication(LinphoneCore *lc,  LinphoneAuthInfo *info);

void linphone_core_clear_all_auth_info(LinphoneCore *lc);

int linphone_core_get_audio_jittcomp(LinphoneCore *lc);

void linphone_core_set_audio_jittcomp(LinphoneCore *lc, int value);

int linphone_core_get_audio_port(const LinphoneCore *lc);

int linphone_core_get_video_port(const LinphoneCore *lc);

int linphone_core_get_nortp_timeout(const LinphoneCore *lc);

void linphone_core_set_audio_port(LinphoneCore *lc, int port);

void linphone_core_set_video_port(LinphoneCore *lc, int port);

void linphone_core_set_nortp_timeout(LinphoneCore *lc, int port);

void linphone_core_set_use_info_for_dtmf(LinphoneCore *lc, bool_t use_info);

bool_t linphone_core_get_use_info_for_dtmf(LinphoneCore *lc);

809 810 811 812
void linphone_core_set_use_rfc2833_for_dtmf(LinphoneCore *lc,bool_t use_rfc2833);

bool_t linphone_core_get_use_rfc2833_for_dtmf(LinphoneCore *lc);

813 814
void linphone_core_set_sip_port(LinphoneCore *lc, int port);

aymeric's avatar
aymeric committed
815 816
int linphone_core_get_sip_port(LinphoneCore *lc);

817 818 819
int linphone_core_set_sip_transports(LinphoneCore *lc, const LCSipTransports *transports);

int linphone_core_get_sip_transports(LinphoneCore *lc, LCSipTransports *transports);
jehan's avatar
jehan committed
820 821 822 823 824 825
/**
 * @ingroup IOS
 * Give access to the UDP sip socket. Can be useful to configure this socket as persistent I.E kCFStreamNetworkServiceType set to kCFStreamNetworkServiceTypeVoIP)
 * @param lc #LinphoneCore
 * @return socket file descriptor
 */
826 827
ortp_socket_t linphone_core_get_sip_socket(LinphoneCore *lc);

aymeric's avatar
aymeric committed
828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848
void linphone_core_set_inc_timeout(LinphoneCore *lc, int seconds);

int linphone_core_get_inc_timeout(LinphoneCore *lc);

void linphone_core_set_stun_server(LinphoneCore *lc, const char *server);

const char * linphone_core_get_stun_server(const LinphoneCore *lc);

void linphone_core_set_nat_address(LinphoneCore *lc, const char *addr);

const char *linphone_core_get_nat_address(const LinphoneCore *lc);

void linphone_core_set_firewall_policy(LinphoneCore *lc, LinphoneFirewallPolicy pol);

LinphoneFirewallPolicy linphone_core_get_firewall_policy(const LinphoneCore *lc);

const char * linphone_core_get_relay_addr(const LinphoneCore *lc);

int linphone_core_set_relay_addr(LinphoneCore *lc, const char *addr);

/* sound functions */
849
/* returns a null terminated static array of string describing the sound devices */
aymeric's avatar
aymeric committed
850
const char**  linphone_core_get_sound_devices(LinphoneCore *lc);
smorlat's avatar
smorlat committed
851 852
bool_t linphone_core_sound_device_can_capture(LinphoneCore *lc, const char *device);
bool_t linphone_core_sound_device_can_playback(LinphoneCore *lc, const char *device);
aymeric's avatar
aymeric committed
853 854 855 856 857
int linphone_core_get_ring_level(LinphoneCore *lc);
int linphone_core_get_play_level(LinphoneCore *lc);
int linphone_core_get_rec_level(LinphoneCore *lc);
void linphone_core_set_ring_level(LinphoneCore *lc, int level);
void linphone_core_set_play_level(LinphoneCore *lc, int level);
858 859 860 861

void linphone_core_set_playback_gain_db(LinphoneCore *lc, float level);

float linphone_core_get_playback_gain_db(LinphoneCore *lc);
aymeric's avatar
aymeric committed
862 863 864 865 866 867 868 869 870 871
void linphone_core_set_rec_level(LinphoneCore *lc, int level);
const char * linphone_core_get_ringer_device(LinphoneCore *lc);
const char * linphone_core_get_playback_device(LinphoneCore *lc);
const char * linphone_core_get_capture_device(LinphoneCore *lc);
int linphone_core_set_ringer_device(LinphoneCore *lc, const char * devid);
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);
872
const char *linphone_core_get_ring(const LinphoneCore *lc);
873
void linphone_core_set_root_ca(LinphoneCore *lc, const char *path);
874 875
void linphone_core_set_ringback(LinphoneCore *lc, const char *path);
const char * linphone_core_get_ringback(const LinphoneCore *lc);
876

877 878
void linphone_core_set_remote_ringback_tone(LinphoneCore *lc,const char *);
const char *linphone_core_get_remote_ringback_tone(const LinphoneCore *lc);
879

aymeric's avatar
aymeric committed
880
int linphone_core_preview_ring(LinphoneCore *lc, const char *ring,LinphoneCoreCbFunc func,void * userdata);
881 882
void linphone_core_enable_echo_cancellation(LinphoneCore *lc, bool_t val);
bool_t linphone_core_echo_cancellation_enabled(LinphoneCore *lc);
aymeric's avatar
aymeric committed
883

smorlat's avatar
smorlat committed
884 885 886
void linphone_core_enable_echo_limiter(LinphoneCore *lc, bool_t val);
bool_t linphone_core_echo_limiter_enabled(const LinphoneCore *lc);

887 888 889
void linphone_core_enable_agc(LinphoneCore *lc, bool_t val);
bool_t linphone_core_agc_enabled(const LinphoneCore *lc);

smorlat's avatar
smorlat committed
890
void linphone_core_mute_mic(LinphoneCore *lc, bool_t muted);
jehan's avatar
jehan committed
891 892 893 894 895 896
/**
 * return mic state.
 *
 * @ingroup media_parameters
**/
bool_t linphone_core_is_mic_muted(LinphoneCore *lc);
smorlat's avatar
smorlat committed
897

Simon Morlat's avatar
Simon Morlat committed
898 899 900 901 902 903
bool_t linphone_core_is_audio_muted(LinphoneCore *lc);
bool_t linphone_core_is_rtp_muted(LinphoneCore *lc);

bool_t linphone_core_get_rtp_no_xmit_on_audio_mute(const LinphoneCore *lc);
void linphone_core_set_rtp_no_xmit_on_audio_mute(LinphoneCore *lc, bool_t val);

aymeric's avatar
aymeric committed
904 905

/* returns a list of LinphoneCallLog */
smorlat's avatar
smorlat committed
906
const MSList * linphone_core_get_call_logs(LinphoneCore *lc);
907
void linphone_core_clear_call_logs(LinphoneCore *lc);
aymeric's avatar
aymeric committed
908 909 910 911 912

/* video support */
void linphone_core_enable_video(LinphoneCore *lc, bool_t vcap_enabled, bool_t display_enabled);
bool_t linphone_core_video_enabled(LinphoneCore *lc);

smorlat's avatar
smorlat committed
913 914 915 916 917 918 919 920 921
typedef struct MSVideoSizeDef{
	MSVideoSize vsize;
	const char *name;
}MSVideoSizeDef;
/* returns a zero terminated table of MSVideoSizeDef*/
const MSVideoSizeDef *linphone_core_get_supported_video_sizes(LinphoneCore *lc);
void linphone_core_set_preferred_video_size(LinphoneCore *lc, MSVideoSize vsize);
MSVideoSize linphone_core_get_preferred_video_size(LinphoneCore *lc);
void linphone_core_set_preferred_video_size_by_name(LinphoneCore *lc, const char *name);
aymeric's avatar
aymeric committed
922 923 924 925

void linphone_core_enable_video_preview(LinphoneCore *lc, bool_t val);
bool_t linphone_core_video_preview_enabled(const LinphoneCore *lc);

smorlat's avatar
smorlat committed
926 927
void linphone_core_enable_self_view(LinphoneCore *lc, bool_t val);
bool_t linphone_core_self_view_enabled(const LinphoneCore *lc);
aymeric's avatar
aymeric committed
928 929


930
/* returns a null terminated static array of string describing the webcams */
aymeric's avatar
aymeric committed
931 932 933 934
const char**  linphone_core_get_video_devices(const LinphoneCore *lc);
int linphone_core_set_video_device(LinphoneCore *lc, const char *id);
const char *linphone_core_get_video_device(const LinphoneCore *lc);

935 936 937
/* Set static picture to be used when "Static picture" is the video device */
int linphone_core_set_static_picture(LinphoneCore *lc, const char *path);

938 939 940 941
/* Set and get frame rate for static picture */
int linphone_core_set_static_picture_fps(LinphoneCore *lc, float fps);
float linphone_core_get_static_picture_fps(LinphoneCore *lc);

942 943
/*function to be used for eventually setting window decorations (icons, title...)*/
unsigned long linphone_core_get_native_video_window_id(const LinphoneCore *lc);
944
void linphone_core_set_native_video_window_id(LinphoneCore *lc, unsigned long id);
smorlat's avatar
smorlat committed
945

946 947 948 949
unsigned long linphone_core_get_native_preview_window_id(const LinphoneCore *lc);
void linphone_core_set_native_preview_window_id(LinphoneCore *lc, unsigned long id);

void linphone_core_use_preview_window(LinphoneCore *lc, bool_t yesno);
950
void linphone_core_set_device_rotation(LinphoneCore *lc, int rotation);
smorlat's avatar
smorlat committed
951 952 953 954 955 956

/*play/record support: use files instead of soundcard*/
void linphone_core_use_files(LinphoneCore *lc, bool_t yesno);
void linphone_core_set_play_file(LinphoneCore *lc, const char *file);
void linphone_core_set_record_file(LinphoneCore *lc, const char *file);

Guillaume Beraudo's avatar
Guillaume Beraudo committed
957
void linphone_core_play_dtmf(LinphoneCore *lc, char dtmf, int duration_ms);
958 959
void linphone_core_stop_dtmf(LinphoneCore *lc);

smorlat's avatar
smorlat committed
960
int linphone_core_get_current_call_duration(const LinphoneCore *lc);
jehan's avatar
jehan committed
961

smorlat's avatar
smorlat committed
962

aymeric's avatar
aymeric committed
963 964
int linphone_core_get_mtu(const LinphoneCore *lc);
void linphone_core_set_mtu(LinphoneCore *lc, int mtu);
jehan's avatar
jehan committed
965

966
/**
jehan's avatar
jehan committed
967
 * @ingroup network_parameters
968 969
 * This method is called by the application to notify the linphone core library when network is reachable.
 * Calling this method with true trigger linphone to initiate a registration process for all proxy
jehan's avatar
jehan committed
970 971
 * configuration with parameter register set to enable.
 * This method disable the automatic registration mode. It means you must call this method after each network state changes
972 973 974
 *
 */
void linphone_core_set_network_reachable(LinphoneCore* lc,bool_t value);
975
/**
jehan's avatar
jehan committed
976
 * @ingroup network_parameters
977 978 979
 * return network state either as positioned by the application or by linphone
 */
bool_t linphone_core_is_network_reachabled(LinphoneCore* lc);
980

jehan's avatar
jehan committed
981
/**
jehan's avatar
jehan committed
982
 *  @ingroup network_parameters
jehan's avatar
jehan committed
983 984 985 986
 *  enable signaling keep alive. small udp packet sent periodically to keep udp NAT association
 */
void linphone_core_enable_keep_alive(LinphoneCore* lc,bool_t enable);
/**
jehan's avatar
jehan committed
987
 *  @ingroup network_parameters
jehan's avatar
jehan committed
988 989 990
 * Is signaling keep alive
 */
bool_t linphone_core_keep_alive_enabled(LinphoneCore* lc);
aymeric's avatar
aymeric committed
991 992 993 994 995 996 997

void *linphone_core_get_user_data(LinphoneCore *lc);

/* returns LpConfig object to read/write to the config file: usefull if you wish to extend
the config file with your own sections */
struct _LpConfig *linphone_core_get_config(LinphoneCore *lc);

smorlat's avatar
smorlat committed
998
/*set a callback for some blocking operations, it takes you informed of the progress of the operation*/
999
void linphone_core_set_waiting_callback(LinphoneCore *lc, LinphoneWaitingCallback cb, void *user_context);
smorlat's avatar
smorlat committed
1000

smorlat's avatar
smorlat committed
1001 1002 1003
/*returns the list of registered SipSetup (linphonecore plugins) */
const MSList * linphone_core_get_sip_setups(LinphoneCore *lc);

aymeric's avatar