high.all!
i'm wondering if there is any support of uaCSTA in openser (planned)?
i'm just working on the integration of asterisk (*) environment to OCS 2007
environment, having openSER in the middle (mainly for TCP/UDP translation
and smoothing out the protocol deficienes on both sides). in this setup the
* having the openSER in front is talking to the OCS (and vice versa) via the
OCS mediation server, which is moreorless sending standard SIP messages,
which enables normal softphone (integration to *) of the office
communicator. this configuration is already working...
now i'm planning to go for the CTI integration, where there is no OCS
mediation server in between OCS and openSER, doing the translation of
SIP/CSTA to SIP. i'm thinking about using openSER for this task, that's why
i'm looking for a CSTA module or perl programm, which is capable of this
functionality.
afaik for the CTI communication there isn't the full complexity of CSTA
needed, just a subset mainly for call setup and call clearing.
anyone having experience on this topic?
thx & cheers
-hugo
Great Ideas for Small Devices
Hugo Koblmueller
Senior Staff Engineer Software Development COMNEON electronic
technology GmbH & Co. OHG
Freistaedter Strasse 400
4040 Linz
Austria
hugo.koblmueller(a)comneon.com
tel:
fax:
mobile:
Skype ID: +43 (5) 1777 - 15730
<http://www.plaxo.com/click_to_call?lang=en&src=jj_signature&To=%2B43+%285%2
9+1777+%2D+15730&Email=hugo(a)koblmueller.com>
+43 (5) 1777 - 15810
+43 (676) 82051280
<http://www.plaxo.com/click_to_call?lang=en&src=jj_signature&To=%2B43+%28676
%29+82051280&Email=hugo(a)koblmueller.com>
drhookson
Want to always have my latest info?
<https://www.plaxo.com/add_me?u=21475050628&src=client_sig_212_1_banner_join
&invite=1&lang=en> Want a signature like
<http://www.plaxo.com/signature?src=client_sig_212_1_banner_sig&lang=en>
this?
Hello,
I had posted this question earlier on asterisk-users, but didn't receive
any reply, so I'm posting on sr-users in the hope that someone can
provide guidance on how to debug this problem.
Our setup involves a Sip softphone registering with a fresh install of
Asterisk v1.6.0.5 through an outbound proxy (Kamailio v3.1.1).
We observe that about 80% of the time, immediately after startup of the
softphone, when the softphone sends a REGISTER message, Asterisk replies
with a "503 Server error". However, subsequent REGISTER messages are
replied to appropriately (with a 401 Unauthorized).
There are very few devices (under 5) registered with Asterisk, so this
is not an overload issue.
Please find attached a SIP trace for device registration.
- What might cause this behavior in Asterisk ?
- Are there any config file parameters that require to be changed ?
- Would it help to see any other specific logs, if so which ones ?
Thanks and Regards,
Vikram.
Hi All,
Kamailio had just started to get SIP attacked and it looked like they were
sending a bad header and Kamailio died..
Nov 20 19:48:51 sipproxy sip[3383]: INFO: <script>: [R-MAIN =>] Request
method OPTIONS is to our domain (212.124.123.170)
Nov 20 19:48:51 sipproxy sip[3378]: INFO: <script>: [ROUTE-1] Received
registration from sip:1368250498@sipproxy (212.124.123.170)
Nov 20 19:48:51 sipproxy sip[3378]: INFO: <script>: [ROUTE-1 !] Credentials
invalid; issuing challenge
Nov 20 19:48:51 sipproxy sip[3381]: INFO: <script>: [ROUTE-1] Received
registration from sip:100@sipproxy (212.124.123.170)
Nov 20 19:48:51 sipproxy sip[3381]: INFO: <script>: [ROUTE-1 !] Credentials
invalid; issuing challenge
Nov 20 19:48:51 sipproxy sip[3374]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.401446] kamailio[3374]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3373]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.636774] kamailio[3373]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3388]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.680305] kamailio[3388]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3390]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.710444] kamailio[3390]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3383]: INFO: <script>: [ROUTE-1] Received
registration from sip:2478223614@sipproxy (212.124.123.170)
Nov 20 19:48:51 sipproxy sip[3383]: INFO: <script>: [ROUTE-1 !] Credentials
invalid; issuing challenge
Nov 20 19:48:51 sipproxy sip[3378]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.753334] kamailio[3378]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3379]: INFO: <script>: [ROUTE-1] Received
registration from sip:noauth@sipproxy (212.124.123.170)
Nov 20 19:48:51 sipproxy sip[3379]: INFO: <script>: [ROUTE-1 !] Credentials
invalid; issuing challenge
Nov 20 19:48:51 sipproxy sip[3375]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.768137] kamailio[3375]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3383]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.775628] kamailio[3383]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3386]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.790925] kamailio[3386]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3379]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.798926] kamailio[3379]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:51 sipproxy sip[3381]: INFO: <core> [parser/msg_parser.c:339]:
ERROR: bad header field [CSeq: 1 REGISTER ACK]
Nov 20 19:48:51 sipproxy kernel: [1033573.815493] kamailio[3381]: segfault
at 18 ip b70070d9 sp bf916118 error 4 in topoh.so[b7004000+c000]
Nov 20 19:48:54 sipproxy sip[3344]: INFO: <core> [main.c:737]: INFO:
terminating due to SIGCHLD
Nov 20 19:48:54 sipproxy sip[3399]: INFO: <core> [main.c:788]: INFO: signal
15 received
Nov 20 19:48:54 sipproxy sip[3396]: INFO: <core> [main.c:788]: INFO: signal
15 received
Nov 20 19:48:54 sipproxy sip[3400]: INFO: <core> [main.c:788]: INFO: signal
15 received
Nov 20 19:48:54 sipproxy sip[3392]: INFO: <core> [main.c:788]: INFO: signal
15 received
Nov 20 19:48:54 sipproxy sip[3401]: INFO: <core> [main.c:788]: INFO: signal
15 received
Nov 20 19:48:54 sipproxy sip[3394]: INFO: <core> [main.c:788]: INFO: signal
15 received
Nov 20 19:48:54 sipproxy sip[3402]: INFO: <core> [main.c:788]: INFO: signal
15 received
Thanks
Brian
Hello!
I went through your letters and start as following:
-------------------------------------------------------
root@ubuntu:/home/yeti/rtpproxy# /etc/init.d/kamailio restart
Restarting kamailio: kamailioloading modules under /usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/
Listening on
udp: 192.168.124.158:5060
udp: FEC0:0:0:0:0:0:0:2:5060
tcp: 192.168.124.158:5060
tcp: FEC0:0:0:0:0:0:0:2:5060
Aliases:
tcp: ubuntu:5060
udp: ubuntu:5060
root@ubuntu:/home/yeti/rtpproxy# kamctl restart
INFO: Stopping Kamailio :
INFO: stopped
INFO: Starting Kamailio :
INFO: started (pid: 7597)
root@ubuntu:/home/yeti/rtpproxy# rtpproxy restart
-------------------------------------------------------
So I guess everything is starting fine.
The users can register and call each other. Their data are in the mysql database`s location table.
I put this into the kamailio.cfg file:
--------------------------------------------------------
# RTPProxy control
route[RTPPROXY] {
#!ifdef WITH_NAT
if (is_method("BYE")) {
unforce_rtp_proxy();
} else if (is_method("INVITE"))
{
if (af == inet) {
if ( $(rU{s.substr,0,1}) == "6") {
force_rtp_proxy("ie");
} else {
force_rtp_proxy("ee");
}
} else {
if ( $(rU{s.substr,0,1}) == "4") {
force_rtp_proxy("ei");
} else {
force_rtp_proxy("ii");
}
}
} else if (is_method("200OK"))
{
if (af == inet) {
if ( $(rU{s.substr,0,1}) == "6") {
force_rtp_proxy("ei");
} else {
force_rtp_proxy("ee");
}
} else {
if ( $(rU{s.substr,0,1}) == "4") {
force_rtp_proxy("ie");
} else {
force_rtp_proxy("ii");
}
}
}
if (!has_totag()) add_rr_param(";nat=yes");
#!endif
return;
}
----------------------------------------------------------
But, unfortunately there is no RTP traffic yet. :(
What do you thing guys, what can be the problem?
Regards,
Peter
Am 02.12.2010 13:06, schrieb Komáromi Péter:
> Hi!
>
> So if you say it is possible to solve the problem with the only
> location table, the location_inet4 and location_inet6 is not
> certainly necessary... do I _have to_ use the 4to6.cfg file from the
> source of kamailio, or not?
When you call force_rtp_proxy() then you have to provide the i/e flags
to tell rtpproxy how it should bridge the call. Therefore you need to
know for every call:
- is the caller IPv4 or IPv6?
- is the callee IPv4 or IPv6?
Finding out the protocol version of the caller is rather easy:
if (af == inet) {
# caller ipv4
...
} else {
# caller ipv6
...
}
But finding out if the callee is v4 or v6 is difficult. Actually it may
even be that the callee is registered with 2 clients at the same time -
one using v4 and v6. As far as I know this multi-registration scenario
can not be handled currently - only single-registrations or
multi-registrations which use the same protocol version are supported.
Anyway - there are several approaches how to detect the IP version of
the callee.
- fixed mapping: for example if you know that all usernames starting
with 1 are IPv4 clients, and all usernames starting with 2 are IPv6
clients, then you can detect the callee's protocol version manually, e.g:
if ( $(rU{s.substr,0,1}) == "1") {
# callee ipv4
...
} else {
# callee ipv6
...
}
- check destination URI if it contains a IPv4 or IPv6 address, e.g. use
http://www.kamailio.org/dokuwiki/doku.php/transformations:devel#resubst_exp…
to test if $dd contains '.' which would indicate a ipv4 address.
- use dedicated location tables
> (Because it uses them, for instance here: if (method == "REGISTER")
> { if (af == inet) { save("location-inet4"); } else if (af == inet6)
> { save("location-inet6");...)
>
> If I do not have to use it, I do not need to merge it with my
> kamailio.cfg file, the steps I have to do are: install rtpproxy,
> start it with the appropriate parameters and set the forcing in the
> kamailio.cfg file?!
The more I think about it I prefer the approach with separated location
tables. It should be rather easy to integrate the 2 location tables into
your existing config.
regards
Klaus
hello
i want to install Sip Express Router on CENT OS 5.5.
the problem is that after untar the ser-0.9.6.src.tar.gz package my
system doesn't operate MAKE command ,and returns 127 errors containing
message "the system doesn't find the folder...."
is there any solution for this problem...
waiting for your response.
Below is my current code and my calls are just getting 100 trying -- your
call is important to us even between to locally registered extension. Any
guidance as to how to simplify troubleshooting this routing?
####### Routing Logic ########
# Main SIP request routing logic
# - processing of any incoming SIP request starts with this route
route {
# per request initial checks
route(REQINIT);
# NAT detection
route(NAT);
# handle requests within SIP dialogs
route(WITHINDLG);
### only initial requests (no To tag)
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# authentication
route(AUTH);
# record routing for dialog forming requests (in case they are
routed)
# - remove preloaded route headers
remove_hf("Route");
if (is_method("INVITE|SUBSCRIBE")
)
record_route();
# account only INVITEs
if (is_method("INVITE"))
{
setflag(FLT_ACC); # do accounting
}
# dispatch requests to foreign domains
route(SIPOUT);
### requests for my local domains
# handle presence related requests
route(PRESENCE);
# handle registrations
route(REGISTRAR);
if ($rU==$null)
{
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
#!ifdef WITH_FREESWITCH
# save callee ID
$avp(callee) = $rU;
route(FSDISPATCH);
#!endif
# user location service
route(LOCATION);
route(RELAY);
}
route[RELAY] {
#!ifdef WITH_NAT
if (check_route_param("nat=yes")) {
setbflag(FLB_NATB);
}
if (isflagset(FLT_NATS) || isbflagset(FLB_NATB)) {
route(RTPPROXY);
}
#!endif
#!ifdef WITH_CFGSAMPLES
/* example how to enable some additional event routes */
if (is_method("INVITE")) {
#t_on_branch("BRANCH_ONE");
t_on_reply("REPLY_ONE");
t_on_failure("FAIL_ONE");
}
#!endif
if (!t_relay()) {
sl_reply_error();
}
exit;
}
# Per SIP request initial checks
route[REQINIT] {
#!ifdef WITH_ANTIFLOOD
# flood dection from same IP and traffic ban for a while
# be sure you exclude checking trusted peers, such as pstn gateways
# - local host excluded (e.g., loop to self)
if(src_ip!=myself)
{
if($sht(ipban=>$si)!=$null)
{
# ip is already blocked
xdbg("request from blocked IP - $rm from $fu
(IP:$si:$sp)\n");
exit;
}
if (!pike_check_req())
{
xlog("L_ALERT","ALERT: pike blocking $rm from $fu
(IP:$si:$sp)\n");
$sht(ipban=>$si) = 1;
exit;
}
}
#!endif
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if(!sanity_check("1511", "7"))
{
xlog("Malformed SIP message from $si:$sp\n");
exit;
}
}
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the
transaction fails
}
route(RELAY);
} else {
if (is_method("SUBSCRIBE") && uri == myself) {
# in-dialog subscribe requests
route(PRESENCE);
exit;
}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# no loose-route, but stateful ACK;
# must be an ACK after a 487
# or e.g. 404 from upstream server
t_relay();
exit;
} else {
# ACK without matching transaction
... ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
}
# Handle SIP registrations
route[REGISTRAR] {
if (is_method("REGISTER"))
{
if(isflagset(FLT_NATS))
{
setbflag(FLB_NATB);
# uncomment next line to do SIP NAT pinging
## setbflag(FLB_NATSIPPING);
}
if (!save("location"))
sl_reply_error();
exit;
}
}
# USER location service
route[LOCATION] {
#!ifdef WITH_ALIASDB
# search in DB-based aliases
alias_db_lookup("dbaliases");
#!endif
if (!lookup("location")) {
switch ($rc) {
case -1:
case -3:
t_newtran();
t_reply("404", "Not Found");
exit;
case -2:
sl_send_reply("405", "Method Not Allowed");
exit;
}
}
# when routing via usrloc, log the missed calls also
if (is_method("INVITE"))
{
setflag(FLT_ACCMISSED);
}
}
# Presence server route
route[PRESENCE] {
if(!is_method("PUBLISH|SUBSCRIBE"))
return;
#!ifdef WITH_PRESENCE
if (!t_newtran())
{
sl_reply_error();
exit;
};
if(is_method("PUBLISH"))
{
handle_publish();
t_release();
}
else
if( is_method("SUBSCRIBE"))
{
handle_subscribe();
t_release();
}
exit;
#!endif
# if presence enabled, this part will not be executed
if (is_method("PUBLISH") || $rU==$null)
{
sl_send_reply("404", "Not here");
exit;
}
return;
}
# Authentication route
route[AUTH] {
#!ifdef WITH_AUTH
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests (uncomment to enable
auth)
if (!www_authorize("$td", "subscriber"))
{
www_challenge("$td", "0");
exit;
}
if ($au!=$tU)
{
sl_send_reply("403","Forbidden auth ID");
exit;
}
} else {
#!ifdef WITH_FREESWITCH
if(route(FSINBOUND))
return;
#!endif
#!ifdef WITH_IPAUTH
if(allow_source_address())
{
# source IP allowed
return;
}
#!endif
# authenticate if from local subscriber
if (from_uri==myself)
{
if (!proxy_authorize("$fd", "subscriber")) {
proxy_challenge("$fd", "0");
exit;
}
if (is_method("PUBLISH"))
{
if ($au!=$tU) {
sl_send_reply("403","Forbidden auth
ID");
exit;
}
} else {
if ($au!=$fU) {
sl_send_reply("403","Forbidden auth
ID");
exit;
}
}
consume_credentials();
# caller authenticated
} else {
# caller is not local subscriber, then check if it
calls
# a local destination, otherwise deny, not an open
relay here
if (!uri==myself)
{
sl_send_reply("403","Not relaying");
exit;
}
}
}
#!endif
return;
}
# Caller NAT detection route
route[NAT] {
#!ifdef WITH_NAT
force_rport();
if (nat_uac_test("19")) {
if (method=="REGISTER") {
fix_nated_register();
} else {
fix_nated_contact();
}
setflag(FLT_NATS);
}
#!endif
return;
}
# RTPProxy control
route[RTPPROXY] {
#!ifdef WITH_NAT
if (is_method("BYE")) {
unforce_rtp_proxy();
} else if (is_method("INVITE")){
force_rtp_proxy();
}
if (!has_totag()) add_rr_param(";nat=yes");
#!endif
return;
}
# Routing to foreign domains
route[SIPOUT] {
if (!uri==myself)
{
append_hf("P-hint: outbound\r\n");
route(RELAY);
}
}
#!ifdef WITH_FREESWITCH
# FreeSWITCH routing blocks
route[FSINBOUND] {
if($si== $sel(cfg_get.freeswitch.bindip)
&& $sp==$sel(cfg_get.freeswitch.bindport))
return 1;
return -1;
}
route[FSDISPATCH] {
if(!is_method("INVITE"))
return;
if(route(FSINBOUND))
return;
# dial number selection
switch($rU) {
case /"^41$":
# 41 - voicebox menu
# allow only authenticated users
if($au==$null)
{
sl_send_reply("403", "Not allowed");
exit;
}
$rU = "vm-" + $au;
break;
case /"^441[0-9][0-9]$":
# starting with 44 folowed by 1XY - direct call to
voice box
strip(2);
route(FSVBOX);
break;
case /"^433[01][0-9][0-9]$":
# starting with 433 folowed by (0|1)XY - conference
strip(2);
break;
case /"^45[0-9]+$":
strip(2);
break;
default:
# offline - send to voicebox
if (!registered("location"))
{
route(FSVBOX);
exit;
}
# online - do bridging
prefix("kb-");
if(is_method("INVITE"))
{
# in case of failure - re-route to
FreeSWITCH VoiceMail
t_on_failure("FAIL_FSVBOX");
}
}
route(FSRELAY);
exit;
}
route[FSVBOX] {
if(!($rU=~"^1[0-9][0-9]+$"))
return;
prefix("vb-");
route(FSRELAY);
}
# Send to FreeSWITCH
route[FSRELAY] {
$du = "sip:" + $sel(cfg_get.freeswitch.bindip) + ":"
+ $sel(cfg_get.freeswitch.bindport);
if($var(newbranch)==1)
{
append_branch();
$var(newbranch) = 0;
}
route(RELAY);
exit;
}
#!endif
#!ifdef WITH_FREESWITCH
failure_route[FAIL_FSVBOX] {
#!ifdef WITH_NAT
if (is_method("INVITE")
&& (isbflagset(FLB_NATB) || isflagset(FLT_NATS))) {
unforce_rtp_proxy();
}
#!endif
if (t_is_canceled()) {
exit;
}
if (t_check_status("486|408")) {
# re-route to FreeSWITCH VoiceMail
$rU = $avp(callee);
$var(newbranch) = 1;
route(FSVBOX);
}
}
#!endif
# sample config file for dispatcher module
#!ifdef WITH_DISPATCHER
modparam("dispatcher", "db_url", "mysql://openser:password@localhost
/openser")
route{
if ( !mf_process_maxfwd_header("10") )
{
sl_send_reply("483","To Many Hops");
drop();
};
ds_select_dst("1", "0");
forward();
# t_relay();
}
#!endif
On 11/23/2010 06:41 PM, Jijo wrote:
> Yes it work with many UDP children.
There were some concurrency issues with the Postgres module a while
back, discovered after the 3.1.0 release. I remember something about it
because we are extremely heavy users of the Postgres module as well.
Unfortunately, I can't find the thread.
Try the latest git master HEAD:
git clone git://git.sip-router.org/sip-router
cd sip-router
make FLAVOUR=kamailio cfg
make all
And see if it changes.
--
Alex Balashov - Principal
Evariste Systems LLC
1170 Peachtree Street NE
12th Floor, Suite 1200
Atlanta, GA 30309
Tel: +1-678-954-0670
Fax: +1-404-961-1892
Web: http://www.evaristesys.com/