Hello everybody.
I would like to know how is the right procedure to implement a new feature
for OpenSER. For example, if I propose a new Feature, is it well to include
the patch for the implementation, or I just propose it, and wait for the
approval of one of the core developers?
Best regards.
Sergio Gutiérrez.
Truing to start openser-1.3.0.
In log i`m saw:
ERROR:core:io_watch_add: epoll_ctl failed: Invalid argument [22]
Dec 18 12:37:17 devel s-eltex[27564]: CRITICAL:core:tcp_main_loop: failed to
add process 5 (TCP main) unix socket to the fd list
Dec 18 12:37:17 devel s-eltex[27564]: CRITICAL:core:tcp_main_loop:
exiting...
In config i`m set
listen=udp:192.168.138.59:5060
Why openser truing to open tcp sockets?
And another bug:
If stop openser and then start.
If dont switch off SIP clients server down with error.
Dear all
I have solve my multidomain configuration with ser-0.9.6 and it is working fine for me and i am sending you my configuration for incomming users whos want do some stuff wid ser i have find many document on multi-support and i have consolidate all document and make my ser.cfg script or config
cat /usr/local/etc/ser/ser.cfg
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
#debug=7 # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=yes # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=7
fork=no
log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
listen=192.168.104.20
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/domain.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/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
#loadmodule "/usr/local/lib/ser/modules/call.so"
#loadmodule "/usr/local/lib/ser/modules/vm.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", 0)
# -- 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)
modparam("domain", "db_url", "mysql://root:mypasswd@localhost/ser")
modparam("domain", "db_mode", 1) # Use chaching
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")
modparam("usrloc|registrar|auth_db|avpops|group", "use_domain", 1)
#modparam("usrloc", "use_domain", 1)
#modparam("registrar", "use_domain", 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");
break;
};
if ( msg:len > 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
if (loose_route()) {
t_relay();
break;
};
# 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)
#-----------Multi-domain Logic work blow in stanza--------#
if (is_from_local()) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication
if (!www_authorize("", "subscriber")) {
www_challenge("", "0");
break;
};
save("location");
break;
save("aliases");
break;
};
#----Alias check---
# lookup("aliases");
# if (!uri==myself) {
# route(1);
# break;
# };
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
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();
};
}
#-----END---#
Now to test configuration start ser
#serctl start
#serctl domain add abc.com
#serctl add 222(a)abc.com tulip 222(a)abc.com
#serctl add 333(a)abc.com tulip 333(a)abc.com
this to user 222 and 333 for domain abc.com
**Notes:- you should configure SRV recode on your DNS otherwise it will not work for you
NOW configure your Xlite and try to call each other
Then try to add new domain and do same thing which u have done before abc.com
Thanks and Best of Luck
$ cat ~/satish/url.txt
http://www.linuxbug.org
_____________________________________________________________________________________________________
---------------------------------
Share files, take polls, and discuss your passions - all under one roof. Click here.
Dear all
I have compileing ser-0.9.6 and it is compiled successful but when i going to /usr/local/lib/ser/module directory there is no required module call.so and vm.so how to compile
i have also try this one make modules=modules/call modules but there is no file found
How to compile and get support of call.so module and vm.so module
$ cat ~/satish/url.txt
http://www.linuxbug.org
_____________________________________________________________________________________________________
---------------------------------
Get the freedom to save as many mails as you wish. Click here to know how.
Hi,
We have found one unpleasant situation with a Ser often shown at greater loadings.
At greater loadings and at work of a Ser with number of child processes greater than one (Parameter 'children' in ser.cfg), Ser sends messages not in that order in which it has received. And as the result appears request pending errors.
We simulated this situation continuously reinviting the remote UA. Usually the error is occured on the tenth-twentieth reinvite.
In the attachment there are SIP logs reproducing this situation.
Somebody can tell in occasion of this problem, or offer the decision? Or whether there is a version in which there is no this lack?
Alexandr
Hi,
Well I now know my problem why I cannot connect to my Oracle-Database. The Connectionport hast changed.
My question is, how can I insert the Port-Number the the connectionstring in openser.cfg.......
unixodbc://user:password@oracle.server.com:PortNr/ORA
Does not work at all.
Does anybody know, where I can add the Port Number in the Connectionstring?
Kind regards,
Martin
Hello,
I have the same error as Gregorio on my installation, I am running OpenSER
1.3 and my XCAP client is eyeBeam².
Thanks in advance for your help,
Antoine
2007/10/30, Gregorio <goyo.villalba(a)dialcom.com>:
>
> Hi all.
>
>
>
> I get an exception in openXcap when I send a GET to retrieve the resources
> file.
>
> I explain the process I followed:
>
>
>
> ----->Send GET to openXcap.
>
> <----Receive 404, because there is not file.
>
>
>
> -----> Send PUT to openXcap. The body contains a resource-list.xmldocument 'with no data':
>
> Body;
>
> <?xml version='1.0' encoding='UTF-8'?>
>
> <resource-lists xmlns='urn:ietf:params:xml:ns:resource-lists'
> xmlns:cp='urn:ietf:params:xml:ns:copycontrol'>
>
> <list></list>
>
> </resource-lists>
>
>
>
> <----Receive 200 OK. So openXcap likes my document.
>
>
>
> -----> Send GET to openXcap.
>
> <---- Receive 500 "An error occurred rendering the requested page. More
> information is available in the server log". So the same document that was
> accepted in the PUT throws an exception.
>
>
>
> The server log says:
>
>
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] Exception rendering:
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] Traceback (most recent call
> last):
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/twisted/internet/posixbase.py", line 228,
> in mainLoop
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] self.runUntilCurrent
> ()
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/twisted/internet/base.py", line 533, in
> runUntilCurrent
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] f(*a, **kw)
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", line 239, in
> callback
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-]
> self._startRunCallbacks(result)
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", line 304, in
> _startRunCallbacks
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] self._runCallbacks()
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] --- <exception caught
> here> ---
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", line 317, in
> _runCallbacks
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] self.result =
> callback(self.result, *args, **kw)
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/xcap/resource.py", line 51, in
> sendResponse
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] response =
> http.Response(response.code, stream=response.data)
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] File
> "/usr/lib/python2.4/site-packages/twisted/web2/http.py", line 109, in
> __init__
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] self.stream =
> IByteStream(stream)
>
> Oct 30 15:01:55 localhost openxcap[2791]: [-] exceptions.TypeError:
> ('Could not adapt', array('c', "<?xml version='1.0'
> encoding='UTF-8'?><resource-lists
> xmlns='urn:ietf:params:xml:ns:resource-lists'
> xmlns:cp='urn:ietf:params:xml:ns:copycontrol'><list></list></resource-lists>"),
> <InterfaceClass twisted.web2.stream.IByteStream>)
>
>
>
>
>
> Anyone know what is wrong?
>
> Thanks and best regards.
>
> Gregorio
>
>
>
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> Users mailing list
> Users(a)lists.openser.org
> http://lists.openser.org/cgi-bin/mailman/listinfo/users
>
>
while testing a new sip ua, i noticed that at some point it sent (don't
ask me why because i don't know) a publish request without any body. it
was not an initial publication, because it contained SIP-If-Match header
with an etag. the publication was for even package presence.
what openser presence server did was that it accepted the publish with
200 ok that contained a NEW etag value in its SIP-If-Match header.
i have been trying to find out from rfcs where this kind of behavior
would have been defined, but so far without success. rfc3903 says:
5. The ESC processes the published event state contained in the body
of the PUBLISH request. If the content type of the request does
not match the event package, or is not understood by the ESC, the
ESC MUST reject the request with an appropriate response, such as
415 (Unsupported Media Type), and skip the remainder of the steps.
in this publish content type didn't match the event package, because
there was none. reading further i found this:
* If the request has no message body and contained no entity-tag,
the ESC SHOULD reject the request with an appropriate response,
such as 400 (Invalid Request), and skip the remainder of the
steps. Alternatively, in case either ESC local policy or the
event package has defined semantics for an initial publication
containing no message body, the ESC MAY accept it.
but it does not apply, because the publication was not initial.
so, have i found a bug or any other ideas?
-- juha
Hi Adrien!
I Cc this email also to the seruser mailing list as it might be
interesting for others too.
Adrien Lemoine schrieb:
> Hi Klaus,
>
> I've some good news !!! (Sorry to take your time)
>
> I try the solution in the URL paste in the last mail, and it runs !
>
> So I've something like this :
>
> if ( t_check_status("(1[0-7][0-9])|(180)") ) {
> xlog("L_WARN","time=[%Tf] call id=[%ci] call seq=[%cs] contact
> header=[%ct] from uri=[%fu] from tag=[%ft] request's method=[%rm] request's
> uri=[%ru] to uri=[%tu] to tag=[%tt] sip message id=[%mi] process id=[%pp] ip
> source=[%is] flags=[%mf], fix To-Tag failure [Thomson]\n");
> subst('/^(To:.*)\;tag=[^;[:cntrl:]]*/\1/i');
> }
> break;
>
> The guy precise that 183 don't have to be included in this test, why ?
Bogdan was afraid that this could break "early media", but I'm sure it
is best to include 183 as well.
Thus this regular expression should handle all provisional responses.
t_check_status("(1[0-9][0-9])")
> Is this could be okay for simplify the solution and don't take the risk to
> break an other service by collateral effects ?
You never know and it would be better to fix it in the SIP
phone/gateway. But I think it is a acceptable workaround.
> I think I beging to understand the problem : my Thomson product "remember"
> of the first to-tag include in "180 ringing" and doesn't accept an other
> to-tag for the same transaction. Isn't it ?
Yes.
Some theory: SIP has to match incoming requests and responses to
existing dialog. This is done by comparing the 3-tuple
call-id/from-tag/to-tag.
Messages which are sent out of dialog do not have a to-tag (tag
parameter in the To: header).
The initial INVITE request is sent "out-of-dialog" (no to-tag). If a SIP
client responses to the INVITE request it adds a to-tag to the response.
Thus, if the INVITE is sent to multiple devices (e.g. parallel ringing
on multiple SIP devices or call forwarding on timeout) the caller will
receive multiple responses. As the to-tag is different for each called
SIP device the caller can detect responses from different devices. (this
is a feature of SIP).
If the caller SIP client receives provisional responses (101-199) it
will create an "early dialog". Once a final response is received the
dialog will convert into "confirmed" state ( 200 OK) or the dialog will
be terminated (3xx-6xx responses).
Example:
caller proxy phone1 phone2
*0
--INVITE---------->
<-100 (no to tag)-- ----INVITE------>
*1 <---100 trying---
<---180 ringing--
<---180 ringing-----
*2
----INVITE----------------->
<---100 trying--------------
<---180 ringing-------------
<---180 ringing-----
*3
<---200 ok-----------------
<----200 ok ---------
*4
----CANCEL------>
........
An RFC compliant SIP client should handle the scenario following:
*0: the caller sends the INVITE (out-of-dilaog).
*1: The caller receives a 100 trying response. A "100 trying" does not
have a to-tag and thus does not create dialogs. It will only stop
retransmissions.
*2: The caller receives a provisional response. It creates an
"early-dialog" with the identifier call-id/fromtag/totag1.
*3: The caller receives another provisional response. The response has a
different to-tag. Thus the caller creates a second "early-dialog" with
identifier call-id/fromtag/totag2.
*4: The caller receives a final response. The 200 ok matches
call-id/fromtag/totag2. Thus, the first early-dialog will be terminated
and the second early-dialog will be transformed into "confirmed" state.
Some non-complient clients handle it in other ways, e.g.:
- Asterisk with "pedantic=no": Asterisk does not care about totags in
provisional responses but only in the 200 ok. (works but insecure).
- Asterisk with "pedantic=yes": Asterisk learns the totag from the first
provisional response. All further responses with different totag are
ignored. (breaks compatibility).
I guess the Thomson device has the some bug as Asterisk in pedantic mode.
> If it's that, I don't read something about this behaviour in the RFC to
> argument my quick fix.
Of course the workaround with "removing totags in provisional responses"
breaks the RFC - but in the case with broken clients the RFC is already
broken by the clients.
> An other problem appears, you said that "try to remove the to-tag in the 180
> and 183 responses *to this client*". I would like too, but how can I match
> UserAgent in Status, there's not.
If the INVITE has a user agent header like
"User-Agent: Thomsen abcd....." you activate the reply_route. E.g.
...
if ((method == INVITE)
&& (search("User-Agent: Thomson")) {
t_on_reply("1");
xlog("L_INFO","buggy Thomson, activate reply route to strip totag");
}
...
onreply_route[1] {
xlog("L_INFO","reply route: strip totag");
# put some more xlog here if wanted...
if (t_check_status("(1[0-9][0-9])")) {
subst('/^(To:.*)\;tag=[^;[:cntrl:]]*/\1/i');
}
}
regards
Klaus
Hi Guys,
I have been trying all day, to create "static routing" in my
openser-proxy(1.3).
My openser-script is based on the default, so what I am doing is just:
-------------------------------------------
if ( loose_route() )
{
// strip of preloaded route is NOT being done here??
route();
}
if ( isToMe() )
{
// Do local logic
}
else
{
// forward this via proxyX
append_hf("Route: <sip:1.1.1.1:5060;lr>\r\n");
if (loose_route() )
{
route(1);
}
else
{
// I always end up here...loose_route() always returns false...
// because its looking at the first route, that should have been
stripped off...
}
-----------------------------
I have added lots of traces to lookup.c, and according to those, it
seems that the preloaded
route is not stripped off properly?
Once I get too the second "loose_route()", that function IS STILL
looking at the first
preloaded route, which should have been stripped in the first "if".
I am getting the feeling that the "deletion/stripping" of the first,
preloaded, Route, is not
done directly, causing the second check, to find the first...
My work-around is naturally to use setdsturi(), but I thought that
loose_route() should be able
to do all this for me...?
Also, this used to work, in version 1.1, about year ago :-)
Any toughts?
Regards
Taisto Qvist