⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nua_stack.h

📁 Internet Phone, Chat, Conferencing
💻 H
📖 第 1 页 / 共 2 页
字号:
 */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 + -