Hi Koray,
I'm glad you mentioned this, I'm currently working on a similar configuration and tested your scenario and found the same thing. I'm assuming you're using TSILO?
I just quickly tried this in the failure_route and it appears to be working but I'm sure there's still some optimisations to be done. It might need adapting for your situation.
if ($sht(tsilo=>active_branch::$tU) && t_check_status("[456][0-9][0-9]") ) {
t_drop_replies();
t_suspend();
xlog("suspended transaction [$T(id_index):$T(id_label)] $fU => $rU\n");
$sht(tsilo=>suspended::$tU) = "" + $T(id_index) + ":" + $T(id_label);
exit;
}
One obvious issue currently is when the mobile client registers it resumes the suspended transaction and does another look up on the location table, and then sends a new INVITE to the device that previously rejected the call. If that's a user that manually rejected a call it will be quite annoying.
I'll follow up tomorrow when I've spent more time on this, but hopefully it gets you started.
Thanks
Matthew