asterisk/res/res_pjsip_outbound_registra.../volte.h

53 lines
2.0 KiB
C

#pragma once
#include "netlink_xfrm.h"
struct volte_states {
pj_sockaddr local_addr_c, remote_addr_s;
pj_sockaddr remote_addr_c, local_addr_s;
uint32_t local_spi_c, remote_spi_s;
uint32_t remote_spi_c, local_spi_s;
pj_bool_t local_sa_c_set, remote_sa_s_set;
pj_bool_t remote_sa_c_set, local_sa_s_set;
pj_bool_t local_sp_c_set, remote_sp_s_set;
pj_bool_t remote_sp_c_set, local_sp_s_set;
pjsip_transport *transport;
pj_sockaddr remote_addr_orig;
char security_server[1024];
};
struct security_server {
pj_str_t q;
pj_str_t prot;
pj_str_t mod;
pj_str_t spi_c;
pj_str_t spi_s;
pj_str_t port_c;
pj_str_t port_s;
pj_str_t alg;
pj_str_t ealg;
};
pj_status_t g_volte_init(void);
void g_volte_exit(void);
void volte_cleanup_xfrm(struct volte_states *volte);
pj_status_t volte_alloc_spi(struct volte_states *volte);
pj_status_t volte_add_sec_agree(pjsip_tx_data *tdata);
pj_status_t volte_init_authorization(pjsip_tx_data *tdata, const char *fromdomain, const char *username);
pj_status_t volte_del_authorization(pjsip_tx_data *tdata);
pj_status_t volte_reset_transport(struct volte_states *volte);
pj_status_t volte_add_security_client(struct volte_states *volte, pjsip_tx_data *tdata, int port_c, int port_s);
pj_status_t volte_set_transport(struct volte_states *volte, pjsip_tx_data *tdata, const pj_str_t *alg,
const pj_str_t *ealg, uint8_t *ik, uint32_t remote_spi_c, uint32_t remote_spi_s,
uint16_t remote_port_c, uint16_t remote_port_s);
pj_status_t volte_get_security_server(struct volte_states *volte, pjsip_rx_data *rdata, struct security_server *sec);
pj_status_t volte_add_security_verify(struct volte_states *volte, pjsip_tx_data *tdata);
pj_status_t volte_authenticate(struct volte_states *volte, pjsip_rx_data *rdata, pjsip_hdr_e auth_type,
const char *opc_str, const char *k_str, const char *sqn_str, uint8_t *out_res,
uint8_t *out_ik, uint8_t *out_ck, uint8_t *out_auts);
pj_status_t volte_add_auts(struct volte_states *volte, pjsip_tx_data *tdata, uint8_t *auts);