Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
tutorials:alias-example [2010/07/09 09:14] 87.93.23.172 |
tutorials:alias-example [2013/06/08 08:42] (current) jh [In-Dialog Requests] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | The benefits | + | The benefit |
- | + | ||
- | * support for re-use of tcp sessions between proxy and UAs | + | |
- | * supports for routing of requests to UAs behind NATs so that r-uri is always what UAs expect | + | |
- | + | ||
- | In the example below only functions related to signaling are shown. | + | |
===== Non-Register Initial Requests ===== | ===== Non-Register Initial Requests ===== | ||
- | Call add_contact_alias() | + | Call add_contact_alias() |
- | don't come from another | + | come from UAs behind NAT or which don't come via a proxy and transport protocol is not UDP. |
If you know that non-register initial request is going to another | If you know that non-register initial request is going to another | ||
proxy, set TO_PROXY flag before relaying the request. | proxy, set TO_PROXY flag before relaying the request. | ||
Line 21: | Line 15: | ||
route and find out, if next hop was a proxy. | route and find out, if next hop was a proxy. | ||
- | | + | < |
+ | route [NON_REGISTER_INITIAL_REQUESTS] { | ||
- | | + | |
- | route(ADD_CONTACT_ALIAS); | + | route(ADD_CONTACT_ALIAS); |
- | }; | + | }; |
- | ... | + | ... |
- | if (I_KNOW_FOR_SURE_THAT_NEXT_HOP_IS_ANOTHER_PROXY) { | + | if (I_KNOW_FOR_SURE_THAT_NEXT_HOP_IS_ANOTHER_PROXY) { |
- | setbflag(" | + | setbflag(" |
- | }; | + | }; |
- | if (NEXT_HOP_MAY_BE_ANOTHER_PROXY_BUT_I_DONT_KNOW_FOR_SURE) { | + | if (NEXT_HOP_MAY_BE_ANOTHER_PROXY_BUT_I_DONT_KNOW_FOR_SURE) { |
- | $avp(" | + | $avp(" |
- | }; | + | }; |
- | t_on_reply(" | + | t_on_reply(" |
- | if (!t_relay()) ... | + | if (!t_relay()) ... |
- | } | + | } |
- | | + | route [ADD_CONTACT_ALIAS] { |
- | | + | |
- | xlog(" | + | xlog(" |
- | send_reply(" | + | send_reply(" |
- | exit; | + | exit; |
- | }; | + | }; |
- | } | + | } |
+ | </ | ||
===== Register Requests ===== | ===== Register Requests ===== | ||
- | Call fix_nated_register() on register requests, if registering | + | Call fix_nated_register() on register requests, if registering |
- | behind | + | behind |
+ | < | ||
route [REGISTER_REQUESTS] { | route [REGISTER_REQUESTS] { | ||
... | ... | ||
- | if (isflagset(FROM_NATED) || (proto == TCP)) { | + | if (isflagset(FROM_NATED) || (proto |
fix_nated_register(); | fix_nated_register(); | ||
if (isflagset(FROM_NATED)) { | if (isflagset(FROM_NATED)) { | ||
Line 62: | Line 59: | ||
... | ... | ||
} | } | ||
+ | </ | ||
===== In-Dialog Requests ===== | ===== In-Dialog Requests ===== | ||
- | Call alias_contact() for all in-dialog requests that don't come | + | Call add_contact_alias() on all in-dialog requests |
- | from another proxy. | + | from another proxy and transport protocol is not UDP. Call handle_ruri_alias() for all in-dialog requests before |
- | t_relaying them to UAs. | + | t_relaying them to UAs. |
- | didn't set $du. | + | didn't set $du. |
+ | < | ||
route [IN_DIALOG_REQUESTS] { | route [IN_DIALOG_REQUESTS] { | ||
- | if (@via[2] | + | if (REQUEST_COMES_FROM_BEHIND_NAT || (is_first_hop() && (proto != UDP))) { |
route(ADD_CONTACT_ALIAS); | route(ADD_CONTACT_ALIAS); | ||
} | } | ||
Line 97: | Line 96: | ||
... | ... | ||
} | } | ||
+ | </ | ||
===== Replies ===== | ===== Replies ===== | ||
Line 103: | Line 103: | ||
another proxy. | another proxy. | ||
+ | < | ||
onreply_route [REPLY] { | onreply_route [REPLY] { | ||
Line 116: | Line 117: | ||
... | ... | ||
} | } | ||
+ | </ | ||
===== Notes ===== | ===== Notes ===== |