I'm trying to get the MWI indicator on endpoints to work by redirecting the SUBSCRIBE to the voicemail server (asterisk) using usc_replace_(to|from). This works fine for the initial request but the next subscribe will fail since the to/from don't get rewritten, which is indicated by the error: ERROR: uac [replace.c:250]: decline FROM replacing in sequential request in auto mode (has TO tag)
This occurs when the modparam "uac","restore_mode" is manual or auto. When set to none the redirect will be correct but all responses have to be rewritten manually (I'm a beginner and I don't want to do this just yet). And since uac has knowledge about this having being rewritten, sending the original from/to looks like like a bug to me (more probable a misconfiguration/omission of something crucial withing dialog responses :)
Changes to the (default debian package) config, in route route[PRESENCE] in if(is_method("SUBSCRIBE"))
if( is_method("SUBSCRIBE")) { if(search_hf("Event", "message-summary", "a")) { if (!www_authenticate("$fd", "subscriber")) { www_challenge("$fd", "1"); exit; }
if(avp_db_query("SELECT value FROM usr_preferences WHERE username='$au' and attribute='voicemail' ORDER BY value limit 1")) { $avp(voicemail)=$avp(i:1);
$avp(subscrfrom)=$fu; avp_subst("$avp(subscrfrom)", "/sip:.*@/sip:$avp(voicemail)@/"); uac_replace_from("$avp(subscrfrom)"); uac_replace_to("","sip:$avp(voicemail)@$sel(cfg_get.voicemail.srv_ip): $sel(cfg_get.voicemail.srv_port)"); remove_hf("Authorization");
$ru = "sip:" + $avp(voicemail) + "@" + $sel(cfg_get.voicemail.srv_ip) + ":" + $sel(cfg_get.voicemail.srv_port); route(RELAY); } } else { handle_subscribe(); t_release(); } } exit;
192.168.34.226 is the sip device, 192.168.32.40 kamailio, 192.168.32.41 the voicemailserver.
Initial request: U 192.168.34.226:5852 -> 192.168.32.40:5060 SUBSCRIBE sip:grandstream@sip.local SIP/2.0. From: "Daniel" sip:grandstream@sip.local;tag=67d8f67065827fe2. To: sip:grandstream@sip.local.
Gets rewritten to: U 192.168.32.40:5060 -> 192.168.32.41:5060 SUBSCRIBE sip:0880100782@192.168.32.41:5060 SIP/2.0. From: "Daniel" sip:0880100782@sip.local;tag=67d8f67065827fe2. To: sip:0880100782@192.168.32.41:5060.
The response gets relayed to the endpoint and MWI will light up since there is a message.
But next subscribe update from the endpoint triggers the "decline FROM replacing in sequential request" error and thus the subscribe send to voicemail is the original to/from: U 192.168.32.40:5060 -> 192.168.32.41:5060 SUBSCRIBE sip:0880100782@192.168.32.41:5060 SIP/2.0. From: "Daniel" sip:grandstream@sip.local;tag=67d8f67065827fe2. To: sip:grandstream@sip.local;tag=as324de8f3.
Resulting in a 404 since the to/from are not the real peername on the voicemail server. How do I force Kamailio to rewrite the from/to without doing this manually for a requests/responses (restore_mode none)? The easy way out of this problem would be to have a 1 to 1 relation for the Kamailio subscribers and voicemail peers. But uac_replace should work (somehow).
Attached is a full capture of the subscribe/notify. Running 3.3.2+squeeze from http://deb.kamailio.org/kamailio/. Machine is also running topoh module (192.168.0.1).