Hello all,
Im using ser, with esteras softphone, and a couple of cisco ata186's. I
have to say I really like ser, as it is small fast, and reliable without
being over complicated.
I would like to know what other ser users and developers use for pstn
gateways? I have a openline4 card from voictronix, but there is no
software support for sip (When I bought it I thought I would use h.323).
I have looked at cisco's pstn gateway modules, but was turned off them
because of price, and lack of clear straight forward information to name
but two reasons.
Ideally what I would like to have is a solution that would support at
least 4 pstn lines (expandable to maybe 8), that would run on FreeBSD
(or at worst linux), works well with sip & ser, with high quality audio,
and minimal delays when dialing in out.
TIA,
-Emil
Hello everyone,
I am playing around with the new CVS ser 0.8.11pre28
downloaded couple days ago. I am attaching my config
script and also the output of syslog with errors. Afer
I start ser it starts forking new processes until it
crashes the box (fills up the memory).
The script is little advanced, uses jabber,pa,msilo...
Thanks for your help. You are doing great job. Can't
wait till next release.
Peter.
ser.cfg:
--------
#
# $Id: ser.cfg,v 1.19 2003/05/07 11:56:44 janakj Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters
------------------------
debug=3 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=7
fork=no
log_stderror=yes
*/
check_via=yes # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
children=4
fifo="/tmp/ser_fifo"
# ------------------ module loading
----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/print.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/msilo.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/jabber.so"
loadmodule "/usr/local/lib/ser/modules/pa.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
#loadmodule "/usr/local/lib/ser/modules/auth.so"
#loadmodule "/usr/local/lib/ser/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)
modparam("usrloc", "db_url",
"sql://nser:heslo@localhost/nser")
modparam("msilo", "db_url",
"sql://nser:heslo@localhost/nser")
#modparam("msilo", "registrar",
"sip:registrar@deimos")
# -- 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")
modparam("jabber", "db_url",
"sql://sip_jab:heslo@localhost/sip_jab")
modparam("jabber", "jaddress", "test")
modparam("jabber", "jport", 5222)
modparam("jabber", "workers", 2)
modparam("jabber", "max_jobs", 10)
modparam("jabber", "aliases",
"5;aim.test;icq.test;msn.test;yahoo.test;jabber.test;")
modparam("jabber", "jdomain", "jabber.test")
# ------------------------- 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");
break;
};
if (len_gt( max_len )) {
sl_send_reply("513", "Message too big");
break;
};
# 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
record_route();
# loose-route processing
loose_route();
# 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("iptel.org", "subscriber")) {
# www_challenge("iptel.org", "0");
# break;
# };
save("location");
if (search("egistration")) {
log("XJAB: going online in Jabber net\n");
if (jab_go_online()) {
sl_send_reply("200", "Accepted");
} else {
sl_send_reply("404", "Not Found");
};
} else {
log("XJAB: going offline in Jabber net\n");
if (jab_go_offline()) {
sl_send_reply("200", "Accepted");
} else {
sl_send_reply("404", "Not Found");
};
}; # egistrarion
if (m_dump()) {
log("MSILO: offline msgs dumped\n");
} else {
log("MSILO: no offline msgs dumped\n");
};
break;
}; # register
if (method=="SUBSCRIBE") {
if (t_newtran()) {
handle_subscription("registrar");
};
break;
}; # subsribe
# native SIP destinations are handled using our
USRLOC DB
if (!lookup("location")) {
if (method=="MESSAGE") {
log("MESSAGE received -> storing\n");
if (!t_newtran()) {
sl_reply_error();
break;
};
if (m_store("0")) {
log("MSILO: offline msg stored\n");
if (!t_reply("202","Accepted")) {
sl_reply_error();
};
} else {
log("MSILO: offline msg not stored\n");
if (!t_reply("503","Service Unavailable")) {
sl_reply_error();
};
};
break;
}; # message
sl_send_reply("404", "Not Found");
break;
}; # lookup
}; # myself
if ( search("To:.*@aim\.test") ||
search("To:.*@icq\.test") ||
search("To:.*@msn\.test") ||
search("To:.*@yahoo\.test") ||
search("To:.*@jabber\.test") ) {
if (!t_newtran()) {
sl_reply_error();
break;
};
if (method=="MESSAGE") {
log("MESSAGE received -> manage it w/ XJAB\n");
if (search("\n:on")) {
if (jab_go_online()) {
sl_send_reply("200", "Accepted");
} else {
sl_send_reply("404", "Not Found");
};
break;
};
if (search("\n:off")) {
if (jab_go_offline()) {
sl_send_reply("200", "Accepted");
} else {
sl_send_reply("404", "Not Found");
};
break;
};
if (search("\n:join")) {
if (jab_join_jconf()) {
sl_send_reply("200", "Accepted");
} else {
sl_send_reply("404", "Not Found");
};
break;
};
if (search("\n:exit")) {
if (jab_exit_jconf()) {
sl_send_reply("200", "Accepted");
} else {
sl_send_reply("404", "Not Found");
};
break;
};
if (jab_send_message()) {
sl_send_reply("202", "Accepted");
} else {
sl_send_reply("503", "Service Unavailable");
};
break;
};
if (method=="SUBSCRIBE") {
handle_subscription("jabber");
break;
};
log("NON_MESSAGE request received for Jabber GW ->
dropt\n");
sl_send_reply("202", "Accepted");
break;
};
# forward to current uri now; use stateful
forwarding; that
# works reliably even if we forward from TCP to UDP
if (!t_relay()) {
sl_reply_error();
};
}
error log from /var/log/messages:
---------------------------------
May 29 10:58:11 hat /usr/local/sbin/ser[2180]: ERROR:
parse_to: invalid To - unexpected end of header in
state -1073745156
May 29 10:58:11 hat /usr/local/sbin/ser[2180]:
send_xpidf_notify(): Error while
parsing
May 29 10:58:11 hat /usr/local/sbin/ser[2180]:
handle_subscription(): Error while sending notify
May 29 10:58:11 hat /usr/local/sbin/ser[2180]: ERROR:
t_reply: can't generate 200 reply when a final 200 was
sent out
May 29 10:58:11 hat /usr/local/sbin/ser[2180]:
send_reply(): Error while sending 200 OK
May 29 10:58:23 hat /usr/local/sbin/ser[2178]: ERROR:
parse_to: invalid To - unexpected end of header in
state -1073745156
May 29 10:58:23 hat /usr/local/sbin/ser[2178]:
send_xpidf_notify(): Error while
parsing
May 29 10:58:23 hat /usr/local/sbin/ser[2178]:
handle_subscription(): Error while sending notify
May 29 10:58:23 hat /usr/local/sbin/ser[2178]: ERROR:
t_reply: can't generate 200 reply when a final 200 was
sent out
May 29 10:58:23 hat /usr/local/sbin/ser[2178]:
send_reply(): Error while sending 200 OK
May 29 10:58:29 hat /usr/local/sbin/ser[2210]:
XJAB:xjab_check_workers: worker[0][pid=2217] has
exited - status=0 err=-1 errno=10
May 29 10:58:11 hat /usr/local/sbin/ser[2180]: ERROR:
parse_to: invalid To - unexpected end of header in
state -1073745156
May 29 10:58:11 hat /usr/local/sbin/ser[2180]:
send_xpidf_notify(): Error while
parsing
May 29 10:58:11 hat /usr/local/sbin/ser[2180]:
handle_subscription(): Error while sending notify
May 29 10:58:11 hat /usr/local/sbin/ser[2180]: ERROR:
t_reply: can't generate 200 reply when a final 200 was
sent out
May 29 10:58:11 hat /usr/local/sbin/ser[2180]:
send_reply(): Error while sending 200 OK
May 29 10:58:23 hat /usr/local/sbin/ser[2178]: ERROR:
parse_to: invalid To - unexpected end of header in
state -1073745156
May 29 10:58:23 hat /usr/local/sbin/ser[2178]:
send_xpidf_notify(): Error while
parsing
May 29 10:58:23 hat /usr/local/sbin/ser[2178]:
handle_subscription(): Error while sending notify
May 29 10:58:23 hat /usr/local/sbin/ser[2178]: ERROR:
t_reply: can't generate 200 reply when a final 200 was
sent out
May 29 10:58:23 hat /usr/local/sbin/ser[2178]:
send_reply(): Error while sending 200 OK
May 29 10:58:29 hat /usr/local/sbin/ser[2210]:
XJAB:xjab_check_workers: worker[0][pid=2217] has
exited - status=0 err=-1 errno=10
May 29 10:58:29 hat /usr/local/sbin/ser[2210]:
XJAB:xjab_check_workers: worker[1][pid=2218] has
exited - status=0 err=-1 errno=10
May 29 10:58:29 hat /usr/local/sbin/ser[2216]:
XJAB:xjab_check_workers: worker[0][pid=2243] has
exited - status=0 err=-1 errno=10
May 29 10:58:29 hat /usr/local/sbin/ser[2216]:
XJAB:xjab_check_workers: worker[1][pid=2244] has
exited - status=0 err=-1 errno=10
May 29 10:58:29 hat /usr/local/sbin/ser[2213]:
XJAB:xjab_check_workers: worker[0][pid=2245] has
exited - status=0 err=-1 errno=10
May 29 10:58:29 hat /usr/local/sbin/ser[2213]:
XJAB:xjab_check_workers: worker[1][pid=2246] has
exited - status=0 err=-1 errno=10
May 29 10:58:40 hat dhcpd: DHCPDISCOVER from
00:90:b1:59:0e:00 via eth0: network 200.200.52.0/24:
no free leases
May 29 10:58:49 hat /usr/local/sbin/ser[2210]:
XJAB:xjab_check_workers: worker[0][pid=2247] has
exited - status=0 err=-1 errno=10
May 29 10:58:49 hat /usr/local/sbin/ser[2210]:
XJAB:xjab_check_workers: worker[1][pid=2248] has
exited - status=0 err=-1 errno=10
May 29 10:58:49 hat /usr/local/sbin/ser[2216]:
XJAB:xjab_check_workers: worker[0][pid=2249] has
exited - status=0 err=-1 errno=10
May 29 10:58:49 hat /usr/local/sbin/ser[2216]:
XJAB:xjab_check_workers: worker[1][pid=2250] has
exited - status=0 err=-1 errno=10
May 29 10:58:49 hat /usr/local/sbin/ser[2213]:
XJAB:xjab_check_workers: worker[0][pid=2251] has
exited - status=0 err=-1 errno=10
May 29 10:58:49 hat /usr/local/sbin/ser[2213]:
XJAB:xjab_check_workers: worker[1][pid=2252] has
exited - status=0 err=-1 errno=10
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
I've just committed into the cvs the autopinging feature useful to
keep NAT bindings alive. If possible, please test and let me know
then. Basically, everything you need to do is to recompile/reinstall
ser and all modules and add the following into your config:
modparam("nathelper", "natping_interval", N)
Where N is some non-zero interval in seconds (usually 15-30 should
be OK).
Thanks!
-Maxim
On Tue, Apr 29, 2003 at 09:38:44PM +0100, jaime(a)umtstrial.co.uk wrote:
> Hello Maxim,
>
> I have been trying your module on one server with a customised
> configuration, very similar to the default one in nathelper.cfg. Actually,
> I'm trying to connect through a NAT to a server running SER with the
> nathelper module. The overall configuration looks like this:
>
> UA1 --- NAT --- SER (proxy and registrar)
> UA2 |
>
> UA1 and UA2 must traverse a NAT in order to reach SER. The NAT does not
> have port forwarding whatsoever.
>
> I was trying to see what happens to REGISTER, SUBSCRIBE, MESSAGE and
> INVITE messages. The nathelper adds rport and received to the Via field,
> so any response from the server gets routed correctly to the appropriate
> destination (that is, the NAT external interface).
>
> REGISTER's Contact is stored at registration and the 200 OK reaches the
> initiating client through the NAT.
>
> However, any other SIP message involving a database lookup into "location"
> will try to relay the message to the natted client, which is not reachable
> from the SER proxy (see diagram above). I think this could work if in
> location table you stored the "received" and "rport" values instead of the
> "Contact" field received when regitering (if that does not go against
> standards...). Then, just keep alive the NAT binding somehow (I think you
> where mentioning it in a previous email).
>
> Does this sound resonable? Making this scenario work would allow people at
> home with simple NAT's to use a public proxy (like Iptel's) and its
> services (Instant Messaging and Presence mainly)...
>
> Jaime
>
>
>
As speaker and exhibitor at the event, iptel.org is glad to invite you to VoN London
(http://www.pulver.com/europe2003/). We will be presenting our application architecture
for integration of SIP telephony with legacy networks and Internet services.
In the exhibition, we are located in the booth #4 (nic.at) as a part of a world-wide
ENUM trial which leverages our SIP Express Router (SER) (http://www.iptel.org/ser/).
We will be demonstrating ENUM interoperability and our SIP applications based on the
latest SER version with numerous new features (media component, ENUM support, DDM,
presence agent, NAT traversal, web applications, etc.)
On the 9th, iptel.org founder, Jiri Kuthan, will be holding a SIP tutorial (9am-6pm).
On the 10th, he will participate in an "Open Source Voice" session (2:15-3:30pm) and
share our deployment experience with audience.
See you in London. If you need to arrange a time-slot with us, drop us an e-mail.
Andy Blen
Hi everyone,
What's happening to the function (In the latest CVS version of Ser)?:
int is_user_in(struct sip_msg* msg, char* hf, char* group);
When I use this function in the config file it returns an error.
Did it change is name?
Did it simply desapear?
What coud it be missing here?
Best Regards,
Toni
At 03:43 PM 5/13/2003, Andrzej Radke wrote:
>One question yet.
>What with aliases for separate domains ?
That depends...
If that is about numbers (the common case) you can designate a numbering
plan that can be shared accross the domains (prefix 1--domain 1, prefix 2 --
domain 2) -- then you will have only 1 alias table to maintain.
>Have to I add something to my configuration ?
>something like this: save("aliases") save("aliases1")
>for separate domian registration ?
Typically you do not modify aliases from SER scripts on receipt of a SIP
message -- you just look them up.
-Jiri
Hello again ;)
I'd like forward all numerical URI to my PSTN gateway
if (uri=~"^sip:[0-9]*@gda.pl") {
forward(10.10.10.1, 5060);
};
But if I haven't numerical user in my contact i.e
<sip:2411@10.10.10.1>;q=1.00;expires=1073143945
it doesn't works.
This statement ( if (uri......) is unnecesary :(
when I will add new permament contact for numerical URI.
Do I all my numbers write statically to contact ????
What can I do when I have their a hundreds ??
Maybe should I add some config peer for my PSTN Gateway (C2600) ??
Greetings
Andrzej Radke
Hello,
SIPPS, the SIP software client by Ahead Software, creators of
Nero-burning Rom, is available as of tomorrow, 17th of May. Feel free
to test it and enjoy the following features:
- excellent sound quality, even with low bandwidth
- call encryption (only between two SIPPS-clients)
- easy-to-use, intuitive user interfaces
- FREE REGISTRAR SERVER ACCESS
- call redirection
- call forwarding
- conference calls
- integrated answering machine with remote access
- call recording
- compatible with MSN Messenger (placing calls with SIPPS over the
buddy-list)
- multiple graphical user interfaces (skins)
- custom ringing tones
- screen names
-
Test the fully functional demo version for free! You have access to all
features for more than two months!
Download SIPPS at www.sippstar.com <http://www.sippstar.com/>
Enjoy Internet Telephony with SIPPS!
Best regards / Mit freundlichen Grüßen
Mathias Schupp
--------------------------------------------
Mathias Schupp
International Sales Manager SIPPS
Ahead Software AG phone: +49 (0)7248 911
830 (direct line)
Im Stoeckmaedle 18 fax: +49 (0)7248 911 889
76307 Karlsbad mail:
<mailto:mschupp@nero.com> mschupp(a)nero.com
Germany web:
www.sippstar.com <http://www.sippstar.com/>
www.nero.com
If you reply, please include all previous messages so that we don´t
loose the context. Thank you !
Hi all,
SERAdmin v.02f has now been released.
SERAdmin is a GUI interface between SIP Express Router (SER) and the SER
administrator.
Visit http://seradmin.xten.net to find out more about SERAdmin and
download the latest build.
SERAdmin provides control over many SER tasks such as: start, stop,
pause, re-start, monitor, add user, edit user, etc. SERAdmin has an
intuitive look and feel.
The Xten SERAdmin Team is comprised of 2 senior engineers and 1 project
manager who are committed full-time to the development of SERAdmin.
SERAdmin is open source, is being developed to benefit all SER
administrators, and the feature set of SERAdmin will be determined by
the iptel.org SER users' group.
So please communicate with the Xten SERAdmin Team, post your comments in
the public forums, and make use of the Xten SERAdmin Team as they are
working for the SER community.
About Xten (www.xten.com)
Xten Networks, Inc. is a leading provider of high-quality SIP Voice over
Internet Protocol (VoIP) software. Xten provides IP Telephony products
directly to end users, the Enterprise market, Next-Gen Service Providers
(ITSPs & Tier 2), Wireless Internet Service Providers (WISPs), Telephone
Companies (TELCOs), and Original Equipment Manufacturers (OEMs).
Cheers,
Erik Lagerway, COO
erik(a)xten.com
Hi folks,
I am having problems with locking in timer routine (ser 0.8.10),
particularly with the my recent addition to the nathelper - udp pinger.
This piece of code is being invoked periodically by the timer, retrieves
list of all currently registered contacts and sends short udp message to
each of them. Obviously, routine which retrieves all contacts locks each
domain before accessing it, but apparently it doesn't work as expected.
Following is the dump of debugging session:
-bash-2.05b$ sudo gdb ~/PortaSIP/ser/work/ser-0.8.10/ser ser.core
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd"...Deprecated bfd_read
called at
/usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c
line 2627 in elfstab_build_psymtabs
Deprecated bfd_read called at
/usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c
line 933 in fill_symbuf
Core was generated by `ser'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libc.so.4...done.
Reading symbols from /usr/local/lib/ser/modules/sl.so...done.
Reading symbols from /usr/local/lib/ser/modules/tm.so...done.
Reading symbols from /usr/local/lib/ser/modules/rr.so...done.
Reading symbols from /usr/local/lib/ser/modules/maxfwd.so...done.
Reading symbols from /usr/local/lib/ser/modules/usrloc.so...done.
Reading symbols from /usr/local/lib/ser/modules/registrar.so...done.
Reading symbols from /usr/local/lib/ser/modules/nathelper.so...done.
Reading symbols from /usr/local/lib/ser/modules/textops.so...done.
Reading symbols from /usr/local/lib/ser/modules/radius_auth.so...done.
Reading symbols from /usr/local/lib/libradiusclient.so.0...done.
Reading symbols from /usr/lib/libmd.so.2...done.
Reading symbols from /usr/lib/libcrypt.so.2...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0 0x2a1a62df in get_all_ucontacts (buf=0x80d5248, len=1402) at dlist.c:110
110 if (c->c.len <= 0)
(gdb) bt
#0 0x2a1a62df in get_all_ucontacts (buf=0x80d5248, len=1402) at dlist.c:110
#1 0x2a1c4b3e in _init () from /usr/local/lib/ser/modules/nathelper.so
#2 0x8073679 in timer_ticker () at timer.c:118
#3 0x805e912 in main_loop () at main.c:654
#4 0x80611a1 in main (argc=1, argv=0xbfbffdb8) at main.c:1383
#5 0x804c5a6 in _start ()
(gdb) print c
$1 = (ucontact_t *) 0x460a0d30
(gdb) print *c
Cannot access memory at address 0x460a0d30.
(gdb) print *r
$2 = {domain = 0x282ec0d8, aor = {s = 0x282f4638 "011801", len = 6},
contacts = 0x282f5cb8, slot = 0x282ed418, d_ll = {
prev = 0x282ef0d8, next = 0x0}, s_ll = {prev = 0x0, next = 0x0}}
(gdb) print *r->contacts
$3 = {domain = 0x7a3d6863, aor = 0x34476839, c = {s = 0x37364b62
<Address 0x37364b62 out of bounds>, len = 959328819},
expires = 825243494, q = 2.12359957e+20, callid = {s = 0x32663238
<Address 0x32663238 out of bounds>, len = 1714774885},
cseq = 1631019574, state = 1631020084, user_agent = {s = 0x62386438
<Address 0x62386438 out of bounds>, len = 775107636},
next = 0x460a0d30, prev = 0x3a6d6f72}
(gdb) print *r->contacts->next
Cannot access memory at address 0x460a0d30.
(gdb) l 100
95 void *cp;
96 int shortage;
97
98 cp = buf;
99 shortage = 0;
100 /* Reserve space for terminating 0000 */
101 len -= sizeof(c->c.len);
102 for (p = root; p != NULL; p = p->next) {
103 lock_udomain(p->d);
104 if (p->d->d_ll.n <= 0) {
(gdb) l
105 unlock_udomain(p->d);
106 continue;
107 }
108 for (r = p->d->d_ll.first; r != NULL; r =
r->d_ll.next) {
109 for (c = r->contacts; c != NULL; c =
c->next) {
110 if (c->c.len <= 0)
111 continue;
112 if (len >=
(int)(sizeof(c->c.len) + c->c.len)) {
113 memcpy(cp, &c->c.len,
sizeof(c->c.len));
114 cp += sizeof(c->c.len);
As you can see, we are locked domain in question (line 103), but still,
found one of records to be in the inconsistent state (contacts aren't
initialized).
Does anyone have any ideas about what could be wrong with this? I an
seeing similar problem in the code that periodically expires contacts.
-Maxim