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();
}
--
Jamin W. Collins