X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=sip.h;h=2c5d5efb810a87df0c38c39aa2bb391860a96068;hp=1bc06f734fa1d31055bed56c29104c7c6b0e6eb1;hb=034d3a91404addedc1c7a3494862c79532b0b878;hpb=863bc6421940efe897dfd6d610e1f86ed9992cf6 diff --git a/sip.h b/sip.h index 1bc06f7..2c5d5ef 100644 --- a/sip.h +++ b/sip.h @@ -11,59 +11,69 @@ #include +extern int any_sip_interface; + /* SIP port class */ -class Psip : public PmISDN +class Psip : public Port { public: - Psip(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode, struct interface *interface); + Psip(int type, char *portname, struct port_settings *settings, struct interface *interface); ~Psip(); int message_epoint(unsigned int epoint_id, int message, union parameter *param); int message_connect(unsigned int epoint_id, int message, union parameter *param); int message_release(unsigned int epoint_id, int message, union parameter *param); int message_setup(unsigned int epoint_id, int message, union parameter *param); + int message_notify(unsigned int epoint_id, int message, union parameter *param); + int message_information(unsigned int epoint_id, int message, union parameter *param); + int message_dtmf(unsigned int epoint_id, int message, union parameter *param); void i_invite(int status, char const *phrase, nua_t *nua, nua_magic_t *magic, nua_handle_t *nh, nua_hmagic_t *hmagic, sip_t const *sip, tagi_t tags[]); void i_bye(int status, char const *phrase, nua_t *nua, nua_magic_t *magic, nua_handle_t *nh, nua_hmagic_t *hmagic, sip_t const *sip, tagi_t tags[]); void i_cancel(int status, char const *phrase, nua_t *nua, nua_magic_t *magic, nua_handle_t *nh, nua_hmagic_t *hmagic, sip_t const *sip, tagi_t tags[]); void r_bye(int status, char const *phrase, nua_t *nua, nua_magic_t *magic, nua_handle_t *nh, nua_hmagic_t *hmagic, sip_t const *sip, tagi_t tags[]); void r_cancel(int status, char const *phrase, nua_t *nua, nua_magic_t *magic, nua_handle_t *nh, nua_hmagic_t *hmagic, sip_t const *sip, tagi_t tags[]); void r_invite(int status, char const *phrase, nua_t *nua, nua_magic_t *magic, nua_handle_t *nh, nua_hmagic_t *hmagic, sip_t const *sip, tagi_t tags[]); - void *p_m_s_sip_inst; - struct lcr_work p_m_s_delete; - nua_handle_t *p_m_s_handle; - nua_magic_t *p_m_s_magic; - unsigned short p_m_s_rtp_port_local; - unsigned short p_m_s_rtp_port_remote; - unsigned int p_m_s_rtp_ip_local; - unsigned int p_m_s_rtp_ip_remote; - struct sockaddr_in p_m_s_rtp_sin_local; - struct sockaddr_in p_m_s_rtp_sin_remote; - struct sockaddr_in p_m_s_rtcp_sin_local; - struct sockaddr_in p_m_s_rtcp_sin_remote; - struct lcr_fd p_m_s_rtp_fd; - struct lcr_fd p_m_s_rtcp_fd; - int p_m_s_rtp_is_connected; /* if RTP session is connected, so we may send frames */ - int p_m_s_rtp_tx_action; - uint16_t p_m_s_rtp_tx_sequence; - uint32_t p_m_s_rtp_tx_timestamp; - uint32_t p_m_s_rtp_tx_ssrc; - struct timeval p_m_s_rtp_tx_last_tv; + void *p_s_sip_inst; + struct lcr_work p_s_delete; + nua_handle_t *p_s_handle; + nua_magic_t *p_s_magic; + int p_s_rtp_bridge; /* bridge RTP instead of having a local RTP peer */ + unsigned short p_s_rtp_port_local; + unsigned short p_s_rtp_port_remote; + unsigned int p_s_rtp_ip_local; + unsigned int p_s_rtp_ip_remote; + struct sockaddr_in p_s_rtp_sin_local; + struct sockaddr_in p_s_rtp_sin_remote; + struct sockaddr_in p_s_rtcp_sin_local; + struct sockaddr_in p_s_rtcp_sin_remote; + struct lcr_fd p_s_rtp_fd; + struct lcr_fd p_s_rtcp_fd; + int p_s_rtp_is_connected; /* if RTP session is connected, so we may send frames */ + int p_s_rtp_tx_action; + uint16_t p_s_rtp_tx_sequence; + uint32_t p_s_rtp_tx_timestamp; + uint32_t p_s_rtp_tx_ssrc; + struct timeval p_s_rtp_tx_last_tv; int rtp_open(void); int rtp_connect(void); void rtp_close(void); - int rtp_send_frame(unsigned char *data, unsigned int len, int payload_type); - int p_m_s_b_sock; /* SIP bchannel socket */ - struct lcr_fd p_m_s_b_fd; /* event node */ - int p_m_s_b_index; /* SIP bchannel socket index to use */ - int p_m_s_b_active; /* SIP bchannel socket is activated */ - unsigned char p_m_s_rxdata[160]; /* receive audio buffer */ - int p_m_s_rxpos; /* position in audio buffer 0..159 */ - int hunt_bchannel(void); - void bchannel_close(void); - int bchannel_open(int); - void bchannel_receive(struct mISDNhead *hh, unsigned char *data, int len); - void bchannel_send(unsigned int prim, unsigned int id, unsigned char *data, int len); - int parse_sdp(sip_t const *sip, unsigned int *ip, unsigned short *port); + int rtp_send_frame(unsigned char *data, unsigned int len, uint8_t payload_type); + int p_s_b_sock; /* SIP bchannel socket */ + struct lcr_fd p_s_b_fd; /* event node */ + int p_s_b_index; /* SIP bchannel socket index to use */ + int p_s_b_active; /* SIP bchannel socket is activated */ + unsigned char p_s_rxdata[160]; /* receive audio buffer */ + int p_s_rxpos; /* position in audio buffer 0..159 */ + int bridge_rx(unsigned char *data, int len); + int parse_sdp(sip_t const *sip, unsigned int *ip, unsigned short *port, uint8_t *payload_types, int *media_types, int *payloads, int max_payloads); void rtp_shutdown(void); + + /* audio */ + struct lcr_timer p_s_loadtimer; /* timer for audio transmission */ + virtual void update_load(void); + void load_tx(void); + unsigned int p_s_next_tv_sec; /* time stamp of next expected tx_load call, (to sync audio data) */ + unsigned int p_s_next_tv_usec; + void set_tone(const char *dir, const char *name); }; int sip_init_inst(struct interface *interface);