📄 nua_stack.h
字号:
*/struct nua_handle_s { su_home_t nh_home[1]; /**< Memory home */ nua_handle_t *nh_next; nua_handle_t **nh_prev; nua_t *nh_nua; /**< Pointer to NUA object */ void *nh_valid; nua_hmagic_t *nh_magic; /**< Application context */ tagi_t *nh_tags; /**< Default tags */#if HAVE_PTHREAD_H#if __CYGWIN__ pthread_mutex_t sup_reflock[1]; int sup_ref;#else pthread_rwlock_t nh_refcount[1]; #endif#else unsigned nh_refcount;#endif nua_handle_preferences_t *nh_prefs; /**< Preferences */ /* Handle state */ nua_event_t nh_special; /**< Special event */ unsigned nh_ref_by_stack:1; /**< Has stack used the handle? */ unsigned nh_ref_by_user:1; /**< Has user used the handle? */ unsigned nh_init:1; unsigned nh_has_invite:1; /**< Has call */ unsigned nh_has_subscribe:1; /**< Has watcher */ unsigned nh_has_notify:1; /**< Has notifier */ unsigned nh_has_register:1; /**< Has registration */ unsigned nh_has_streaming:1; /**< Has RTSP-related session */ struct nua_client_request nh_cr[1]; nua_dialog_state_t nh_ds[1]; nua_session_state_t nh_ss[1]; auth_client_t *nh_auth; /**< Authorization objects */ soa_session_t *nh_soa; /**< Media session */ struct nua_referral { nua_handle_t *ref_handle; /**< Referring handle */ sip_event_t *ref_event; /**< Event used with NOTIFY */ } nh_referral[1]; nea_server_t *nh_notifier; /**< SIP notifier */};#define NH_IS_VALID(nh) ((nh) && (nh)->nh_valid)#define NH_STATUS(nh) \ (nh)->nh_status, \ (nh)->nh_phrase, \ SIPTAG_WARNING_STR(nh->nh_warning)#define NH_IS_DEFAULT(nh) ((nh) == (nh)->nh_nua->nua_handles)static inlineint nh_is_special(nua_handle_t *nh){ return nh == NULL || nh->nh_special;}static inlineint nh_has_session(nua_handle_t const *nh){ return nh != NULL && nh->nh_ss->ss_state > nua_callstate_init && nh->nh_ss->ss_state < nua_callstate_terminated;}extern char const nua_500_error[];#define NUA_500_ERROR 500, nua_500_errorstruct nua_s { su_home_t nua_home[1]; /* API (client) side */ su_root_t *nua_api_root; su_clone_r nua_clone; su_task_r nua_client; nua_callback_f nua_callback; nua_magic_t *nua_magic; nua_saved_event_t nua_current[1]; nua_saved_event_t nua_signal[1]; /* Engine state flags */ unsigned nua_shutdown_started:1; /**< Shutdown initiated */ unsigned nua_shutdown_final:1; /**< Shutdown is complete */ unsigned :0; /**< Used by stop-and-wait args calls */ tagi_t const *nua_args; /**< Local SIP address. Contents are kept around for ever. */ sip_from_t nua_from[1]; /* Protocol (server) side */ sip_contact_t *nua_contact; sip_contact_t *nua_sips_contact; /* Constants */ sip_accept_t *nua_invite_accept; /* What we accept for invite */ /* char const *nua_ua_name; => nhp_ua_name */ url_t *nua_registrar; su_root_t *nua_root; su_task_r nua_server; nta_agent_t *nua_nta; su_timer_t *nua_timer;#if HAVE_UICC_H uicc_t *nua_uicc;#endif void *nua_sip_parser; sip_time_t nua_shutdown; /* Route */ sip_service_route_t *nua_service_route; /* User-agent parameters */ unsigned nua_media_enable:1; unsigned :0;#if HAVE_SMIME /* Start NRC Boston */ sm_object_t *sm;#endif /* End NRC Boston */ nua_handle_t *nua_handles; nua_handle_t **nua_handles_tail;};#define nua_dhandle nua_handles#if HAVE_FUNC#define enter (void)SU_DEBUG_9(("nua: %s: entering\n", __func__))#define nh_enter (void)SU_DEBUG_9(("nua %s(%p): entering\n", __func__, nh))#elif HAVE_FUNCTION#define enter (void)SU_DEBUG_9(("nua: %s: entering\n", __FUNCTION__))#define nh_enter (void)SU_DEBUG_9(("nua %s(%p): entering\n", __FUNCTION__, nh))#define __func__ __FUNCTION__#else#define enter ((void)0)#define nh_enter ((void)0)#define __func__ "nua"#endif/* Internal prototypes */int nua_stack_init(su_root_t *root, nua_t *nua);void nua_stack_deinit(su_root_t *root, nua_t *nua);void nua_stack_signal(nua_t *nua, su_msg_r msg, event_t *e);void nua_stack_post_signal(nua_handle_t *nh, nua_event_t event, tag_type_t tag, tag_value_t value, ...);typedef int nua_stack_signal_handler(nua_t *, nua_handle_t *, nua_event_t, tagi_t const *);nua_stack_signal_handler nua_stack_set_params, nua_stack_get_params, nua_stack_register, nua_stack_invite, nua_stack_ack, nua_stack_cancel, nua_stack_bye, nua_stack_info, nua_stack_update, nua_stack_options, nua_stack_publish, nua_stack_message, nua_stack_subscribe, nua_stack_notify, nua_stack_refer, nua_stack_method;#define UA_EVENT1(e, statusphrase) \ nua_stack_event(nua, nh, NULL, e, statusphrase, TAG_END())#define UA_EVENT2(e, status, phrase) \ nua_stack_event(nua, nh, NULL, e, status, phrase, TAG_END())#define UA_EVENT3(e, status, phrase, tag) \ nua_stack_event(nua, nh, NULL, e, status, phrase, tag, TAG_END())int nua_stack_event(nua_t *nua, nua_handle_t *nh, msg_t *msg, nua_event_t event, int status, char const *phrase, tag_type_t tag, tag_value_t value, ...);nua_handle_t *nh_create_handle(nua_t *nua, nua_hmagic_t *hmagic, tagi_t *tags);nua_handle_t *nua_stack_incoming_handle(nua_t *nua, nta_incoming_t *irq, sip_t const *sip, enum nh_kind kind, int create_dialog);void nh_destroy(nua_t *nua, nua_handle_t *nh);nua_handle_t *nh_validate(nua_t *nua, nua_handle_t *maybe);int nua_stack_init_handle(nua_t *nua, nua_handle_t *nh, enum nh_kind kind, char const *default_allow, tag_type_t tag, tag_value_t value, ...);int nua_stack_process_request(nua_handle_t *nh, nta_leg_t *leg, nta_incoming_t *irq, sip_t const *sip);int nua_stack_process_response(nua_handle_t *nh, struct nua_client_request *cr, nta_outgoing_t *orq, sip_t const *sip, tag_type_t tag, tag_value_t value, ...);msg_t *nua_creq_msg(nua_t *nua, nua_handle_t *nh, struct nua_client_request *cr, int restart, sip_method_t method, char const *name, tag_type_t tag, tag_value_t value, ...);int nua_creq_check_restart(nua_handle_t *nh, struct nua_client_request *cr, nta_outgoing_t *orq, sip_t const *sip, nua_creq_restart_f *f);int nua_creq_restart_with(nua_handle_t *nh, struct nua_client_request *cr, nta_outgoing_t *orq, int status, char const *phrase, nua_creq_restart_f *f, tag_type_t tag, tag_value_t value, ...);int nua_creq_restart(nua_handle_t *nh, struct nua_client_request *cr, nta_response_f *cb, tagi_t *tags);void nua_creq_deinit(struct nua_client_request *cr, nta_outgoing_t *orq);msg_t *nh_make_response(nua_t *nua, nua_handle_t *nh, nta_incoming_t *irq, int status, char const *phrase, tag_type_t tag, tag_value_t value, ...);typedef int nua_stack_process_request_t(nua_t *nua, nua_handle_t *nh, nta_incoming_t *irq, sip_t const *sip);nua_stack_process_request_t nua_stack_process_invite;nua_stack_process_request_t nua_stack_process_info;nua_stack_process_request_t nua_stack_process_update;nua_stack_process_request_t nua_stack_process_bye;nua_stack_process_request_t nua_stack_process_message;nua_stack_process_request_t nua_stack_process_options;nua_stack_process_request_t nua_stack_process_publish;nua_stack_process_request_t nua_stack_process_subsribe;nua_stack_process_request_t nua_stack_process_notify;nua_stack_process_request_t nua_stack_process_refer;nua_stack_process_request_t nua_stack_process_unknown;#ifndef SDP_MIME_TYPE#define SDP_MIME_TYPE nua_application_sdp#endifextern char const nua_application_sdp[];/* ---------------------------------------------------------------------- */#define SIP_METHOD_UNKNOWN sip_method_unknown, NULL/* Private tags */#define NUTAG_ADD_CONTACT(v) _nutag_add_contact, tag_bool_v(v)extern tag_typedef_t _nutag_add_contact;#define NUTAG_ADD_CONTACT_REF(v) _nutag_add_contact_ref, tag_bool_vr(&v)extern tag_typedef_t _nutag_add_contact_ref;#define NUTAG_COPY(v) _nutag_copy, tag_bool_v(v)extern tag_typedef_t _nutag_copy;#define NUTAG_COPY_REF(v) _nutag_copy_ref, tag_bool_vr(&v)extern tag_typedef_t _nutag_copy_ref;/* ---------------------------------------------------------------------- */typedef unsigned longlong ull;#define SET_STATUS(_status, _phrase) status = _status, phrase = _phrase/* This is an "interesting" macro: * x is a define expanding to <i>num, str</i>. * @a num is assigned to variable status, @a str to variable phrase. * Macro SET_STATUS1 expands to two comma-separated expressions that are * also usable as function arguments. */#define SET_STATUS1(x) ((status = x), status), (phrase = ((void)x))/* ---------------------------------------------------------------------- *//* Application side prototypes */void nua_signal(nua_t *nua, nua_handle_t *nh, msg_t *msg, int always, nua_event_t event, int status, char const *phrase, tag_type_t tag, tag_value_t value, ...);void nua_event(nua_t *root_magic, su_msg_r sumsg, event_t *e);SOFIA_END_DECLS#endif /* NUA_STACK_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -