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?
I'm running into a problem with rtpproxy on this point,
quoting from the README:
- - - - - - - - - - -
- after the session has been created, the proxy listens on the port it has
allocated for that session and waits for receiving at least one UDP
packet from each of two parties participating in the call. Once such
packet is received, the proxy fills one of two ip:port structures
associated with each call with source ip:port of that packet. When both
structures are filled in, the proxy starts relaying UDP packets between
parties;
- - - - - - - - - - -
However, a number of clients frequently fail to emit any audio
when originating a call until they hear something from the
TDM gateway, such as ring-back or the called party answering.
So although rtpproxy is receiving a stream of audio, such as
a voice mail menu robot, the calling party can't hear any of
it unless they happen to make some noise or randomly and blindly
press a DTMF key. This seems to be made worse on links with
silence suppression, so there is no background noise to
trigger two-way audio. This is being encountered between Class 4
carriers, so we don't have the option to get someone to
adjust their phone/PBX settings or have them breathe heavier.
Is there a setting adjustment to get rtpproxy to just pass
the RTP packets from directed calling and called sources
even if one party hasn't happened to make noise yet?
I personally don't understand why this requirement for
seeing audio from both sides before starting the flow in
either direction if audio starts coming in even exists.
It seems to have no benefit but is bound to cause this
deadly embrace problem in many situations that may be
beyond the control of the owners of the equipment
passing traffic along to the site where rtpproxy is in
use.
Suggestions? Fix? I have looked at the latest snapshot
of rtpproxy and the README is unchanged since 1.1 so
apparently this behavior is still the same.
Thanks in advance!
Hi, maybe this question is a bit off-topic so I'm sorry for that.
My question is about SIP providers using OpenSer that associate PSTN numbers
to their local clients (SIP accounts):
Usually the client must register to OpenSer in order to receive calls. Then it
will appear in location table with "Contact=sip:clientX@IP".
Suppose clientX has two PSTN numbers associated in a ENUM entry:
+34999000111
+34999000222
When anyone in PSTN world calls to +34999000222 the call will arrive to the
OpenSer from a gateway in an INVITE like:
INVITE sip:+34999000222@gateway SIP/2.0
To: <sip:+34999000222@gateway>
The OpenSer will do the lookup in location table and finally send this INVITE
to the clientX:
INVITE sip:clientX@IP_clientX SIP/2.0
To: <sip:+34999000222@gateway>
The info about the called PSTN number is just available in "To" header, so a
way to get different behaviour for each associated PSTN number is
matching "To" URI.
Is common to do it? which other alternatives are there?
Thanks for any comment. Regards.
--
Iñaki Baz Castillo
ibc(a)in.ilimit.es
Hi all,
Trying to install Openser1.3.2.... everything is OK and fine... but when I
try to add support for snmp there are errors.. Dig dep into google,
recheck all dependencies and didn't succeed...
My env is FreeBSD 7.0-STABLE i386
The full net-snmp package is installed:
atila# pkg_info | grep net-snmp
net-snmp-5.3.2_3 An extendable SNMP implementation
These are the error messages....
make modules/libsnmpstats modules....
Compiling alarm_checks.c
gcc -fPIC -DPIC -g -O9 -funroll-loops -Wcast-align -Wall
-minline-all-stringops -falign-loops -ftree-vectorize -mtune=prescott
-Wold-style-definition -Wmissing-field-initializers
-DMOD_NAME='"snmpstats"' -DNAME='"openser"' -DVERSION='"1.3.2-notls"'
-DARCH='"i386"' -DOS='"freebsd"' -DCOMPILER='"gcc 4.2.1"' -D__CPU_i386
-D__OS_freebsd -D__SMP_no -DCFG_DIR='"/usr/local/etc/openser/"'
-DPKG_MALLOC -DSHM_MEM -DSHM_MMAP -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP
-DDISABLE_NAGLE -DHAVE_RESOLV_RES -DSTATISTICS -DCHANGEABLE_DEBUG_LEVEL
-DF_MALLOC -DFAST_LOCK -DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=1024
-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN
-DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG
-DHAVE_TIMEGM -DHAVE_NETINET_IN_SYSTM -DHAVE_KQUEUE -DHAVE_SELECT -c
alarm_checks.c -o alarm_checks.o
In file included from alarm_checks.c:38:
openserObjects.h:41:38: error: net-snmp/net-snmp-config.h: No such file or
directory
openserObjects.h:42:40: error: net-snmp/net-snmp-includes.h: No such file
or directory
openserObjects.h:43:52: error: net-snmp/agent/net-snmp-agent-includes.h:
No such file or directory
If I edit each file and hardcode the path ... /usr/local/include/net-snmp/...
there are no errors... What am I missing in making sure the path to the
include files are OK... Tried a couple options but didn't succeed... tehre
are tons of include files into the src....
Regards
Ricardo Ferreira
Yes, we do run Openser
www.vipway.com.br
Enterprise VoIP Services
Hi all,
How I send to freeradius-cdrtool the maxCallDuration and UserCredit?
On the /etc/raddb/users I have:
87001(a)mydomain.com.br Auth-Type := Digest, User-Password == "mypassword"
Reply-Message = "Authenticated",
SIP-AVP = "authentic#1",
SIP-AVP = "callMaxDur:60",
SIP-AVP = "credit:25"
Is this correct ?
Thanks.
Diego.
Hi all,
Someone has a patch for use freeradius-cdrtool with the latest version of
cdrtool ?
The stable versions of cdrtool not have multiple commands that were in
earlier versions.
Thanks.
Diego.
Hi!
I'm running ser-0.9.6, on FreeBSD 6.1-stable, database backend
is postgresql version 8.1.3.
Today I got errors in logfiles, saying:
messages.2.bz2:May 29 14:35:03 <XXX> /usr/local/sbin/ser[51448]:
ERROR:avpops:dbrow2avp: dbrow contains NULL fields
The similar problem reported in:
http://lists.iptel.org/pipermail/serusers/2005-May/019681.html
with much more detailed description of error, database contents
and config samples.
Patch is trivial, and looks more like a fix to copy'n'paste error:
in mysql/val.c function str2val states:
if (!_s) {
memset(_v, 0, sizeof(db_val_t));
VAL_TYPE(_v) = _t;
VAL_NULL(_v) = 1;
return 0;
}
VAL_NULL(_v) = 0;
and the last line mentions that 'well, that's value is not NULL'.
In postgresql/db_val.c, line 182, function str2valp, the same statement is the:
if (!_s) {
DLOG("str2valp", "got a null value");
VAL_TYPE(_v) = _t;
VAL_NULL(_v) = 1;
return 0;
}
without explicit notification that this is not-NULL value.
More than, nowhere else in this function VAL_NULL(_v) not set to 0.
So, if a value _v.val contained anyting but 0 at the function start,
resulting value will be threated as NULL despite the fact, that _s is NOT NULL.
Patch is obvious, just add VAL_NULL(_v)=0; after cited block (line 188) and
everyting will be ok.
At least for me it's ok for some hours :)
Hello,
we have openser 1.3.3 running in production (current rev.: 4943).
For 3 times in 50 days we had to restart openser to correct pkg memory
problem.
After some time logging messages like this:
/openser.log:Aug 19 10:39:18 ipx022 /usr/local/sbin/openser[16991]:
ERROR:core:new_credentials: no pkg memory left,
openser will eventually run out of pkg memory and refuse all subsequent
requests.
We are trying to recreate this in our lab so that we can follow memory
troubleshooting instructions at
http://kamailio.net/dokuwiki/doku.php/troubleshooting:memory, but so far we
were unable to do it even when generating millions of calls and registration
transactions (we are using SIPp to generate normal call flows and even
abnormal call flows detected when reading openser.log, like 'invalid cseq
for aor', malformed SIP messages etc).
And this is much more than in our production environment, with just 600
subscribers and about 2000 calls a day.
The frequency the problem happens is increasing with the number of
subscribers, so we are performing periodic restart of openser (actually,
what we do is to switch over to the standby server). We already recompiled
openser with pkg memory pool size set to 4MB so that this will not have to
be done frequently.
Since we cannot recreate this in our lab, we suspect there is a situation
happening in production that might not be having been properly handled by
openser.cfg. So my question is: would it be possible to an overlooked detail
in openser.cfg to cause pkg memory problem?
In case someone could take a look at it, here's our cfg file:
####### Global Parameters #########
debug=0
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=4
/* uncomment the following lines to enable debugging */
#debug=6
#fork=no
#log_stderror=yes
/* uncomment the next line to disable TCP (default on) */
disable_tcp=yes
/* uncomment the next line to enable the auto temporary blacklisting of
not available destinations (default disabled) */
#disable_dns_blacklist=no
/* uncomment the next line to enable IPv6 lookup after IPv4 dns
lookup failures (default disabled) */
#dns_try_ipv6=yes
/* uncomment the next line to disable the auto discovery of local aliases
based on revers DNS on IPs (default on) */
#auto_aliases=no
/* uncomment the following lines to enable TLS support (default off) */
#disable_tls = no
#listen = tls:your_IP:5061
#tls_verify_server = 1
#tls_verify_client = 1
#tls_require_client_certificate = 0
#tls_method = TLSv1
#tls_certificate = "/usr/local/etc/openser/tls/user/user-cert.pem"
#tls_private_key = "/usr/local/etc/openser/tls/user/user-privkey.pem"
#tls_ca_list = "/usr/local/etc/openser/tls/user/user-calist.pem"
port=5060
/* uncomment and configure the following line if you want openser to
bind on a specific interface/port/proto (default bind on all available)
*/
#listen=udp:202.173.5.181:5060
####### Modules Section ########
#set module path
mpath="/usr/local/lib/openser/modules/"
/* uncomment next line for MySQL DB support */
loadmodule "mysql.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"
loadmodule "uri_db.so"
loadmodule "uri.so"
loadmodule "xlog.so"
loadmodule "acc.so"
loadmodule "carrierroute.so"
loadmodule "nathelper.so"
loadmodule "dialog.so"
loadmodule "snmpstats.so"
/* uncomment next lines for MySQL based authentication support
NOTE: a DB (like mysql) module must be also loaded */
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "lcr.so"
/* uncomment next line for aliases support
NOTE: a DB (like mysql) module must be also loaded */
loadmodule "alias_db.so"
/* uncomment next line for multi-domain support
NOTE: a DB (like mysql) module must be also loaded
NOTE: be sure and enable multi-domain support in all used modules
(see "multi-module params" section ) */
loadmodule "domain.so"
/* uncomment the next two lines for presence server support
NOTE: a DB (like mysql) module must be also loaded */
#loadmodule "presence.so"
#loadmodule "presence_xml.so"
loadmodule "uac.so"
loadmodule "avpops.so"
# ----------------- setting module-specific parameters ---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 1)
# ----- rr params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
# modparam("registrar", "append_branches", 0)
/* uncomment the next line not to allow more than 10 contacts per AOR */
modparam("registrar", "max_contacts", 10)
modparam("registrar", "min_expires", 30)
modparam("registrar", "max_expires", 40)
modparam("registrar", "default_expires", 35)
# ----- uri_db params -----
/* by default we disable the DB support in the module as we do not need it
in this configuration */
modparam("uri_db", "use_uri_table", 0)
modparam("uri_db", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("uri_db", "use_domain", 1)
# ----- acc params -----
/* what sepcial events should be accounted ? */
modparam("acc", "early_media", 1)
modparam("acc", "report_ack", 1)
modparam("acc", "report_cancels", 1)
/* by default ww do not adjust the direct of the sequential requests.
if you enable this parameter, be sure the enable "append_fromtag"
in "rr" module */
modparam("acc", "detect_direction", 0)
/* account triggers (flags) */
modparam("acc", "failed_transaction_flag", 3)
modparam("acc", "log_flag", 1)
modparam("acc", "log_missed_flag", 2)
/* uncomment the following lines to enable DB accounting also */
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
# ----- usrloc params -----
#modparam("usrloc", "db_mode", 0)
/* uncomment the following lines if you want to enable DB persistency
for location entries */
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("usrloc", "use_domain", 1)
# ----- auth_db params -----
/* uncomment the following lines if you want to enable the DB based
authentication */
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("auth_db", "load_credentials",
"$avp(s:rpid)=rpid;$avp(s:blocked)=subscriber_status")
# ----- alias_db params -----
/* uncomment the following lines if you want to enable the DB based
aliases */
modparam("alias_db", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("alias_db", "use_domain", 0)
# ----- domain params -----
/* uncomment the following lines to enable multi-domain detection
support */
modparam("domain", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("domain", "db_mode", 1) # Use caching
# ----- multi-module params -----
/* uncomment the following line if you want to enable multi-domain support
in the modules (dafault off) */
#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)
# ----- presence params -----
/* uncomment the following lines if you want to enable presence */
#modparam("presence|presence_xml", "db_url",
# "mysql://openser:openserrw@localhost/openser")
#modparam("presence_xml", "force_active", 1)
#modparam("presence", "server_address", "sip:192.168.1.2:5060")
# ----- carrieroute params -----
modparam("carrierroute", "db_url", "mysql://openser:openserrw@localhost
/openser")
modparam("carrierroute", "config_source", "db")
modparam("carrierroute", "use_domain", 1)
# ----- NatHelper -----
#para versao a partir da versao 1.2 eh necessario esse paramtro para nao dar
erro qdo usa a funcao "fix_nated_register();"
modparam("nathelper|registrar", "received_avp", "$avp(i:42)")
modparam("nathelper", "rtpproxy_sock", "udp:127.0.0.1:22222")
# ----- LCR -----
modparam("lcr", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("lcr|tm", "fr_inv_timer_avp", "$avp(i:704)")
modparam("lcr", "gw_uri_avp", "$avp(i:709)")
modparam("^auth$|lcr", "rpid_avp", "$avp(i:302)")
modparam("lcr", "contact_avp", "$avp(i:711)")
modparam("lcr", "ruri_user_avp", "$avp(i:500)")
modparam("lcr", "dm_flag", 25)
# ----- Dialog ----
modparam("dialog", "dlg_flag", 4)
# ----- SnmpStat -----
modparam("snmpstats", "sipEntityType", "registrarServer")
modparam("snmpstats", "sipEntityType", "proxyServer")
modparam("snmpstats", "MsgQueueMinorThreshold", 2000)
modparam("snmpstats", "MsgQueueMajorThreshold", 5000)
modparam("snmpstats", "dlg_minor_threshold", 500)
modparam("snmpstats", "dlg_major_threshold", 750)
modparam("snmpstats", "snmpgetPath","/usr/bin/")
modparam("snmpstats", "snmpCommunity","public")
####### Routing Logic ########
# main request routing logic
route{
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
##nat
route(2);
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
if (is_method("BYE")) {
setflag(1); # do accouting ...
setflag(3); # ... even if the transaction fails
}
route(1);
} else {
/* uncomment the following lines if you want to enable presence
*/
##if (is_method("SUBSCRIBE") && $rd == "your.server.ip.address")
{
## # in-dialog subscribe requests
## route(2);
## exit;
##}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# non loose-route, but stateful ACK; must be an ACK
after a 487 or e.g. 404 from upstream server
#t_relay();
#exit;
route(1);
} else {
# ACK without matching transaction ... ignore and
discard.\n");
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
#initial requests
setflag(4); #for dialog statistics
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans()) route(1);
# t_relay();
# exit;
}
#t_check_trans();
if (is_method("PUBLISH|SUBSCRIBE|REFER|OPTIONS|MESSAGE"))
{
sl_send_reply("405", "Method not allowed");
exit;
}
# authenticate if from local subscriber (uncomment to enable auth)
if (!(method=="REGISTER") && (!from_gw()))
{
if (!proxy_authorize("", "subscriber")) {
proxy_challenge("", "0");
exit;
}
if (!check_from()) {
sl_send_reply("403","Forbidden auth ID");
exit;
}else if (avp_check("$avp(s:blocked)", "eq/0")) {
sl_send_reply("603","Subscriber disabled");
exit;
}else if (avp_check("$avp(s:blocked)", "eq/1")) {
sl_send_reply("603","Subscriber with outgoing
blocked");
exit;
}
consume_credentials();
# caller authenticated
}
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
# account only INVITEs
if (is_method("INVITE")) {
setflag(1); # do accouting
}
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests (uncomment to enable auth)
if (!proxy_authorize("", "subscriber"))
{
proxy_challenge("", "0");
exit;
}
if (!check_to())
{
sl_send_reply("403","Forbidden auth ID");
exit;
}else if (avp_check("$avp(s:blocked)", "eq/0")) {
sl_send_reply("403","Subscriber disabled");
exit;
}
if (!save("location"))
sl_reply_error();
exit;
}
if ($rU==NULL) {
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# apply DB based aliases (uncomment to enable)
##alias_db_lookup("dbaliases");
#if the call came from a known gateway it is not authenticated and we
cannot use the function check_from()
if (from_gw()) {
route(4);
}else if (!check_from()) {#if the check_from() returns false the call is
not from a subscriber
route(4);
} else {#it is a subscriber, route using flip domain
xlog("L_INFO", "routing using carrierroute $rm to $ru\n");
if (!cr_user_rewrite_uri("$fu", "flip"))
{
t_newtran();
t_reply("404", "No Route");
exit;
}
#replaces from by it's default DID
uac_replace_from("sip:$avp(s:rpid)@$fd");
}
# when routing via usrloc, log the missed calls also
setflag(2);
route(1);
}
route[1] {
xlog("L_INFO", "ROUTE_1 $rm to $ru\n");
if (subst_uri('/(sip:.*);nat=yes/\1/'))
{
setflag(6);
};
if (isflagset(5)||isflagset(6)) {
route(3);
}
if (!t_relay()) {
sl_reply_error();
};
exit;
}
route[2] {
xlog("L_INFO", "ROUTE_2 $rm to $ru\n");
if (method=="REGISTER") {
fix_nated_register();
} else if (!from_gw()){
fix_nated_contact();
};
setflag(5);
}
route[3] {
xlog("L_INFO", "ROUTE_3 $rm to $ru\n");
if (is_method("BYE|CANCEL")) {
unforce_rtp_proxy();
} else if (is_method("INVITE")) {
xlog("L_INFO", "FORCE RTP w/ parameter.\n");
force_rtp_proxy("r");
t_on_failure("1");
};
if (isflagset(5))
search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');
t_on_reply("1");
}
route[4] {
xlog("L_INFO", "uri does exist $rm to $ru \n");
if (alias_db_lookup("dbaliases")){
if (!lookup("location")) {
switch ($retcode) {
case -1:
t_newtran();
t_reply("404", "Subscriber not online");
exit;
case -2:
sl_send_reply("405", "Method Not
Allowed");
exit;
}
}
}else{#check if did is blocked
$rU = "(BLK)" + $rU;
if (alias_db_lookup("dbaliases")){
sl_send_reply("403", "DID blocked");
exit;
}else{# if it is not a valid DID nor a blocked DID tries to route it
using peering domain
if (!cr_rewrite_uri("peering", "call_id"))
{
t_newtran();
t_reply("404", "Peering Not Found");
exit;
}
}
}
}
failure_route[1] {
xlog("L_INFO", "FAILURE $rm to $ru\n");
if (isflagset(6)||isflagset(5)) {
unforce_rtp_proxy();
}
}
onreply_route[1] {
xlog("L_INFO", "ONREPLY_1 - Status $rs from $si $rm .\n");
if (is_method("INVITE")) {
if ((isflagset(5)||isflagset(6)) &&
status=~"(183)|(2[0-9][0-9])") {
force_rtp_proxy();
}
search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');
if (!from_gw()){ #if (isflagset(6)) {
xlog("L_INFO", "ONREPLY_1 - ! from gw.\n");
fix_nated_contact();
}
exit;
}
}
Regards,
takeshi
I am curious, what exactly is the purpose and philosophy of the various
hash algorithms in the dispatcher module? I am referring to the ones
that allow the gateway in the route set to be determined through a hash
of various SIP headers, such as the From URI, the To URI, the Call-ID
GUID, etc.
No guarantee of fair distribution - or in fact, any distribution that
can be characterised by any describable pattern whatsoever - is implied
by these algorithms.
Additionally, it seems that without knowing
(1) The exact hash algorithm in use;
(2) The distribution that this hash algorithm would yield for a given
set of possible values of these header fields, which in many cases are
specifically intended to be pseudorandom (e.g. Call-ID),
there is absolutely no way to determine, from any meaningfully
deterministic perspective, which numerical entry in the route set these
algorithms would computationally yield.
So, I guess my question is: With no implied uniformity or weighting in
the distribution whatsoever based on the incidental character of such
values, what practical use does it serve to use any algorithms except
round-robin or random? Is it expected that the user will plot the hash
values against a log of given input strings to determine how the
distribution will shape up? Is there some reason why the sort of
profoundly lopsided distribution that may create might be desirable?
Thanks,
--
Alex Balashov
Evariste Systems
Web : http://www.evaristesys.com/
Tel : (+1) (678) 954-0670
Direct : (+1) (678) 954-0671
Mobile : (+1) (706) 338-8599
Hello,
I am trying to get out you knowledge as DBA ... in some discussions in
the past was brought out that in some cases doing a delete on primary
key followed by a pure insert might be faster than one update. It might
be dependent of DB server type and perhaps the question would have
better answer in appropriate db-specific mailing lists, but I want to
see if some of you has more experience/insights about this and is
willing to share or got into same dilemma.
Thanks,
Daniel
--
Daniel-Constantin Mierla
http://www.asipto.com