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

📄 sip_transport.h

📁 基于sip协议的网络电话源码
💻 H
📖 第 1 页 / 共 3 页
字号:
	char			*info;	/** The Call-ID header as found in the message. */	pjsip_cid_hdr		*cid;	/** The From header as found in the message. */	pjsip_from_hdr		*from;	/** The To header as found in the message. */	pjsip_to_hdr		*to;	/** The topmost Via header as found in the message. */	pjsip_via_hdr		*via;	/** The CSeq header as found in the message. */	pjsip_cseq_hdr		*cseq;	/** Max forwards header. */	pjsip_max_fwd_hdr	*max_fwd;	/** The first route header. */	pjsip_route_hdr		*route;	/** The first record-route header. */	pjsip_rr_hdr		*record_route;	/** Content-type header. */	pjsip_ctype_hdr		*ctype;	/** Content-length header. */	pjsip_clen_hdr		*clen;	/** The first Require header. */	pjsip_require_hdr	*require;	/** The list of error generated by the parser when parsing 	    this message. 	 */	pjsip_parser_err_report parse_err;    } msg_info;    /**     * endpt_info is initialized by endpoint after this buffer reaches     * endpoint.     */    struct    {	/** 	 * Data attached by modules to this message. 	 */	void	*mod_data[PJSIP_MAX_MODULE];    } endpt_info;};/** * Get printable information about the message in the rdata. * * @param rdata	    The receive data buffer. * * @return	    Printable information. */PJ_DECL(char*) pjsip_rx_data_get_info(pjsip_rx_data *rdata);/***************************************************************************** * * TRANSMIT DATA BUFFER MANIPULATION. * *****************************************************************************//** Customized ioqueue async operation key, used by transport to keep *  callback parameters. */typedef struct pjsip_tx_data_op_key{    /** ioqueue pending operation key. */    pj_ioqueue_op_key_t	    key;    /** Transmit data associated with this key. */    pjsip_tx_data	   *tdata;    /** Arbitrary token (attached by transport) */    void		   *token;    /** Callback to be called when pending transmit operation has        completed.     */    void		  (*callback)(pjsip_transport*,void*,pj_ssize_t);} pjsip_tx_data_op_key;/** * Data structure for sending outgoing message. Application normally creates * this buffer by calling #pjsip_endpt_create_tdata. * * The lifetime of this buffer is controlled by the reference counter in this * structure, which is manipulated by calling #pjsip_tx_data_add_ref and * #pjsip_tx_data_dec_ref. When the reference counter has reached zero, then * this buffer will be destroyed. * * A transaction object normally will add reference counter to this buffer * when application calls #pjsip_tsx_send_msg, because it needs to keep the * message for retransmission. The transaction will release the reference * counter once its state has reached final state. */struct pjsip_tx_data{    /** This is for transmission queue; it's managed by transports. */    PJ_DECL_LIST_MEMBER(struct pjsip_tx_data);    /** Memory pool for this buffer. */    pj_pool_t		*pool;    /** A name to identify this buffer. */    char		 obj_name[PJ_MAX_OBJ_NAME];    /** Short information describing this buffer and the message in it.      *  Application should use #pjsip_tx_data_get_info() instead of     *  directly accessing this member.     */    char		*info;    /** For response message, this contains the reference to timestamp when      *  the original request message was received. The value of this field     *  is set when application creates response message to a request by     *  calling #pjsip_endpt_create_response.     */    pj_time_val		 rx_timestamp;    /** The transport manager for this buffer. */    pjsip_tpmgr		*mgr;    /** Ioqueue asynchronous operation key. */    pjsip_tx_data_op_key op_key;    /** Lock object. */    pj_lock_t		*lock;    /** The message in this buffer. */    pjsip_msg 		*msg;    /** Buffer to the printed text representation of the message. When the     *  content of this buffer is set, then the transport will send the content     *  of this buffer instead of re-printing the message structure. If the     *  message structure has changed, then application must invalidate this     *  buffer by calling #pjsip_tx_data_invalidate_msg.     */    pjsip_buffer	 buf;    /** Reference counter. */    pj_atomic_t		*ref_cnt;    /** Being processed by transport? */    int			 is_pending;    /** Transport manager internal. */    void		*token;    /** Callback to be called when this tx_data has been transmitted.	*/    void	       (*cb)(void*, pjsip_tx_data*, pj_ssize_t);    /** Transport information, only valid during on_tx_request() and      *  on_tx_response() callback.     */    struct    {	pjsip_transport	    *transport;	    /**< Transport being used.	*/	pj_sockaddr	     dst_addr;	    /**< Destination address.	*/	int		     dst_addr_len;  /**< Length of address.	*/	char		     dst_name[16];  /**< Destination address.	*/	int		     dst_port;	    /**< Destination port.	*/    } tp_info;    /**      * Transport selector, to specify which transport to be used.      * The value here must be set with pjsip_tx_data_set_transport(),     * to allow reference counter to be set properly.     */    pjsip_tpselector	    tp_sel;};/** * Create a new, blank transmit buffer. The reference count is initialized * to zero. * * @param mgr		The transport manager. * @param tdata		Pointer to receive transmit data. * * @return		PJ_SUCCESS, or the appropriate error code. * * @see pjsip_endpt_create_tdata */pj_status_t pjsip_tx_data_create( pjsip_tpmgr *mgr,                                  pjsip_tx_data **tdata );/** * Add reference counter to the transmit buffer. The reference counter controls * the life time of the buffer, ie. when the counter reaches zero, then it  * will be destroyed. * * @param tdata	    The transmit buffer. */PJ_DECL(void) pjsip_tx_data_add_ref( pjsip_tx_data *tdata );/** * Decrement reference counter of the transmit buffer. * When the transmit buffer is no longer used, it will be destroyed and * caller is informed with PJSIP_EBUFDESTROYED return status. * * @param tdata	    The transmit buffer data. * @return	    This function will always succeeded eventhough the return *		    status is non-zero. A status PJSIP_EBUFDESTROYED will be *		    returned to inform that buffer is destroyed. */PJ_DECL(pj_status_t) pjsip_tx_data_dec_ref( pjsip_tx_data *tdata );/** * Check if transmit data buffer contains a valid message. * * @param tdata	    The transmit buffer. * @return	    Non-zero (PJ_TRUE) if buffer contains a valid message. */PJ_DECL(pj_bool_t) pjsip_tx_data_is_valid( pjsip_tx_data *tdata );/** * Invalidate the print buffer to force message to be re-printed. Call * when the message has changed after it has been printed to buffer. The * message is printed to buffer normally by transport when it is about to be  * sent to the wire. Subsequent sending of the message will not cause * the message to be re-printed, unless application invalidates the buffer * by calling this function. * * @param tdata	    The transmit buffer. */PJ_DECL(void) pjsip_tx_data_invalidate_msg( pjsip_tx_data *tdata );/** * Get short printable info about the transmit data. This will normally return * short information about the message. * * @param tdata	    The transmit buffer. * * @return	    Null terminated info string. */PJ_DECL(char*) pjsip_tx_data_get_info( pjsip_tx_data *tdata );/** * Set the explicit transport to be used when sending this transmit data. * Application should not need to call this function, but rather use * pjsip_tsx_set_transport() and pjsip_dlg_set_transport() instead (which * will call this function). * * @param tdata	    The transmit buffer. * @param sel	    Transport selector. * * @return	    PJ_SUCCESS on success. */PJ_DECL(pj_status_t) pjsip_tx_data_set_transport(pjsip_tx_data *tdata,						 const pjsip_tpselector *sel);/***************************************************************************** * * TRANSPORT * *****************************************************************************//** * This structure represent the "public" interface of a SIP transport. * Applications normally extend this structure to include transport * specific members. */struct pjsip_transport{    char		    obj_name[PJ_MAX_OBJ_NAME];	/**< Name. */    pj_pool_t		   *pool;	    /**< Pool used by transport.    */    pj_atomic_t		   *ref_cnt;	    /**< Reference counter.	    */    pj_lock_t		   *lock;	    /**< Lock object.		    */    pj_bool_t		    tracing;	    /**< Tracing enabled?	    */    pj_bool_t		    is_shutdown;    /**< Being shutdown?	    */    /** Key for indexing this transport in hash table. */    struct {	pjsip_transport_type_e  type;	    /**< Transport type.	    */	pj_sockaddr		rem_addr;   /**< Remote addr (zero for UDP) */    } key;    char		   *type_name;	    /**< Type name.		    */    unsigned		    flag;	    /**< #pjsip_transport_flags_e   */    char		   *info;	    /**< Transport info/description.*/    int			    addr_len;	    /**< Length of addresses.	    */    pj_sockaddr		    local_addr;	    /**< Bound address.		    */    pjsip_host_port	    local_name;	    /**< Published name (eg. STUN). */    pjsip_host_port	    remote_name;    /**< Remote address name.	    */        pjsip_endpoint	   *endpt;	    /**< Endpoint instance.	    */    pjsip_tpmgr		   *tpmgr;	    /**< Transport manager.	    */    pj_timer_entry	    idle_timer;	    /**< Timer when ref cnt is zero.*/    /**     * Function to be called by transport manager to send SIP message.     *     * @param transport	    The transport to send the message.     * @param packet	    The buffer to send.     * @param length	    The length of the buffer to send.     * @param op_key	    Completion token, which will be supplied to     *			    caller when pending send operation completes.     * @param rem_addr	    The remote destination address.     * @param addr_len	    Size of remote address.     * @param callback	    If supplied, the callback will be called     *			    once a pending transmission has completed. If     *			    the function completes immediately (i.e. return     *			    code is not PJ_EPENDING), the callback will not     *			    be called.     *     * @return		    Should return PJ_SUCCESS only if data has been     *			    succesfully queued to operating system for      *			    transmission. Otherwise it may return PJ_EPENDING     *			    if the underlying transport can not send the     *			    data immediately and will send it later, which in     *			    this case caller doesn't have to do anything      *			    except wait the calback to be called, if it      *			    supplies one.     *			    Other return values indicate the error code.     */    pj_status_t (*send_msg)(pjsip_transport *transport, 			    pjsip_tx_data *tdata,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -