# Placing and receiving calls

## Typedefs
typedef enum _LinphoneCallState | LinphoneCallState
## Enumerations
enum | _LinphoneCallState { LinphoneCallIdle, LinphoneCallIncomingReceived, LinphoneCallOutgoingInit, LinphoneCallOutgoingProgress, LinphoneCallOutgoingRinging, LinphoneCallOutgoingEarlyMedia, LinphoneCallConnected, LinphoneCallStreamsRunning, LinphoneCallPausing, LinphoneCallPaused, LinphoneCallResuming, LinphoneCallRefered, LinphoneCallError, LinphoneCallEnd, LinphoneCallPausedByRemote, LinphoneCallUpdatedByRemote, LinphoneCallIncomingEarlyMedia, LinphoneCallUpdated, LinphoneCallReleased }
## Functions
void | linphone_call_ref (LinphoneCall *obj)
void | linphone_call_unref (LinphoneCall *obj)
const LinphoneCallParams * | linphone_call_get_current_params (const LinphoneCall *call)
const LinphoneAddress * | linphone_call_get_remote_address (const LinphoneCall *call)
char * | linphone_call_get_remote_address_as_string (const LinphoneCall *call)
LinphoneCallState | linphone_call_get_state (const LinphoneCall *call)
LinphoneReason | linphone_call_get_reason (const LinphoneCall *call)
void * | linphone_call_get_user_pointer (LinphoneCall *call)
void | linphone_call_set_user_pointer (LinphoneCall *call, void *user_pointer)
LinphoneCallLog * | linphone_call_get_call_log (const LinphoneCall *call)
const char * | linphone_call_get_refer_to (const LinphoneCall *call)
LinphoneCallDir | linphone_call_get_dir (const LinphoneCall *call)
const char * | linphone_call_get_remote_user_agent (LinphoneCall *call)
bool_t | linphone_call_has_transfer_pending (const LinphoneCall *call)
int | linphone_call_get_duration (const LinphoneCall *call)
LinphoneCall * | linphone_call_get_replaced_call (LinphoneCall *call)
void | linphone_call_enable_camera (LinphoneCall *call, bool_t enable)
int | linphone_call_take_video_snapshot (LinphoneCall *call, const char *file)
bool_t | linphone_call_camera_enabled (const LinphoneCall *call)
void | linphone_call_params_enable_video (LinphoneCallParams *cp, bool_t enabled)
bool_t | linphone_call_params_video_enabled (const LinphoneCallParams *cp)
void | linphone_call_params_enable_early_media_sending (LinphoneCallParams *cp, bool_t enabled)
void | linphone_call_params_set_audio_bandwidth_limit (LinphoneCallParams *cp, int bandwidth)
LinphoneCall * | linphone_core_invite (LinphoneCore *lc, const char *url)
LinphoneCall * | linphone_core_invite_with_params (LinphoneCore *lc, const char *url, const LinphoneCallParams *p)
LinphoneCall * | linphone_core_invite_address (LinphoneCore *lc, const LinphoneAddress *addr)
LinphoneCall * | linphone_core_invite_address_with_params (LinphoneCore *lc, const LinphoneAddress *addr, const LinphoneCallParams *params)
int | linphone_core_accept_call (LinphoneCore *lc, LinphoneCall *call)
int | linphone_core_terminate_call (LinphoneCore *lc, LinphoneCall *the_call)
int | linphone_core_terminate_all_calls (LinphoneCore *lc)
const MSList * | linphone_core_get_calls (LinphoneCore *lc)
bool_t | linphone_core_in_call (const LinphoneCore *lc)
LinphoneCall * | linphone_core_get_current_call (const LinphoneCore *lc)
int | linphone_core_pause_call (LinphoneCore *lc, LinphoneCall *the_call)
int | linphone_core_resume_call (LinphoneCore *lc, LinphoneCall *the_call)
void | linphone_core_set_inc_timeout (LinphoneCore *lc, int seconds)
int | linphone_core_get_inc_timeout (LinphoneCore *lc)
int | linphone_core_get_calls_nb (const LinphoneCore *lc)
bool_t | linphone_core_can_we_add_call (LinphoneCore *lc)

## Detailed Description

The LinphoneCall object represents an incoming or outgoing call managed by the LinphoneCore. Outgoing calls can be created using linphone_core_invite() or linphone_core_invite_address(), while incoming calls are notified to the application through the LinphoneCoreVTable::call_state_changed callback.

See the basic call tutorial.

## Typedef Documentation

typedef enum _LinphoneCallState LinphoneCallState

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.

## Enumeration Type Documentation

enum _LinphoneCallState

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.

Enumerator:

  LinphoneCallIdle | Initial call state
  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
  LinphoneCallUpdatedByRemote | The call's parameters are updated, used for example when video is asked by remote
  LinphoneCallIncomingEarlyMedia | We are proposing early media to an incoming call
  LinphoneCallUpdated | The remote accepted the call update initiated by us
  LinphoneCallReleased | The call object is no more retained by the core

## Function Documentation

void linphone_call_ref | ( | LinphoneCall * | obj | ) |

Increments the call 's reference count. An application that wishes to retain a pointer to call object must use this function to unsure the pointer remains valid. Once the application no more needs this pointer, it must call linphone_call_unref().

void linphone_call_unref | ( | LinphoneCall * | obj | ) |

Decrements the call object reference count. See linphone_call_ref().

const LinphoneCallParams* linphone_call_get_current_params | ( | const LinphoneCall * | call | ) |

Returns current parameters associated to the call.

const LinphoneAddress* linphone_call_get_remote_address | ( | const LinphoneCall * | call | ) |

Returns the remote address associated to this call

char* linphone_call_get_remote_address_as_string | ( | const LinphoneCall * | call | ) |

Returns the remote address associated to this call as a string.

The result string must be freed by user using ms_free().

LinphoneCallState linphone_call_get_state | ( | const LinphoneCall * | call | ) |

Retrieves the call's current state.

LinphoneReason linphone_call_get_reason | ( | const LinphoneCall * | call | ) |

Returns the reason for a call termination (either error or normal termination)

void* linphone_call_get_user_pointer | ( | LinphoneCall * | call | ) |

Get the user_pointer in the LinphoneCall

return user_pointer an opaque user pointer that can be retrieved at any time

void linphone_call_set_user_pointer | ( | LinphoneCall * | call,
|  | void * | user_pointer |
| ) |  |  |

Set the user_pointer in the LinphoneCall

the user_pointer is an opaque user pointer that can be retrieved at any time in the LinphoneCall

LinphoneCallLog* linphone_call_get_call_log | ( | const LinphoneCall * | call | ) |

Returns the call log associated to this call.

const char* linphone_call_get_refer_to | ( | const LinphoneCall * | call | ) |

Returns the refer-to uri (if the call was transfered).

LinphoneCallDir linphone_call_get_dir | ( | const LinphoneCall * | call | ) |

Returns direction of the call (incoming or outgoing).

const char* linphone_call_get_remote_user_agent | ( | LinphoneCall * | call | ) |

Returns the far end's user agent description string, if available.

bool_t linphone_call_has_transfer_pending | ( | const LinphoneCall * | call | ) |

Returns true if this calls has received a transfer that has not been executed yet. Pending transfers are executed when this call is being paused or closed, locally or by remote endpoint. If the call is already paused while receiving the transfer request, the transfer immediately occurs.

int linphone_call_get_duration | ( | const LinphoneCall * | call | ) |

Returns call's duration in seconds.

LinphoneCall* linphone_call_get_replaced_call | ( | LinphoneCall * | call | ) |

Returns the call object this call is replacing, if any. Call replacement can occur during call transfers. By default, the core automatically terminates the replaced call and accept the new one. This function allows the application to know whether a new incoming call is a one that replaces another one.

void linphone_call_enable_camera | ( | LinphoneCall * | call,
|  | bool_t | enable |
| ) |  |  |

Indicate whether camera input should be sent to remote end.

int linphone_call_take_video_snapshot | ( | LinphoneCall * | call,
|  | const char * | file |
| ) |  |  |

Take a photo of currently received video and write it into a jpeg file.

bool_t linphone_call_camera_enabled | ( | const LinphoneCall * | call | ) |

Returns TRUE if camera pictures are sent to the remote party.

void linphone_call_params_enable_video | ( | LinphoneCallParams * | cp,
|  | bool_t | enabled |
| ) |  |  |

Enable video stream.

bool_t linphone_call_params_video_enabled | ( | const LinphoneCallParams * | cp | ) |

Returns whether video is enabled.

void linphone_call_params_enable_early_media_sending | ( | LinphoneCallParams * | cp,
|  | bool_t | enabled |
| ) |  |  |

Enable sending of real early media (during outgoing calls).

void linphone_call_params_set_audio_bandwidth_limit | ( | LinphoneCallParams * | cp,
|  | int | bandwidth |
| ) |  |  |

Refine bandwidth settings for this call by setting a bandwidth limit for audio streams. As a consequence, codecs whose bitrates are not compatible with this limit won't be used.

LinphoneCall* linphone_core_invite | ( | LinphoneCore * | lc,
|  | const char * | url |
| ) |  |  |

Initiates an outgoing call

Parameters:

  | lc | the LinphoneCore object
  | url | the destination of the call (sip address, or phone number).

The application doesn't own a reference to the returned LinphoneCall object. Use linphone_call_ref() to safely keep the LinphoneCall pointer valid within your application.

Returns:
  a LinphoneCall object or NULL in case of failure

LinphoneCall* linphone_core_invite_with_params | ( | LinphoneCore * | lc,
|  | const char * | url,
|  | const LinphoneCallParams * | p |
| ) |  |  |

Initiates an outgoing call according to supplied call parameters

Parameters:

  | lc | the LinphoneCore object
  | url | the destination of the call (sip address, or phone number).
  | p | call parameters

The application doesn't own a reference to the returned LinphoneCall object. Use linphone_call_ref() to safely keep the LinphoneCall pointer valid within your application.

Returns:
  a LinphoneCall object or NULL in case of failure

LinphoneCall* linphone_core_invite_address | ( | LinphoneCore * | lc,
|  | const LinphoneAddress * | addr |
| ) |  |  |

Initiates an outgoing call given a destination LinphoneAddress

Parameters:

  | lc | the LinphoneCore object
  | addr | the destination of the call (sip address).

The LinphoneAddress can be constructed directly using linphone_address_new(), or created by linphone_core_interpret_url(). The application doesn't own a reference to the returned LinphoneCall object. Use linphone_call_ref() to safely keep the LinphoneCall pointer valid within your application.

Returns:
  a LinphoneCall object or NULL in case of failure

LinphoneCall* linphone_core_invite_address_with_params | ( | LinphoneCore * | lc,
|  | const LinphoneAddress * | addr,
|  | const LinphoneCallParams * | params |
| ) |  |  |

Initiates an outgoing call given a destination LinphoneAddress

Parameters:

  | lc | the LinphoneCore object
  | addr | the destination of the call (sip address).
  | params | call parameters

The LinphoneAddress can be constructed directly using linphone_address_new(), or created by linphone_core_interpret_url(). The application doesn't own a reference to the returned LinphoneCall object. Use linphone_call_ref() to safely keep the LinphoneCall pointer valid within your application.

Returns:
  a LinphoneCall object or NULL in case of failure

int linphone_core_accept_call | ( | LinphoneCore * | lc,
|  | LinphoneCall * | call |
| ) |  |  |

Accept an incoming call.

Basically the application is notified of incoming calls within the call_state_changed callback of the LinphoneCoreVTable structure, where it will receive a LinphoneCallIncoming event with the associated LinphoneCall object. The application can later accept the call using this method.

Parameters:

  | lc | the LinphoneCore object
  | call | the LinphoneCall object representing the call to be answered.

int linphone_core_terminate_call | ( | LinphoneCore * | lc,
|  | LinphoneCall * | the_call |
| ) |  |  |

Terminates a call.

Parameters:

  | lc | the LinphoneCore
  | the_call | the LinphoneCall object representing the call to be terminated.

int linphone_core_terminate_all_calls | ( | LinphoneCore * | lc | ) |

Terminates all the calls.

Parameters:

  | lc | The LinphoneCore

const MSList* linphone_core_get_calls | ( | LinphoneCore * | lc | ) |

Returns the current list of calls.

Note that this list is read-only and might be changed by the core after a function call to linphone_core_iterate(). Similarly the LinphoneCall objects inside it might be destroyed without prior notice. To hold references to LinphoneCall object into your program, you must use linphone_call_ref().

bool_t linphone_core_in_call | ( | const LinphoneCore * | lc | ) |

Returns TRUE if there is a call running.

LinphoneCall* linphone_core_get_current_call | ( | const LinphoneCore * | lc | ) |

Returns The _LinphoneCall struct of the current call if one is in call

int linphone_core_pause_call | ( | LinphoneCore * | lc,
|  | LinphoneCall * | the_call |
| ) |  |  |

Pauses the call. If a music file has been setup using linphone_core_set_play_file(), this file will be played to the remote user.

int linphone_core_resume_call | ( | LinphoneCore * | lc,
|  | LinphoneCall * | the_call |
| ) |  |  |

Resumes the call.

void linphone_core_set_inc_timeout | ( | LinphoneCore * | lc,
|  | int | seconds |
| ) |  |  |

Set the incoming call timeout in seconds.

If an incoming call isn't answered for this timeout period, it is automatically declined.

int linphone_core_get_inc_timeout | ( | LinphoneCore * | lc | ) |

Returns the incoming call timeout

See linphone_core_set_inc_timeout() for details.

int linphone_core_get_calls_nb | ( | const LinphoneCore * | lc | ) |

Get the number of Call

bool_t linphone_core_can_we_add_call | ( | LinphoneCore * | lc | ) |

Check if we do not have exceed the number of simultaneous call