Group PJNATH_STUN_TRANSACTION

group PJNATH_STUN_TRANSACTION

STUN client transaction.

The STUN Client Transaction is used to manage outgoing STUN request, for example to retransmit the request and to notify application about the completion of the request.

The STUN Client Transaction does not use any networking operations, but instead application must supply the transaction with a callback to be used by the transaction to send outgoing requests. This way the STUN transaction is made more generic and can work with different types of networking codes in application.

Typedefs

typedef struct pj_stun_client_tsx pj_stun_client_tsx

Opaque declaration of STUN client transaction.

Functions

pj_status_t pj_stun_client_tsx_create(pj_stun_config *cfg, pj_pool_t *pool, pj_grp_lock_t *grp_lock, const pj_stun_tsx_cb *cb, pj_stun_client_tsx **p_tsx)

Create an instance of STUN client transaction. The STUN client transaction is used to transmit outgoing STUN request and to ensure the reliability of the request by periodically retransmitting the request, if necessary.

Parameters:
  • cfg – The STUN endpoint, which will be used to retrieve various settings for the transaction.

  • pool – Pool to be used to allocate memory from.

  • grp_lock – Group lock to synchronize.

  • cb – Callback structure, to be used by the transaction to send message and to notify the application about the completion of the transaction.

  • p_tsx – Pointer to receive the transaction instance.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

pj_status_t pj_stun_client_tsx_schedule_destroy(pj_stun_client_tsx *tsx, const pj_time_val *delay)

Schedule timer to destroy the transaction after the transaction is complete. Application normally calls this function in the on_complete() callback. When this timer elapsed, the on_destroy() callback will be called.

This is convenient to let the STUN transaction absorbs any response for the previous request retransmissions. If application doesn’t want this, it can destroy the transaction immediately by calling pj_stun_client_tsx_destroy().

Parameters:
  • tsx – The STUN transaction.

  • delay – The delay interval before on_destroy() callback is called.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

pj_status_t pj_stun_client_tsx_destroy(pj_stun_client_tsx *tsx)

Destroy the STUN transaction immediately after the transaction is complete. Application normally calls this function in the on_complete() callback.

Parameters:

tsx – The STUN transaction.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

pj_status_t pj_stun_client_tsx_stop(pj_stun_client_tsx *tsx)

Stop the client transaction.

Parameters:

tsx – The STUN transaction.

Returns:

PJ_SUCCESS on success or PJ_EINVAL if the parameter is NULL.

pj_bool_t pj_stun_client_tsx_is_complete(pj_stun_client_tsx *tsx)

Check if transaction has completed.

Parameters:

tsx – The STUN transaction.

Returns:

Non-zero if transaction has completed.

pj_status_t pj_stun_client_tsx_set_data(pj_stun_client_tsx *tsx, void *data)

Associate an arbitrary data with the STUN transaction. This data can be then retrieved later from the transaction, by using pj_stun_client_tsx_get_data() function.

Parameters:
  • tsx – The STUN client transaction.

  • data – Application data to be associated with the STUN transaction.

Returns:

PJ_SUCCESS on success.

void *pj_stun_client_tsx_get_data(pj_stun_client_tsx *tsx)

Get the user data that was previously associated with the STUN transaction.

Parameters:

tsx – The STUN client transaction.

Returns:

The user data.

pj_status_t pj_stun_client_tsx_send_msg(pj_stun_client_tsx *tsx, pj_bool_t retransmit, void *pkt, unsigned pkt_len)

Start the STUN client transaction by sending STUN request using this transaction. If reliable transport such as TCP or TLS is used, the retransmit flag should be set to PJ_FALSE because reliablity will be assured by the transport layer.

Parameters:
  • tsx – The STUN client transaction.

  • retransmit – Should this message be retransmitted by the STUN transaction.

  • pkt – The STUN packet to send.

  • pkt_len – Length of STUN packet.

Returns:

PJ_SUCCESS on success, or PJNATH_ESTUNDESTROYED when the user has destroyed the transaction in on_send_msg() callback, or any other error code as returned by on_send_msg() callback.

pj_status_t pj_stun_client_tsx_retransmit(pj_stun_client_tsx *tsx, pj_bool_t mod_count)

Request to retransmit the request. Normally application should not need to call this function since retransmission would be handled internally, but this functionality is needed by ICE.

Parameters:
  • tsx – The STUN client transaction instance.

  • mod_count – Boolean flag to indicate whether transmission count needs to be incremented.

Returns:

PJ_SUCCESS on success, or PJNATH_ESTUNDESTROYED when the user has destroyed the transaction in on_send_msg() callback, or any other error code as returned by on_send_msg() callback.

pj_status_t pj_stun_client_tsx_on_rx_msg(pj_stun_client_tsx *tsx, const pj_stun_msg *msg, const pj_sockaddr_t *src_addr, unsigned src_addr_len)

Notify the STUN transaction about the arrival of STUN response. If the STUN response contains a final error (300 and greater), the transaction will be terminated and callback will be called. If the STUN response contains response code 100-299, retransmission will cease, but application must still call this function again with a final response later to allow the transaction to complete.

Parameters:
  • tsx – The STUN client transaction instance.

  • msg – The incoming STUN message.

  • src_addr – The source address of the packet.

  • src_addr_len – The length of the source address.

Returns:

PJ_SUCCESS on success or the appropriate error code.

struct pj_stun_tsx_cb
#include <stun_transaction.h>

STUN client transaction callback.

Public Members

void (*on_complete)(pj_stun_client_tsx *tsx, pj_status_t status, const pj_stun_msg *response, const pj_sockaddr_t *src_addr, unsigned src_addr_len)

This callback is called when the STUN transaction completed.

Param tsx:

The STUN transaction.

Param status:

Status of the transaction. Status PJ_SUCCESS means that the request has received a successful response.

Param response:

The STUN response, which value may be NULL if status is not PJ_SUCCESS.

Param src_addr:

The source address of the response, if response is not NULL.

Param src_addr_len:

The length of the source address.

pj_status_t (*on_send_msg)(pj_stun_client_tsx *tsx, const void *stun_pkt, pj_size_t pkt_size)

This callback is called by the STUN transaction when it wants to send outgoing message.

Param tsx:

The STUN transaction instance.

Param stun_pkt:

The STUN packet to be sent.

Param pkt_size:

Size of the STUN packet.

Return:

If return value of the callback is not PJ_SUCCESS, the transaction will fail. Application MUST return PJNATH_ESTUNDESTROYED if it has destroyed the transaction in this callback.

void (*on_destroy)(pj_stun_client_tsx *tsx)

This callback is called after the timer that was scheduled by pj_stun_client_tsx_schedule_destroy() has elapsed. Application should call pj_stun_client_tsx_destroy() upon receiving this callback.

This callback is optional if application will not call pj_stun_client_tsx_schedule_destroy().

Param tsx:

The STUN transaction instance.