giupand created an issue (kamailio/kamailio#4330)

Description

Hi, I have a question about the dispatcher OPTIONS keepalive in Kamailio version 5.6.1.

I have a dispatcher configuration that probes two destinations with the same destination URI but using different sockets (see the database below), and the OPTIONS keepalive is enabled (status AP).
When the first destination (ID 27) goes down, its status changes to IP, and the second destination remains in AP.
However, when the second destination (ID 28) goes down, its status remains in AP, and the event_route[dispatcher:dst-down] does not seem to trigger.

+----+-------+------------------------+-------+----------+----------------------------------------------------------------------------------------------------------------+----------------+
| id | setid | destination            | flags | priority | attrs                                                                                                          | description    |
+----+-------+------------------------+-------+----------+----------------------------------------------------------------------------------------------------------------+----------------+
| 27 |    29 | sip:192.168.2.222:5060 |     2 |       21 | ping_from=sip:27@domain.com;socket=udp:192.168.2.250:5060                                                      |                |
| 28 |    29 | sip:192.168.2.222:5060 |     2 |       12 | ping_from=sip:28@domain.com;socket=udp:192.168.2.246:5060                                                      |                |
+----+-------+------------------------+-------+----------+----------------------------------------------------------------------------------------------------------------+----------------+

Wathcing the dispatcher code in Kamailio 5.6.1, I noticed that in the ds_update_state function, there is a loop over the dlist that performs a match on the destination using the input address parameter.

int ds_update_state(sip_msg_t *msg, int group, str *address, int state,ds_rctx_t *rctx)
[...]
while(i < idx->nr) {
		if(idx->dlist[i].uri.len == address->len
				&& strncasecmp(idx->dlist[i].uri.s, address->s, address->len) == 0) {
[...]

With the current database configuration, I believe the match is found only for the first entry (ID 27), and not for the second entry (ID 28). As a result, the status update doesn't seem to work for the second destination.

Is this a bug, or is there something wrong with my configuration?

Troubleshooting

Reproduction

Debugging Data

(paste your debugging data here)

Log Messages

(paste your log messages here)

SIP Traffic

(paste your sip traffic here)

Possible Solutions

Additional Information

(paste your output here)
(paste your output here)


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <kamailio/kamailio/issues/4330@github.com>