[Users] Asterisk OpenSER and Exchange 2007 Unified Messaging

Jon Webster jon.webster at elephantoutlook.com
Sat Feb 3 20:54:42 CET 2007


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 at openser SIP/2.0.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK629bdb92;rport.
From: "Jon Webster" <sip:3149 at asterisk>;tag=as43593b57.
To: <sip:8885555 at openser>.
Contact: <sip:3149 at asterisk>.
Call-ID: 46109877480231241e3b8e9d57036e69 at 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 at asterisk>;tag=as43593b57.
To: <sip:8885555 at openser>.
Call-ID: 46109877480231241e3b8e9d57036e69 at 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 at openser
out_uri=sip:5555 at openser via_cnt==1".
.

#
U +0.025313 openser:5060 -> asterisk:5060
SIP/2.0 180 Ringing.
FROM: "Jon Webster"<sip:3149 at asterisk>;tag=as43593b57.
TO: <sip:8885555 at openser>;epid=BD-70-82-06-F9;tag=e38b6cdb9b.
CSEQ: 102 INVITE.
CALL-ID: 46109877480231241e3b8e9d57036e69 at 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 at asterisk>;tag=as43593b57.
TO: <sip:8885555 at openser>;epid=BD-70-82-06-F9;tag=e38b6cdb9b.
CSEQ: 102 INVITE.
CALL-ID: 46109877480231241e3b8e9d57036e69 at 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 at goodproxy SIP/2.0.
Via: SIP/2.0/UDP asterisk:5060;branch=z9hG4bK42383fff;rport.
From: "Jon Webster" <sip:3149 at asterisk>;tag=as07e96b4e.
To: <sip:5555 at goodproxy>.
Contact: <sip:3149 at asterisk>.
Call-ID: 7d0450601533753042ce2d835a3f98d2 at 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 at asterisk>;tag=as07e96b4e.
To: <sip:5555 at goodproxy>.
Call-ID: 7d0450601533753042ce2d835a3f98d2 at 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 at asterisk>;tag=as07e96b4e.
TO: <sip:5555 at exchangeUM>;epid=BD-70-82-06-F9;tag=eb4f3cf30.
CSEQ: 102 INVITE.
CALL-ID: 7d0450601533753042ce2d835a3f98d2 at 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 at asterisk>;tag=as07e96b4e.
TO: <sip:5555 at exchangeUM>;epid=BD-70-82-06-F9;tag=eb4f3cf30.
CSEQ: 102 INVITE.
CALL-ID: 7d0450601533753042ce2d835a3f98d2 at 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 at asterisk>;tag=as07e96b4e.
To: <sip:5555 at goodproxy>;tag=eb4f3cf30.
Contact: <sip:3149 at asterisk>.
Call-ID: 7d0450601533753042ce2d835a3f98d2 at 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 at asterisk>;tag=as07e96b4e.
To: <sip:5555 at goodproxy>;tag=eb4f3cf30.
Call-ID: 7d0450601533753042ce2d835a3f98d2 at 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 at asterisk>;tag=as07e96b4e.
TO: <sip:5555 at exchangeUM>;tag=eb4f3cf30;epid=BD-70-82-06-F9.
CSEQ: 103 BYE.
CALL-ID: 7d0450601533753042ce2d835a3f98d2 at 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=~"@tls_domain1.net") {
		#	   t_relay_to_tls("IP_domain1","port_domain1");
		#	   exit;
		#} else if(uri=~"@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");
}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: openser.cfg
Type: application/octet-stream
Size: 5189 bytes
Desc: openser.cfg
Url : http://lists.kamailio.org/pipermail/users/attachments/20070203/7f253a55/attachment.obj 


More information about the Users mailing list