VoIP Mailing List Archives
Mailing list archives for the VoIP community |
|
View previous topic :: View next topic |
Author |
Message |
rob at hillis.dyndns.org Guest
|
Posted: Mon Feb 11, 2008 1:24 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi guys,
I've been working on a little dialplan fragment for roaming extensions,
however the customer wants us to set the MWI indicator for the roaming
extension that has just logged in. We're using MySQL realtime, so I've
figured out that RealTimeUpdate will happily update the realtime
database with the correct mailbox. My problem comes when I need to tell
Asterisk to flush the realtime data for that extension and reload it so
that the cached data is correct. Running the commands "sip prune
realtime peer XXX" followed by "sip show peer XXX load" work fine from
the Asterisk manager interface and correctly update the cached data so
the MWI indicator works fine.
What I want to know is if there is any better method of running manager
API commands from within the dialplan than the horribly ugly
System(asterisk -rx "sip prune realtime peer XXX") It works, but from
my point of view, it's a somewhat nasty hack.
Anyone have any suggestions?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHr+om6uKn5cBSgGQRAn++AJ4sNAHSG3s/FCVYTreBURn7Mt91UACgy26h
UC8Q+27UbbFsL9OnL/FzcOY=
=9gf8
-----END PGP SIGNATURE----- |
|
Back to top |
|
|
rob at hillis.dyndns.org Guest
|
Posted: Tue Feb 12, 2008 4:25 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
If this is the only real alternative, then in this instance I'll stick
with using the System command. Writing an AGI to execute two manager
commands in this case is even greater overkill than using the System
command.
I understand that normally anything that calls multiple manager commands
would usually be something complex enough to justify an AGI. The
exception seems to be when you're dealing with cached realtime data. (is
it just me, or does that sound like a rather odd oxymoron?)
ast guy wrote:
Quote: | why don't you write an AGI which talks to asterisk manager API 5038
| port and executes the asterisk commands. You execute asterisk command
via agi not using system command
Quote: |
-ag
On Feb 11, 2008 11:24 AM, Rob Hillis <rob at hillis.dyndns.org
| <mailto:rob at hillis.dyndns.org>> wrote:
Quote: |
Hi guys,
I've been working on a little dialplan fragment for roaming extensions,
however the customer wants us to set the MWI indicator for the roaming
extension that has just logged in. We're using MySQL realtime, so I've
figured out that RealTimeUpdate will happily update the realtime
database with the correct mailbox. My problem comes when I need to tell
Asterisk to flush the realtime data for that extension and reload it so
that the cached data is correct. Running the commands "sip prune
realtime peer XXX" followed by "sip show peer XXX load" work fine from
the Asterisk manager interface and correctly update the cached data so
the MWI indicator works fine.
What I want to know is if there is any better method of running manager
API commands from within the dialplan than the horribly ugly
System(asterisk -rx "sip prune realtime peer XXX") It works, but from
my point of view, it's a somewhat nasty hack.
Anyone have any suggestions?
|
_______________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users
Quote: | -------------------------
|
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080212/9602f932/attachment.htm |
|
Back to top |
|
|
atis at iq-labs.net Guest
|
Posted: Tue Feb 12, 2008 5:30 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
On 2/12/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
Quote: |
If this is the only real alternative, then in this instance I'll stick with
using the System command. Writing an AGI to execute two manager commands in
this case is even greater overkill than using the System command.
I understand that normally anything that calls multiple manager commands
would usually be something complex enough to justify an AGI. The exception
seems to be when you're dealing with cached realtime data. (is it just me,
or does that sound like a rather odd oxymoron?)
ast guy wrote:
Quote: | why don't you write an AGI which talks to asterisk manager API 5038 port
| and executes the asterisk commands. You execute asterisk command via agi not
using system command
Quote: |
-ag
On Feb 11, 2008 11:24 AM, Rob Hillis <rob at hillis.dyndns.org
| <mailto:rob at hillis.dyndns.org>> wrote:
Hi guys,
I've been working on a little dialplan fragment for roaming extensions,
however the customer wants us to set the MWI indicator for the roaming
extension that has just logged in. We're using MySQL realtime, so I've
figured out that RealTimeUpdate will happily update the realtime
database with the correct mailbox. My problem comes when I need to tell
Asterisk to flush the realtime data for that extension and reload it so
that the cached data is correct. Running the commands "sip prune
realtime peer XXX" followed by "sip show peer XXX load" work fine from
the Asterisk manager interface and correctly update the cached data so
the MWI indicator works fine.
What I want to know is if there is any better method of running manager
API commands from within the dialplan than the horribly ugly
System(asterisk -rx "sip prune realtime peer XXX") It works, but from
my point of view, it's a somewhat nasty hack.
Anyone have any suggestions?
|
You could write dialplan application to do the same in chan_sip. Code
should be very simple, just the processing of one argument and reusing
existing functions. If you'll argument good enough why you need it, i
think it could be included in asterisk.
Regards,
Atis
--
Atis Lezdins
VoIP Developer,
IQ Labs Inc.
atis at iq-labs.net
Skype: atis.lezdins
Cell Phone: +371 28806004
Work phone: +1 800 7502835 |
|
Back to top |
|
|
rob at hillis.dyndns.org Guest
|
Posted: Tue Feb 12, 2008 6:32 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
This /is/ implemented in the Asterisk Dialplan.
What we're doing is to write a custom "roaming extension" application
that (among other things) alters the mailbox that the device looks at to
set the MWI indicator to that of the "roaming" extension. All the
systems we sell have SIP peers stored in a realtime MySQL database.
For example, roaming extension 109 logs on to the device on extension
900. (our client requires the device to always maintain it's own
extension number) As part of the login process, RealTimeUpdate is
called to update the mailbox watched by the device from 900 to 109.
While the update goes through fine, Asterisk itself has already cached
the mailbox number as a result of having rtcachefriends set to "yes" in
sip.conf. Of course, this is required for the MWI indicator to work
properly in the first place.
The point that I'm using the system calls is to flush the cached device
details and reload them from MySQL. I can't see any way of doing this
through RealTimeUpdate or via any other application, so I'm left with
the manager commands to flush the entry, followed by a "sip show XXX
load" to re-cache the details. Works nicely, but it seems a bit ugly to me.
Frankly, I'm surprised that RealTimeUpdate doesn't contain an option to
flush and reload details, which would negate the need to employ other
"hacks" to achieve this.
Atis Lezdins wrote:
Quote: | On 2/12/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
Quote: | If this is the only real alternative, then in this instance I'll stick with
using the System command. Writing an AGI to execute two manager commands in
this case is even greater overkill than using the System command.
I understand that normally anything that calls multiple manager commands
would usually be something complex enough to justify an AGI. The exception
seems to be when you're dealing with cached realtime data. (is it just me,
or does that sound like a rather odd oxymoron?)
ast guy wrote:
Quote: | why don't you write an AGI which talks to asterisk manager API 5038 port
| and executes the asterisk commands. You execute asterisk command via agi not
using system command
Quote: |
-ag
On Feb 11, 2008 11:24 AM, Rob Hillis <rob at hillis.dyndns.org
| <mailto:rob at hillis.dyndns.org>> wrote:
Hi guys,
I've been working on a little dialplan fragment for roaming extensions,
however the customer wants us to set the MWI indicator for the roaming
extension that has just logged in. We're using MySQL realtime, so I've
figured out that RealTimeUpdate will happily update the realtime
database with the correct mailbox. My problem comes when I need to tell
Asterisk to flush the realtime data for that extension and reload it so
that the cached data is correct. Running the commands "sip prune
realtime peer XXX" followed by "sip show peer XXX load" work fine from
the Asterisk manager interface and correctly update the cached data so
the MWI indicator works fine.
What I want to know is if there is any better method of running manager
API commands from within the dialplan than the horribly ugly
System(asterisk -rx "sip prune realtime peer XXX") It works, but from
my point of view, it's a somewhat nasty hack.
Anyone have any suggestions?
|
You could write dialplan application to do the same in chan_sip. Code
should be very simple, just the processing of one argument and reusing
existing functions. If you'll argument good enough why you need it, i
think it could be included in asterisk.
Regards,
Atis
| -------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080212/22f7e5cd/attachment.htm |
|
Back to top |
|
|
atis at iq-labs.net Guest
|
Posted: Tue Feb 12, 2008 7:03 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
On 2/12/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
Quote: |
This is implemented in the Asterisk Dialplan.
What we're doing is to write a custom "roaming extension" application that
(among other things) alters the mailbox that the device looks at to set the
MWI indicator to that of the "roaming" extension. All the systems we sell
have SIP peers stored in a realtime MySQL database.
For example, roaming extension 109 logs on to the device on extension 900.
(our client requires the device to always maintain it's own extension
number) As part of the login process, RealTimeUpdate is called to update
the mailbox watched by the device from 900 to 109. While the update goes
through fine, Asterisk itself has already cached the mailbox number as a
result of having rtcachefriends set to "yes" in sip.conf. Of course, this
is required for the MWI indicator to work properly in the first place.
The point that I'm using the system calls is to flush the cached device
details and reload them from MySQL. I can't see any way of doing this
through RealTimeUpdate or via any other application, so I'm left with the
manager commands to flush the entry, followed by a "sip show XXX load" to
re-cache the details. Works nicely, but it seems a bit ugly to me.
Frankly, I'm surprised that RealTimeUpdate doesn't contain an option to
flush and reload details, which would negate the need to employ other
"hacks" to achieve this.
|
By RealTimeUpdate do you mean func_realtime? It shouldn't care, as
cache is not implemented in realtime level, but higher (chan_sip).
Are you sure you need "sip show XXX load". If you "sip prune" peer
data, it should be re-loaded on next access.
What i was suggesting - to dig into chan_sip and create dialplan
application SipPrune(peer) that would prune the peer directly, by
using corresponding function - sip_prune_peer() in chan_sip.c - that
way you will gain some extra performance, as there's no manager/cli
overhead.
However if you're uncomfortable with C, the app_system shouldn't cause
any troubles
Regards,
Atis
Quote: |
Atis Lezdins wrote:
On 2/12/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
If this is the only real alternative, then in this instance I'll stick with
using the System command. Writing an AGI to execute two manager commands in
this case is even greater overkill than using the System command.
I understand that normally anything that calls multiple manager commands
would usually be something complex enough to justify an AGI. The exception
seems to be when you're dealing with cached realtime data. (is it just me,
or does that sound like a rather odd oxymoron?)
ast guy wrote:
Quote: | why don't you write an AGI which talks to asterisk manager API 5038 port
| and executes the asterisk commands. You execute asterisk command via agi not
using system command
Quote: |
-ag
On Feb 11, 2008 11:24 AM, Rob Hillis <rob at hillis.dyndns.org
| <mailto:rob at hillis.dyndns.org>> wrote:
Hi guys,
I've been working on a little dialplan fragment for roaming extensions,
however the customer wants us to set the MWI indicator for the roaming
extension that has just logged in. We're using MySQL realtime, so I've
figured out that RealTimeUpdate will happily update the realtime
database with the correct mailbox. My problem comes when I need to tell
Asterisk to flush the realtime data for that extension and reload it so
that the cached data is correct. Running the commands "sip prune
realtime peer XXX" followed by "sip show peer XXX load" work fine from
the Asterisk manager interface and correctly update the cached data so
the MWI indicator works fine.
What I want to know is if there is any better method of running manager
API commands from within the dialplan than the horribly ugly
System(asterisk -rx "sip prune realtime peer XXX") It works, but from
my point of view, it's a somewhat nasty hack.
Anyone have any suggestions?
You could write dialplan application to do the same in chan_sip. Code
should be very simple, just the processing of one argument and reusing
existing functions. If you'll argument good enough why you need it, i
think it could be included in asterisk.
Regards,
Atis
_______________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users
|
--
Atis Lezdins
VoIP Developer,
IQ Labs Inc.
atis at iq-labs.net
Skype: atis.lezdins
Cell Phone: +371 28806004
Work phone: +1 800 7502835 |
|
Back to top |
|
|
rob at hillis.dyndns.org Guest
|
Posted: Tue Feb 12, 2008 6:05 pm Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Atis Lezdins wrote:
| By RealTimeUpdate do you mean func_realtime? It shouldn't care, as
| cache is not implemented in realtime level, but higher (chan_sip).
|
| Are you sure you need "sip show XXX load". If you "sip prune" peer
| data, it should be re-loaded on next access.
|
| What i was suggesting - to dig into chan_sip and create dialplan
| application SipPrune(peer) that would prune the peer directly, by
| using corresponding function - sip_prune_peer() in chan_sip.c - that
| way you will gain some extra performance, as there's no manager/cli
| overhead.
|
| However if you're uncomfortable with C, the app_system shouldn't cause
| any troubles
RealTimeUpdate is more likely to correspond to app_realtime rather than
func_realtime.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHsiYn6uKn5cBSgGQRAnLwAJ0WZzDsceOCgiF8UxDnrkpjk/pE/QCgpP4f
/+QVcV5YBEGehE+dz1qsNTE=
=IQXo
-----END PGP SIGNATURE----- |
|
Back to top |
|
|
atis at iq-labs.net Guest
|
Posted: Tue Feb 12, 2008 10:33 pm Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
On 2/13/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
Quote: | -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Atis Lezdins wrote:
| By RealTimeUpdate do you mean func_realtime? It shouldn't care, as
| cache is not implemented in realtime level, but higher (chan_sip).
|
| Are you sure you need "sip show XXX load". If you "sip prune" peer
| data, it should be re-loaded on next access.
|
| What i was suggesting - to dig into chan_sip and create dialplan
| application SipPrune(peer) that would prune the peer directly, by
| using corresponding function - sip_prune_peer() in chan_sip.c - that
| way you will gain some extra performance, as there's no manager/cli
| overhead.
|
| However if you're uncomfortable with C, the app_system shouldn't cause
| any troubles
RealTimeUpdate is more likely to correspond to app_realtime rather than
func_realtime.
|
As to my knowledge - that is obsolete and being removed in 1.6,
func_realtime replaces it. That's why i wondered about name - I just
never happened to use it
Regards,
Atis
--
Atis Lezdins
VoIP Developer,
IQ Labs Inc.
atis at iq-labs.net
Skype: atis.lezdins
Cell Phone: +371 28806004
Work phone: +1 800 7502835 |
|
Back to top |
|
|
atis at iq-labs.net Guest
|
Posted: Wed Feb 13, 2008 1:41 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
On 2/13/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
Quote: |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
If it is being removed in 1.6, I'm a little concerned since there's no
mention of this when you show the application, nor on voip-info.org. What
application/function is it being replaced by?
|
There's an obsolete warning in 1.4.18, but i somehow remember that
it's obsolete already since some 1.4.11
It's func_realtime as i said before. usage shouldn't be much
different, you can replace with:
Set(REALTIME(sip_buddies,name,100,my_field)=foo);
Also, seems that func_realtime will soon support SQL INSERT's and DELETE's
Regards,
Atis
Quote: |
Atis Lezdins wrote:
| On 2/13/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
|> -----BEGIN PGP SIGNED MESSAGE-----
|> Hash: SHA1
|>
|> Atis Lezdins wrote:
|> | By RealTimeUpdate do you mean func_realtime? It shouldn't care, as
|> | cache is not implemented in realtime level, but higher (chan_sip).
|> |
|> | Are you sure you need "sip show XXX load". If you "sip prune" peer
|> | data, it should be re-loaded on next access.
|> |
|> | What i was suggesting - to dig into chan_sip and create dialplan
|> | application SipPrune(peer) that would prune the peer directly, by
|> | using corresponding function - sip_prune_peer() in chan_sip.c - that
|> | way you will gain some extra performance, as there's no manager/cli
|> | overhead.
|> |
|> | However if you're uncomfortable with C, the app_system shouldn't cause
|> | any troubles
|>
|> RealTimeUpdate is more likely to correspond to app_realtime rather than
|> func_realtime.
|
| As to my knowledge - that is obsolete and being removed in 1.6,
| func_realtime replaces it. That's why i wondered about name - I just
| never happened to use it
|
| Regards,
| Atis
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHsnaM6uKn5cBSgGQRAo/TAKDCruPrn2nm2XV/PYbfSuBKA0j5OwCfQ/Ox
QE3SYEmZ01QHUT4ITwmLnT0=
=SKEW
-----END PGP SIGNATURE-----
_______________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users
|
--
Atis Lezdins
VoIP Developer,
IQ Labs Inc.
atis at iq-labs.net
Skype: atis.lezdins
Cell Phone: +371 28806004
Work phone: +1 800 7502835 |
|
Back to top |
|
|
oej at edvina.net Guest
|
Posted: Wed Feb 13, 2008 6:37 am Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
13 feb 2008 kl. 10.27 skrev Rob Hillis:
Quote: | That's why I didn't see anything about the REALTIME function when I
went looking - many of our production systems are still on later
versions of 1.2.
Given that it wasn't made obsolete at the beginning of the 1.4
cycle, I'm hoping Digium reconsider making it obsolete in 1.6 and
schedule it for removal in 1.8. Half a development cycle isn't a
very long time for a warning that a function will be removed.
|
First, it's not "Digium" - it's the Asterisk developer team. There
still is a difference, not all of us are employed by Digium. My work
is mostly funded by myself nowadays, and some by customers that hires
me as a consultant for various Asterisk projects. I tried to get more
general funding to spend more time with Asterisk development, but
failed.
So please rememner that there are a few independent regular Asterisk
developers out there that is not on the Digium payroll and still take
part in decisions about Asterisk.
The way it works is that we decide which functions to deprecate during
the development cycle. So any decisions was made before the 1.4
release and stays for the duration of the 1.4 release. We did not
deprecate anything in 1.4 after the initial release late 2006.
The functionality that was marked as "deprecated" in 1.4 will be
removed in 1.6. In fact, it's propably already removed in the
development code that is the base for the future 1.6.
Over a year is a long time for a warning like this, considering that
1.6 won't be out for a while (we're in beta test cycle) it might even
be 1.5 year warning. That should be more than enough for most people -
I hope. Considering that people don't upgrade quickly, it will
propably be more than that for most users (as you are still on 1.2 )
Just wanted to clarify the process, I have no detailed insight into
the realtime functions.
/O
---
* Olle E. Johansson - oej at edvina.net
* Asterisk Training http://edvina.net/training/ |
|
Back to top |
|
|
oza-4h07 at myamail.com Guest
|
Posted: Thu Feb 14, 2008 11:22 pm Post subject: [asterisk-users] Realtime SIP peers - reloading cached info |
|
|
2008/2/13, Atis Lezdins <atis at iq-labs.net>:
Quote: |
On 2/13/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
Quote: |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
|
Quote: | If it is being removed in 1.6, I'm a little concerned since there's no
mention of this when you show the application, nor on voip-info.org
| . What
Quote: | application/function is it being replaced by?
|
There's an obsolete warning in 1.4.18, but i somehow remember that
it's obsolete already since some 1.4.11
It's func_realtime as i said before. usage shouldn't be much
different, you can replace with:
Set(REALTIME(sip_buddies,name,100,my_field)=foo);
Also, seems that func_realtime will soon support SQL INSERT's and DELETE's
| Do you mean it should be added between today's beta and future GA 1.6 ?
Regards,
Quote: |
Atis
Quote: |
Atis Lezdins wrote:
| On 2/13/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
|> -----BEGIN PGP SIGNED MESSAGE-----
|> Hash: SHA1
|>
|> Atis Lezdins wrote:
|> | By RealTimeUpdate do you mean func_realtime? It shouldn't care, as
|> | cache is not implemented in realtime level, but higher (chan_sip).
|> |
|> | Are you sure you need "sip show XXX load". If you "sip prune" peer
|> | data, it should be re-loaded on next access.
|> |
|> | What i was suggesting - to dig into chan_sip and create dialplan
|> | application SipPrune(peer) that would prune the peer directly, by
|> | using corresponding function - sip_prune_peer() in chan_sip.c -
| that
Quote: | |> | way you will gain some extra performance, as there's no
| manager/cli
Quote: | |> | overhead.
|> |
|> | However if you're uncomfortable with C, the app_system shouldn't
| cause
Quote: | |> | any troubles
|>
|> RealTimeUpdate is more likely to correspond to app_realtime rather
| than
Quote: | |> func_realtime.
|
| As to my knowledge - that is obsolete and being removed in 1.6,
| func_realtime replaces it. That's why i wondered about name - I just
| never happened to use it
|
| Regards,
| Atis
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHsnaM6uKn5cBSgGQRAo/TAKDCruPrn2nm2XV/PYbfSuBKA0j5OwCfQ/Ox
QE3SYEmZ01QHUT4ITwmLnT0=
=SKEW
-----END PGP SIGNATURE-----
|
--
Atis Lezdins
VoIP Developer,
IQ Labs Inc.
atis at iq-labs.net
Skype: atis.lezdins
Cell Phone: +371 28806004
Work phone: +1 800 7502835
_______________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users
| -------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080215/d0294fb3/attachment.htm |
|
Back to top |
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|