Im trying to use openser as a Proxy for different interfaces in one box I
have tried almos averithing to make it work properly but for some reason I
cant.
Here is my setup and I hope someone can helpme or guide me in the right
way.
One Linux-OpenSer box with 4 netcards
1 Has a public ip
2 Has a 192.168.23.10 ip
3 Has a 10.254.10.240 ip
4 Is not being used
I want to be able to make calls from the ATAs in all the different networks,
but the fact is that as it is now I cant, I want to know if I have to set up
multiple media proxies or rtpproxy if I have to use a proxy dispatcher or
not.
This is my configuration file
# ----------- global configuration parameters ------------------------
#debug=9 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
#fork=no
#log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
#port=5060
children=4
fifo="/tmp/openser_fifo"
fifo_db_url="mysql://openser:openserrw@localhost/openser"
alias="test.net"
# ------------------ module loading ----------------------------------
#loadmodule "/usr/lib/openser/modules/acc.so"
loadmodule "/usr/lib/openser/modules/mysql.so"
loadmodule "/usr/lib/openser/modules/sl.so"
loadmodule "/usr/lib/openser/modules/tm.so"
loadmodule "/usr/lib/openser/modules/rr.so"
loadmodule "/usr/lib/openser/modules/maxfwd.so"
loadmodule "/usr/lib/openser/modules/usrloc.so"
loadmodule "/usr/lib/openser/modules/registrar.so"
loadmodule "/usr/lib/openser/modules/auth.so"
loadmodule "/usr/lib/openser/modules/auth_db.so"
loadmodule "/usr/lib/openser/modules/uri.so"
loadmodule "/usr/lib/openser/modules/uri_db.so"
loadmodule "/usr/lib/openser/modules/domain.so"
loadmodule "/usr/lib/openser/modules/mediaproxy.so"
loadmodule "/usr/lib/openser/modules/nathelper.so"
loadmodule "/usr/lib/openser/modules/textops.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "timer_interval", 10)
modparam("usrloc", "db_url", "mysql://openser:openserrw@localhost/openser")
# -- auth params --
modparam("auth_db", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("auth_db", "calculate_ha1", yes)
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)
# -- tm Params --
modparam("tm", "fr_inv_timer", 45 )
modparam("tm", "fr_timer", 12 )
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "rtpproxy_disable", 1)
#modparam("nathelper", "natping_interval", 30)
#modparam("nathelper", "sipping_from", "sip:ping@sipserver.net")
#modparam("mediaproxy", "ping_nated_only", 0) # Ping only clients behind
NAT
modparam("mediaproxy", "natping_interval", 20)
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("registrar", "nat_flag", 6)
# ------------------------- request routing logic -------------------
# main routing logic
route {
# -----------------------------------------------------------------
# Procesos de Limpieza
# -----------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message Overflow");
break;
};
# -----------------------------------------------------------------
# Registro
# -----------------------------------------------------------------
if (method!="REGISTER") {
log(1, "Area de Registro\n");
record_route();
};
# -----------------------------------------------------------------
# Call Tear Down Section
# -----------------------------------------------------------------
if (method=="BYE" || method=="CANCEL") {
log(1, "Proceso de fin de llamada\n");
end_media_session();
};
# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
if (has_totag() && (method=="INVITE" || method=="ACK")) {
if (client_nat_test("3") ||
search("^Route:.*;nat=yes")) {
setflag(6);
use_media_proxy();
};
};
route(1);
break;
};
# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------
if (uri!=myself) {
route(1);
break;
};
if (uri==myself) {
if (method=="CANCEL") {
route(3);
break;
} else if (method=="INVITE") {
route(3);
break;
} else if (method=="REGISTER") {
route(2);
break;
};
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
};
route(1);
}
route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") {
end_media_session();
};
sl_reply_error();
};
}
route[2] {
# -----------------------------------------------------------------
# REGISTER Message Handler
# ----------------------------------------------------------------
sl_send_reply("100", "Trying");
# if(dst_ip==192.168.1.1) {
# log("message received on loopback interface\n");
# setflag(7);
# fix_nated_register();
# force_rport();
# };
# if(dst_ip==192.168.108.253) {
# log("message received on loopback interface\n");
# setflag(6);
# fix_nated_register();
# force_rport();
# };
if (!www_authorize("test.net","subscriber")) {
www_challenge("test.net","0");
break;
};
if (!check_to()) {
sl_send_reply("401", "Unauthorized");
break;
};
consume_credentials();
if (!save("location")) {
sl_reply_error();
};
fix_nated_register();
}
route[3] {
# -----------------------------------------------------------------
# CANCEL and INVITE Message Handler
# -----------------------------------------------------------------
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
if (method=="CANCEL") {
route(1);
break;
};
if (!proxy_authorize("","subscriber")) {
proxy_challenge("","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
#
------------------------------------------------------------------------
# Reglas de LLamada
#
------------------------------------------------------------------------
if(uri=~"(^sip:1[0-9]*@.*)" &&
from_uri=~"(^sip:2[0-9]*@.*)") {
log(1, "Llamada de extenciones 1xxx a 2xxx\n");
use_media_proxy();
};
if(uri=~"(^sip:1[0-9]*@.*)" &&
from_uri=~"(^sip:3[0-9]*@.*)") {
log(1, "Llamada de extenciones 1xxx a 3xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:1[0-9]*@.*)" &&
from_uri=~"(^sip:4[0-9]*@.*)") {
log(1, "Llamada de extenciones 1xxx a 4xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:2[0-9]*@.*)" &&
from_uri=~"(^sip:1[0-9]*@.*)") {
log(1, "Llamada de extenciones 2xxx a 1xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:2[0-9]*@.*)" &&
from_uri=~"(^sip:3[0-9]*@.*)") {
log(1, "Llamada de extenciones 2xxx a 3xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:2[0-9]*@.*)" &&
from_uri=~"(^sip:4[0-9]*@.*)") {
log(1, "Llamada de extenciones 2xxx a 4xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:3[0-9]*@.*)" &&
from_uri=~"(^sip:1[0-9]*@.*)") {
log(1, "Llamada de extenciones 3xxx a 1xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:3[0-9]*@.*)" &&
from_uri=~"(^sip:2[0-9]*@.*)") {
log(1, "Llamada de extenciones 3xxx a 2xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:3[0-9]*@.*)" &&
from_uri=~"(^sip:4[0-9]*@.*)") {
log(1, "Llamada de extenciones 3xxx a 4xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:4[0-9]*@.*)" &&
from_uri=~"(^sip:1[0-9]*@.*)") {
log(1, "Llamada de extenciones 4xxx a 1xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:4[0-9]*@.*)" &&
from_uri=~"(^sip:2[0-9]*@.*)") {
log(1, "Llamada de extenciones 4xxx a 2xxx\n");
fix_contact();
use_media_proxy();
};
if(uri=~"(^sip:4[0-9]*@.*)" &&
from_uri=~"(^sip:3[0-9]*@.*)") {
log(1, "Llamada de extenciones 4xxx a 3xxx\n");
fix_contact();
use_media_proxy();
};
route(1);
}
onreply_route[1] {
#if ((isflagset(6) || isflagset(7)) &&
(status=~"(180)|(183)|2[0-9][0-9]")) {
# if (!search("^Content-Length:\ +0")) {
log(1, "Mensaje de prueba en reply route\n");
fix_contact();
use_media_proxy();
# };
# };
}
As you can see I use different starting numbers for the ATA for each of the
interfaces, I tested using only one mediaproxy listening to 127.0.0.1 but I
have tried a lot of configurations, all the clients register perfectly but
cant seem to call one another exept the ones that are on the same interface.
Im using fedora core 3 with openser 0.95 mediaproxy 1.42
Hope any one can help me or point me the way to do this of if its not viable
or cant be done.
Thanks a lot for your kind help
Yours truly
Fernando Rodriguez V.
frod(a)aitelecom.net
AITelecom S.A. de C.V.
http://www.aitelecom.net
Hello!
I'm reading through a couple ser tutorials, and they're both suggesting to
install mysql and to use the mysql.so module.
But I'm confused - is mysql necessary or not?
The default ser.conf seems to suggest that it's an option; but the serctl
usage text shows '*' next to each action that requires a mysql pwd...
including adding/deleting users.
How would I add/delete users if not using mysql?
Thanks!
Corey
Hi
This harry thread , I now look forward to in the morning, wastes alot of
space, but then so does spam. I have completely lost where I was on the
thread about his problem, so harry I suggest you scrap what you have
posted up until now, cause it makes no sense, also post only to serusers
and openser, lets ignore asterisk for now.
I am going to post my understanding of what you want, all those who have
a clue please add, and lets see if we can solve Harry's problem, harry
if we cannot, please accept that what you are doing is far too advanced
for the mortal man/women (are there any women ?) on this list, and hence
you must carve a path, where no one has gone before...either that or
change what you are doing.
So here goes.....
1 You have ser and asterisk running. Both have a public IP address, and
asterisk runs on port 5050 and ser 5060
2. You want asterisk to handle INVITE and REGISTER via SER....my
question is why do you want the UA to register in SER and asterisk
3. Or do you want SER to handle the REGISTER, INVITE and then when
IM/presence is needed to use asterisk
4. Can you explain what you have till now, do you have UA registering
with SER, and maiing calls to each other (without asterisk)..i.e normal
calls IP <---> IP, with either or both of them behind a NAT...if not do
this first, ignore the rest.
5. If 4 is correct, then have you got asterisk and ser connected
together, i.e talking to each other
Iqbal
Without success
How can I solve this ?
Harry
--- Yair Hakak <yhakak(a)gmail.com> a écrit :
> did you try
> fix_nated_contact() as well as
> fix_nated_register()?
>
> -yair
>
>
> On 11/23/05, harry gaillac <gaillacharry(a)yahoo.fr>
> wrote:
> > something like this
> >
> > sip:user@private ip
> >
> > --- Yair Hakak <yhakak(a)gmail.com> a écrit :
> >
> > > what does a registered agent look like on serctl
> ul
> > > show?
> > >
> > > -yair
> > >
> > > On 11/23/05, harry gaillac
> <gaillacharry(a)yahoo.fr>
> > > wrote:
> > > >
> > > >
> > > > --- Yair Hakak <yhakak(a)gmail.com> a écrit :
> > > >
> > > > > if you are using natheper and mediaproxy the
> > > agent
> > > > > should be
> > > > > registering with the public ip, not the
> private
> > > one.
> > > > > do a serctl ul show and let's see what a
> > > registered
> > > > > agent looks like.
> > > >
> > > > Here is a part of my RREGISTER block.
> > > > How do you fix public ip in contact sip HF (
> not
> > > sdp)
> > > >
> > > > if (nat_uac_test("19")) {
> > > > setflag(7);
> > > > force_rport();
> > > > fix_nated_register();
> > > > };
> > > >
> > > > Harry
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> >
>
___________________________________________________________________________
> > > > Appel audio GRATUIT partout dans le monde avec
> le
> > > nouveau Yahoo! Messenger
> > > > Téléchargez cette version sur
> > > http://fr.messenger.yahoo.com
> > > >
> > >
> >
> >
> >
> >
> >
> >
> >
> >
>
___________________________________________________________________________
> > Appel audio GRATUIT partout dans le monde avec le
> nouveau Yahoo! Messenger
> > Téléchargez cette version sur
> http://fr.messenger.yahoo.com
> >
>
___________________________________________________________________________
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
Téléchargez cette version sur http://fr.messenger.yahoo.com
Dear people,
Don't make me morals please I am not nutcase
Harry
--- Frank Fischer <frank.fischer(a)digitalnomads.ch> a
écrit :
>
> > -----Original Message-----
> > From: serusers-bounces(a)iptel.org
> > [mailto:serusers-bounces@iptel.org] On Behalf Of
> harry gaillac
> > Sent: Wednesday, November 23, 2005 1:29 PM
> > To: Olivier Taylor
> > Cc: serusers(a)iptel.org; users(a)openser.org
> > Subject: [Serusers] RE: RE : Harry's list???
> >
> > I don't swear my english is too poor .
> > However some people are quite aggressive on these
> > lists.
>
> Such as you are Harry.
> Please ask your questions kind and polite.
> And do not blame others if they don't answer your
> questions. No one has to.
> Just try to understand, that only the software is
> opensource, not the
> people in this list. If they are kind to help
> others, and many here are,
> then you should be thankful, because they spent a
> part of THEIR time for
> You at no costs.
> Just let me say, that in some cases, you would be by
> far better of to pay
> for
> Support (and i know what i'm talking about).
> Then you have the right to demand for a solution in
> a certain time.
> Unless you don't pay for it, just try to be polite
> and to accept if you get
> no
> answer at all. That's how opensource is working. If
> you may not deal with
> this, the result is, as you see now, that some
> think, you should be better
> kicked from this list.
> Addtional, think about how much time of all members
> of this list your
> senseless posting wasted. I think you should learn
> to treat others
> with a little bit more respect. Btw, that's not only
> a question of this
> particular mailing list.
>
> - Frank
>
> > Harry
> > --- Olivier Taylor <olivier.taylor(a)gmail.com> a
> écrit
> > :
> >
> > > And if they don't as quickly as you expect, you
> > > swear :(
> > > Not a good idea.
> > >
> > > Olivier
> > >
> > > -----Message d'origine-----
> > > De : harry gaillac
> [mailto:gaillacharry@yahoo.fr]
> > > Envoyé : mercredi 23 novembre 2005 13:20
> > > À : Olivier Taylor
> > > Cc : serusers(a)iptel.org; users(a)openser.org
> > > Objet : RE: Harry's list???
> > >
> > >
> > > Olivier,
> > >
> > > I hate "Sarkozy mode" However i guess some
> > > experienced
> > > people on these lists can tell me yes it's
> possible
> > > or
> > > not !
> > >
> > > That's all I ask to the lists
> > >
> > > Regards Harry
> > >
> > > --- Olivier Taylor <olivier.taylor(a)gmail.com> a
> > > écrit
> > > :
> > >
> > > > There is something buggy in this list, where
> is
> > > the
> > > > bug reporting tool?
> > > >
> > > > Maybe it's time to stop that flooding now.
> > > >
> > > > Please, Harry, post your problems one by one
> and
> > > > please be patient, you must
> > > > know that the 'Sarkozy mode' is not really
> > > > appreciated and will ot help.
> > > >
> > > > Kind regards,
> > > >
> > > > Olivier
> > > >
> > > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> >
>
______________________________________________________________
> > _____________
> > >
> > > Appel audio GRATUIT partout dans le monde avec
> le
> > > nouveau Yahoo! Messenger
> > > Téléchargez cette version sur
> > > http://fr.messenger.yahoo.com
> > >
> > >
> >
> >
> >
> >
> >
> >
> >
> >
>
______________________________________________________________
> > _____________
> > Appel audio GRATUIT partout dans le monde avec le
> nouveau
> > Yahoo! Messenger
> > Téléchargez cette version sur
> http://fr.messenger.yahoo.com
> >
> > _______________________________________________
> > Serusers mailing list
> > Serusers(a)iptel.org
> > http://mail.iptel.org/mailman/listinfo/serusers
> >
>
>
>
___________________________________________________________________________
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
Téléchargez cette version sur http://fr.messenger.yahoo.com
Hello Friends,
I am having some strange problem of one way voice without any NAT.I am having pstn gw on public IP, openser on public IP, and a SIP client on public IP.I am able to dial from outside phone to my SIP client. When I try to talk , the voice passes only in one direction, i.e..from SIP client to my outside phone, and not towards other side. What is the reason of this problem. Please help me.openser is having all default configuration where anyone with any name and password can be allowed to dial.
I will be very thankfull to you.
Regards
Hello all.
Please, I am trying to make Radius authorization and accounting using SER
0.9.3 and radiusclient-ng. I already set all the configuration as the
ser_radius HowTo.
Now, I'm making Radius authorization successfully, but not accounting, I
don't get anything going out through port 1813.
The Radius Server is in another machine, i'm configuring only the radius
client.
Is there other things to do besides the ser_radius howto? Please help...
Thanks a lot
Rosa.
Imagine I have 50 salespeople, and I know the URIs of all of their
phones. When an INVITE comes in to SER, I want to keep trying to
forward it to the salespeople, one at a time (in series, not in
parallel), forever or until one of them accepts the call. (I
randomize the order.)
QUESTION 1:
At first, I tried rewriting the Request URI in a failure route each
time t_relay() returned failure, and then calling t_relay() again.
But t_relay() doesn't work that way -- when used in a failure route,
it requires you to append a branch, and apparently ignores any
changes in the Request URI after the failure happens.
OK, so in my failure route, I'll append a branch instead of rewriting
the Request URI. But the default value of MAX_BRANCHES in config.h
is only 12. I think this means I can never try to relay to more than
13 salespeople -- the first t_relay() call, plus 12 t_relay() calls
in failure routes. Is this correct?
QUESTION 2:
OK, so I'll make the value of MAX_BRANCHES greater than 12. But I
see in modules/tm/tm.c that MAX_BRANCHES cannot be given a value
greater than 31, since each branch occupies one bit in a 32-bit
bitmap. So how can I do 50 stateful relays? Or, for that matter, an
indefinite number?
Thank you for any help!
Tim
Hi Harry!
As this emails are on-topic you should cc: to the list.
harry gaillac wrote:
> In fact the problem is in contact sip header field
> (private ip)
> agent send ReGISTER to SER (outbound proxy) which one
> send REGISTER to ASTERISK .
> Asterisk register agent with AOR sip:users@private ip
>
> When agent send INVITE to an other agent ASTERISK use
>
> AOR sip:user@private ip but the firewall don't allow
> this
> Asterisk SHOULD resend INVITE to SER.
>
> Does SER is able to rewrite contact field in SIP HF?
Which IPaddress:port do you want to have in the REGISTER's Contact:
header sent from ser to Asterisk?
klaus
>
> Regards
> Thanks for your advices
>
> Harry
>
>
> --- Klaus Darilion <klaus.mailinglists(a)pernau.at> a
> écrit :
>
>
>>harry gaillac wrote:
>>
>>>>Have you ever used SIP clients with presence and
>>
>>IM?
>>
>>>>I suggest to setup
>>>>ser (without Asterisk) just to test the IM
>>
>>features.
>>
>>>>SIP based
>>>>IM/presence implementations are very poor yet.
>>>
>>>
>>>I've done it
>>
>>And what were your experiences? Which clients do you
>>use?
>>
>
>
> Polycom IP300
>
>
>>>>In your picture, the NAT router is on the same PC
>>
>>as
>>
>>>>ser and asterisk.
>>>>Is this correct?
>>>
>>>this is correct
>>
>>It would be a good idea to split things. This is a
>>rather complicated
>>setup.
>>
>>
>>>>what scenario do you have? Are all the users
>>
>>behding
>>
>>>>the same NAT (in
>>>>the same subnet) and you provide VoIP within this
>>>>network (e.g. an
>>>>enterprise) or do you have external users (e.g.
>>
>>like
>>
>>>>iptel or
>>>>freeworlddialup)?
>>>
>>>in fact both
>>>
>>>
>>> asterisk+ser
>>> private net=====nathelper ======nat===private net
>>
>>> nat box
>>> ||
>>> internet======
>>
>>I suggest:
>>
>>1. Asterisk, ser and the RTP proxy 8rtpproxy or
>>mediaproxy) should
>>listen only on the public interface (this really
>>must be a routable
>>public IP address, no private).
>
>
> SER asterisk listen on public ip
>
>
>
>>2. Setup the firewall (e.g. iptables) correctly to
>>allow traffic from/to
>>ser, asterisk and the RTP proxy
>
>
> Done
>
>
>>3. setup ser according the "getting started"
>>document on onsip.org.
>>AFAIK this document contains hints how to route to a
>>gateway. Reuse this
>>part of the config to route certain calls to the
>>asterisk box.
>
>
> Done
>
>>4. Try to solve things step by step:
>>- REGISTER should work fine from Internet and LAN
>>- Calls from Internet clients to Internet clients
>>- Calls from LAN clients to LAN clients
>>- Calls from LAN clients to Internet clients (and
>>vice versa)
>>- now try to add asterisk, e.g. calling a certain
>>number will be routed
>>to asterisk and starts the echo application
>>
>>If all the above works (DO NOT start integrating the
>>asterisk as long as
>>basic SIP call do not work!!!!!), you can implement
>>your setup.
>>
>>5. Do really read every word in the "getting
>>started" document, if
>>things are unclear read it again.
>>
>>6. Do not post "how to make this setup". Ask small
>>questions addressing
>>particular (small) problems.
>>
>>7. Post to the related list.
>>- do not post to developer lists
>>- if you use ser, post to ser's list
>>- if you use openser, post to openser's list
>>- if you have an asterisk problem, ask at the
>>asterisk list (e.g. you
>>want to solve NAT traversal and registration with
>>ser. Thus, do not ask
>>this kind of questions at the asterisk list).
>>
>>8. always remember that this support is voluntary
>>
>>9. If you don't find the proper english word, look
>>into the dictionary
>>instead of using another word which might also have
>>other meanings.
>>
>>10. Go and buy an english SIP book. (this will you
>>help to learn the
>>english terms for all the SIP stuff)
>>
>>11. use ngrep to watch the SIP call flow
>># ngrep -t -d any port 5060
>>
>>
>>regards
>>klaus
>>
>
>
>
>
>
>
>
> ___________________________________________________________________________
> Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
> Téléchargez cette version sur http://fr.messenger.yahoo.com
>
>
Dear all,
Start the CVS HEAD in debug mode gave me this error, and idea?
0(0) table_version(): No row for table re_grp found
0(0) ERROR:group:mod_init: Invalid table version for re_grp (use
ser_mysql.sh reinstall)
0(0) init_mod(): Error while initializing module group
ERROR: error while initializing modules
0(0) XLOG: destroy module ...
0(0) pool_remove: Removing connection from the pool
0(0) DEBUG: tm_shutdown : start
0(0) DEBUG: unlink_timer_lists : emptying DELETE list
0(0) DEBUG: tm_shutdown : emptying hash table
0(0) DEBUG: tm_shutdown : releasing timers
0(0) DEBUG: tm_shutdown : removing semaphores
0(0) DEBUG: tm_shutdown : destroying tmcb lists
0(0) DEBUG: tm_shutdown : done
Ray