typedef struct SalAddress SalAddress;
+struct SalCustomHeader;
+
+typedef struct SalCustomHeader SalCustomHeader;
+
typedef enum {
SalTransportUDP, /*UDP*/
SalTransportTCP, /*TCP*/
#define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00
#define SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED 0x01
#define SAL_MEDIA_DESCRIPTION_CODEC_CHANGED 0x02
-#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED | SAL_MEDIA_DESCRIPTION_CODEC_CHANGED)
+#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*);
int refcount;
char addr[64];
char username[64];
- int nstreams;
+ int n_active_streams;
+ int n_total_streams;
int bandwidth;
unsigned int session_ver;
unsigned int session_id;
const char *text;
const char *url;
const char *message_id;
+ time_t time;
}SalMessage;
#define SAL_MEDIA_DESCRIPTION_MAX_MESSAGE_ATTRIBUTES 5
SalMediaDescription *local_media;
SalMediaDescription *remote_media;
void *user_pointer;
- const char* call_id;
+ char* call_id;
+ char *remote_contact;
+ SalCustomHeader *custom_headers;
} SalOpBase;
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 SalMessage *msg);
+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);
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
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);
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 */
-#define payload_type_set_number(pt,n) (pt)->user_data=(void*)((long)n);
+#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