Sorted it. I needed to loop through the contacts, then select the correct ruid based on $ci
For completeness, here is my solution:
reg_fetch_contacts("location", "$fu", "un_reg"); $var(i) = 0; while ($var(i) < $(ulc(un_reg=>count))) { $var(ul_callid) = $(ulc(un_reg=>callid)[$var(i)]); $var(ul_ruid) = $(ulc(un_reg=>ruid)[$var(i)]); if ($var(ul_callid) == $ci) { xlog("L_INFO", "Unregistering contact $tu Ruid: $var(ul_ruid)\n"); unregister("location", "$fu", "$var(ul_ruid)"); $sht(regs=>$fU@$fd~$ci)=$null; } $var(i) = $var(i) + 1; }
- Charles
On Feb 19, 2021, at 9:43 AM, Charles Phillips charles@rustybike.com wrote:
Happy Friday!
To clean up contacts that have sent requests to unregister (Expires: 0) I am executing the following after a 200 OK response from the upstream server:
reg_fetch_contacts("location", "$fu", "un_reg"); xlog("L_INFO", "Removing unregistered contact From: $si To: $tu Ruid: $ulc(un_reg=>ruid)\n"); unregister("location", "$fu", "$ulc(un_reg=>ruid)”);
This produces the desired result when there is only one contact per AoR, but when multiple contacts are present, it seems to delete the first ruid (which makes sense as I am only providing the $fu).
So, the question, can I select the contact by call-id or some other unique identifier specific to the desired contact that I can grab from the transaction? Reading the reg_fetch_contact and unregister docs, they do not seem to provide for selection beyond uri.
- Charles