📄 sip_util.h
字号:
/**
* This structure describes destination information to send response.
* It is initialized by calling #pjsip_get_response_addr().
*
* If the response message should be sent using transport from which
* the request was received, then transport, addr, and addr_len fields
* are initialized.
*
* The dst_host field is also initialized. It should be used when server
* fails to send the response using the transport from which the request
* was received, or when the transport is NULL, which means server
* must send the response to this address (this situation occurs when
* maddr parameter is set, or when rport param is not set in the request).
*/
typedef struct pjsip_response_addr
{
pjsip_transport *transport; /**< Immediate transport to be used. */
pj_sockaddr addr; /**< Immediate address to send to. */
int addr_len; /**< Address length. */
pjsip_host_info dst_host; /**< Destination host to contact. */
} pjsip_response_addr;
/**
* Determine which address (and transport) to use to send response message
* based on the received request. This function follows the specification
* in section 18.2.2 of RFC 3261 and RFC 3581 for calculating the destination
* address and transport.
*
* The information about destination to send the response will be returned
* in res_addr argument. Please see #pjsip_response_addr for more info.
*
* @param pool The pool.
* @param rdata The incoming request received by the server.
* @param res_addr On return, it will be initialized with information about
* destination address and transport to send the response.
*
* @return zero (PJ_OK) if successfull.
*/
PJ_DECL(pj_status_t) pjsip_get_response_addr(pj_pool_t *pool,
pjsip_rx_data *rdata,
pjsip_response_addr *res_addr);
/**
* Send response in tdata statelessly. The function will take care of which
* response destination and transport to use based on the information in the
* Via header (such as the presence of rport, symmetric transport, etc.).
*
* This function will create a new ephemeral transport if no existing
* transports can be used to send the message to the destination. The ephemeral
* transport will be destroyed after some period if it is not used to send any
* more messages.
*
* The behavior of this function complies with section 18.2.2 of RFC 3261
* and RFC 3581.
*
* @param endpt The endpoint instance.
* @param res_addr The information about the address and transport to send
* the response to. Application can get this information
* by calling #pjsip_get_response_addr().
* @param tdata The response message to be sent.
* @param token Token to be passed back when the callback is called.
* @param cb Optional callback to notify the transmission status
* to application, and to inform whether next address or
* transport will be tried.
*
* @return PJ_SUCCESS if response has been successfully created and
* sent to transport layer, or a non-zero error code.
* However, even when it returns PJ_SUCCESS, there is no
* guarantee that the response has been successfully sent.
*/
PJ_DECL(pj_status_t) pjsip_endpt_send_response( pjsip_endpoint *endpt,
pjsip_response_addr *res_addr,
pjsip_tx_data *tdata,
void *token,
void (*cb)(pjsip_send_state*,
pj_ssize_t sent,
pj_bool_t *cont));
/**
* This is a convenient function which wraps #pjsip_get_response_addr() and
* #pjsip_endpt_send_response() in a single function.
*
* @param endpt The endpoint instance.
* @param rdata The original request to be responded.
* @param tdata The response message to be sent.
* @param token Token to be passed back when the callback is called.
* @param cb Optional callback to notify the transmission status
* to application, and to inform whether next address or
* transport will be tried.
*
* @return PJ_SUCCESS if response has been successfully created and
* sent to transport layer, or a non-zero error code.
* However, even when it returns PJ_SUCCESS, there is no
* guarantee that the response has been successfully sent.
*/
PJ_DECL(pj_status_t) pjsip_endpt_send_response2(pjsip_endpoint *endpt,
pjsip_rx_data *rdata,
pjsip_tx_data *tdata,
void *token,
void (*cb)(pjsip_send_state*,
pj_ssize_t sent,
pj_bool_t *cont));
/**
* This composite function sends response message statelessly to an incoming
* request message. Internally it calls #pjsip_endpt_create_response() and
* #pjsip_endpt_send_response().
*
* @param endpt The endpoint instance.
* @param rdata The incoming request message.
* @param st_code Status code of the response.
* @param st_text Optional status text of the response.
* @param hdr_list Optional header list to be added to the response.
* @param body Optional message body to be added to the response.
*
* @return PJ_SUCCESS if response message has successfully been
* sent.
*/
PJ_DECL(pj_status_t) pjsip_endpt_respond_stateless(pjsip_endpoint *endpt,
pjsip_rx_data *rdata,
int st_code,
const pj_str_t *st_text,
const pjsip_hdr *hdr_list,
const pjsip_msg_body *body);
/**
* @}
*/
/**
* @defgroup PJSIP_TRANSACT_UTIL Stateful Operations
* @ingroup PJSIP_TRANSACT
* @brief Utility function to send requests/responses statefully.
* @{
*/
/**
* This composite function creates and sends response statefully for the
* incoming request.
*
* @param endpt The endpoint instance.
* @param tsx_user The module to be registered as transaction user.
* @param rdata The incoming request message.
* @param st_code Status code of the response.
* @param st_text Optional status text of the response.
* @param hdr_list Optional header list to be added to the response.
* @param body Optional message body to be added to the response.
* @param p_tsx Optional pointer to receive the transaction which was
* created to send the response.
*
* @return PJ_SUCCESS if response message has successfully been
* created.
*/
PJ_DECL(pj_status_t) pjsip_endpt_respond( pjsip_endpoint *endpt,
pjsip_module *tsx_user,
pjsip_rx_data *rdata,
int st_code,
const pj_str_t *st_text,
const pjsip_hdr *hdr_list,
const pjsip_msg_body *body,
pjsip_transaction **p_tsx );
/**
* Send outgoing request and initiate UAC transaction for the request.
* This is an auxiliary function to be used by application to send arbitrary
* requests outside a dialog. To send a request within a dialog, application
* should use #pjsip_dlg_send_request instead.
*
* @param endpt The endpoint instance.
* @param tdata The transmit data to be sent.
* @param timeout Optional timeout for final response to be received, or -1
* if the transaction should not have a timeout restriction.
* The value is in miliseconds.
* @param token Optional token to be associated with the transaction, and
* to be passed to the callback.
* @param cb Optional callback to be called when the transaction has
* received a final response. The callback will be called with
* the previously registered token and the event that triggers
* the completion of the transaction.
*
* @return PJ_SUCCESS, or the appropriate error code.
*/
PJ_DECL(pj_status_t) pjsip_endpt_send_request( pjsip_endpoint *endpt,
pjsip_tx_data *tdata,
pj_int32_t timeout,
void *token,
void (*cb)(void*,pjsip_event*));
/**
* @}
*/
/**
* @defgroup PJSIP_PROXY_CORE Core Proxy Layer
* @ingroup PJSIP
* @brief Core proxy operations
* @{
*/
/**
* Create new request message to be forwarded upstream to new destination URI
* in uri. The new request is a full/deep clone of the request received in
* rdata, unless if other copy mechanism is specified in the options.
* The branch parameter, if not NULL, will be used as the branch-param in
* the Via header. If it is NULL, then a unique branch parameter will be used.
*
* Note: this function DOES NOT perform Route information preprocessing as
* described in RFC 3261 Section 16.4. Application must take care of
* removing/updating the Route headers according of the rules as
* described in that section.
*
* @param endpt The endpoint instance.
* @param rdata The incoming request message.
* @param uri The URI where the request will be forwarded to.
* @param branch Optional branch parameter. Application may specify its
* own branch, for example if it wishes to perform loop
* detection. If the branch parameter is not specified,
* this function will generate its own by calling
* #pjsip_calculate_branch_id() function.
* @param options Optional option flags when duplicating the message.
* @param tdata The result.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_create_request_fwd(pjsip_endpoint *endpt,
pjsip_rx_data *rdata,
const pjsip_uri *uri,
const pj_str_t *branch,
unsigned options,
pjsip_tx_data **tdata);
/**
* Create new response message to be forwarded downstream by the proxy from
* the response message found in rdata. Note that this function practically
* will clone the response as is, i.e. without checking the validity of the
* response or removing top most Via header. This function will perform
* full/deep clone of the response, unless other copy mechanism is used in
* the options.
*
* @param endpt The endpoint instance.
* @param rdata The incoming response message.
* @param options Optional option flags when duplicate the message.
* @param tdata The result
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_create_response_fwd( pjsip_endpoint *endpt,
pjsip_rx_data *rdata,
unsigned options,
pjsip_tx_data **tdata);
/**
* Create a globally unique branch parameter based on the information in
* the incoming request message, for the purpose of creating a new request
* for forwarding. This is the default implementation used by
* #pjsip_endpt_create_request_fwd() function if the branch parameter is
* not specified.
*
* The default implementation here will just create an MD5 hash of the
* top-most Via.
*
* Note that the returned string was allocated from rdata's pool.
*
* @param rdata The incoming request message.
*
* @return Unique branch-ID string.
*/
PJ_DECL(pj_str_t) pjsip_calculate_branch_id( pjsip_rx_data *rdata );
/**
* @}
*/
PJ_END_DECL
#endif /* __PJSIP_SIP_MISC_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -