📄 sip_transport.h
字号:
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 + -