mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-20 20:48:07 +00:00
work in progress in sal. Near to code complete, except for subscribe/notify.
This commit is contained in:
parent
74e0bbb7a3
commit
40e4b5d421
4 changed files with 1044 additions and 32 deletions
|
|
@ -99,9 +99,9 @@ static void initiate_incoming(const SalStreamDescription *local_cap,
|
|||
SalStreamDescription *result){
|
||||
result->payloads=match_payloads(local_cap->payloads,remote_offer->payloads);
|
||||
if (result->payloads && !only_telephone_event(result->payloads)){
|
||||
result->port=remote_offer->port;
|
||||
result->bandwidth=remote_offer->bandwidth;
|
||||
result->ptime=remote_offer->ptime;
|
||||
result->port=local_cap->port;
|
||||
result->bandwidth=local_cap->bandwidth;
|
||||
result->ptime=local_cap->ptime;
|
||||
}else{
|
||||
result->port=0;
|
||||
}
|
||||
|
|
@ -136,7 +136,7 @@ int offer_answer_initiate_incoming(const SalMediaDescription *local_capabilities
|
|||
initiate_incoming(&local_capabilities->streams[i],&remote_offer->streams[i],&result->streams[i]);
|
||||
}
|
||||
result->nstreams=local_capabilities->nstreams;
|
||||
strcpy(result->addr,remote_offer->addr);
|
||||
strcpy(result->addr,local_capabilities->addr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,29 @@ struct SalOp;
|
|||
|
||||
typedef struct SalOp SalOp;
|
||||
|
||||
struct SalAddress;
|
||||
|
||||
typedef struct SalAddress SalAddress;
|
||||
|
||||
/* 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);
|
||||
const char *sal_address_get_username(const SalAddress *addr);
|
||||
const char *sal_address_get_domain(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);
|
||||
|
||||
|
||||
|
||||
|
||||
Sal * sal_init();
|
||||
void sal_uninit(Sal* sal);
|
||||
|
|
@ -92,26 +115,81 @@ typedef struct SalOpBase{
|
|||
|
||||
|
||||
typedef enum SalError{
|
||||
SalErrorNetwork,
|
||||
SalErrorNoResponse,
|
||||
SalErrorMedia,
|
||||
SalErrorAuth,
|
||||
SalErrorForbidden
|
||||
SalErrorFailure, /* see SalReason for more details */
|
||||
SalErrorUnknown
|
||||
} SalError;
|
||||
|
||||
typedef enum SalReason{
|
||||
SalReasonDeclined,
|
||||
SalReasonBusy,
|
||||
SalReasonRedirect,
|
||||
SalReasonTemporarilyUnavailable,
|
||||
SalReasonNotFound,
|
||||
SalReasonDoNotDisturb,
|
||||
SalReasonForbidden,
|
||||
SalReasonUnknown
|
||||
}SalReason;
|
||||
|
||||
typedef enum SalPresenceStatus{
|
||||
SalPresenceOffline,
|
||||
SalPresenceOnline,
|
||||
SalPresenceBusy,
|
||||
SalPresenceBerightback,
|
||||
SalPresenceAway,
|
||||
SalPresenceOnthephone,
|
||||
SalPresenceOuttolunch,
|
||||
SalPresenceDonotdisturb,
|
||||
SalPresenceMoved,
|
||||
SalPresenceAltService,
|
||||
}SalPresenceStatus;
|
||||
|
||||
typedef void (*SalOnCallReceived)(SalOp *op);
|
||||
typedef void (*SalOnCallRinging)(SalOp *op);
|
||||
typedef void (*SalOnCallAccepted)(SalOp *op);
|
||||
typedef void (*SalOnCallAck)(SalOp *op);
|
||||
typedef void (*SalOnCallUpdated)(SalOp *op);
|
||||
typedef void (*SalOnCallTerminated)(SalOp *op);
|
||||
typedef void (*SalOnCallFailure)(SalOp *op, SalError error, const char *details);
|
||||
typedef void (*SalOnCallFailure)(SalOp *op, SalError error, SalReason reason, const char *details);
|
||||
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)(Sal *sal, const char *from, const char *msg);
|
||||
typedef void (*SalOnPresenceChanged)(Sal *sal, const char *from, SalPresenceStatus status);
|
||||
typedef void (*SalOnInternalMsg)(Sal *sal, const char *msg);
|
||||
|
||||
typedef struct SalCallbacks{
|
||||
SalOnCallReceived call_received;
|
||||
SalOnCallRinging call_ringing;
|
||||
SalOnCallAccepted call_accepted;
|
||||
SalOnCallAck call_ack;
|
||||
SalOnCallUpdated call_updated;
|
||||
SalOnCallTerminated call_terminated;
|
||||
SalOnCallFailure call_failure;
|
||||
SalOnAuthRequested auth_requested;
|
||||
SalOnAuthSuccess auth_success;
|
||||
SalOnRegisterSuccess register_success;
|
||||
SalOnRegisterFailure register_failure;
|
||||
SalOnVfuRequest vfu_request;
|
||||
SalOnDtmfReceived dtmf_received;
|
||||
SalOnRefer refer_received;
|
||||
SalOnTextReceived text_received;
|
||||
SalOnPresenceChanged presence_changed;
|
||||
SalOnInternalMsg internal_message;
|
||||
}SalCallbacks;
|
||||
|
||||
typedef struct SalAuthInfo{
|
||||
char *username;
|
||||
char *userid;
|
||||
char *password;
|
||||
char *realm;
|
||||
}SalAuthInfo;
|
||||
|
||||
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);
|
||||
void sal_set_user_agent(Sal *ctx, const char *user_agent);
|
||||
|
|
@ -127,15 +205,21 @@ 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);
|
||||
|
||||
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);
|
||||
|
||||
/*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_accept(SalOp*h);
|
||||
int sal_call_decline(SalOp *h, SalReason reason, const char *redirection /*optional*/);
|
||||
const SalMediaDescription * sal_call_get_final_media_description(SalOp *h);
|
||||
int sal_call_terminate(SalOp *h);
|
||||
|
||||
int sal_register(SalOp *op, const char *from, const char *contact, int expires);
|
||||
int sal_register(SalOp *op, const char *proxy, const char *from, int expires);
|
||||
|
||||
|
||||
#define payload_type_set_number(pt,n) (pt)->user_data=(void*)((long)n);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -165,15 +165,14 @@ static void add_line(sdp_message_t *msg, int lineno, const SalStreamDescription
|
|||
}
|
||||
}
|
||||
|
||||
char *media_description_to_sdp(const SalMediaDescription *desc){
|
||||
sdp_message_t *media_description_to_sdp(const SalMediaDescription *desc){
|
||||
int i;
|
||||
char *tmp;
|
||||
sdp_message_t *msg=create_generic_sdp(desc);
|
||||
for(i=0;i<desc->nstreams;++i){
|
||||
add_line(msg,i,&desc->streams[i]);
|
||||
}
|
||||
sdp_message_to_str(msg,&tmp);
|
||||
return tmp;
|
||||
return msg;
|
||||
}
|
||||
|
||||
static int payload_type_fill_from_rtpmap(PayloadType *pt, const char *rtpmap){
|
||||
|
|
@ -207,17 +206,11 @@ static int payload_type_fill_from_rtpmap(PayloadType *pt, const char *rtpmap){
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sdp_to_media_description(const char *sdp, SalMediaDescription *desc){
|
||||
int sdp_to_media_description(sdp_message_t *msg, SalMediaDescription *desc){
|
||||
int i,j;
|
||||
const char *mtype,*proto,*port,*addr,*number;
|
||||
sdp_message_t *msg;
|
||||
sdp_bandwidth_t *sbw=NULL;
|
||||
sdp_message_init(&msg);
|
||||
if (sdp_message_parse(msg,sdp)!=0){
|
||||
ms_error("Fail to parse sdp message !");
|
||||
sdp_message_free(msg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr=sdp_message_c_addr_get (msg, -1, 0);
|
||||
if (addr)
|
||||
strncpy(desc->addr,addr,sizeof(desc->addr));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue