Module: kamailio
Branch: master
Commit: e997473fd2dea1056b601ab76693e071f3480866
URL:
https://github.com/kamailio/kamailio/commit/e997473fd2dea1056b601ab76693e07…
Author: Morten Tryfoss <morten(a)tryfoss.no>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2023-11-13T11:25:42+01:00
cdp: Support for diameter routing agent (DRA) / relay
If an endpoint responds with a CEA indicating support for relaying
(application-id 0xffffffff), let this endpoint be used for any application.
---
Modified: src/modules/cdp/diameter.h
Modified: src/modules/cdp/routing.c
---
Diff:
https://github.com/kamailio/kamailio/commit/e997473fd2dea1056b601ab76693e07…
Patch:
https://github.com/kamailio/kamailio/commit/e997473fd2dea1056b601ab76693e07…
---
diff --git a/src/modules/cdp/diameter.h b/src/modules/cdp/diameter.h
index 1e69dd2be62..b84f01b4787 100644
--- a/src/modules/cdp/diameter.h
+++ b/src/modules/cdp/diameter.h
@@ -87,6 +87,8 @@
#define to_32x_len(_len_) ((_len_) + (((_len_)&3) ? 4 - ((_len_)&3) : 0))
+#define RELAY_APP_ID 0xffffffff
+
/* AAA TYPES */
#define AAA_NO_VENDOR_ID 0
diff --git a/src/modules/cdp/routing.c b/src/modules/cdp/routing.c
index 82b6b15eda0..53a660960bb 100644
--- a/src/modules/cdp/routing.c
+++ b/src/modules/cdp/routing.c
@@ -98,7 +98,8 @@ peer *get_first_connected_route(
cdp_session
->hash); /*V1.1 - As we were...no call seems to pass cdp_session unlocked */
if(p && !p->disabled && (p->state == I_Open || p->state ==
R_Open)
- && peer_handles_application(p, app_id, vendor_id)) {
+ && (peer_handles_application(p, app_id, vendor_id)
+ || peer_handles_application(p, RELAY_APP_ID, 0))) {
p->last_selected = time(NULL);
LM_DBG("Found a sticky peer [%.*s] for this session - "
"re-using\n",
@@ -121,7 +122,8 @@ peer *get_first_connected_route(
(p->state == I_Open || p->state == R_Open) ? "opened"
: "closed");
if(p && !p->disabled && (p->state == I_Open || p->state ==
R_Open)
- && peer_handles_application(p, app_id, vendor_id)) {
+ && (peer_handles_application(p, app_id, vendor_id)
+ || peer_handles_application(p, RELAY_APP_ID, 0))) {
LM_DBG("The peer %.*s matches - will forward there\n", i->fqdn.len,
i->fqdn.s);
if(peer_count != 0) { //check the metric