yes it works in asterisk v1.0.6 and lately 1.2beta2 with a new patch released last week...<br>
<br>
some notes:<br>
<br>
B2BUA scenario: <br>
<br>
<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|==========&gt;(PSTN GW´s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;&nbsp; |<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nated_UA1 ===&gt;&gt; SER+rtpproxy &lt;===&gt; Asterisk B2BUA<br>
&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
UA2
&lt;======|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Prepaid System<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
with RADIUS<br>
<br>
<br>
1.- Get the Perl MD5 Package from:<br>
&nbsp; <a href="http://www.cpan.org/modules/by-module/MD5/MD5-1.X.tar.gz">http://www.cpan.org/modules/by-module/MD5/MD5-1.X.tar.gz</a><br>
<br>
Install Perl MD5<br>
&nbsp; tar -zxf MD5-1.X.tar.gz<br>
&nbsp; cd MD5-1.X<br>
&nbsp; perl Makefile.PL<br>
&nbsp; make<br>
<br>
<br>
2.- Get the B2BUA patch from:<br>
&nbsp; <a href="http://download.berlios.de/b2bua/asterisk-b2bua-0.1.2.tgz">http://download.berlios.de/b2bua/asterisk-b2bua-0.1.2.tgz</a><br>
<br>
&nbsp; Unapack the B2BUA:<br>
&nbsp; tar -zxfv asterisk-b2bua-0.1.2.tgz<br>
<br>
<br>
3.- Get Asteriks version 1.0.6 with:<br>
&nbsp; cd /usr/src<br>
&nbsp; export CVSROOT=:pserver:anoncvs@cvs.digium.com:/usr/cvsroot<br>
&nbsp; cvs login&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- the password is anoncvs.<br>
&nbsp; cvs co -r v1-0-6 asterisk zaptel libpri<br>
<br>
4.- Patch Asterisk<br>
&nbsp; cd /asterisk<br>
&nbsp; cp /your_download_dir/asterisk-b2bua-0.1.2/patch/asterisk-1.0.6-b2bua.patch<br>
&nbsp; patch -p1 &lt; asterisk-1.0.6-b2bua.patch<br>
<br>
---------&gt;<br>
<br>
Modify app_getchannelstate.c (line 44) in this way ... look<br>
<br>
Before ...<br>
<br>
static int get_channel_state(struct ast_channel *chan, void *data)<br>
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; struct localuser *u;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOCAL_USER_ADD(u);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int res = -1;<br>
<br>
After ...<br>
<br>
static int get_channel_state(struct ast_channel *chan, void *data)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int res = -1;<br>
&nbsp;&nbsp;&nbsp; struct localuser *u;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOCAL_USER_ADD(u);<br>
<br>
----------&gt; esto evita un error en la compilacion de asterisk.<br>
<br>
6.- Compile and install Asterisk<br>
&nbsp; cd ../zaptel<br>
&nbsp; make clean; make install<br>
&nbsp; cd ../libpri<br>
&nbsp; make clean; make install<br>
&nbsp; cd ../asterisk<br>
&nbsp; make clean; make install<br>
<br>
If new to Asterisk, create default configuration files:<br>
<br>
&nbsp; make samples<br>
<br>
7.- Get the Asterisk PERL AGI module from:&nbsp; <a href="http://asterisk.gnuinter.net/files/asterisk-perl-0.XX.tar.gz">http://asterisk.gnuinter.net/files/asterisk-perl-0.XX.tar.gz</a><br>
<br>
Install with:<br>
&nbsp; tar -zxfv asterisk-perl-0.XX.tar.gz<br>
&nbsp; cd asterisk-perl-0.XX<br>
&nbsp; perl Makefile.PL<br>
&nbsp; make all<br>
&nbsp; make install<br>
<br>
8.- Replace the contents of the file /etc/asterisk/extensions.conf with something like:<br>
<br>
&nbsp; [general]<br>
&nbsp; static=yes<br>
&nbsp; writeprotect=no<br>
&nbsp; <br>
&nbsp; [default]<br>
&nbsp; ; Internationa LD&nbsp; <br>
&nbsp; exten =&gt; _011.,1,DeadAGI(/your_download_dir/asterisk-b2bua-0.1.2/agi/agi.pl)<br>
&nbsp; exten =&gt; _011.,2,Hangup()<br>
&nbsp; ; National LD<br>
&nbsp; exten =&gt; _01.,1,DeadAGI(/your_download_dir/asterisk-b2bua-0.1.2/agi/agi.pl)<br>
&nbsp; exten =&gt; _01.,2,Hangup()<br>
&nbsp; ; Add other routes here<br>
<br>
9.- Your /etc/asterisk/sip.conf file should look like:<br>
<br>
&nbsp; [general]<br>
&nbsp; context=default<br>
&nbsp; port=5060<br>
&nbsp; bindaddr=<a href="http://0.0.0.0">0.0.0.0</a><br>
&nbsp; srvlookup=yes<br>
&nbsp; disallow=all<br>
&nbsp; allow=ulaw<br>
&nbsp; allow=alaw&nbsp; <br>
&nbsp; allow=g729<br>
&nbsp; <br>
&nbsp; [sip_proxy]<br>
&nbsp; ; For incoming calls only.<br>
&nbsp; type=peer<br>
&nbsp;
host=<a href="http://10.10.10.1">10.10.10.1</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
; Your SIP proxy IP address<br>
&nbsp; canreinvite=no <br>
<br>
Edit the file /your_download_dir/asterisk-b2bua-0.1.2/agi/config.pl <br>
In this file you specify the RADIUS and outgoing call leg parameters.<br>
<br>
Run Asterisk<br>
&nbsp; /usr/sbin/asterisk -vvvvg<br>
<br>
<br>
10.- Below is an example of how you could route between SER and B2BUA.<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; #************************<br>
&nbsp;&nbsp;&nbsp; # We check credentials for registers<br>
&nbsp;&nbsp;&nbsp; #************************<br>
&nbsp;&nbsp;&nbsp; if (method==&quot;REGISTER&quot;) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!www_authorize(&quot;your.domain&quot;, &quot;subscriber&quot;)) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; www_challenge(&quot;your.domain&quot;, &quot;0&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; save(&quot;location&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; #************************<br>
&nbsp;&nbsp;&nbsp; # First we check the source of the call<br>
&nbsp;&nbsp;&nbsp; #************************<br>
&nbsp;&nbsp;&nbsp; # If the call comes from the gateway, no authentication is<br>
&nbsp;&nbsp;&nbsp; # required<br>
&nbsp;&nbsp;&nbsp; if (src_ip==<a href="http://10.10.10.2">10.10.10.2</a>) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; log(1,&quot;Call from pstn. \n&quot;);<br>
&nbsp;&nbsp;&nbsp; # If the call comes from B2BUA, no authentication is<br>
&nbsp;&nbsp;&nbsp; # required. The first leg of the call has already been<br>
&nbsp;&nbsp;&nbsp; # authenticated.<br>
&nbsp;&nbsp;&nbsp; } else if (src_ip==<a href="http://10.10.10.4">10.10.10.4</a>) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; log(1,&quot;Call from B2BUA. \n&quot;);<br>
&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # We check user credentials<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (method==&quot;INVITE&quot;) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!proxy_authorize(&quot;your.domain&quot;, &quot;subscriber&quot;)) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; proxy_challenge(&quot;your.domain&quot;, &quot;0&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # Not all the users are prepaid, so we check the database<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # to see if the call will be routed through B2BUA.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # If every call is to be routed through B2BUA the &quot;is_user_in&quot;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # conditional is not required.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (is_user_in(&quot;From&quot;, &quot;prep&quot;)) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rewritehost(&quot;<a href="http://10.10.10.4">10.10.10.4</a>&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; t_relay_to_udp(&quot;<a href="http://10.10.10.4">10.10.10.4</a>&quot;, &quot;5060&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; #************************<br>
&nbsp;&nbsp;&nbsp; # Then we check the destination of the call<br>
&nbsp;&nbsp;&nbsp; #************************<br>
&nbsp;&nbsp;&nbsp; # We use a specific pattern to identify our SIP users.<br>
&nbsp;&nbsp;&nbsp; # This can be replaced with a database lookup if a pattern<br>
&nbsp;&nbsp;&nbsp; # is not possible.<br>
&nbsp;&nbsp;&nbsp; if (uri=~&quot;^sip:666.+@.*&quot;) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # Look user in the location database<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!lookup(&quot;location&quot;)) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sl_send_reply(&quot;404&quot;, &quot;Not Found&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # Try to send call to dest.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!t_relay()) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sl_reply_error();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
&nbsp;&nbsp;&nbsp; # Forward numeric uri's to PSTN gateways<br>
&nbsp;&nbsp;&nbsp; } else if (uri=~&quot;^sip:[0-9]+@.*&quot;) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rewritehost(&quot;<a href="http://10.10.10.2">10.10.10.2</a>&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; t_relay();<br>
&nbsp;&nbsp;&nbsp; # Anything else is forbidden<br>
&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sl_send_reply(&quot;403&quot;, &quot;Call cannot be served here&quot;);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; };<br>
<br>
################################################################<br>
<br>
<br><br><div><span class="gmail_quote">On 10/28/05, <b class="gmail_sendername">Daniel Liu</b> &lt;<a href="mailto:daniel.liu@cu88.com">daniel.liu@cu88.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I think it is better to use a B2BUA for prepaid.<br><br>Asterisk can do this job. But I don't know the stability.<br><br>regards,<br>Daniel<br><br>Ashutosh kumar write:<br><br>&gt; Hi,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK, but how do you monitor the call while it is in progress?
<br>&gt;<br>&gt; To disconnect the call, I am planning to use the session timers set in the<br>&gt; header prior to intitiating the call, which will offload the task of<br>&gt; montoring the call by SER, and disconnection-on-zero-credit will be handled
<br>&gt; by our pstn gw. Am I wrong somewhere?<br>&gt;<br>&gt;<br>&gt; Regards,<br>&gt; Ashutosh<br>&gt;<br>&gt; -----Original Message-----<br>&gt; From: Ryan Pagquil [mailto:<a href="mailto:rpagquil@philonline.com">rpagquil@philonline.com
</a>]<br>&gt; Sent: Friday, October 28, 2005 3:33 PM<br>&gt; To: Ashutosh kumar<br>&gt; Cc: <a href="mailto:serusers@lists.iptel.org">serusers@lists.iptel.org</a><br>&gt; Subject: Re: [Serusers] Prepaid approach<br>&gt;<br>&gt; Hi,<br>
&gt; We are a bit similar in implementing prepaid service. Our users are<br>&gt; normally can call other users in our domain, and they are initially not<br>&gt; member of the pstn group in the ser.grp table. once they bought credits
<br>&gt; they will be put in the &quot;pstn&quot; group and can call pstn destinations. But<br>&gt; when they run out of credit, we sends a bye message using sipsak on both<br>&gt; PSTN gateway and the user's IP phone.<br>
&gt;<br>&gt; Regards,<br>&gt; Ryan<br>&gt;<br>&gt; Ashutosh kumar wrote:<br>&gt;<br>&gt;&gt; Hi,<br>&gt;&gt;<br>&gt;&gt; While trying to implement prepaid solution using SER, I decided to go<br>&gt;&gt; be a intuitive approach which is as follows.
<br>&gt;&gt;<br>&gt;&gt; -When the user registers, he is placed in a "voip?groups table of ser<br>&gt;&gt; (or radius server database), i.e he can make only pc-to-pc calls.<br>&gt;&gt;<br>&gt;&gt; - Later , or otherwise, when the user registers, he is shifted to a
<br>&gt;&gt; "pstn?groups table of ser , i.e noew he can make only pc-to-pstn calls.<br>&gt;&gt;<br>&gt;&gt; -Henceforth, whenever the user logins and tries to make pstn call, the<br>&gt;&gt; call is approved only if group_radius_is_user_in(username) succeds,
<br>&gt;&gt; else the call rejected by SER.<br>&gt;&gt;<br>&gt;&gt; -To restrict the user from making pstn calls when his credits are zero<br>&gt;&gt; (or beyond a threshold) , a dedicated cron job is scripted to move<br>
&gt;&gt; users from "pstn?group to "voip?when their<br>&gt;&gt;<br>&gt;&gt; account_cerdit=0.<br>&gt;&gt;<br>&gt;&gt; Am I right in using this approach, or are there any foreseeable<br>&gt;&gt; problems which I might be overlooking.
<br>&gt;&gt;<br>&gt;&gt; Thanks.<br>&gt;&gt;<br>&gt;&gt; Regards,<br>&gt;&gt;<br>&gt;&gt; Ashutosh Kumar<br>&gt;&gt;<br>&gt;&gt;------------------------------------------------------------------------<br>&gt;&gt;<br>&gt;&gt;_______________________________________________
<br>&gt;&gt;Serusers mailing list<br>&gt;&gt;<a href="mailto:Serusers@iptel.org">serusers@lists.iptel.org</a><br>&gt;&gt;<a href="http://lists.iptel.org/mailman/listinfo/serusers">http://lists.iptel.org/mailman/listinfo/serusers</a>
<br>&gt;&gt;<br>&gt;&gt;<br>&gt;<br>&gt;<br>&gt; --<br>&gt; Ryan Pagquil<br>&gt; Infodyne Inc. - PhilOnline.com<br>&gt; 3603 Antel Global Corporate Center<br>&gt; Doña Julia Vargas Ave.<br>&gt; Ortigas Center Pasig City<br>
&gt; Tel: 687-0715<br>&gt; Web: <a href="http://www.philonline.com">www.philonline.com</a><br>&gt;<br>&gt;<br>&gt;<br>&gt; _______________________________________________<br>&gt; Serusers mailing list<br>&gt; <a href="mailto:serusers@lists.iptel.org">
serusers@lists.iptel.org</a><br>&gt; <a href="http://lists.iptel.org/mailman/listinfo/serusers">http://lists.iptel.org/mailman/listinfo/serusers</a><br><br><br>_______________________________________________<br>Serusers mailing list
<br><a href="mailto:serusers@lists.iptel.org">serusers@lists.iptel.org</a><br><a href="http://lists.iptel.org/mailman/listinfo/serusers">http://lists.iptel.org/mailman/listinfo/serusers</a><br><br><br></blockquote></div><br><br clear="all">
<br>-- <br><br>rrgv