Greetings list,
I'm in the process of configuring Asterisk <-> OpenSER <-> Microsoft
Exchange 2007 Unified Messaging.
I have a windows based proxy that works great, and want to accomplish
the same feat using OpenSER. Below are network captures from the working
proxy and OpenSER. From comparing the working call and the OpenSER call
it looks like OpenSER needs to modify the CONTACT header in its last
"OK" response. I'm not sure that's right, but more importantly I'm
not
sure how to do this in the config. Any help or direction is greatly
appreciated.
Thanks,
-jon
p.s. Please cc me on any replies, I'm not currently subscribed to the
list.
openSER unsuccessfull call negotiation
===========
#
U +9.215930 asterisk:5060 -> openser:5060
INVITE sip:8885555@openser SIP/2.0.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK629bdb92;rport.
From: "Jon Webster" <sip:3149@asterisk>;tag=as43593b57.
To: <sip:8885555@openser>.
Contact: <sip:3149@asterisk>.
Call-ID: 46109877480231241e3b8e9d57036e69@asterisk.
CSeq: 102 INVITE.
User-Agent: Asterisk PBX.
Max-Forwards: 70.
Date: Sat, 03 Feb 2007 18:01:48 GMT.
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY.
Content-Type: application/sdp.
Content-Length: 216.
.
v=0.
o=root 381 381 IN IP4 asterisk.
s=session.
c=IN IP4 asterisk.
t=0 0.
m=audio 13614 RTP/AVP 0 101.
a=rtpmap:0 PCMU/8000.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-16.
a=silenceSupp:off - - - -.
#
U +0.000305 openser:5060 -> asterisk:5060
SIP/2.0 100 trying -- your call is important to us.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK629bdb92;rport=5060.
From: "Jon Webster" <sip:3149@asterisk>;tag=as43593b57.
To: <sip:8885555@openser>.
Call-ID: 46109877480231241e3b8e9d57036e69@asterisk.
CSeq: 102 INVITE.
Server: OpenSer (1.1.1-tls (i386/linux)).
Content-Length: 0.
Warning: 392 openser:5060 "Noisy feedback tells: pid=6890
req_src_ip=asterisk req_src_port=5060 in_uri=sip:8885555@openser
out_uri=sip:5555@openser via_cnt==1".
.
#
U +0.025313 openser:5060 -> asterisk:5060
SIP/2.0 180 Ringing.
FROM: "Jon Webster"<sip:3149@asterisk>;tag=as43593b57.
TO: <sip:8885555@openser>;epid=BD-70-82-06-F9;tag=e38b6cdb9b.
CSEQ: 102 INVITE.
CALL-ID: 46109877480231241e3b8e9d57036e69@asterisk.
MAX-FORWARDS: 70.
VIA: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK629bdb92;rport=5060.
CONTENT-LENGTH: 0.
SERVER: RTCC/2.0.6017.0.
.
#
U +0.016314 openser:5060 -> asterisk:5060
SIP/2.0 200 OK.
FROM: "Jon Webster"<sip:3149@asterisk>;tag=as43593b57.
TO: <sip:8885555@openser>;epid=BD-70-82-06-F9;tag=e38b6cdb9b.
CSEQ: 102 INVITE.
CALL-ID: 46109877480231241e3b8e9d57036e69@asterisk.
MAX-FORWARDS: 70.
VIA: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK629bdb92;rport=5060.
CONTACT: <sip:exchangeUM:5065;transport=Tcp;maddr=exchangeUM>.
CONTENT-LENGTH: 197.
CONTENT-TYPE: application/sdp.
SERVER: RTCC/2.0.6017.0.
.
v=0.
o=- 0 0 IN IP4 exchangeUM.
s=Microsoft Exchange Speech Engine.
c=IN IP4 exchangeUM.
t=0 0.
m=audio 59544 RTP/AVP 0 101.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-16.
a=ptime:20.
working proxy
===================
#
U +8.036801 asterisk:5060 -> goodproxy:5060
INVITE sip:5555@goodproxy SIP/2.0.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK42383fff;rport.
From: "Jon Webster" <sip:3149@asterisk>;tag=as07e96b4e.
To: <sip:5555@goodproxy>.
Contact: <sip:3149@asterisk>.
Call-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
CSeq: 102 INVITE.
User-Agent: Asterisk PBX.
Max-Forwards: 70.
Date: Sat, 03 Feb 2007 18:02:40 GMT.
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY.
Content-Type: application/sdp.
Content-Length: 216.
.
v=0.
o=root 381 381 IN IP4 asterisk.
s=session.
c=IN IP4 asterisk.
t=0 0.
m=audio 17160 RTP/AVP 0 101.
a=rtpmap:0 PCMU/8000.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-16.
a=silenceSupp:off - - - -.
#
U +0.003872 goodproxy:5060 -> asterisk:5060
SIP/2.0 100 Trying.
Via: SIP/2.0/UDP
asterisk:5060;branch=z9hG4bK42383fff;rport;received=goodproxy.
From: "Jon Webster" <sip:3149@asterisk>;tag=as07e96b4e.
To: <sip:5555@goodproxy>.
Call-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
CSeq: 102 INVITE.
User-Agent: M-Networks USR/1.0.
Allow: INVITE, INFO, ACK, CANCEL, BYE, NOTIFY, BENOTIFY, SUBSCRIBE.
Content-Length: 0.
.
#
U +0.139238 goodproxy:5060 -> asterisk:5060
SIP/2.0 180 Ringing.
Via: SIP/2.0/UDP
asterisk:5060;received=goodproxy;branch=z9hG4bK42383fff;rport.
FROM: "Jon Webster"<sip:3149@asterisk>;tag=as07e96b4e.
TO: <sip:5555@exchangeUM>;epid=BD-70-82-06-F9;tag=eb4f3cf30.
CSEQ: 102 INVITE.
CALL-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
MAX-FORWARDS: 70.
CONTENT-LENGTH: 0.
SERVER: RTCC/2.0.6017.0.
.
#
U +0.010224 goodproxy:5060 -> asterisk:5060
SIP/2.0 200 OK.
Via: SIP/2.0/UDP
asterisk:5060;received=goodproxy;branch=z9hG4bK42383fff;rport.
FROM: "Jon Webster"<sip:3149@asterisk>;tag=as07e96b4e.
TO: <sip:5555@exchangeUM>;epid=BD-70-82-06-F9;tag=eb4f3cf30.
CSEQ: 102 INVITE.
CALL-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
MAX-FORWARDS: 70.
CONTACT: <sip:goodproxy:5060>.
CONTENT-LENGTH: 197.
CONTENT-TYPE: application/sdp.
SERVER: RTCC/2.0.6017.0.
.
v=0.
o=- 0 0 IN IP4 exchangeUM.
s=Microsoft Exchange Speech Engine.
c=IN IP4 exchangeUM.
t=0 0.
m=audio 32458 RTP/AVP 0 101.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-16.
a=ptime:20.
.
#
U +0.000894 asterisk:5060 -> goodproxy:5060
ACK sip:goodproxy:5060 SIP/2.0.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK440651a7;rport.
From: "Jon Webster" <sip:3149@asterisk>;tag=as07e96b4e.
To: <sip:5555@goodproxy>;tag=eb4f3cf30.
Contact: <sip:3149@asterisk>.
Call-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
CSeq: 102 ACK.
User-Agent: Asterisk PBX.
Max-Forwards: 70.
Content-Length: 0.
.
#
U +5.475898 asterisk:5060 -> goodproxy:5060
BYE sip:goodproxy:5060 SIP/2.0.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK5fabb75e;rport.
From: "Jon Webster" <sip:3149@asterisk>;tag=as07e96b4e.
To: <sip:5555@goodproxy>;tag=eb4f3cf30.
Call-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
CSeq: 103 BYE.
User-Agent: Asterisk PBX.
Max-Forwards: 70.
Content-Length: 0.
.
#
U +0.028752 goodproxy:5060 -> asterisk:5060
SIP/2.0 200 OK.
Via: SIP/2.0/UDP
asterisk:5060;received=goodproxy;branch=z9hG4bK5fabb75e;rport.
FROM: "Jon Webster"<sip:3149@asterisk>;tag=as07e96b4e.
TO: <sip:5555@exchangeUM>;tag=eb4f3cf30;epid=BD-70-82-06-F9.
CSEQ: 103 BYE.
CALL-ID: 7d0450601533753042ce2d835a3f98d2@asterisk.
MAX-FORWARDS: 70.
CONTENT-LENGTH: 0.
SERVER: RTCC/2.0.6017.0.
.
#
# $Id: openser.cfg,v 1.5 2005/10/28 19:45:33 bogdan_iancu Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
debug=4 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
#fork=no
#log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
listen=openser
port=5060
children=4
fifo="/tmp/openser_fifo"
#
# uncomment the following lines for TLS support
#disable_tls = 0
#listen = tls:your_IP:5061
#tls_verify = 1
#tls_require_certificate = 0
#tls_method = TLSv1
#tls_certificate =
"/home/darilion/software/openser-1.0.1-cvs/sip-server/debian/openser/etc
/openser/tls/user/user-cert.pem"
#tls_private_key =
"/home/darilion/software/openser-1.0.1-cvs/sip-server/debian/openser/etc
/openser/tls/user/user-privkey.pem"
#tls_ca_list =
"/home/darilion/software/openser-1.0.1-cvs/sip-server/debian/openser/etc
/openser/tls/user/user-calist.pem"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
#loadmodule "/usr/lib/openser/modules/mysql.so"
loadmodule "/usr/lib/openser/modules/sl.so"
loadmodule "/usr/lib/openser/modules/tm.so"
loadmodule "/usr/lib/openser/modules/rr.so"
loadmodule "/usr/lib/openser/modules/maxfwd.so"
loadmodule "/usr/lib/openser/modules/usrloc.so"
loadmodule "/usr/lib/openser/modules/registrar.so"
loadmodule "/usr/lib/openser/modules/textops.so"
loadmodule "/usr/lib/openser/modules/uri.so"
loadmodule "/usr/lib/openser/modules/nathelper.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
#loadmodule "/usr/lib/openser/modules/auth.so"
#loadmodule "/usr/lib/openser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
#modparam("usrloc", "db_mode", 2)
# -- auth params --
# Uncomment if you are using auth module
#
#modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this
config),
# uncomment also the following parameter)
#
#modparam("auth_db", "password_column", "password")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# ------------------------- request routing logic -------------------
# main routing logic
route{
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
};
if (msg:len >= 2048 ) {
sl_send_reply("513", "Message too big");
exit;
};
if (method=="INVITE" && uri=~"^sip:888[0-9]*@")
{
log("\n\nSIP invite received
from exchange12\n\n");
strip(3);
t_relay("tcp:exchangeUM:5065");
exit;
};
# we record-route all messages -- to make sure that
# subsequent messages will go through our proxy; that's
# particularly good if upstream and downstream entities
# use different transport protocol
if (!method=="REGISTER")
record_route();
# subsequent messages withing a dialog should take the
# path determined by record-routing
if (loose_route()) {
# mark routing logic in request
append_hf("P-hint: rr-enforced\r\n");
route(1);
};
if (uri=="sip:openser:5060;transport=TCP") {
sl_send_reply("200", "OK");
exit;
}
if (!uri==myself) {
# mark routing logic in request
append_hf("P-hint: outbound\r\n");
# if you have some interdomain connections via TLS
#if(uri=~"(a)tls_domain1.net") {
# t_relay_to_tls("IP_domain1","port_domain1");
# exit;
#} else if(uri=~"(a)tls_domain2.net") {
# t_relay_to_tls("IP_domain2","port_domain2");
# exit;
#}
route(1);
};
# if the request is for other domain use UsrLoc
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest
authentication
#if (!www_authorize("openser.org",
"subscriber")) {
# www_challenge("openser.org", "0");
# exit;
#};
save("location");
exit;
};
lookup("aliases");
if (!uri==myself) {
append_hf("P-hint: outbound alias\r\n");
route(1);
};
# native SIP destinations are handled using our USRLOC
DB
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
exit;
};
append_hf("P-hint: usrloc applied\r\n");
};
route(1);
}
route[1] {
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
if (!t_relay()) {
sl_reply_error();
};
exit;
}
route[2] {
t_on_reply("1");
}