|
switch_status_t | switch_rtp_add_crypto_key (switch_rtp_t *rtp_session, switch_rtp_crypto_direction_t direction, uint32_t index, switch_secure_settings_t *ssec) |
|
void | switch_rtp_get_random (void *buf, uint32_t len) |
|
void | switch_rtp_init (switch_memory_pool_t *pool) |
| Initilize the RTP System. More...
|
|
void | switch_rtp_shutdown (void) |
|
switch_port_t | switch_rtp_set_start_port (switch_port_t port) |
| Set/Get RTP start port. More...
|
|
switch_status_t | switch_rtp_set_ssrc (switch_rtp_t *rtp_session, uint32_t ssrc) |
|
switch_status_t | switch_rtp_set_remote_ssrc (switch_rtp_t *rtp_session, uint32_t ssrc) |
|
switch_port_t | switch_rtp_set_end_port (switch_port_t port) |
| Set/Get RTP end port. More...
|
|
switch_port_t | switch_rtp_request_port (const char *ip) |
| Request a new port to be used for media. More...
|
|
void | switch_rtp_release_port (const char *ip, switch_port_t port) |
|
switch_status_t | switch_rtp_set_interval (switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval) |
|
switch_status_t | switch_rtp_change_interval (switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval) |
|
switch_status_t | switch_rtp_create (switch_rtp_t **new_rtp_session, switch_payload_t payload, uint32_t samples_per_interval, uint32_t ms_per_packet, switch_rtp_flag_t flags[SWITCH_RTP_FLAG_INVALID], char *timer_name, const char **err, switch_memory_pool_t *pool) |
| create a new RTP session handle More...
|
|
switch_rtp_t * | switch_rtp_new (const char *rx_host, switch_port_t rx_port, const char *tx_host, switch_port_t tx_port, switch_payload_t payload, uint32_t samples_per_interval, uint32_t ms_per_packet, switch_rtp_flag_t flags[SWITCH_RTP_FLAG_INVALID], char *timer_name, const char **err, switch_memory_pool_t *pool, switch_port_t bundle_internal_ports, switch_port_t bundle_external_port) |
| prepare a new RTP session handle and fully initilize it More...
|
|
switch_status_t | switch_rtp_set_remote_address (switch_rtp_t *rtp_session, const char *host, switch_port_t port, switch_port_t remote_rtcp_port, switch_bool_t change_adv_addr, const char **err) |
| Assign a remote address to the RTP session. More...
|
|
void | switch_rtp_reset_jb (switch_rtp_t *rtp_session) |
|
char * | switch_rtp_get_remote_host (switch_rtp_t *rtp_session) |
|
switch_port_t | switch_rtp_get_remote_port (switch_rtp_t *rtp_session) |
|
void | switch_rtp_reset_media_timer (switch_rtp_t *rtp_session) |
|
void | switch_rtp_set_max_missed_packets (switch_rtp_t *rtp_session, uint32_t max) |
|
void | switch_rtp_set_media_timeout (switch_rtp_t *rtp_session, uint32_t ms) |
|
switch_status_t | switch_rtp_udptl_mode (switch_rtp_t *rtp_session) |
|
void | switch_rtp_reset (switch_rtp_t *rtp_session) |
|
switch_status_t | switch_rtp_set_local_address (switch_rtp_t *rtp_session, const char *host, switch_port_t port, const char **err) |
| Assign a local address to the RTP session. More...
|
|
void | switch_rtp_kill_socket (switch_rtp_t *rtp_session) |
| Kill the socket on an existing RTP session. More...
|
|
void | switch_rtp_break (switch_rtp_t *rtp_session) |
|
void | switch_rtp_flush (switch_rtp_t *rtp_session) |
|
uint8_t | switch_rtp_ready (switch_rtp_t *rtp_session) |
| Test if an RTP session is ready. More...
|
|
void | switch_rtp_destroy (switch_rtp_t **rtp_session) |
| Destroy an RTP session. More...
|
|
switch_status_t | switch_rtp_sync_stats (switch_rtp_t *rtp_session) |
|
switch_status_t | switch_rtp_activate_ice (switch_rtp_t *rtp_session, char *login, char *rlogin, const char *password, const char *rpassword, ice_proto_t proto, switch_core_media_ice_type_t type, ice_t *ice_params) |
| Acvite ICE on an RTP session. More...
|
|
switch_status_t | switch_rtp_activate_rtcp (switch_rtp_t *rtp_session, int send_rate, switch_port_t remote_port, switch_bool_t mux) |
| Activate sending RTCP Sender Reports (SR's) More...
|
|
switch_timer_t * | switch_rtp_get_media_timer (switch_rtp_t *rtp_session) |
|
switch_status_t | switch_rtp_set_video_buffer_size (switch_rtp_t *rtp_session, uint32_t frames, uint32_t max_frames) |
|
switch_status_t | switch_rtp_get_video_buffer_size (switch_rtp_t *rtp_session, uint32_t *min_frame_len, uint32_t *max_frame_len, uint32_t *cur_frame_len, uint32_t *highest_frame_len) |
|
switch_status_t | switch_rtp_activate_jitter_buffer (switch_rtp_t *rtp_session, uint32_t queue_frames, uint32_t max_queue_frames, uint32_t samples_per_packet, uint32_t samples_per_second) |
| Acvite a jitter buffer on an RTP session. More...
|
|
switch_status_t | switch_rtp_debug_jitter_buffer (switch_rtp_t *rtp_session, const char *name) |
|
switch_status_t | switch_rtp_deactivate_jitter_buffer (switch_rtp_t *rtp_session) |
|
switch_status_t | switch_rtp_pause_jitter_buffer (switch_rtp_t *rtp_session, switch_bool_t pause) |
|
switch_jb_t * | switch_rtp_get_jitter_buffer (switch_rtp_t *rtp_session) |
|
void | switch_rtp_set_flag (switch_rtp_t *rtp_session, switch_rtp_flag_t flag) |
| Set an RTP Flag. More...
|
|
void | switch_rtp_set_flags (switch_rtp_t *rtp_session, switch_rtp_flag_t flags[SWITCH_RTP_FLAG_INVALID]) |
|
void | switch_rtp_clear_flags (switch_rtp_t *rtp_session, switch_rtp_flag_t flags[SWITCH_RTP_FLAG_INVALID]) |
|
uint32_t | switch_rtp_test_flag (switch_rtp_t *rtp_session, switch_rtp_flag_t flags) |
| Test an RTP Flag. More...
|
|
void | switch_rtp_clear_flag (switch_rtp_t *rtp_session, switch_rtp_flag_t flag) |
| Clear an RTP Flag. More...
|
|
switch_socket_t * | switch_rtp_get_rtp_socket (switch_rtp_t *rtp_session) |
| Retrieve the socket from an existing RTP session. More...
|
|
void | switch_rtp_ping (switch_rtp_t *rtp_session) |
|
uint32_t | switch_rtp_get_default_samples_per_interval (switch_rtp_t *rtp_session) |
| Get the default samples per interval for a given RTP session. More...
|
|
void | switch_rtp_set_default_payload (switch_rtp_t *rtp_session, switch_payload_t payload) |
| Set the default payload number for a given RTP session. More...
|
|
uint32_t | switch_rtp_get_default_payload (switch_rtp_t *rtp_session) |
| Get the default payload number for a given RTP session. More...
|
|
void | switch_rtp_set_invalid_handler (switch_rtp_t *rtp_session, switch_rtp_invalid_handler_t on_invalid) |
| Set a callback function to execute when an invalid RTP packet is encountered. More...
|
|
switch_status_t | switch_rtp_read (switch_rtp_t *rtp_session, void *data, uint32_t *datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags) |
| Read data from a given RTP session. More...
|
|
switch_status_t | switch_rtp_queue_rfc2833 (switch_rtp_t *rtp_session, const switch_dtmf_t *dtmf) |
| Queue RFC2833 DTMF data into an RTP Session. More...
|
|
switch_status_t | switch_rtp_queue_rfc2833_in (switch_rtp_t *rtp_session, const switch_dtmf_t *dtmf) |
| Queue RFC2833 DTMF data into an RTP Session. More...
|
|
switch_size_t | switch_rtp_has_dtmf (switch_rtp_t *rtp_session) |
| Test for presence of DTMF on a given RTP session. More...
|
|
switch_size_t | switch_rtp_dequeue_dtmf (switch_rtp_t *rtp_session, switch_dtmf_t *dtmf) |
| Retrieve DTMF digits from a given RTP session. More...
|
|
switch_status_t | switch_rtp_zerocopy_read (switch_rtp_t *rtp_session, void **data, uint32_t *datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags) |
| Read data from a given RTP session without copying. More...
|
|
switch_status_t | switch_rtp_zerocopy_read_frame (switch_rtp_t *rtp_session, switch_frame_t *frame, switch_io_flag_t io_flags) |
| Read data from a given RTP session without copying. More...
|
|
switch_status_t | switch_rtcp_zerocopy_read_frame (switch_rtp_t *rtp_session, switch_rtcp_frame_t *frame) |
| Read RTCP data from a given RTP session without copying. More...
|
|
void | rtp_flush_read_buffer (switch_rtp_t *rtp_session, switch_rtp_flush_t flush) |
|
switch_status_t | switch_rtp_enable_vad (switch_rtp_t *rtp_session, switch_core_session_t *session, switch_codec_t *codec, switch_vad_flag_t flags) |
| Enable VAD on an RTP Session. More...
|
|
switch_status_t | switch_rtp_disable_vad (switch_rtp_t *rtp_session) |
| Disable VAD on an RTP Session. More...
|
|
int | switch_rtp_write_frame (switch_rtp_t *rtp_session, switch_frame_t *frame) |
| Write data to a given RTP session. More...
|
|
int | switch_rtp_write_manual (switch_rtp_t *rtp_session, void *data, uint32_t datalen, uint8_t m, switch_payload_t payload, uint32_t ts, switch_frame_flag_t *flags) |
| Write data with a specified payload and sequence number to a given RTP session. More...
|
|
switch_status_t | switch_rtp_write_raw (switch_rtp_t *rtp_session, void *data, switch_size_t *bytes, switch_bool_t process_encryption) |
|
uint32_t | switch_rtp_get_ssrc (switch_rtp_t *rtp_session) |
| Retrieve the SSRC from a given RTP session. More...
|
|
void | switch_rtp_set_private (switch_rtp_t *rtp_session, void *private_data) |
| Associate an arbitrary data pointer with and RTP session. More...
|
|
void | switch_rtp_set_telephony_event (switch_rtp_t *rtp_session, switch_payload_t te) |
| Set the payload type to consider RFC2833 DTMF. More...
|
|
void | switch_rtp_set_telephony_recv_event (switch_rtp_t *rtp_session, switch_payload_t te) |
|
void | switch_rtp_set_cng_pt (switch_rtp_t *rtp_session, switch_payload_t pt) |
| Set the payload type for comfort noise. More...
|
|
void * | switch_rtp_get_private (switch_rtp_t *rtp_session) |
| Retrieve the private data from a given RTP session. More...
|
|
switch_status_t | switch_rtp_set_payload_map (switch_rtp_t *rtp_session, payload_map_t **pmap) |
|
void | switch_rtp_intentional_bugs (switch_rtp_t *rtp_session, switch_rtp_bug_flag_t bugs) |
|
switch_rtp_stats_t * | switch_rtp_get_stats (switch_rtp_t *rtp_session, switch_memory_pool_t *pool) |
|
switch_byte_t | switch_rtp_check_auto_adj (switch_rtp_t *rtp_session) |
|
void | switch_rtp_set_interdigit_delay (switch_rtp_t *rtp_session, uint32_t delay) |
|
switch_status_t | switch_rtp_add_dtls (switch_rtp_t *rtp_session, dtls_fingerprint_t *local_fp, dtls_fingerprint_t *remote_fp, dtls_type_t type, uint8_t want_DTLSv1_2) |
|
switch_status_t | switch_rtp_del_dtls (switch_rtp_t *rtp_session, dtls_type_t type) |
|
dtls_state_t | switch_rtp_dtls_state (switch_rtp_t *rtp_session, dtls_type_t type) |
|
int | switch_rtp_has_dtls (void) |
|
switch_status_t | switch_rtp_req_bitrate (switch_rtp_t *rtp_session, uint32_t bps) |
|
switch_status_t | switch_rtp_ack_bitrate (switch_rtp_t *rtp_session, uint32_t bps) |
|
void | switch_rtp_video_refresh (switch_rtp_t *rtp_session) |
|
void | switch_rtp_video_loss (switch_rtp_t *rtp_session) |
|
switch_core_session_t * | switch_rtp_get_core_session (switch_rtp_t *rtp_session) |
|
Definition at line 4059 of file switch_rtp.c.
References AEAD_AES_128_GCM, AEAD_AES_128_GCM_8, AEAD_AES_256_GCM, AEAD_AES_256_GCM_8, AES_CM_128_HMAC_SHA1_32, AES_CM_128_HMAC_SHA1_80, AES_CM_128_NULL_AUTH, AES_CM_192_HMAC_SHA1_32, AES_CM_192_HMAC_SHA1_80, AES_CM_256_HMAC_SHA1_32, AES_CM_256_HMAC_SHA1_80, switch_rtp::crypto_keys, secure_settings_s::crypto_type, switch_rtp::dtls, switch_rtp::flags, switch_rtp_crypto_key::index, index, switch_rtp_crypto_key::keysalt, secure_settings_s::local_key_material_n, secure_settings_s::local_key_material_next, secure_settings_s::local_raw_key, memset(), switch_crypto_key_material_s::mki_id, switch_crypto_key_material_s::mki_size, switch_rtp_crypto_key::next, switch_crypto_key_material_s::next, switch_rtp::pool, switch_crypto_key_material_s::raw_key, switch_rtp::recv_ctx, switch_rtp::recv_policy, secure_settings_s::remote_key_material_n, secure_settings_s::remote_key_material_next, secure_settings_s::remote_raw_key, rtp_type, switch_rtp::send_ctx, switch_rtp::send_policy, switch_rtp::session, switch_rtp::srtp_idx_rtcp, switch_b64_encode(), SWITCH_CALL_DIRECTION_OUTBOUND, switch_channel_direction(), switch_channel_get_uuid(), switch_channel_get_variable, SWITCH_CHANNEL_SESSION_LOG, switch_channel_set_variable, switch_core_alloc, switch_core_get_variable(), switch_core_media_crypto_keysalt_len(), switch_core_session_get_channel(), switch_event_add_header(), switch_event_add_header_string(), SWITCH_EVENT_CALL_SECURE, switch_event_create, switch_event_fire, SWITCH_LOG_CRIT, SWITCH_LOG_ERROR, SWITCH_LOG_INFO, switch_log_printf(), SWITCH_RTP_CRYPTO_MAX, SWITCH_RTP_CRYPTO_RECV, SWITCH_RTP_CRYPTO_RECV_RTCP, SWITCH_RTP_CRYPTO_SEND, SWITCH_RTP_CRYPTO_SEND_RTCP, SWITCH_RTP_FLAG_SECURE_RECV, SWITCH_RTP_FLAG_SECURE_RECV_MKI, SWITCH_RTP_FLAG_SECURE_RECV_RESET, SWITCH_RTP_FLAG_SECURE_SEND, SWITCH_RTP_FLAG_SECURE_SEND_MKI, SWITCH_RTP_FLAG_SECURE_SEND_RESET, SWITCH_RTP_FLAG_VIDEO, SWITCH_RTP_MAX_CRYPTO_LEN, SWITCH_STACK_BOTTOM, SWITCH_STATUS_FALSE, SWITCH_STATUS_SUCCESS, switch_true(), and switch_rtp_crypto_key::type.
Referenced by dtls_state_setup(), switch_core_media_recover_session(), switch_core_session_apply_crypto(), and switch_core_session_check_incoming_crypto().
4067 srtp_policy_t *policy;
4068 srtp_err_status_t stat;
4075 unsigned char b64_key[512] =
"";
4077 unsigned char *keysalt = NULL;
4081 unsigned long *key_material_n = NULL;
4082 srtp_master_key_t **mkis = NULL;
4083 srtp_master_key_t *mki = NULL;
4156 memcpy(crypto_key->
keysalt, keysalt, keysalt_len);
4160 memset(policy, 0,
sizeof(*policy));
4170 switch (crypto_key->
type) {
4172 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy->rtp);
4173 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy->rtcp);
4180 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32(&policy->rtp);
4181 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32(&policy->rtcp);
4190 srtp_crypto_policy_set_aes_gcm_256_8_auth(&policy->rtp);
4191 srtp_crypto_policy_set_aes_gcm_256_8_auth(&policy->rtcp);
4199 srtp_crypto_policy_set_aes_gcm_256_16_auth(&policy->rtp);
4200 srtp_crypto_policy_set_aes_gcm_256_16_auth(&policy->rtcp);
4208 srtp_crypto_policy_set_aes_gcm_128_8_auth(&policy->rtp);
4209 srtp_crypto_policy_set_aes_gcm_128_8_auth(&policy->rtcp);
4217 srtp_crypto_policy_set_aes_gcm_128_16_auth(&policy->rtp);
4218 srtp_crypto_policy_set_aes_gcm_128_16_auth(&policy->rtcp);
4226 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80(&policy->rtp);
4227 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80(&policy->rtcp);
4233 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32(&policy->rtp);
4234 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32(&policy->rtcp);
4240 srtp_crypto_policy_set_aes_cm_192_hmac_sha1_80(&policy->rtp);
4241 srtp_crypto_policy_set_aes_cm_192_hmac_sha1_80(&policy->rtcp);
4247 srtp_crypto_policy_set_aes_cm_192_hmac_sha1_32(&policy->rtp);
4248 srtp_crypto_policy_set_aes_cm_192_hmac_sha1_32(&policy->rtcp);
4254 srtp_crypto_policy_set_aes_cm_128_null_auth(&policy->rtp);
4255 srtp_crypto_policy_set_aes_cm_128_null_auth(&policy->rtcp);
4267 if (key_material && (*key_material_n > 0)) {
4287 while (key_material && (mki_idx < *key_material_n)) {
4310 memcpy(mki->mki_id, &key_material->
mki_id, key_material->
mki_size);
4311 mki->mki_size = key_material->
mki_size;
4312 memcpy(mki->key, key_material->
raw_key, keysalt_len);
4314 mkis[mki_idx] = mki;
4316 key_material = key_material->
next;
4321 policy->keys = mkis;
4322 policy->num_master_keys = mki_idx;
4325 policy->key = (uint8_t *) crypto_key->
keysalt;
4328 policy->next = NULL;
4330 policy->window_size = 1024;
4331 policy->allow_repeat_tx = 1;
4336 switch (direction) {
4338 policy->ssrc.type = ssrc_any_inbound;
4343 if ((stat = srtp_create(&rtp_session->
recv_ctx[idx], policy)) || !rtp_session->
recv_ctx[idx]) {
4358 policy->ssrc.type = ssrc_any_outbound;
4365 if ((stat = srtp_create(&rtp_session->
send_ctx[idx], policy)) || !rtp_session->
send_ctx[idx]) {
4386 if (rtp_session->
dtls) {
#define switch_event_fire(event)
Fire an event filling in most of the arguements with obvious values.
unsigned char remote_raw_key[SWITCH_RTP_MAX_CRYPTO_LEN]
static switch_bool_t switch_true(const char *expr)
Evaluate the truthfullness of a string expression.
#define SWITCH_CHANNEL_SESSION_LOG(x)
unsigned char keysalt[SWITCH_RTP_MAX_CRYPTO_LEN]
switch_status_t switch_event_add_header(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *fmt,...) PRINTF_FUNCTION(4
Add a header to an event.
Representation of an event.
srtp_policy_t send_policy[2]
switch_rtp_crypto_key_t * crypto_keys[SWITCH_RTP_CRYPTO_MAX]
struct switch_crypto_key_material_s * local_key_material_next
struct switch_crypto_key_material_s * next
#define rtp_type(rtp_session)
_Ret_ switch_channel_t * switch_core_session_get_channel(_In_ switch_core_session_t *session)
Retrieve a pointer to the channel object associated with a given session.
unsigned char local_raw_key[SWITCH_RTP_MAX_CRYPTO_LEN]
switch_status_t switch_b64_encode(unsigned char *in, switch_size_t ilen, unsigned char *out, switch_size_t olen)
uint32_t flags[SWITCH_RTP_FLAG_INVALID]
unsigned long local_key_material_n
#define switch_core_alloc(_pool, _mem)
Allocate memory directly from a memory pool.
#define switch_channel_get_variable(_c, _v)
switch_status_t switch_event_add_header_string(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *data)
Add a string header to an event.
#define SWITCH_RTP_MAX_CRYPTO_LEN
switch_rtp_crypto_key_type_t type
char * switch_core_get_variable(_In_z_ const char *varname)
Retrieve a global variable from the core.
unsigned long remote_key_material_n
char * switch_channel_get_uuid(switch_channel_t *channel)
Retrieve the given channel's unique id.
switch_memory_pool_t * pool
switch_status_t
Common return values.
srtp_policy_t recv_policy[2]
switch_core_session_t * session
#define switch_event_create(event, id)
Create a new event assuming it will not be custom event and therefore hiding the unused parameters...
switch_call_direction_t switch_channel_direction(switch_channel_t *channel)
void switch_log_printf(_In_ switch_text_channel_t channel, _In_z_ const char *file, _In_z_ const char *func, _In_ int line, _In_opt_z_ const char *userdata, _In_ switch_log_level_t level, _In_z_ _Printf_format_string_ const char *fmt,...) PRINTF_FUNCTION(7
Write log data to the logging engine.
unsigned char raw_key[SWITCH_RTP_MAX_CRYPTO_LEN]
#define switch_channel_set_variable(_channel, _var, _val)
switch_rtp_crypto_key_type_t crypto_type
struct switch_rtp_crypto_key * next
struct switch_crypto_key_material_s * remote_key_material_next