This is the answer i got on the list :
The second REGISTER (the block 3) must contains the response to the
authentication challenge carried by 401 reply (block 2). That means that
the block 3 must contain an Authorization header with authentication
credentials computed according to HTTP-Digest authentication mechanism
(RFC2617).
U sourceip:26012 -> xxx.xxx.xxx.xxx:5060
REGISTER sip:xxx.xxx.xxx.xxx SIP/2.0..Via: SIP/2.0/UDP
sourceip:22115;branch=z9hG4bK4913f67fbbcfb571..From: "Alex "
<sip:phonenumber@xxx.xxx.xxx.xxx>;tag=94a44507e03df901..To:
<sip:phonenumber@xxx.xxx.xxx.xxx>..Contact:
<sip:phonenumber@sourceip:22115>..Call-ID:
c9f64c0c2ef27cd1@10.0.0.6..CSeq: 100 REGISTER..Expires:
3600..User-Agent: Grandstream HT286 1.0.5.11..Max-F
orwards: 70..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Length:
0....
#
U xxx.xxx.xxx.xxx:5060 -> sourceip:22115
SIP/2.0 401 Unauthorized..Via: SIP/2.0/UDP
sourceip:22115;branch=z9hG4bK4913f67fbbcfb571..From: "Alex "
<sip:phonenumber@xxx.xxx.xxx.xxx>;
tag=94a44507e03df901..To:
<sip:phonenumber@xxx.xxx.xxx.xxx>;tag=b27e1a1d33761e85846fc98f5f3a7e58.eb04..Call-I
D: c9f64c0c2ef27cd1@10.0.0.6..CSeq: 100 REGISTER..WWW-Authenticate:
Digest realm="xxx.xxx.xxx.xxx", nonce="42612dd595b3558cfdd4
46b83b081d1e2d3cc480"..Server: Sip EXpress router (0.8.14
(i386/linux))..Content-Length: 0..Warning: 392 xxx.xxx.xxx.xxx:5060 "
Noisy feedback tells: pid=21363 req_src_ip=sourceip
req_src_port=26012 in_uri=sip:xxx.xxx.xxx.xxx
out_uri=sip:xxx.xxx.xxx.xxx via_cnt==1"....
#
U sourceip:26012 -> xxx.xxx.xxx.xxx:5060
REGISTER sip:xxx.xxx.xxx.xxx SIP/2.0..Via: SIP/2.0/UDP
sourceip:22115;branch=z9hG4bK4913f67fbbcfb571..From: "Alex "
<sip:phonenumber@xxx.xxx.xxx.xxx>;tag=94a44507e03df901..To:
<sip:phonenumber@xxx.xxx.xxx.xxx>..Contact:
<sip:phonenumber@sourceip:22115>..Call-ID:
c9f64c0c2ef27cd1@10.0.0.6..CSeq: 100 REGISTER..Expires:
3600..User-Agent: Grandstream HT286 1.0.5.11..Max-F
orwards: 70..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Length:
0....
#
U xxx.xxx.xxx.xxx:5060 -> sourceip:22115
SIP/2.0 401 Unauthorized..Via: SIP/2.0/UDP
sourceip:22115;branch=z9hG4bK4913f67fbbcfb571..From: "Alex "
<sip:phonenumber@xxx.xxx.xxx.xxx>;tag=94a44507e03df901..To:
<sip:phonenumber@xxx.xxx.xxx.xxx>;tag=b27e1a1d33761e85846fc98f5f3a7e58.eb04..Call-I
D: c9f64c0c2ef27cd1@10.0.0.6..CSeq: 100 REGISTER..WWW-Authenticate:
Digest realm="xxx.xxx.xxx.xxx", nonce="42612dd63c17bd54baef
0f620d6b9b066c23c8ce"..Server: Sip EXpress router (0.8.14
(i386/linux))..Content-Length: 0..Warning: 392 xxx.xxx.xxx.xxx:5060 "
Noisy feedback tells: pid=21360 req_src_ip=sourceip
req_src_port=26012 in_uri=sip:xxx.xxx.xxx.xxx
out_uri=sip:xxx.xxx.xxx.xxx via_cnt==1"....
here is my ser debug:
-------------------------------------
12(21360) SIP Request:
12(21360) method: <REGISTER>
12(21360) uri: <sip:xxx.xxx.xxx.xxx>
12(21360) version: <SIP/2.0>
12(21360) parse_headers: flags=1
12(21360) Found param type 232, <branch> = <z9hG4bKf776a5d04027adc6>; state=16
12(21360) end of header reached, state=5
12(21360) parse_headers: Via found, flags=1
12(21360) parse_headers: this is the first via
12(21360) After parse_msg...
12(21360) preparing to run routing scripts...
12(21360) REGISTER message received
12(21360) REGISTER: Authenticating user
12(21360) parse_headers: flags=4
12(21360) end of header reached, state=9
12(21360) DEBUG: get_hdr_field: <To> [34];
uri=[sip:phonenumber@xxx.xxx.xxx.xxx]
12(21360) DEBUG: to body [<sip:phonenumber@xxx.xxx.xxx.xxx>
]
12(21360) parse_headers: flags=4096
12(21360) get_hdr_field: cseq <CSeq>: <100> <REGISTER>
12(21360) DEBUG: get_hdr_body : content_length=0
12(21360) found end of header
12(21360) pre_auth(): Credentials with given realm not found
12(21360) REGISTER: challenging user
12(21360) build_auth_hf(): 'WWW-Authenticate: Digest
realm="xxx.xxx.xxx.xxx",
nonce="42613540bb4462c045f7f3fe7714c3a1d6c0bca9"
'
12(21360) parse_headers: flags=-1
12(21360) check_via_address(62.219.160.40, 62.219.160.40, 1)
12(21360) DEBUG:destroy_avp_list: destroing list (nil)
12(21360) receive_msg: cleaning up
For some reason that i can not figure out i don't receive anything on
the radius logs.
it's looks like my granstream ATA286 not going through authectication process.
when i change the ip of the sip server to different one (2-server)
it's working perfect.
The grandstream ATA286 sending same packets, on the 2 server it's
working, on 1- one nothing happens.
on the problematic server i have clean installation of freeradius-1.02
radiusclient-4.8 ser-8.14
I tested the installation of the freeradius with the :
radclient -f digest localhost auth testing123
Received response ID 134, code 2, length = 45
Reply-Message = "Hello, test with digest"
radius logs:
----------------------------------------------
rad_recv: Access-Request packet from host 127.0.0.1:32844, id=134, length=140
User-Name = "test"
Digest-Response = "631d6d73147add2f9e437f59bbc3aeb7"
Digest-Attributes = "\001\013testrealm"
Digest-Attributes = "\002\n1234abcd"
Digest-Attributes = "\003\010INVITE"
Digest-Attributes = "\004\034sip:5555551212@example.com"
Digest-Attributes = "\006\005MD5"
Digest-Attributes = "\n\006test"
Processing the authorize section of radiusd.conf
modcall: entering group authorize for request 0
modcall[authorize]: module "preprocess" returns ok for request 0
modcall[authorize]: module "chap" returns noop for request 0
modcall[authorize]: module "mschap" returns noop for request 0
rlm_digest: Converting Digest-Attributes to something sane...
Digest-Realm = "testrealm"
Digest-Nonce = "1234abcd"
Digest-Method = "INVITE"
Digest-URI = "sip:5555551212@example.com"
Digest-Algorithm = "MD5"
Digest-User-Name = "test"
rlm_digest: Adding Auth-Type = DIGEST
modcall[authorize]: module "digest" returns ok for request 0
rlm_realm: No '@' in User-Name = "test", looking up realm NULL
rlm_realm: No such realm "NULL"
modcall[authorize]: module "suffix" returns noop for request 0
rlm_eap: No EAP-Message, not doing EAP
modcall[authorize]: module "eap" returns noop for request 0
users: Matched entry DEFAULT at line 152
users: Matched entry test at line 215
modcall[authorize]: module "files" returns ok for request 0
modcall: group authorize returns ok for request 0
rad_check_password: Found Auth-Type Digest
auth: type "digest"
Processing the authenticate section of radiusd.conf
modcall: entering group authenticate for request 0
A1 = test:testrealm:test
A2 = INVITE:sip:5555551212@example.com
KD = 1e00d6dbd30441265df6064b9d9b7da9:1234abcd:675b8c827b388805aa252ea38bfb6804
modcall[authenticate]: module "digest" returns ok for request 0
modcall: group authenticate returns ok for request 0
radius_xlat: 'Hello, test with digest'
Sending Access-Accept of id 134 to 127.0.0.1:32844
Reply-Message = "Hello, test with digest"
Finished request 0
I need some help to figure out that's the problem with this server.
And what can be a reason what i don't see any authentication process
in the radius , when the packets coming from ATA286
to authenticate the the user.
Thanks for any help.
hi friends !
i have configured my ser according to the given configuration on the
site www.voip-info.org/wiki+rtpproxy. but after running rtpproxy
successfully my ser is not getting start. it is also not showing the
generic socket for communication between ser and rtpproxy, the socket
/var/run/rtpproxy.sock doesn`t exist not even at any other location,
can anybody help me, why is it happening and suggest me something.
thanks
Deepak Dhiman
hi friends !
i have configured my ser according to the given configuration on the
site www.voip-info.org/wiki+rtpproxy. but after running rtpproxy
successfully my ser is not getting start. it is also not showing the
generic socket for communication between ser and rtpproxy, the socket
/var/run/rtpproxy.sock doesn`t exist not even at any other location,
can anybody help me, why is it happening and suggest me something.
thanks
Deepak Dhiman
Hi Paul, pls help me
I ran into the following problem:
ser1 receives REGISTER from VIP interface; then have to replicate the message to ser2. So I need to switch between interfaces - send from real IP. Do you know some way doing this with ser?
Thx in advance,
Tina
Java Rockx <javarockx(a)gmail.com> wrote:
Tina,
I wish I had more information on that, but that LVS stuff is a black art to me. One of our engineers whipped up an LVS configuration that seems quite happy with the Call-ID "stickness" you described. All I can say right now is that it is apparently possible to do this with 100% open source. (i'm keeping my fingers crossed) :-)
Regards,
Paul
On Apr 10, 2005 11:03 PM, Tina <kramarv(a)yahoo.com> wrote:Paul,
thanks a lot, it helps a lot. The thing I do not understand - how you are going to solve call-id stickness (see my another post). Since we're also use LVS I had to find something proprietary, I am afraid this is not a best solution, but the only I have today.
KRs,
Tina
Java Rockx <javarockx(a)gmail.com> wrote:
Tina,
I really don't know how the LVS server is configured because our network guy that we acquired from RedHat set all that stuff up. I do know that we basically have this set up:
I hope the formatting goes well :-)
+-----------+ +----------+ +-------+ +---------+ +--------------------+
| internet |------| Cisco |------| LVS |-----| Cisco |----| Application |
| cloud | | 3600 | | | | 3600 | | & DB Servers |
+-----------+ +----------+ +--------+ +---------+ +--------------------+
So the "Application & DB Servers" box represents multiple servers (all are dedicated to their service). These include SER, MySQL, Apache, configuration management, monitoring, RTP proxies, etc.
MySQL is active-active so we have two-way replication. We only have 2 MySQL servers. And this is all we plan on ever having as MySQL is more than capable of handling anything ser can throw at it (given the right hardware).
Each ser server is 100% oblivious to other SER servers except for when handling REGISTER messages. Here is basically the ser.cfg for each SER server:
listen=10.3.0.221 # this will be 10.3.0.222 on the peer sip proxy
modparam("usrloc", "db_mode", 1) # write-through
route {
if (method=="REGISTER") {
if (src_ip==10.3.0.221) { # ip of peer ser proxy
save_memory("location");
break;
} else {
save("location");
t_replicate("10.3.0.222");
break;
};
};
}
We have identifed a deficiency in the usrloc module urecord.c file whereby when using write-though mode the save_memory() function still attempt to update MySQL. This is a very bad thing because it causes a primary key violation on the location table.
Yesterday I posted a patch to serdev to fix this, but today we identified another case where save_memory() tried to insert in to the location table. I'll post a revised patch to serdev as soon as I get a chance.
So here is what happens. Assume I have two sip routers and two MySQL servers as:
sip-01 is 10.3.0.221
sip-02 is 10.3.0.222
db-01 is 10.2.0.21
db-02 is 10.2.0.22
Now let's just assume that sip-01 is connected to db-01 and sip-02 is connected to db-02.
When a SIP UA connects to a sip router (via LVS), assume sip-01 in this example and REGISTERs, sip-01 will call save("location") which updates/inserts to the location table. sip-01 then calls t_replicate to sip-02.
sip-02 recieves the REGISTER message and calls save_memory("location") to update its in-memory cache only. It should never hit db-02.
Now db-01 eventually (within a second or two) replicates to db-02 and now sip-02 is good to go, even in the event of a restart.
Our difficulties mostly surrounded the fact that ser was inserting the physical IP of eth0 on the server as the top VIA rather than the VIP as required. We solved this by using record_route_preset() and passing the VIP as the IP. We also had to bring up a dummy interface in order to get ser to honor the VIP.
Hope this helps.
Regards,
Paul
On Apr 8, 2005 7:19 PM, Tina <kramarv(a)yahoo.com> wrote: Paul,
we are using LVS as well. It creates template connection according to source Ip (e.g. UAC) and forwards to one of the tunneled IP. I tested this a couple of weeks ago, ser was happy and inserted VIP into via header, the only issue is to route the calls into right server.
I agree, there is no such thing as SIP-level clustering. However, how would you solve location problem by DB replication - 1) usrloc does not update from DB....2) even though, I am afraid it can become bottleneck and lock down users ...
KRs,
Tina
Java Rockx <javarockx(a)gmail.com> wrote:
See my inline comments.
Regards,
Paul
On Apr 8, 2005 1:08 PM, Greger V. Teigre <greger(a)teigre.com> wrote: Hi Tina,
> I enjoy reading your posts, thanks a lot for the great work you are
> doing for ser users!
Thanks :-)
> I am going to consider that kind of scenario as well (load balancer
> returning Virtual IP address). I think for such configuration server
> side has to keep session information and always forward a call to the
> right server.
I believe the load balancer can be in front and transparantly translate addresses in the SIP messages:
User agent always sees a.b.c.d
|
Load balancer with public IP a.b.c.d
| |
ser1 (10.0.0.2) ser2 (10.0.0.3)
Paul: You have a similar load-balancing solution, right? Do you use a commerical load balancer that you can reveal the name of? :-)
Our platform is 100% open source. Our load balancer is LVS. I have no idea how it actually works. One if our engineers from RedHat set all that networking stuff up and it's way beyond me.
The load balancer need to understand SIP (sort of) and use something (ex. IP address of user agent) to select SER server to send to and rewrite incoming to 10.0.0.2 and 10.0.0.3 respectively and outgoing to a.b.c.d. ser1 and ser2 will happily believe they are alone and communicate directly with user agent using their own private addresses. Both should know about all users (usrloc). Paul just recently posted a small patch for a setup where they use two-way replication between two
That small patch will need a slight revision. We discovered through further testing that that patch only fixed attempts to INSERT into the location table. We didn't cover the UPDATE route, unfortunately. I believe Andrew has that patch done and is testing it. So I'll post it to serdev as soon as we know it works - possibly later today.
mysql servers and where each SER instance will save all REGISTERs it receives from user agents, but only save to memory those replicated from the other SER peer. Klaus pointed out that the same can be done by not doing mysql replication, but have one DB for each SER and just use t_replicate() and save_noreply() (for two servers, for more than two you need to use forward_tcp()).
I have heard complaints that this approach will generate too much network traffic. Also, t_replicate() does not guarantee delivery of the replication (forward_tcp is better, but not fool proof). So, the "best" solution would probably be to hope that Paul's
I fully agree. Replication at the sip proxy level, IMHO, is not a good idea. From a purist point of view, replication is not a function of a SIP router - nor should it be. It is a function of the database and we believe that the MySQL replication is a better approach from a speed and reliabilty point of view - not to mention that it simplifies the tasks of the sip router.
recent TCP/UDP patch for network access to FIFO commands get included in the CVS. Then, a new replication module should use XMLRPC or whatever protocol the patch is using to forward (in a guaranteed mode) the usrloc information, which then would be injected directly into SER's memory, just like save() would, and of course in whatever db_mode you would like. The replicaton module would have to keep a queue (of course, flushed to a DB or something) in case of network problems, so that the replication would be done (sooner or later) regardless of problems.
Of course, this is a major undertaking, so for most replication scenarioes, I would think the forward_tcp() + save_noreply() would work just fine.
g-)
> "Greger V. Teigre" <greger(a)teigre.com> wrote:
> I was thinking about a load balancing scenario where the load
> balancer will replace the IP addresses.
> g-)
>
> ---- Original Message ----
> From: Tina
> To: Greger V. Teigre
> Sent: Wednesday, April 06, 2005 09:45 PM
> Subject: Re: [Serusers] still no help - usrloc synchronization
>
>> Thank you for givingme the scenario with "restricted IP" NAT, I am
>> starting to find some acceptable solution.
>> Unfortunately, "one-public-IP" approach is not free from problems
>> also. If your SIP router inserts this "one-public-IP" into the VIA
>> header, the reply routing goes via wrong SIP server...
>> If your SIP server inserts its real-IP-address - the scenario
>> mentioned above is still not resolved.
>> Any comments?
>> Tina
>>
>> "Greger V. Teigre" <greger(a)teigre.com> wrote:
>> See inline.
>>
>>> If you use DNS server for load balancing... the client receives one
>>> of your domain IP addresses according to SRV. I don't see the
>>> problem
>>> with a call here, cause UAC asks t! he address only once (before
>>> sending INVITE). UAC already has the IP for BYE/reINVITEs. So why
>>> would you replicate INVITEs?
>>
>> I would never replicate INVITEs, I would just make sure that they are
>> proxied through the correct SER server (i.e. IP).
>>
>> The problems depends on your setup. If you have SERs with different
>> IPs, ex UA1 has registered with server A and UA2 has registered with
>> server B: If UA2 wants to call UA1 and UA is behind an IP restricted
>> NAT, server A is stored in the NAT table of the NAT in front of UA1.
>> If server B sends an INVITE to UA1, the INVITE will be refused by
>> UA1's NAT.
>> This is why a "one public IP" in front of a load balancing
>> cluster probably is a good way to go.
>>
>>> If you use IPVS/LVS... I believe you can force SER to insert it's
>>> public IP into VIA,! so there is no problem with replies. With
>>> regard
>>> to another requests, I believe load balancer keeps connection
>>> template, then when another request comes it would be forwarded to
>>> the same ser.
>>
>> Yes. There are different "keys" to use to load balance SIP messages.
>> One good way from a NAT point of view is to use originating IP
>> address. What you must remember is that the problem is not on the
>> server side, but on the client side. The NAT will in many situations
>> stop incoming UDP packets if the originating ip:port is not already
>> stored in the NAT table. The Via header does not matter for the NAT.
>> g-)
>>
>>> Any comments?
>>>
>>> "Greger V. Teigre" <greger(a)teigre.com> wrote:
>>> Yes, I believe that is so. But still you get a problem if the NAT is
>>> restricted, port-restricted or symmetric... The best would be to
>>> load>> balance and always make sure that a given client is handled
>>> through a given
>>> SER (REGISTER and INVITEs). That includes forwarding INVITEs from
>>> one
>>> SER to
>>> another... OR you must load balance in front of your servers with
>>> one
>>> common
>>> public IP.
>>> g-)
>>>
>>> Matt Schulte wrote:
>>>> Ack, I didn't even think about NAT. Would these be added before it
>>>> gets sent off to the second proxy? ie:
>>>>
>>>> if (!src_ip==blah.netlogic.net) {
>>>> add_rcv_param();
>>>> t_replicate("blah.netlogic.net", "999");
>>>> };
>>>>
>>>> -----Original Message-----
>>>> From: Greger V. Teigre [mailto:greger@teigre.com]
>>>> Sent: Tuesday, April 05, 2005 7:49 AM
>>>> To: Matt Schulte; kramarv(a)yahoo.com
>>>> ! ; Cc: serusers(a)lists.iptel.org
>>>> Subject: ! Re: [Serusers] still no help - usrloc synchronization
>>>>
>>>>
>>>> Well, you still have the NAT issues unless you do load balancing
>>>> and your
>>>> SER servers have the same public IP.
>>>> Have you looked at 0.9.0 nathelper function add_rcv_param() ? It
>>>> will add received info to the contact header for the other SER to
>>>> process. Haven't really tried yet...
>>>> g-)
>>>>
>>>> Matt Schulte wrote:
>>>>> I'm starting to lean this direction, using t_replicate and all. I
>>>>> could never get usrloc (db mode) to function properly..
>>>>> t_replicate is
>>>>
>>>>> a dirty but very effective workaround.
>>>>>
>>>>> -----Original Message-----
>>>>> From: Greger V. Teigre [mailto:greger@teigre.com]
>>>>> Sent: Saturday, April 02,! 2005 1:33 AM
>>>>> To: kramarv(a)yahoo.com
>>>>> Cc: serusers(a)lists.iptel.org
>>>>> Subject: Re: [Serusers] still ! no help - usrloc synchronization
>>>>>
>>>>>
>>>>> Have a look at this thread:
>>>>> http://lists.iptel.org/pipermail/serusers/2005-January/014669.html
>>>>> g-)
>>>>>
>>>>> Java Rockx wrote:
>>>>>> Tina,
>>>>>>
>>>>>> I thought I saw you post the other day that you did not want to
>>>>>> use t_replicate(), however, this is probably your best bet to
>>>>>> getting this
>>>>>
>>>>>> to work, IMHO.
>>>>>>
>>>>>> Regards,
>>>>>> Paul
>>>>>>
>>>>>> On Apr 1, 2005 4:08 PM, Tina wrote:
>>>>> ! >>
>>>>>> ! ;> Hi, please help me, I'm stuck with it!!!!!
>>>>>>> I am trying to set up several sers with a shared MySQL database
>>>>>>> for location service.
>>>>>>>
>>>>>>> I set in each ser.cfg:
>>>>>>>
>>>>>>> modparam("usrloc", "db_mode", 2)
>>>>>>> modparam("usrloc",
>>>>>>> "db_url","sql://ser:heslo@192.168.25.163/ser")
>>>>>>>
>>>>>>> and the servers are not synchronized.
>>>>>>> The I set
>>>>>>> modparam("usrloc", "db_mode", 2)
>>>>>>>
>>>>>>>
>>>>>>> made UAC (Xlite) register to one of the servers.
>>>>>>> I see it via usrloc, but there is no record in "location" mySQL
>>>>>>> table....So others do not see the client and I'm unable to make
>>>>>>> calls....
>>>>>>>
>>>>>>>
>>>>>>> Please help how to work with usrloc and mySQL...
>>>>>>>
>>>>>>> Tina,
>>>>>>> software engineer
>>>>>>>
>>>>>>> ________________________________
>>>>>>> Do you Yahoo!?
>>>>>>> Better first dates. More second dates. Yahoo! Personals
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Serusers mailing list
>>>>>>> serusers(a)lists.iptel.org
>>>>>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Serusers mailing list
>>>>>> serusers(a)lists.iptel.org
>>>>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>>>
>>>>> _______________________________________________
>>>>> Serusers mailing list
>>>>> serusers(a)lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
>>>
>>>
>>>
>>>
>>> Yahoo! Messenger
>>> Show us what our next emoticon should look like. Join the fun.
>>
>>
>> Do you Yahoo!?
>> Better first dates. More second dates. Yahoo! Personals
>
>
> Yahoo! Messenger
> Show us what our next emoticon should look like. Join the fun.
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
---------------------------------
Do you Yahoo!?
Make Yahoo! your home page
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
---------------------------------
Do you Yahoo!?
Plan great trips with Yahoo! Travel: Now over 17,000 guides!
if i use t_uac_dlg fifo command to send an invite request to a UAS that
is behind NAT, t_uac sends ACK to the private contact address of 200
OK.
in order fix the contact address in 200 OK, i should be able to somehow
tell to t_uac_dlg that it should set a t_on_reply for the transaction.
i didn't find any t_uac_dlg parameter for that purpose.
perhaps there is some other way to get the contact address fixed?
-- juha
Hello,
I am using mediaproxy 1.2.1 package. I have mediaproxy process does not answer when proxydispatcher tries to create a session - . Then I ran rtpgenerator to test the problem and got:
===================================================
./rtpgenerator.py
Generator error: No answer from mediaproxy.
./rtpgenerator.py --ip=<=remote IP> --proxy=<remote IP> --gsm
Traceback (most recent call last):
File "./rtpgenerator.py", line 109, in __findFreeSocket
raise GeneratorError, why[1]
GeneratorError: Can't assign requested address
Traceback (most recent call last):
File "./rtpgenerator.py", line 192, in ?
sender = RTPGenerator('request')
File "./rtpgenerator.py", line 46, in __init__
self.addr = sock.getsockname()
AttributeError: 'NoneType' object has no attribute 'getsockname'
./rtpgenerator.py --proxy=<remote mediaproxy IP> --gsm
error: uncaptured python exception, closing channel <__main__.RTPGenerator connected 127.0.0.1:10000 at 0x824b3ec> (socket.error:(49, "Can't assign requested address") [/usr/local/lib/python2.3/asyncore.py|write|77] [/usr/local/lib/python2.3/asyncore.py|handle_write_event|397] [./rtpgenerator.py|handle_write|89])
error: uncaptured python exception, closing channel <__main__.RTPGenerator connected 127.0.0.1:10002 at 0x824b28c> (socket.error:(49, "Can't assign requested address") [/usr/local/lib/python2.3/asyncore.py|write|77] [/usr/local/lib/python2.3/asyncore.py|handle_write_event|397] [./rtpgenerator.py|handle_write|89])
Can anyone help me - what can be the problem? I tried the same package on another machines, everything was ok....
Thx in advance,
Tina
---------------------------------
Do you Yahoo!?
Plan great trips with Yahoo! Travel: Now over 17,000 guides!
Ran with remote options, will see how it works when solve replication via internal-interface.
Thx!
Tina
"Greger V. Teigre" <greger(a)teigre.com> wrote:
Yes. I believe mediaproxy.so uses a socket to communicate with proxydispatcher and that proxydispatcher will use the default route for outgoing communications.
g-)
---- Original Message ----
From: Tina
To: Greger V. Teigre ; serusers(a)lists.iptel.org
Sent: Saturday, April 16, 2005 09:23 PM
Subject: Re: [Serusers] how to configure mediaproxy to work with remote
RTPserver - pls help!
> Greger, thank you, this helps.
> So I would run mediaproxy.py like that:
> ./mediaproxy.py --listen <proxyIP:25060> --allow <IP1>,<IP2>,...
>
> where <proxyIP:25060> - is TCP address/port of mediaproxy and
> <IP1>,<IP2>... - list of addresses of proxydispatchers in the domain?
>
> I didn't find information how proxydispatcher picks up its IP
> interface. If the machine has several IP devices, I think I should
> list all of them.
>
> BRs,
> Tina
>
> "Greger V. Teigre" <greger(a)teigre.com> wrote:
> Tina,
> As you see in the mediaproxy README:
> The dispatcher implemented here is based on distributing the sessions
> based
> on the SIP domain of the caller/destination using DNS SRV records. If
> a
> domain doesn't define any mediaproxy server, a default will be used.
>
> Further:
> The dispatcher will use the sender's domain if the sender is local,
> else will
> use the destination's domain if the destination is local. If none of
> them is
> local, it will refuse to use a proxy server at all.
>
> You must then create DNS SRV records for the domains.
> http://www.voip-info.org/wiki-DNS+SRV
>
> The proxydispatcher.py should run locally. Each proxy server should
> run the mediaproxy.py proxy server with the --listen any:25060
> (default port) --allow ip-of-proxydispatcher
>
> Hope this helps.
> g-)
> ----- Original Message -----
> From: Tina
> To: serusers(a)lists.iptel.org
> Sent: Saturday, April 16, 2005 03:36 AM
> Subject: [Serusers] how to configure mediaproxy to work with remote
> RTPserver - pls help!
>
>
> Hello,
> I've tried mediaproxy package, it worked fine running on the same
> machine. I need the following configuation:
> ser+proxydispatcher
> - RTP proxy (mediaproxy)
> - RTP proxy 2 ...
> How can I make proxydispatcher retrieves RTP proxy address by DNS?
> Thanks in advance,
> really need help!
>
> BRs,
> Tina
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>
>
>
> _______________________________________________
> Serusers mailing list
> serusers(a)lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
>
>
> Do you Yahoo!?
> Read only the mail you want - Yahoo! Mail SpamGuard.
---------------------------------
Yahoo! Mail Mobile
Take Yahoo! Mail with you! Check email on your mobile phone.
Greger, thank you, this helps.
So I would run mediaproxy.py like that:
./mediaproxy.py --listen <proxyIP:25060> --allow <IP1>,<IP2>,...
where <proxyIP:25060> - is TCP address/port of mediaproxy and <IP1>,<IP2>... - list of addresses of proxydispatchers in the domain?
I didn't find information how proxydispatcher picks up its IP interface. If the machine has several IP devices, I think I should list all of them.
BRs,
Tina
"Greger V. Teigre" <greger(a)teigre.com> wrote:
Tina,
As you see in the mediaproxy README:
The dispatcher implemented here is based on distributing the sessions based
on the SIP domain of the caller/destination using DNS SRV records. If a
domain doesn't define any mediaproxy server, a default will be used.
Further:
The dispatcher will use the sender's domain if the sender is local, else will
use the destination's domain if the destination is local. If none of them is
local, it will refuse to use a proxy server at all.
You must then create DNS SRV records for the domains.
http://www.voip-info.org/wiki-DNS+SRV
The proxydispatcher.py should run locally. Each proxy server should run the mediaproxy.py proxy server with the --listen any:25060 (default port) --allow ip-of-proxydispatcher
Hope this helps.
g-)
----- Original Message -----
From: Tina
To: serusers(a)lists.iptel.org
Sent: Saturday, April 16, 2005 03:36 AM
Subject: [Serusers] how to configure mediaproxy to work with remote RTPserver - pls help!
Hello,
I've tried mediaproxy package, it worked fine running on the same machine. I need the following configuation:
ser+proxydispatcher
- RTP proxy (mediaproxy)
- RTP proxy 2 ...
How can I make proxydispatcher retrieves RTP proxy address by DNS?
Thanks in advance,
really need help!
BRs,
Tina
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
---------------------------------
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
---------------------------------
Do you Yahoo!?
Read only the mail you want - Yahoo! Mail SpamGuard.
Hi there,
This is my ser.cfg configuration
if(method=="REGISTER")
{
if (!radius_www_authorize(""))
{
www_challenge("", "0");
break;
};
save("location");
break;
};
And here is some sniffing done with ngrep ...
U IP_UA:11006 -> IP_SER:5060
REGISTER sip:IP_SER SIP/2.0.
Via: SIP/2.0/UDP
192.168.1.178:11006;rport;branch=z9hG4bK810E80344EB24AE5B8D5FD21043E78CE
.
From: Lucas <sip:1991006@IP_SER>.
To: Lucas <sip:1991006@IP_SER>.
Contact: "Lucas" <sip:1991006@192.168.1.178:11006>.
Call-ID: FCA6F7DD4BA94FA090F446BCE4AAE5B9@IP_SER.
CSeq: 57327 REGISTER.
Expires: 1800.
Authorization: Digest
username="1991006@IP_SER",realm="IP_SER",nonce="425b03326e0f4f0071f1a766
4c8823f1271f1212",response="8b9ec4e8e633c5dd7d4aee4aef1ffdba",uri="sip:I
P_SER".
Max-Forwards: 70.
User-Agent: X-PRO build 1082.
Content-Length: 0.
.
#
U IP_SER:5060 -> IP_UA:11006
SIP/2.0 401 Unauthorized.
Via: SIP/2.0/UDP
192.168.1.178:11006;rport=11006;branch=z9hG4bK810E80344EB24AE5B8D5FD2104
3E78CE;received=IP_UA.
From: Lucas <sip:1991006@IP_SER>.
To: Lucas
<sip:1991006@IP_SER>;tag=6f0d146d94c4cb042663ff3cf87e2e72.d766.
Call-ID: FCA6F7DD4BA94FA090F446BCE4AAE5B9@IP_SER.
CSeq: 57327 REGISTER.
WWW-Authenticate: Digest realm="IP_SER",
nonce="425b03326e0f4f0071f1a7664c8823f1271f1212".
Content-Length: 0.
Warning: 392 IP_SER:5060 "Noisy feedback tells: pid=23023
req_src_ip=IP_UA req_src_port=11006 in_uri=sip:IP_SER out_uri=sip:IP_SER
via_cnt==1".
The thing is that I'm not seeing the Password Attribute at the radius
output ...
Well, to be honest, I do not know wich is the attribute SER uses to send
password, but, the truth is no Password Attribute is sent to RADIUS.
Any ideas ?
Regards,
Lucas
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.9.6 - Release Date: 11/04/2005
Forgive my ignorance, why is NAT a bottleneck? Are you refering to CPU
load or managibility? With alot of load balancers, NAT is the only way
to go.
-----Original Message-----
From: Tina [mailto:kramarv@yahoo.com]
Sent: Monday, April 11, 2005 11:37 AM
To: Java Rockx
Cc: serusers(a)lists.iptel.org
Subject: Re: [Serusers] still no help - usrloc synchronization
Pretty good news, Paul. I've only tested IP tunneling. It worked
for me. The problem I described was born in my thoughts. I've also read
some complaints from SIP-LVS users. The only configuration where Call-Id
stickness does not necessary is LVS-NAT. Unfortunately, NAT becomes
bottleneck very fast.
Java Rockx <javarockx(a)gmail.com> wrote:
Tina,
I wish I had more information on that, but that LVS
stuff is a black art to me. One of our engineers whipped up an LVS
configuration that seems quite happy with the Call-ID "stickness" you
described. All I can say right now is that it is apparently possible to
do this with 100% open source. (i'm keeping my fingers crossed) :-)
Regards,
Paul
On Apr 10, 2005 11:03 PM, Tina <kramarv(a)yahoo.com>
wrote:
Paul,
thanks a lot, it helps a lot. The thing I do not
understand - how you are going to solve call-id stickness (see my
another post). Since we're also use LVS I had to find something
proprietary, I am afraid this is not a best solution, but the only I
have today.
KRs,
Tina
Java Rockx <javarockx(a)gmail.com> wrote:
Tina,
I really don't know how the LVS server
is configured because our network guy that we acquired from RedHat set
all that stuff up. I do know that we basically have this set up:
I hope the formatting goes well :-)
+-----------+ +----------+
+-------+ +---------+ +--------------------+
| internet |------| Cisco |------| LVS
|-----| Cisco |----| Application |
| cloud | | 3600 | |
| | 3600 | | & DB Servers |
+-----------+ +----------+
+--------+ +---------+ +--------------------+
So the "Application & DB Servers" box
represents multiple servers (all are dedicated to their service). These
include SER, MySQL, Apache, configuration management, monitoring, RTP
proxies, etc.
MySQL is active-active so we have
two-way replication. We only have 2 MySQL servers. And this is all we
plan on ever having as MySQL is more than capable of handling anything
ser can throw at it (given the right hardware).
Each ser server is 100% oblivious to
other SER servers except for when handling REGISTER messages. Here is
basically the ser.cfg for each SER server:
listen=10.3.0.221 <http://10.3.0.221/>
# this will be 10.3.0.222 <http://10.3.0.222/> on the peer sip proxy
modparam("usrloc", "db_mode", 1) #
write-through
route {
if (method=="REGISTER") {
if (src_ip==10.3.0.221
<http://10.3.0.221/> ) { # ip of peer ser proxy
save_memory("location");
break;
} else {
save("location");
t_replicate("10.3.0.222 <http://10.3.0.222/> ");
break;
};
};
}
We have identifed a deficiency in the
usrloc module urecord.c file whereby when using write-though mode the
save_memory() function still attempt to update MySQL. This is a very bad
thing because it causes a primary key violation on the location table.
Yesterday I posted a patch to serdev to
fix this, but today we identified another case where save_memory() tried
to insert in to the location table. I'll post a revised patch to serdev
as soon as I get a chance.
So here is what happens. Assume I have
two sip routers and two MySQL servers as:
sip-01 is 10.3.0.221
<http://10.3.0.221/>
sip-02 is 10.3.0.222
<http://10.3.0.222/>
db-01 is 10.2.0.21 <http://10.2.0.21/>
db-02 is 10.2.0.22 <http://10.2.0.22/>
Now let's just assume that sip-01 is
connected to db-01 and sip-02 is connected to db-02.
When a SIP UA connects to a sip router
(via LVS), assume sip-01 in this example and REGISTERs, sip-01 will call
save("location") which updates/inserts to the location table. sip-01
then calls t_replicate to sip-02.
sip-02 recieves the REGISTER message and
calls save_memory("location") to update its in-memory cache only. It
should never hit db-02.
Now db-01 eventually (within a second or
two) replicates to db-02 and now sip-02 is good to go, even in the event
of a restart.
Our difficulties mostly surrounded the
fact th at ser was inserting the physical IP of eth0 on the server as
the top VIA rather than the VIP as required. We solved this by using
record_route_preset() and passing the VIP as the IP. We also had to
bring up a dummy interface in order to get ser to honor the VIP.
Hope this helps.
Regards,
Paul
On Apr 8, 2005 7:19 PM, Tina
<kramarv(a)yahoo.com> wrote:
Paul,
we are using LVS as well. It creates
template connection according to source Ip (e.g. UAC) and forwards to
one of the tunneled IP. I tested this a couple of weeks ago, ser was
happy and inserted VIP into via header, the only issue is to route the
calls into right server.
I agree, there is no such thing as
SIP-level clustering. However, how would you solve location problem by
DB replication - 1) usrloc does not update from DB....2) even though, I
am afraid it can become bottleneck and lock down users ...
KRs,
Tina
Java Rockx <javarockx(a)gmail.com> wrote:
See my inline comments.
Regards,
Paul
On Apr 8, 2005 1:08 PM, Greger V. Teigre
<greger(a)teigre.com> wrote:
Hi Tina,
> I enjoy reading your posts, thanks a
lot for the great work you are
> doing for ser users!
Thanks :-)
> I am going to consider that kind of
scenario as well (load balancer
> returning Virtual IP address). I think
for such configuration server
> side has to keep session information
and always forward a call to the
> right server.
I believe the load balancer can be in
front and transparantly translate addresses in the SIP messages:
User agent always sees a.b.c.d
|
Load balancer with public IP a.b.c.d
| |
ser1 (10.0.0.2 <http://10.0.0.2/> )
ser2 (10.0.0.3 <http://10.0.0.3/> )
Paul: You have a similar load-balancing
solution, right? Do you use a commerical load balancer that you can
reveal the name of? :-)
Our platform is 100% open source. Our
load balancer is LVS. I have no idea how it actually works. One if our
engineers from RedHat set all that networking stuff up and it's way
beyond me.
The load balancer need to understand SIP
(sort of) and use something (ex. IP address of user agent) to select SER
server to send to and rewrite incoming to 10.0.0.2 <http://10.0.0.2/>
and 10.0.0.3 <http://10.0.0.3/> respectively and outgoing to a.b.c.d.
ser1 and ser2 will happily believe they are alone and communicate
directly with user agent using their own private addresses. Both should
know about all users (usrloc). Paul just recently posted a small patch
for a setup where they use two-way replication between two
That small patch will need a slight
revision. We discovered through further testing that that patch only
fixed attempts to INSERT into the location table. We didn't cover the
UPDATE route, unfortunately. I believe Andrew has that patch done and is
testing it. So I'll post it to serdev as soon as we know it works -
possibly later today.
mysql servers and where each SER
instance will save all REGISTERs it receives from user agents, but only
save to memory those replicated from the other SER peer. Klaus pointed
out that the same can be done by not doing mysql replication, but have
one DB for each SER and just use t_replicate() and save_noreply() (for
two servers, for more than two you need to use forward_tcp()).
I have heard complaints that this
approach will generate too much network traffic. Also, t_replicate()
does not guarantee delivery of the replication (forward_tcp is better,
but not fool proof). So, the "best" solution would probably be to hope
that Paul's
I fully agree. Replication at the sip
proxy level, IMHO, is not a good idea. From a purist point of view,
replication is not a function of a SIP router - nor should it be. It is
a function of the database and we believe that the MySQL replication is
a better approach from a speed and reliabilty point of view - not to
mention that it simplifies the tasks of the sip router.
recent TCP/UDP patch for network access
to FIFO commands get included in the CVS. Then, a new replication module
should use XMLRPC or whatever protocol the patch is using to forward (in
a guaranteed mode) the usrloc information, which then would be injected
directly into SER's memory, just like save() would, and of course in
whatever db_mode you would like. The replicaton module would have to
keep a queue (of course, flushed to a DB or something) in case of
network problems, so that the replication would be done (sooner or
later) regardless of problems.
Of course, this is a major
undertaking, so for most replication scenarioes, I would think the
forward_tcp() + save_noreply() would work just fine.
g-)
> "Greger V. Teigre" <greger(a)teigre.com>
wrote:
> I was thinking about a load balancing
scenario where the load
> balancer will replace the IP
addresses.
> g-)
>
> ---- Original Message ----
> From: Tina
> To: Greger V. Teigre
> Sent: Wednesday, April 06, 2005 09:45
PM
> Subject: Re: [Serusers] still no help
- usrloc synchronization
>
>> Thank you for givingme the scenario
with "restricted IP" NAT, I am
>> starting to find some acceptable
solution.
>> Unfortunately, "one-public-IP"
approach is not free from problems
>> also. If your SIP router inserts this
"one-public-IP" into the VIA
>> header, the reply routing goes via
wrong SIP server...
>> If your SIP server inserts its
real-IP-address - the scenario
>> mentioned above is s till not
resolved.
>> Any comments?
>> Tina
>>
>> "Greger V. Teigre"
<greger(a)teigre.com> wrote:
>> See inline.
>>
>>> If you use DNS server for load
balancing... the client receives one
>>> of your domain IP addresses
according to SRV. I don't see the
>>> problem
>>> with a call here, cause UAC asks t!
he address only once (before
>>> sending INVITE). UAC already has the
IP for BYE/reINVITEs. So why
>>> would you replicate INVITEs?
>>
>> I would never replicate INVITEs, I
would just make sure that they are
>> proxied through the correct SER
server (i.e. IP).
>>
>> The problems depends on your setup.
If you have SERs with different
>> IPs, ex UA1 has registered with
server A and UA2 ha s registered with
>> server B: If UA2 wants to call UA1
and UA is behind an IP restricted
>> NAT, server A is stored in the NAT
table of the NAT in front of UA1.
>> If server B sends an INVITE to UA1,
the INVITE will be refused by
>> UA1's NAT.
>> This is why a "one public IP" in
front of a load balancing
>> cluster probably is a good way to go.
>>
>>> If you use IPVS/LVS... I believe you
can force SER to insert it's
>>> public IP into VIA,! so there is no
problem with replies. With
>>> regard
>>> to another requests, I believe load
balancer keeps connection
>>> template, then when another request
comes it would be forwarded to
>>> the same ser.
>>
>> Yes. There are different "keys" to
use to load balance SIP messages.
>> One good way from a NAT point of view
is to use originating IP
> > address. What you must remember is
that the problem is not on the
>> server side, but on the client side.
The NAT will in many situations
>> stop incoming UDP packets if the
originating ip:port is not already
>> stored in the NAT table. The Via
header does not matter for the NAT.
>> g-)
>>
>>> Any comments?
>>>
>>> "Greger V. Teigre"
<greger(a)teigre.com> wrote:
>>> Yes, I believe that is so. But still
you get a problem if the NAT is
>>> restricted, port-restricted or
symmetric... The best would be to
>>> load>> balance and always make sure
that a given client is handled
>>> through a given
>>> SER (REGISTER and INVITEs). That
includes forwarding INVITEs from
>>> one
>>> SER to
>>> another... OR you must load balance
in front of your servers with
>>> one
>>> common
>>> public IP.
>>> g-)
>>>
>>> Matt Schulte wrote:
>>>> Ack, I didn't even think about NAT.
Would these be added before it
>>>> gets sent off to the second proxy?
ie:
>>>>
>>>> if (!src_ip==blah.netlogic.net
<http://blah.netlogic.net/> ) {
>>>> add_rcv_param();
>>>> t_replicate("blah.netlogic.net
<http://blah.netlogic.net/> ", "999");
>>>> };
>>>>
>>>> -----Original Message-----
>>>> From: Greger V. Teigre
[mailto:greger@teigre.com <mailto:greger@tei gre.com> ]
>>>> Sent: Tuesday, April 05, 2005 7:49
AM
>>>> To: Matt Schulte; kramarv(a)yahoo.com
>>>> ! ; Cc: serusers(a)lists.iptel.org
>>>> Subject: ! Re: [Serusers] still no
help - usrloc synchronization
>>>>
>>>>
>>>> Well, you still have the NAT issues
unless you do load balancing
>>>> and your
>>>> SER servers have the same public
IP.
>>>> Have you looked at 0.9.0 nathelper
function add_rcv_param() ? It
>>>> will add received info to the
contact header for the other SER to
>>>> process. Haven't really tried
yet...
>>>> g-)
>>>>
>>>> Matt Schulte wrote:
>>>>> I'm starting to lean this
direction, using t_replicate and all. I
>>>>> could never get usrloc (db mode)
to function properly..
>>>>> t_replicate is
>>>>
>>>>> a dirty but very effective
workaround.
>>>>>
>>>>> -----Original Message-----
>>>>> From: Greger V. Teigre
[mailto:greger@teigre.com]
>>>>> Sent: Saturday, April 02,! 2005
1:33 AM
>>>>> To: kramarv(a)yahoo.com
>>>>> Cc: serusers(a)lists.iptel.org
>>>>> Subject: Re: [Serusers] still ! no
help - usrloc synchronization
>>>>>
>>>>>
>>>>> Have a look at this thread:
>>>>>
http://lists.iptel.org/pipermail/serusers/2005-January/014669.html
>>>>> g-)
>>>>>
>>>>> Java Rockx wrote:
>>>>>> Tina,
>>>>>>
>>>>>> I thought I saw you post the
other day that you did not want to
>>>>>> use t_replicate(), however, this
is probably your best bet to
>>>>>> getting this
>>>>>
>>>>>> to work, IMHO.
>>>>>>
>>>>>> Regards,
>>>>>> Paul
>>>>>>
>>>>>> On Apr 1, 2005 4:08 PM, Tina
wrote:
>>>>> ! >>
>>>>>> ! ;> Hi, please help me, I'm
stuck with it!!!!!
>>>>>>> I am trying to set up several
sers with a shared MySQL database
>>>>>>> for location service.
>>>>>>>
>>>>>>> I set in each ser.cfg:
>>>>>>>
>>>>>>> modparam("usrloc", "db_mode", 2)
>>>>>>> modparam("usrloc",
>>>>>>>
"db_url","sql://ser:heslo@192.168.25.163/ser")
>>>>>>>
>>>>>>> and the servers are not
synchronized.
>>>>>>> The I set
>>>>>>> modparam("usrloc", "db_mode", 2)
>>>>>>>
>>>>>>>
>>>>>>> made UAC (Xlite) register to one
of the servers.
>>>>>>> I see it via usrloc, but there
is no record in "location" mySQL
>>>>>>> table....So others do not see
the client and I'm unable to make
>>>>>>> calls....
>>>>>>>
>>>>>>>
>>>>>>> Please help how to work with
usrloc and mySQL...
>>>>>>>
>>>>>>> Tina,
>>>>>>> software engineer
>>>>>>>
>>>>>>> ________________________________
>>>>>>> Do you Yahoo!?
>>>>>>> Better first dates. More second
dates. Yahoo! Personals
>>>>>>>
>>>>>>>
>>>>>>>
_______________________________________________
>>>>>>> Serusers mailing list
>>>>>>> serusers(a)lists.iptel.org
>>>>>>>
http://lists.iptel.org/mailman/listinfo/serusers
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
_______________________________________________
>>>>>> Serusers mailing list
>>>>>> serusers(a)lists.iptel.org
>>>>>>
http://lists.iptel.org/mailman/listinfo/serusers
>>>>>
>>>>>
_______________________________________________
>>>>> Serusers mailing list
>>>>> serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
>>>
>>>
>>>
>>>
>>> Yahoo! Messenger
>>> Show us what our next emoticon
should look like. Join the fun.
>>
>>
>> Do you Yahoo!?
>> Better first dates. More second
dates. Yahoo! Personals
>
>
> Yahoo! Messenger
> Show us what our next emoticon should
look like. Join the fun.
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
_____
Do you Yahoo!?
Make Yahoo! your home page
<http://us.rd.yahoo.com/my/navbar/sethp/*http://www.yahoo.com/r/hs>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam
protection around
http://mail.yahoo.com <http://mail.yahoo.com/>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com