I'm not able to replicate the situation I described previously. Perhaps I was simply confused, over stressed, or hallucinating.
Allow me to attempt to explain the current configuration and what I'm trying to accomplish. Perhaps there is a simpler way of doing what I need?
Configuration Information SER - 192.168.0.3 CIC - 192.168.1.16 Phone1 - 192.168.0.14 (Cisco 7960) - registered with SER as st2030 with a uri of sip:st2030@192.168.0.14 - registered with CIC as 2030 with a uri of sip:st2030@192.168.0.3 Phone2 - 192.168.0.34 (Snom 200) - registered with SER as st2111 with a uri of sip:st2111@192.168.0.4 - registered with CIC as 2111 with a uri of sip:2111@192.168.0.3
Registrations on CIC are hard coded. SER registrations are done by each phone.
Both Phone1 and Phone2 register their presence with SER (confirmed via serctl) Both Phone1 and Phone2 have the SER server listed as their outbound proxy.
Currently, any destination physically on the CIC server (internal prompts and routing) work just fine from either Phone1 or Phone2. So, SER is routing the calls to CIC correctly. Additionally, calls from Phone1 to Phone2 through only SER (by stXXXX names) work fine (full audio).
The problem is that calls through both SER and CIC alert but don't appear to complete. That is if Phone1 calls Phone2 (or vice versa) by their numeric extensions on CIC the destination phone will ring but not connect (no audio).
So, to summarize, calls from either phone through SER to CIC work fine, as do calls from either phone to the other through only SER. However a call from either phone through SER to CIC and back through SER to the other phone do not.
You might ask why involve both the CIC and SER when the phones could quite easily communicate with the CIC server directly. This is but one step in a larger configuration. There will be a central CIC server and many branch locations connected via a WAN. The SER servers will sit at the branch locations and forward all calls (with a few exceptions such as 911) to to the central CIC server for handling. Calls need to go through the central CIC server for tracking/reporting purposes. Thus, it is possible that a call from an agent at one branch will route through the SER to the central CIC server only to be routed back through the same SER proxy to another agent at the same branch. The need for the SER proxies comes about with things like 911. With the SER proxy and a PSTN gateway, emergency calls can still be routed when the WAN connection to the central server is down.
My understanding of the flow in this instance is as follows (please correct me if I'm wrong): - Phone2 dials 2030. - SER performs a lookup for sip:2030@192.168.0.3 that fails. - SER rewrites the host address to Server1 (192.168.1.16) and state-fully forwards the call to sip:2030@192.168.1.16 - Server1 performs a lookup for sip:2030@192.168.1.16 and finds that it should connect to sip:st2030@192.168.0.3 - SER performs a lookup for sip:st2030@192.168.0.3 and finds that it should connect to sip:st2030@192.168.0.14 - Phone1 rings - Phone1 answers, audio path should be connected but is not.
Here is my current SER configuration:
# ----------- global configuration parameters ------------------------
debug=3 # debug level (cmd line: -dddddddddd) fork=yes log_stderror=no # (cmd line: -E) check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=4 fifo="/tmp/ser_fifo" listen="192.168.0.3"
# ------------------ module loading ----------------------------------
loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/exec.so"
# ----------------- setting module-specific parameters ---------------
modparam("usrloc", "db_mode", 0)
modparam("tm", "fr_inv_timer", 5 ) modparam("tm", "fr_timer", 5 )
# ------------------------- request routing logic -------------------
# main routing logic
route{
rewriteFromRoute();
if (uri==myself) { if (method=="REGISTER") { log(1, "registration"); save("location"); break; };
if (!lookup("location")) { rewritehost("192.168.1.16"); t_relay(); break; }; };
t_relay(); }