📄 nua_dialog.h
字号:
sip_to_t const *ds_remote; /**< Remote address */ nta_leg_t *ds_leg; sip_contact_t *ds_ltarget; /**< Local target */ char const *ds_remote_tag; /**< Remote tag (if any). * Should be non-NULL * if dialog is established. */ struct nua_dialog_peer_info { sip_allow_t *nr_allow; sip_accept_t *nr_accept; sip_require_t *nr_require; sip_supported_t *nr_supported; sip_user_agent_t *nr_user_agent; } ds_remote_ua[1];};/* Virtual function pointer table for dialog usage. */typedef struct { unsigned usage_size, usage_class_size; int (*usage_add)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *du); void (*usage_remove)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, nua_server_request_t *sr); char const *(*usage_name)(nua_dialog_usage_t const *du); void (*usage_update_params)(nua_dialog_usage_t const *du, nua_handle_preferences_t const *changed, nua_handle_preferences_t const *params, nua_handle_preferences_t const *defaults); void (*usage_peer_info)(nua_dialog_usage_t *du, nua_dialog_state_t const *ds, sip_t const *sip); void (*usage_refresh)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *, sip_time_t now); int (*usage_shutdown)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *);} nua_usage_class;/* Base structure for dialog usage. */struct nua_dialog_usage { nua_dialog_usage_t *du_next; nua_usage_class const *du_class; nua_dialog_state_t *du_dialog; nua_client_request_t *du_cr; /**< Client request bound with usage */ sip_time_t du_refquested; /**< When refreshed was requested */ sip_time_t du_refresh; /**< When to refresh */ unsigned du_ready:1; /**< Established usage */ unsigned du_shutdown:1; /**< Shutdown in progress */ unsigned:0; /** When usage expires. * Non-zero if the usage is established, SIP_TIME_MAX if there no * expiration time. */ sip_event_t const *du_event; /**< Event of usage */};void nua_dialog_uac_route(nua_owner_t *, nua_dialog_state_t *ds, sip_t const *sip, int rtag);void nua_dialog_uas_route(nua_owner_t *, nua_dialog_state_t *ds, sip_t const *sip, int rtag);void nua_dialog_store_peer_info(nua_owner_t *, nua_dialog_state_t *ds, sip_t const *sip);int nua_dialog_zap(nua_owner_t *own, nua_dialog_state_t *ds);int nua_dialog_remove(nua_owner_t *own, nua_dialog_state_t *ds, nua_dialog_usage_t *usage);su_inline int nua_dialog_is_reporting(nua_dialog_state_t const *ds){ return ds && ds->ds_reporting;}char const *nua_dialog_usage_name(nua_dialog_usage_t const *du);nua_dialog_usage_t *nua_dialog_usage_add(nua_owner_t *, struct nua_dialog_state *ds, nua_usage_class const *uclass, sip_event_t const *event);nua_dialog_usage_t *nua_dialog_usage_get(nua_dialog_state_t const *ds, nua_usage_class const *uclass, sip_event_t const *event);void nua_dialog_usage_remove(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, nua_server_request_t *sr);void nua_dialog_update_params(nua_dialog_state_t *ds, nua_handle_preferences_t const *changed, nua_handle_preferences_t const *params, nua_handle_preferences_t const *defaults);void nua_base_usage_update_params(nua_dialog_usage_t const *du, nua_handle_preferences_t const *changed, nua_handle_preferences_t const *params, nua_handle_preferences_t const *defaults);void nua_dialog_deinit(nua_owner_t *own, nua_dialog_state_t *ds);int nua_dialog_shutdown(nua_owner_t *owner, nua_dialog_state_t *ds);int nua_dialog_repeat_shutdown(nua_owner_t *owner, nua_dialog_state_t *ds);void nua_dialog_usage_set_refresh(nua_dialog_usage_t *du, unsigned delta);void nua_dialog_usage_set_refresh_range(nua_dialog_usage_t *du, unsigned min, unsigned max);void nua_dialog_usage_set_refresh_at(nua_dialog_usage_t *du, sip_time_t target);void nua_dialog_usage_reset_refresh(nua_dialog_usage_t *du);void nua_dialog_usage_refresh(nua_owner_t *owner, nua_dialog_state_t *ds, nua_dialog_usage_t *du, sip_time_t now);int nua_dialog_usage_shutdown(nua_owner_t *owner, nua_dialog_state_t *ds, nua_dialog_usage_t *du);su_inlineint nua_dialog_is_established(nua_dialog_state_t const *ds){ return ds->ds_remote_tag != NULL;}#if 0su_inlinevoid *nua_dialog_usage_private(nua_dialog_usage_t const *du){ return du ? (void *)(du + 1) : NULL;}su_inlinenua_dialog_usage_t *nua_dialog_usage_public(void const *p){ return p ? (nua_dialog_usage_t *)p - 1 : NULL;}#else#define nua_dialog_usage_private(du) ((du) ? (void*)((du) + 1) : NULL)#define nua_dialog_usage_public(p) ((p) ? (nua_dialog_usage_t*)(p) - 1 : NULL)#endif#define NUA_DIALOG_USAGE_PRIVATE(du) ((void *)((du) + 1))#define NUA_DIALOG_USAGE_PUBLIC(pu) ((void *)((nua_dialog_usage_t *)(pu) - 1))/* ---------------------------------------------------------------------- */int nua_client_create(nua_owner_t *owner, int event, nua_client_methods_t const *methods, tagi_t const *tags);int nua_client_tcreate(nua_owner_t *nh, int event, nua_client_methods_t const *methods, tag_type_t tag, tag_value_t value, ...);su_inline void *nua_private_client_request(nua_client_request_t const *cr){ return (void *)(cr + 1);}void nua_client_request_complete(nua_client_request_t *);void nua_client_request_destroy(nua_client_request_t *);int nua_client_request_queue(nua_client_request_t *cr);su_inline int nua_client_is_queued(nua_client_request_t const *cr){ return cr && cr->cr_prev;}nua_client_request_t *nua_client_request_remove(nua_client_request_t *cr);int nua_client_bind(nua_client_request_t *cr, nua_dialog_usage_t *du);su_inline int nua_client_is_bound(nua_client_request_t const *cr){ return cr && cr->cr_usage && cr->cr_usage->du_cr == cr;}su_inline int nua_client_is_reporting(nua_client_request_t const *cr){ return cr && cr->cr_reporting;}/** Mark client request as a terminating one */su_inline void nua_client_terminating(nua_client_request_t *cr){ cr->cr_terminating = 1;}int nua_client_init_request(nua_client_request_t *cr);msg_t *nua_client_request_template(nua_client_request_t *cr);int nua_client_restart_request(nua_client_request_t *cr, int terminating, tagi_t const *tags);int nua_client_resend_request(nua_client_request_t *cr, int terminating);int nua_base_client_request(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags);int nua_base_client_trequest(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tag_type_t tag, tag_value_t value, ...);extern nta_response_f nua_client_orq_response;int nua_client_return(nua_client_request_t *cr, int status, char const *phrase, msg_t *to_be_destroyed);int nua_client_response(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip);int nua_client_check_restart(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip);int nua_base_client_check_restart(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip);int nua_client_restart(nua_client_request_t *cr, int status, char const *phrase);int nua_base_client_response(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip, tagi_t const *tags);int nua_base_client_tresponse(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip, tag_type_t tag, tag_value_t value, ...);int nua_client_set_target(nua_client_request_t *cr, url_t const *target);int nua_client_report(nua_client_request_t *cr, int status, char const *phrase, sip_t const *sip, nta_outgoing_t *orq, tagi_t const *tags);nua_client_request_t *nua_client_request_pending(nua_client_request_t const *);int nua_client_next_request(nua_client_request_t *cr, int invite);/* ---------------------------------------------------------------------- */extern nua_server_methods_t const nua_extension_server_methods, nua_invite_server_methods, /**< INVITE */ nua_bye_server_methods, /**< BYE */ nua_options_server_methods, /**< OPTIONS */ nua_register_server_methods, /**< REGISTER */ nua_info_server_methods, /**< INFO */ nua_prack_server_methods, /**< PRACK */ nua_update_server_methods, /**< UPDATE */ nua_message_server_methods, /**< MESSAGE */ nua_subscribe_server_methods, /**< SUBSCRIBE */ nua_notify_server_methods, /**< NOTIFY */ nua_refer_server_methods, /**< REFER */ nua_publish_server_methods; /**< PUBLISH *//** Return true if we have not sent final response to request */ su_inline int nua_server_request_is_pending(nua_server_request_t const *sr){ return sr && sr->sr_response.msg;}su_inline int nua_server_request_status(nua_server_request_t const *sr){ return sr ? nta_incoming_status(sr->sr_irq) : 500;}void nua_server_request_destroy(nua_server_request_t *sr);int nua_base_server_init(nua_server_request_t *sr);#define nua_base_server_init NULLint nua_base_server_preprocess(nua_server_request_t *sr);#define nua_base_server_preprocess NULLint nua_server_params(nua_server_request_t *sr, tagi_t const *tags);int nua_base_server_params(nua_server_request_t *sr, tagi_t const *tags);#define nua_base_server_params NULLint nua_server_trespond(nua_server_request_t *sr, tag_type_t tag, tag_value_t value, ...);int nua_server_respond(nua_server_request_t *sr, tagi_t const *tags);int nua_base_server_trespond(nua_server_request_t *sr, tag_type_t tag, tag_value_t value, ...);int nua_base_server_respond(nua_server_request_t *sr, tagi_t const *tags);int nua_server_report(nua_server_request_t *sr);int nua_base_server_treport(nua_server_request_t *sr, tag_type_t tag, tag_value_t value, ...);int nua_base_server_report(nua_server_request_t *sr, tagi_t const *tags);/* ---------------------------------------------------------------------- */#endif /* NUA_DIALOG_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -