See inline.
> Thank you for that Greger. I have altered my script so that
it
> exactly mimics the one in the onsip document besides the
has_totag
> and fix_nated register. All is good when I ring from a private
phone
> to a public phone i.e. the audio is very clear and the
following
> messages are in /var/log.
>
>
ERROR: extract_body: message body has length zero
> ERROR:
force_rtp_proxy2: cant extract body from the message.
>
> I assume
this is because of the 200 OK to a register message where
> theres no
sdp?? Is this correct?
That's correct. You will find code in the example configs where we
test for an empty body before calling force_rtp_proxy.
> However when I try to phone from public into private I
get:
>
> ERROR: send_rtpp_command: cant read reply from a RTP
Proxy.
>
> I find this confusing because I know the rtpproxy is
working.
This means that rtpproxy is not responding to a particular message. I have
heard some people have had problems with the socket based communication. I only
use UDP. This is what you do to set up udp (22222 is default port):
modparam("nathelper", "rtpproxy_sock", "udp:localhost:22222")
rtpproxy must be started with -s udp:*
g-)
> BR
> Vivienne.
>
> "Greger V. Teigre"
<greger@teigre.com> wrote:
> Yes, you can use fix_nated_contact
instead. It is not entirely
> RFC-compliant, but that's what you have in
0.8.14.
> The has_totag() only tests to see if the INVITE has a To
header,
> which means that it is in-dialog and thus is a re-INVITE.
An INVITE
> will normally not have loose routing unless you have another
SIP
> proxy forwarding an INVITE to you (in which case you should
assume
> that the other proxy handles NAT and thus not trigger
NAT-related
> code). You can safely remove the has_totag() if you
use
> force_rtp_proxy("l")
>
g-)
>
> ---- Original Message ----
> From: Vivienne
Curran
> To: Greger V. Teigre ; serusers@lists.iptel.org
> Sent: Tuesday,
April 05, 2005 02:25 PM
> Subject: Re: [Serusers] Contact Header and SDP
not rewritten
>
>> Greger,
>>
>> Since
fix_nated_register does not exist with 0.8.14, will
>>
fix_nated_contact do instead? Also if I am leaving out the
>>
has_totag() at the start of the script, will this greatly effect its
>>
functionality?
>>
>> Thank you,
>>
Vivienne
>>
>> "Greger V. Teigre" <greger@teigre.com>
wrote:
>> Vivienne,
>>
>> This is the first INVITE
going from SER to your public phone. I have
>> prefixed my
comments with *==>
>>
>> U 84.203.148.146:5060 ->
157.190.74.151:5060
>> INVITE sip:2092@157.190.74.151
SIP/2.0..Via: SIP/2.0/UDP
>>
84.203.148.146;branch=z9hG4bK77bc.b54ca216.0..
>> Via:
SIP/2.0/UDP
>>
172.16.3.31;rport=5060;received=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..
>>
From: "2093" <sip:2093@84.203.148.146>;tag=2dc376dcd4655094..
>>
To: <sip:2092@84.203.148.146>..
>> Contact:
<sip:2093@84.203.148.14:5060>..
>> *==> Correctly changed to
the public address and port of 2093
>> Supported: replaces..Call-ID:
44e1ae63c476fbff@172.16.3.31..CSeq:
>> 10327 INVITE..
>>
User-Agent: Grandstream BT100 1.0.5.18..
>> Max-Forwards:
69..Allow:
>>
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..
>>
Content-Type: application/sdp..
>> Content-Length:
443....v=0..
>> o=2093 8000 0 IN IP4 172.16.3.31..
>> s=SIP
Call..
>> c=IN IP4 84.203.148.1484.203.148.146..
>> *==>
Here it seems that first fix_nated_sdp("3") is called (replace
>>
private IP with public IP), then force_rtp_proxy() (replace with
>>
proxy IP). You must only call one of them (fix_nated_sdp! ("1")
is
>> ok) t=0 0..
>> m=audio 35006 RTP/AVP 0 8 4 18 2 15 99
9..
>> a=sendrecv..
>> a=rtpmap:0 PCMU/8000/3..
>>
a=rtpmap:8 PCMA/8000/3..
>> a=rtpmap:4 G723/8000/3..a=rtpmap:18
G729/8000/3..
>> a=rtpmap:2 G726-32/8000/3..
>> a=rtpmap:15
G728/8000/3..
>> a=rtpmap:99 iLBC/8000/3..
>> a=fmtp:99
mode=20..
>> a=rtpmap:9 G722/8000/3..
>>
a=ptime:20..
>> a=direction:active..
>> *==> Added by
fix_nated_sdp("1") (and "3")
>> a=oldmediaip:172.16.3.31..
>>
*==> Added by fix_nated_sdp("3")
>> a=nortpproxy:yes..
>>
*==> Added by force_rtp_proxy()
>>
>> So, your call is
proxied. Try using fix_nated_sdp("1"). It should
>> make the INVITE
correct. You have not posted the OK, so I don't know
>> what is
happening there. If you have followed the rtpproxy ONsip.org
>>
example in your onreply_route, you should be fine.
>>
>> Good
luck!
> &g! t; g-)
>>
>> ---- Original Message
----
>> From: Vivienne Curran
>> To:
serusers@lists.iptel.org
>> Sent: Tuesday, April 05, 2005 01:23
PM
>> Subject: [Serusers] Contact Header and SDP not
rewritten
>>
>>> Hello,
>>>
>>> I
have a problem whereby when a private client rings a public
client
>>> only the public user can hear voice and when the public
user rings
>>> the private user, no audio is transmitted. After
looking at the
>>> messages I have have determined that the contact
header and sdp part
>>> of the invite contains the private address
of the natted client.
>>> This would lead me to believe that the
registration process is
>>> incorrect. My problem is that I believe
my script should handle the
>>> registration process correctly and I
suspect that the following
>>> code is being skipped: I tried
changing it to nat_uac_test("19") and
>>> fix_nated_sdp("3") but
that didnt help.
>>>> if
(nat_uac_test("3")){
>>> if (method == "REGISTER" || !
search("^Record-Route:")){
>>> log("Log: Someone
trying to register from private
>>>
IP,rewriting\n"); fix_nated_contact(); #Rewrite contact
with
>>> source IP if (method ==
"INVITE"){
>>> fix_nated_sdp("1"); #Add
direction=active to SDP
>>>
force_rtp_proxy();
>>>
};
>>> force_rport(); # Add rport parameter to
topmost Via
>>> setflag(6); # Mark as
Nated
>>> };
>>> };
>>>
>>> I have included the log message below and my ser.cfg as
an
>>> attachment. Please let me know where I could be going
wrong.
>>>
>>> Thank you,
>>>
Vivienne.
>>>>> 2093 (private) ringing 2092
(public)
>>>
>>> U 84.203.148.14:5060 ->
84.203.148.146:5060
>>> ! INVITE sip:2092@84.203.148.146
SIP/2.0..Via: SIP/2.0/UDP
>>>
172.16.3.31;branch
>>> =z9hG4bK1a48edc121f5bc1f..From:
"2093"
>>>
<sip:2093@84.203.148.146>;tag=2dc376
>>>
dcd4655094..To: <sip:2092@84.203.148.146>..Contact:
>>>
<sip:2093@172.16.3.31>.
>>> .Supported:
replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq:
>>> 10327
IN
>>> VITE..User-Agent: Grandstream BT100
1.0.5.18..Max-Forwards:
>>> 70..Allow: INVI
>>>
>>>
TE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type:
>>>
applic
>>> ation/sdp..Content-Length: 362....v=0..o=2093
8000 0 IN IP4
>>> 172.16.3.31..s=
>>> SIP
Call..c=IN IP4 172.16.3.31..t=0 0..m=audio 500! 4 RTP/AVP 0 8
>>> 4
18 2 15 9
>>> 9 9..a=sendrecv..a=rtpmap:0
PCMU/8000/3..a=rtpmap:8
>>>
PCMA/8000/3..a=rtpmap:4
>>> G723/8000/3..a=rt!
pmap:18 G729/8000/3..a=rtpmap:2
>>>
G726-32/8000/3..a=rtpmap:
>>> 15
G728/8000/3..a=rtpmap:99 iLBC/8000/3..a=fmtp:99
>>>
mode=20..a=rtpmap:9 G722
>>>
/8000/3..a=ptime:20..
>>>
>>> U 84.203.148.146:5060
-> 84.203.148.14:5060
>>> SIP/2.0 100 trying -- your
call is important to us..Via:
>>> SIP/2.0/UDP 172.16
>>>
>>>
.3.31;branch=z9hG4bK1a48edc121f5bc1f;rport=5060;received=84.203.148.14..Fro
>>>
m: "2093"
<sip:2093@84.203.148.146>;tag=2dc376dcd4655094..To:
>>>
<sip:2092@84.
>>> 203.148.146>..Call-ID:
44e1ae63c476fbff@172.16.3.31..CSeq: 10327
>>>
INVITE..Se
>>> rver: Sip EXpress router (! 0.8.14
(i386/linux))..Content-Length:
>>>
0..Warning:
>>> 392 84.203.148.146:5060 "Noisy
feedback tells: pid=4732
>>>
req_src_ip=84.203
>>> .148.14 req_src_port=5060
in_uri=sip:2092@84.203.148.146
>>>
out_uri=sip:2092@1
>>> 57.190.74.151
via_cnt==1"....
>>>
>>> U 84.203.148.146:5060 ->
157.190.74.151:5060
>>> INVITE sip:2092@157.190.74.151
SIP/2.0..Via: SIP/2.0/UDP
>>>
84.203.148.146;bra
>>> nch=z9hG4bK77bc.b54ca216.0..Via:
SIP/2.0/UDP
>>>
172.16.3.31;rport=5060;receive
>>>
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
>>>
<sip:2093@84.2
>>>
03.148.146>;tag=2dc376dcd4655094..To:
>>>
<sip:2092@84.203.148.146>..Contact: <
>>>
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID:
>>>
44e1ae63c476fbf
>>> f@172.16.3.31..CSeq: 10327
INVITE..User-Agent: Grandstream BT100
>>>
1.0.5.18..
>>> Max-Forwards: 69..Allow:
>>>
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
>>>
BSCRIBE..Content-Type: application/sdp..Content-Length:
>>>
443....v=0..o=2093
>>> 8000 0 IN IP4 172.16.3.31..s=SIP
Call..c=IN IP4
>>>
84.203.148.1484.203.148.146
>>> ..t=0 0..m=audio 35006
RTP/AVP 0 8 4 18 2 15 99
>>> 9..a=sendrecv..a=rtpmap:0
P
>>> CMU/8000/3..a=rtpmap:8
PCMA/8000/3..a=rtpmap:4
>>> G723/8000/3..a=rtpmap:18
G72
>>> 9/8000/3..a=rtpmap:2
G726-32/8000/3..a=rtpmap:15
>>> G728/8000/3..a=rtpmap:99
i
>>> LBC/8000/3..a=fmtp:99
mode=20..a=rtpmap:9
>>>
G722/8000/3..a=ptime:20..a=direct
>>>
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
>>>
>>> U 84.203.148.146:5060 ->
157.190.74.150:5060
>>> INVITE sip:2092@157.190.74.150
SIP/2.0..Via: SIP/2.0/UDP
>>>
84.203.148.146;bra
>>> nch=z9hG4bK77bc.b54ca216.1..Via:
SIP/2.0/UDP
>>>
172.16.3.31;rport=5060;receive
>>>
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
>>>
<sip:2093@84.2
>>>
03.148.146>;tag=2dc376dcd4655094..To:
>>>
<sip:2092@84.203.148.146>..Contact: <
>>>
sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID:
>>>
44e1ae63c476fbf
>>> f@172.16.3.31..CSeq: 10327
INVITE..User-Agent: Grandstream BT100
>>>
1.0.5.18..
>>> Max-Forwards: 69..Allow:
>>>
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
>>>
BSCRIBE..Content-Type: application/sdp..Content-Length:
>>>
443....v=0..o=2093
>>> 8000 0 IN IP4 172.16.3.31..s=SIP
Call..c=IN IP4
>>>
84.203.148.1484.203.148.146
>>> ..t=0 0..m=audio 35006
RTP/AVP 0 8 4 18 2 15 99
>>> 9..a=sendrecv..a=rtpmap:0
P
>>> CMU/8000/3..a=rtpmap:8
PCMA/8000/3..a=rtpmap:4
>>> G723/8000/3..a=rtpmap:18
G72
>>> 9/8000/3..a=rtpmap:2
G726-32/8000/3..a=rtpmap:15
>>> G728/8000/3..a=rtpmap:99
i
>>> LBC/8000/3..a=fmtp:99
mode=20..a=rtpmap:9
>>>
G722/8000/3..a=ptime:20..a=direct
>>>
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
>>>
>>> U 157.190.74.151:5060 ->
84.203.148.146:5060
>>> SIP/2.0 100 Trying..Via:
SIP/2.0/UDP
>>>
84.203.148.146;branch=z9hG4bK77bc.b54c
>>> a216.0..Via:
SIP/2.0/UDP
>>>
172.16.3.31;rport=5060;received=84.203.148.14;bran
>>>
ch=z9hG4bK1a48edc121f5bc1f..From: "2093"
>>>
<sip:2093@84.203.148.146>;tag=2dc3
>>>
76dcd4655094..To: <sip:2092@84.203.148.146>..Call-ID:
>>>
44e1ae63c476fbff@172.
>>> 16.3.31..CSeq: 10327
INVITE..User-Agent: Grandstream BT100
>>>
1.0.5.18..Conten
>>> t-Length: 0....
>>>
>>> U 157.190.74.151:5060 ->
84.203.148.146:5060
>>> SIP/2.0 180 Ringing! ..Via:
SIP/2.0/UDP
>>>
84.203.148.146;branch=z9hG4bK77bc.b54
>>> ca216.0..Via:
SIP/2.0/UDP
>>>
172.16.3.31;rport=5060;received=84.203.148.14;bra
>>>
nch=z9hG4bK1a48edc121f5bc1f..From: "2093"
>>>
<sip:2093@84.203.148.146>;tag=2dc
>>>
376dcd4655094..To:
>>>
<sip:2092@84.203.148.146>;tag=10bdf2044401a257..Call-ID:
>>>
44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent:
>>>
Grandstream
>>> BT100 1.0.5.18..Content-Length:
0....
>>>
>>> Send instant messages to your online
friends
>>> http://uk.messenger.yahoo.com
>>>
>>>
>>>
>>> #
>>> # $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=3 # deb!
ug 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=no # (cmd. line: -v)
>>>
dns=no # (cmd. line:
-r)
>>> rev_dns=no # (cmd. line:
-R)
>>> #port=5060
>>> #children=4
>>>
fifo="/tmp/ser_fifo"
>>>
>>>
alias="157.190.74.152:5060"
>>>
>>> #
------------------ module loading
>>>
----------------------------------
>>>
>>> # Uncomment
this if you want to use SQL database
>>> loadmodule
"/usr/lib/ser/modules/mysql.so"
>>>
>>> loadmodule
"/usr/lib/ser/modules/sl.so"
>>> loadmodule
"/usr/lib/ser/modules/tm.so"
>>> loadmodule
"/usr/lib/ser/modules/rr.so"
>>> loadmodule
"/usr/lib/ser/modules/maxfwd.so"
>>> loadmodule
"/usr/lib/ser/modules/usrloc.so"
>>> loadmodule
"/usr/lib/ser/modules/registrar.so"
>>> loadmodule
"/usr/lib/ser/modules/textops.so"
>>> loadmodule
"/usr/lib/ser/modules/nathelper.so"
>>> #loadmodule
"/usr/lib/ser/modules/pa.so"
>>> loadmodule
"/usr/lib/ser/modules/cpl-c.so"
>>>
>>> # Uncomment
this if you want digest authentication
>>> # mysql.so must be loaded
!
>>> loadmodule "/usr/lib/ser/modules/auth.so"
>>>
loadmodule "/usr/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)
>>>
>>> # -- 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
>>> #NB Had to up this value from 1 to 11 because reinvites
were
>>> bombarding called phone
>>> modparam("rr",
"enable_full_lr", 11)
>>>
>>> #!!
Nathelper
>>> modparam("registrar", "nat_flag", 60)
>>>
modparam("nathelper", "natping_interval", 30) #Ping interval 30
s
>>> modparam("nathelper", "ping_nated_only", 1) #Ping
only clients
>>> behind NAT
>>> modparam("nathelper",
"rtpproxy_sock", "/var/run/rtpproxy.sock")
>>>
>>>
modparam("tm", "fr_inv_timer", 20)
>>>
>>>
#modparam("pa", "default_expires", 3600)
>>>
>>>
modparam("usrloc", "db_url",
"sql://root:1alfa156@localhost/ser")
>>>
>>>
#modparam("cpl-c", "cpl_db",
"mysql://root:1alfa156@localhost/ser")
>>> #modparam("cpl-c",
"cpl_table", "cpl")
>>> #modparam("cpl-c",
"cpl_dtd_file",
>>>
"/work/sip_router/modules/cpl-ccpl-06.dtd")
>>>
>>> #
------------------------- 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;
>>> };
>>>
>>>
#######################################################################################
>>>
if (nat_uac_test("3")){
>>> if (method == "REGISTER" || !
search("^Record-Route:")){
>>> log("Log: So! meone trying to
register from private
>>> IP,rewriting\n"); fix_nated_contact();
#Rewrite contact with source
>>> IP
>>> if (method ==
"INVITE"){
>>> fix_nated_sdp("1"); #Add direction=active to
SDP
>>> force_rtp_proxy();
>>> };
>>>
force_rport(); # Add rport parameter to topmost Via
>>> setflag(6);
# Mark as Nated
>>> };
>>> };
>>>
########################################################################################
>>>
>>> # 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
>> &g!
t;
>>> if (method =="REGISTER") record_route();
>>>
>>> # loose-route processing
>>> if (loose_route())
{
>>> #commented 11/02/05
>>>
#t_relay();
>>> route(1);
>>> 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)
>>>
if (uri==myself) {
>>>
>>> log(1,"into
loop");
>>> if (method=="REGISTER") {
>>>
>>> # Uncomment this if you want to use digest
authentication
>>> # if (!www_authorize("157.190.74.152",
"subscriber")) {
>>> # www_challenge("157.190.74.152",
"0");
>>> # break;
>>> # };
>>>
>>> #cpl_process_register();
>>>
>>>
save("location");
>>> break;
>>> };
>>>
>>> # if (method=="SUBSCRIBE")
>> &g! t; #
{
>>> # log(1, "Subscribe\n");
>>> #
if(t_newtran())
>>> # {
>>> # log(1,
"Registrar\n");
>>> #
handle_subscription("registrar");
>>> # };
>>> #
break;
>>> # };
>>>
>>>
lookup("aliases");
>>> if (!uri==myself) {
>>>
append_hf("P-hint: outbound alias\r\n");
>>>
route(1);
>>> break;
>>> };
>>>
>>> if (method=="INVITE"){
>>>
>>>
log(1,"in ! invite loop");
>>> #break; #no 100
trying
>>> #if
(!cpl_run_script("incoming","is_stateless"))
>>> #{
>>>
# #script execution failed
>>> # t_reply("500", "CPL script
execution failed");
>>> #};
>>>
>>>
t_on_failure("1");
>>> };
>>>
>>> # native
SIP destinations are handled using our USRLOC DB
>>> if
(!lookup("location")) {
>>> #sl_send_reply("404", "Not
Found");
>>> route(2);
>>> break;
>>>
};
>>> };
>>>
>>> # forward to current uri
now; use stateful forwarding; that
>>> # works reliably even if we
forward from TCP to UDP
>>> #commented
11/02/05#######################
>>> if (!t_relay())
{
>>> sl_reply_error();
>>> };
>>>
>>> #route(1);
>>> }
>>>
>>>
######################################entered
>>>
11/02/05############################################################
>>>
route[1]
>>> {
>>> #!!Nathelper
>>>
if(uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)"
&&
>>> !search("^Route:")){
>>>
sl_send_reply("479", "We don't forward to private IP
addresses");
>>> break;
>>> };
>>>
>>> if (isflagset(6)){
>>>
force_rtp_proxy();
>>> }
>>>
>>>
t_on_reply("1");
>>>
>>>
if(!t_relay()){
>>> sl_reply_error();
>>>
break;
>>> };
>>>
>>> }
>>>
>>> ######################################entered
>>>
11/02/05############################################################
>>>
#!! Nathelper
>>> onreply_route[1] {
>>> if(isflagset(6)
&& status =~ "(183)|2[0-9][0-9]"){
>>>
fix_nated_contact();
>>> force_rtp_proxy();
>>> }else if
(nat_uac_test("1")){
>>> fix_nated_contact();
>>>
};
>>> }
>>>
#################################################################################################################
>>>
>>> # ------------- handling of unavai! lable user
------------------
>>> route[2] {
>>>
>>> # non-Voip --
just send
"off-line"
>>> if
(!(method == "INVITE" ! || method == "ACK" || method ==
>>>
"CANCEL"))
{
>>>
sl_send_reply("404", "Not
Found");
>>>
break;
>>>
};
>>>
>>> # forward to
voicemail now
>>>
rewritehostport("157.190.74.152:5062");
>>>
t_relay_to_udp("157.190.74.152", "5062");
>>> }
>>>
>>> # if forwarding downstream did not succeed, try voicemail
running
>>> # at 172.16.2.120:5062
>>>
>>>
failure_route[1]
{
>>>
revert_uri();
>>>
rewritehostport("157.190.74.152:5062");
>>>
append_branch();
>>>
t_relay_to_udp("157.190.74.152", "5062");
>>> }
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>>
Serusers mailing list
>>> serusers@lists.iptel.org
>>>
http://lists.iptel.org/mailman/listinfo/serusers
>> Send instant
messages to your online friends
>>
http://uk.messenger.yahoo.com
> Send instant messages to your online
friends
> http://uk.messenger.yahoo.com