Defines | Functions | Variables

modules_k/rr/loose.c File Reference

Route & Record-Route module, loose routing support. More...

#include <string.h>
#include "../../ut.h"
#include "../../str.h"
#include "../../dprint.h"
#include "../../forward.h"
#include "../../data_lump.h"
#include "../../socket_info.h"
#include "../../parser/parse_rr.h"
#include "../../parser/parse_uri.h"
#include "../../parser/parse_from.h"
#include "../../mem/mem.h"
#include "../../dset.h"
#include "loose.h"
#include "rr_cb.h"
#include "rr_mod.h"
Include dependency graph for modules_k/rr/loose.c:

Go to the source code of this file.

Defines

Functions

Variables


Detailed Description

Definition in file modules_k/rr/loose.c.


Function Documentation

static int after_loose ( struct sip_msg _m,
int  preloaded 
) [inline, static]
Parameters:
_m SIP message
preloaded do we have a preloaded route set
Returns:
-1 on failure, 1 on success

Definition at line 670 of file modules_k/rr/loose.c.

References hdr_field::body, sip_msg::buf, enable_double_rr, enable_socket_mismatch_warning, find_next_route(), get_maddr_uri(), handle_sr(), sip_uri::host, sip_msg::id, is_myself(), is_strict(), hdr_field::len, _str::len, hdr_field::name, NOT_RR_DRIVEN, sip_uri::params, hdr_field::parsed, sip_uri::proto, routed_msg_id, run_rr_callbacks(), _str::s, set_dst_uri(), and set_force_socket.

Referenced by loose_route().

Here is the call graph for this function:

Here is the caller graph for this function:

static int after_strict ( struct sip_msg _m  )  [inline, static]
Parameters:
_m SIP message
Returns:
-1 on error, 1 on success

Definition at line 489 of file modules_k/rr/loose.c.

References hdr_field::body, sip_msg::buf, enable_double_rr, enable_socket_mismatch_warning, find_next_route(), find_rem_target(), get_maddr_uri(), sip_uri::host, sip_msg::id, is_myself(), is_strict(), hdr_field::len, _str::len, hdr_field::name, sip_uri::params, hdr_field::parsed, sip_msg::parsed_uri, sip_uri::proto, routed_msg_id, run_rr_callbacks(), _str::s, set_dst_uri(), and set_force_socket.

Referenced by loose_route().

Here is the call graph for this function:

Here is the caller graph for this function:

int check_route_param ( struct sip_msg msg,
regex_t *  re 
)

The function checks for the request "msg" if the URI parameters of the local Route header (corresponding to the local server) matches the given regular expression "re". It must be call after the loose_route was done.

Parameters:
msg SIP message request that will has the Route header parameters checked
re compiled regular expression to be checked against the Route header parameters
Returns:
-1 on failure, 1 on success

Definition at line 865 of file modules_k/rr/loose.c.

References sip_msg::id, _str::len, routed_msg_id, and _str::s.

static int find_first_route ( struct sip_msg _m  )  [inline, static]
Parameters:
_m SIP message
Returns:
-1 or -2 on a parser error, 0 if there is a Route HF and 1 if there is no Route HF

Definition at line 95 of file modules_k/rr/loose.c.

References parse_rr().

Referenced by loose_route().

Here is the call graph for this function:

Here is the caller graph for this function:

static int find_next_route ( struct sip_msg _m,
struct hdr_field **  _hdr 
) [inline, static]
Parameters:
_m SIP message
_hdr SIP header
Returns:
negative on failure, 0 if the Route header was already parsed, 1 if no next Route header could be found

Definition at line 155 of file modules_k/rr/loose.c.

References HDR_ROUTE_T, sip_msg::last_header, hdr_field::next, parse_rr(), and hdr_field::type.

Referenced by after_loose(), and after_strict().

Here is the call graph for this function:

Here is the caller graph for this function:

static int find_rem_target ( struct sip_msg _m,
struct hdr_field **  _h,
rr_t **  _l,
rr_t **  _p 
) [inline, static]

Find last route in the last Route header field, if there was a previous route in the last Route header field, it will be saved in _p parameter

Parameters:
_m SIP message
_h SIP header field
_l Route & Record-Route header field body
_p Route & Record-Route header field body
Returns:
negative on failure, 0 on success

Definition at line 446 of file modules_k/rr/loose.c.

References HDR_EOH_F, HDR_ROUTE_T, rr::next, hdr_field::next, parse_rr(), hdr_field::parsed, and hdr_field::type.

Referenced by after_strict().

Here is the call graph for this function:

Here is the caller graph for this function:

static int get_maddr_uri ( str uri,
struct sip_uri puri 
) [inline, static]
Parameters:
uri URI to be checked if it has maddr, and also the output URI
puri parsed URI
Returns:
-1 on failure, 0 on success

Definition at line 341 of file modules_k/rr/loose.c.

References _str::len, sip_uri::maddr_val, sip_uri::port, and _str::s.

Referenced by after_loose(), after_strict(), and handle_sr().

Here is the caller graph for this function:

int get_route_param ( struct sip_msg msg,
str name,
str val 
)

The function search in to the "msg"'s Route header parameters the parameter called "name" and returns its value into "val". It must be call only after the loose_route is done.

Parameters:
msg - request that will have the Route header parameter searched
name - contains the Route header parameter to be serached
val returns the value of the searched Route header parameter if found. It might be an empty string if the parameter had no value.
Returns:
0 if parameter was found (even if it has no value), -1 otherwise

Definition at line 909 of file modules_k/rr/loose.c.

References sip_msg::id, _str::len, routed_msg_id, and _str::s.

Referenced by is_direction().

Here is the caller graph for this function:

static int handle_sr ( struct sip_msg _m,
struct hdr_field _hdr,
rr_t _r 
) [inline, static]
Parameters:
_m SIP message
_hdr SIP header field
_r Route & Record-Route header field body
Returns:
0 on success, negative on an error

Definition at line 395 of file modules_k/rr/loose.c.

References hdr_field::body, sip_msg::buf, get_maddr_uri(), hdr_field::len, name_addr::name, hdr_field::name, rr::nameaddr, rr::next, _str::s, save_ruri(), and name_addr::uri.

Referenced by after_loose().

Here is the call graph for this function:

Here is the caller graph for this function:

int is_direction ( struct sip_msg msg,
int  dir 
)

The function checks the flow direction of the request "msg". As for checking it's used the "ftag" Route header parameter, the append_fromtag module parameter must be enables. Also this must be call only after the loose_route is done.

Parameters:
msg SIP message request that will have the direction checked
dir direction to be checked against. It may be RR_FLOW_UPSTREAM or RR_FLOW_DOWNSTREAM
Returns:
0 if the request flow direction is the same as the given direction, -1 otherwise

Definition at line 1001 of file modules_k/rr/loose.c.

References get_route_param(), sip_msg::id, _str::len, parse_from_header(), hdr_field::parsed, and _str::s.

Here is the call graph for this function:

static int is_myself ( sip_uri_t _puri  )  [inline, static]
Parameters:
_host host
_port port
Returns:
0 if the URI is not myself, 1 otherwise

Definition at line 121 of file modules_k/rr/loose.c.

References sip_uri::host, _str::len, _str::s, SIP_PORT, and sip_uri::user.

Referenced by after_loose(), after_strict(), and loose_route().

Here is the caller graph for this function:

static int is_preloaded ( struct sip_msg msg  )  [static]
Parameters:
msg SIP message
Returns:
-1 on failure, 0 on success

Definition at line 65 of file modules_k/rr/loose.c.

References _str::len, and _str::s.

Referenced by loose_route().

Here is the caller graph for this function:

static int is_strict ( str _params  )  [inline, static]
Parameters:
_params URI string
Returns:
1 if URI contains no lr parameter, 0 if it contains a lr parameter

Definition at line 198 of file modules_k/rr/loose.c.

References _str::len, and _str::s.

Referenced by after_loose(), and after_strict().

Here is the caller graph for this function:

int loose_route ( struct sip_msg _m  ) 
Parameters:
_m SIP message
Returns:
-1 on failure, 1 on success

Definition at line 824 of file modules_k/rr/loose.c.

References after_loose(), after_strict(), find_first_route(), is_myself(), is_preloaded(), and sip_msg::parsed_uri.

Referenced by w_loose_route().

Here is the call graph for this function:

Here is the caller graph for this function:

static int save_ruri ( struct sip_msg _m  )  [inline, static]

Set Request-URI as last Route header of a SIP message, this is necessary when forwarding to a strict router. Allocates memory for message lump in private memory.

Parameters:
_m SIP message
Returns:
negative on failure, 0 on success

Definition at line 288 of file modules_k/rr/loose.c.

References anchor_lump(), sip_msg::buf, sip_msg::first_line, HDR_EOH_F, ROUTE_SUFFIX, and sip_msg::unparsed.

Referenced by handle_sr().

Here is the call graph for this function:

Here is the caller graph for this function: