Ovidiu Sas writes:
> I'm not familiar with the dbtext module and therefore I don't have a
> patch for it, just the lcr patch that I already posted in the
> tracker.
ovidiu,
but my point was that it doesn't make sense to remove DB_STRING test
from one module and leave it in some other modules. i still believe that the
right approach is to fix dbtext module by adding support for DB_STRING
test there.
so you should remove the bug tracker item on lcr and move it to dbtext
module.
-- juha
Hello,
so far, when a new major release a new branch was created with the first
version in that branch:
rel_1_0_0 - was for 1.0.x
rel_1_1_0 - was for 1.1.x
Some complained that it is not suggestive when minor release in the
branch was done, like 1.0.1 or 1.1.1. So, let's try to find a way more
convenient. So we will have release a.b.c, where c can be incremented
several time, being like a patch update release for a.b.0.
Proposed options:
1) a_b_0 - stick to current module
2) a_b_x - use x to signal that it is a changing number for same major
release
3) a_b - ignore patch release number
Other suggestions are welcome. Please feedback as soon as possible. The
branch will be created in few hours.
Cheers,
Daniel
Hi,
I have my subscribers registered with a specific domain (ie:
0123456789(a)company.com) in subscribers table.
The subscribers are geographic numbers and can made PSTN calls (outgoing
calls).
The question is for incoming PSTN calls: the gateway (Cisco) transfer calls
to SER as <mailto:0123456789@192.168.0.1> 0123456789(a)192.168.0.1 (the IP of
SER Server) and receive the error Forbidden because the subscriber is
registered as <mailto:0123456789@company.com> 0123456789(a)company.com. Can I
replace @192.168.0.1 with @company.com or disabile this check?
Can someone help me?
Thanks in advance,
Giò
Hello
Im configuring a server with hundreds of users and Im not using RTPproxy
in order to allow more calls / second.
But my clients that are behind NAT need OpenSER to force the RTP to pass
through the server....
how can I configure RTPproxy to be used only in the calls inside my domain?
Thanks
regards
Joao Pereira
Hi
I have two questions.
1. Receiver(a)1.1.1.1 and Receiver(a)2.2.2.2 register with ser.
Client sends an INVITE to ser for Receiver.
ser forks these INVITES in parallel to both Receiver(a)1.1.1.1 and
Receiver(a)2.2.2.2.
As both Receivers are online, they both reply with 200 OK.
SER then relays BOTH 200 OK's back to the Client.
My question: Shouldn't SER send CANCEL to one of them, and relay only
ONE 200 OK back to the client? How would I do this?
It is not the client's responsibility to send a CANCEL to the SER to
relay to one of the receivers, is this correct?
2. When I have
tls_verify_client = 1
tls_require_client_certificate = 1
in my cfg file, ser still accepts tcp and udp connections, despite
tls_require_client_certificate=1. I did a search, and found this way:
if (proto != TLS) {
sl_send_reply("403", "Forbidden");
exit;
};
However SER is really still listening on UDP and TCP port 5060. Is there
a way to configure SER such that it only listens and acknowledges TLS
connections?
Thanks
Andrew
Hello,
... although mainly intended for developers, it might be useful for
everybody ...
Doxygen-generated documentation for development version is now available
for browse online at:
http://www.openser.org/doxygen-devel/
It is a very good tool to check where a variable or function was defined
or referenced, look at internal structures without downloading sources
locally. Credits to Norman Brandinger for the config files of doxygen.
Those files are now included in source tree, in 'doc/doxygen', so if you
want to generate a local copy of such documentation, use:
# doxygen doc/doxygen/openser-doxygen
The outup is in 'doc' directory. you can tune it from doxygen config files.
Cheers,
Daniel
Daniel-Constantin Mierla writes:
> deadline was till today. Please no changes in the SVN only bug fixes if
> found in last minute. Not other updates to C code -- docs are always
> welcome to improve.
ok, i'll commit the changes to trunk after 1.2 has been released.
-- juha
Daniel-Constantin Mierla writes:
> > There is another hidden bomb inside the lcr module.
> yes, know about that. Talked with Juha and there seems to be loat of
> changes to me made in time for this release. It is his decision how far
> to go. I changed to many modules, where I had good knowledge.
> Unfortunately lcr is not one I played too much, so the best is to have
> maintainer do it. For next release, these should be labeled as "to be
> fixed".
i made the changes, but was out of "office" for a few days and have not
tested them. when is the deadline?
-- juha
Im trying to set up a SIP and RTP proxy server to provide sip trunks to
other SIP servers and PABX. The trunk to the PSTN will be provided by an
other SIP server. This server will only handle signaling and rtp streams
from our server. To test the configuration Im using a softphone (eyebeam
1.5), a cisco 7912 with SIP IOS, both logged in on my own SIP server, and a
mobile phone as a PSTN client.
Above shown in a diagram .
http://praatpaal.com/images/sipdiagram.jpg
The following occurs:
1. When I call from the softphone (eyebeam) the the Cisco 7912 the call is
established correct. As far as I can debug the clients are forced to use the
mediaproxy running on our server. This also works the other way around.
2. When I call from PSTN to a SIP client, I can only hear audio from the
PSTN on the SIP client.
3. When I call from a SIP client to the PSTN, I can only hear audio from the
SIP client on the PSTN client.
So, my conclusion is:
When a call is setup from or to the PSTN network, audio is only working from
the client the call is originated.
Below is the configuration from our SIP server and The Mediaserver.
Please help me out here . Let me know if you have any questions or need more
information
Kind regards,
Berry Bartels
RoutIT B.V.
OPENSER.CFG
listen=XXX.XXX.XXX.XXX
alias=" XXX.XXX.XXX.XXX "
alias="voipit.nl"
alias="sip01.voipit.nl"
alias="sipproxy01.voipit.nl"
debug=3
fork=no
log_stderror=yes
check_via=yes # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
sip_warning=yes
syn_branch=yes
server_signature=yes
port=5060
children=4
fifo="/tmp/openser_fifo"
fifo_db_url="mysql://openser:********@localhost/openser"
# --- load modules
mpath="/usr/lib/openser/modules/"
loadmodule "mysql.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "domain.so"
loadmodule "nathelper.so"
loadmodule "mediaproxy.so"
loadmodule "xlog.so"
loadmodule "acc.so"
# --- module params
# rr
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# mediaproxy
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("mediaproxy", "natping_interval", 0)
modparam("nathelper", "rtpproxy_disable", 1)
modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "sipping_from", "sip:ping@voipit.nl")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("usrloc", "db_mode", 2)
modparam("usrloc","db_url","mysql://openser:********@localhost/openser")
modparam("acc", "db_url", "mysql://openser:********@localhost/openser")
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "db_flag", 1)
# request routing logic
route
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: ROUTE
script\n");
# sanity checks
if (!mf_process_maxfwd_header("10"))
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Too many hops\n");
sl_send_reply("483","Too
Many Hops");
exit;
}
if (msg:len >= max_len)
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Message too big\n");
sl_send_reply("513",
"Message too big");
exit;
}
if(loose_route()) {
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Loose Route -> route[1]\n");
t_relay();
}
if (!method=="INVITE")
{
record_route();
}
lookup("aliases");
if (uri==myself)
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration :: URI is myself\n");
if (method=="REGISTER") {
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration\n");
# Uncomment
this if you want to use digest authentication
if
(!www_authorize("voipit.nl", "subscriber")) {
www_challenge("voipit.nl", "0");
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration ::
Failed\n");
exit;
}
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration :: Success\n");
save("location");
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration :: Location
Saved\n");
exit;
}
if
(is_method("INVITE")||is_method("ACK"))
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Invite\n");
if
(lookup("location") && from_uri=~".*(a)voipit.nl")
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Lookup Location :: Found
:: Internal Call\n");
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Internal Call ->
Route[1]\n");
route(1);
exit;
} else if
(lookup("location") && from_uri!=~".*(a)voipit.nl") {
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Lookup Location :: Found :: Inbound Call\n");
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Inbound Call ->
Route[1]\n");
route(1);
exit;
} else {
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Lookup Location :: NOT
Found :: Outbound Call\n");
#
sl_send_reply("404","Not found :: Outbound Call");
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Outbound Call ->
Route[2]\n");
route(2);
exit;
}
}
if (is_method("SUBSCRIBE"))
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Subscribe :: Subscribed in
Database\n");
exit;
}
append_hf("P-hint: usrloc
applied\r\n");
}
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: End of
script -> Route[1]\n");
route(1);
}
route[1]
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] ::
route[1]\n");
if (is_method("INVITE"))
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
:: route[1] :: INVITE\n");
t_on_reply("1");
# t_on_failure("1");
use_media_proxy();
} else if (is_method("BYE|CANCEL")) {
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
:: route[1] :: BYE OR CANCEL\n");
end_media_session();
}
if (!t_relay())
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[1] :: T_RELAY error\n");
sl_reply_error();
end_media_session();
} else {
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[1] :: T_RELAY\n");
}
exit;
}
route[2]
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] ::
route[2]\n");
if (is_method("INVITE"))
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
:: route[2] :: INVITE\n");
rewritehostport("YYY.YYY.YYY.YYY:5060");
t_on_reply("2");
use_media_proxy();
} else if (is_method("BYE|CANCEL")) {
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
:: route[2] :: BYE OR CANCEL\n");
end_media_session();
}
if (!t_relay())
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[2] :: T_RELAY error\n");
sl_reply_error();
end_media_session();
} else {
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[2] :: T_RELAY\n");
}
exit;
}
onreply_route[1]
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] ::
onreply_route[1]\n");
if (status =~ "(183)|(2[0-9][0-9])")
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[1] :: Status is 183 or
200-299\n");
if (client_nat_test("1"))
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[1] ::
nat_test(1) :: TRUE\n");
fix_contact();
} else {
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[1] ::
nat_test(1) :: TRUE\n");
}
use_media_proxy();
}
}
onreply_route[2]
{
xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
:: onreply_route[2]\n");
if (client_nat_test("1"))
{
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[2] :: nat_test(1) :: TRUE\n");
fix_contact();
} else {
xlog("L_NOTICE",
"[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[2] :: nat_test(1) :: TRUE\n");
}
use_media_proxy();
}
MEDIAPROXY.INI
[Dispatcher]
start = yes
socket = /var/run/proxydispatcher.sock
group = openser
defaultProxy = /var/run/mediaproxy.sock
[MediaProxy]
start = yes
socket = /var/run/mediaproxy.sock
group = openser
listen = none
allow = Any
proxyIP = XXX.XXX.XXX.XXX
portRange = 60000:65000
TOS = 0xb8
idleTimeout = 60
holdTimeout = 180
forceClose = 0
[Accounting]
accounting = none
[Database]
user = openser
password = ********
host = 127.0.0.1
database = radius
table = radacct
[Radius]
secret = secret
server = localhost
authport = 1812
acctport = 1813
dictionaries = /etc/radiusclient-ng/dictionary,
/etc/openser/radius/dictionary, /usr/local/mediaproxy/dictionary
retries = 2
timeout = 3
Hi Everyone,
Does OpenSER have any mechanism to temporarily suspend or disable a
subscriber? For example, if they don't pay their bill.
If not, how are other people doing this? I know I could modify their
username or password in the subscriber table, but that seems like a
bit of a hack. Any ideas?
Thanks!
Daryl