[NeoStats-Devel] [Commits] r2516 - in trunk: . src src/protocol

[email protected]
Newsgroups gmane.comp.neostats.devel
Message-ID <[email protected]>
Author: Mark
Date: Sat Apr 16 05:36:43 2005
New Revision: 2516

Modified:
   trunk/ChangeLog
   trunk/src/ircd.c
   trunk/src/modes.c
   trunk/src/protocol/bahamut14.c
   trunk/src/protocol/bahamut18.c
   trunk/src/protocol/client.c
   trunk/src/protocol/hybrid7.c
   trunk/src/protocol/ircup10.c
   trunk/src/protocol/plexus.c
   trunk/src/protocol/ultimate2.c
   trunk/src/protocol/ultimate3.c
   trunk/src/protocol/unreal31.c
   trunk/src/protocol/unreal32.c
Log:
Add default modes to ircd layer to further reduce overhead of protocol modules

Modified: trunk/ChangeLog
==============================================================================
--- trunk/ChangeLog	(original)
+++ trunk/ChangeLog	Sat Apr 16 05:36:43 2005
@@ -4,6 +4,8 @@
 Fish (F), Mark (M), DeadNotBuried (D)
 ===============================================================================
 * NeoStats * Version 3.0.a3-dev
+ - Add default modes to ircd layer to further reduce overhead of protocol 
+   modules. (M)
  - Add support for SVSJOIN and SVSPART. (M)
  - LEVEL command now resets user level so that users can cause NeoStats to
    recheck their access rights after any settings changes. (M).

Modified: trunk/src/ircd.c
==============================================================================
--- trunk/src/ircd.c	(original)
+++ trunk/src/ircd.c	Sat Apr 16 05:36:43 2005
@@ -278,20 +278,8 @@
 	mode_init *user_smodes;
 
 	chan_umodes = ns_dlsym( protocol_module_handle, "chan_umodes" );
-	if( !chan_umodes ) {
-		IrcdError( "channel umode table" );
-		return NS_FAILURE;	
-	}
 	chan_modes  = ns_dlsym( protocol_module_handle, "chan_modes" );
-	if( !chan_modes ) {
-		IrcdError( "channel mode table" );
-		return NS_FAILURE;	
-	}
 	user_umodes = ns_dlsym( protocol_module_handle, "user_umodes" );
-	if( !user_umodes ) {
-		IrcdError( "user mode table" );
-		return NS_FAILURE;	
-	}
 	/* Not required */
 	user_smodes = ns_dlsym( protocol_module_handle, "user_smodes" );
 	if( user_smodes ) {

Modified: trunk/src/modes.c
==============================================================================
--- trunk/src/modes.c	(original)
+++ trunk/src/modes.c	Sat Apr 16 05:36:43 2005
@@ -52,6 +52,31 @@
 static char ircd_umode_char_map[32];
 static char ircd_smode_char_map[32];
 
+static mode_init chan_umodes_default[] = {
+	{'v', CUMODE_VOICE, 0, '+'},
+	{'o', CUMODE_CHANOP, 0, '@'},
+	{0, 0, 0},
+};
+
+static mode_init chan_modes_default[] = {
+	{'l', CMODE_LIMIT, MODEPARAM},
+	{'k', CMODE_KEY, MODEPARAM},
+	{'b', CMODE_BAN, MODEPARAM},
+ 	{'p', CMODE_PRIVATE, 0},
+	{'s', CMODE_SECRET, 0},
+	{'m', CMODE_MODERATED, 0},
+	{'t', CMODE_TOPICLIMIT, 0},
+	{'n', CMODE_NOPRIVMSGS, 0},
+	{'i', CMODE_INVITEONLY, 0},
+	{0, 0},
+};
+
+static mode_init user_umodes_default[] = {
+	{'o', UMODE_OPER},
+	{'i', UMODE_INVISIBLE},
+	{0, 0},
+};
+
 typedef struct ModeDesc {
 	unsigned int mask;
 	const char *desc;
@@ -135,14 +160,20 @@
 	/* build cmode lookup table */
 	os_memset(&ircd_cmodes, 0, sizeof(ircd_cmodes));
 	dlog(DEBUG4, "Build channel mode table...");
-	ircd_supported_cmodes = BuildModeTable( ircd_cmodes, chan_modes, 0 );
+	ircd_supported_cmodes |= BuildModeTable( ircd_cmodes, chan_modes_default, 0 );
+	if( chan_modes )
+		ircd_supported_cmodes |= BuildModeTable( ircd_cmodes, chan_modes, 0 );
 	/* build cumode lookup table */
 	dlog(DEBUG4, "Build channel user mode table...");
-	ircd_supported_cumodes = BuildModeTable( ircd_cmodes, chan_umodes, NICKPARAM );
+	ircd_supported_cumodes |= BuildModeTable( ircd_cmodes, chan_umodes_default, NICKPARAM );
+	if( chan_umodes )
+		ircd_supported_cumodes |= BuildModeTable( ircd_cmodes, chan_umodes, NICKPARAM );
 	/* build umode lookup table */
 	os_memset(&ircd_umodes, 0, sizeof(ircd_umodes));
 	dlog(DEBUG4, "Build user mode table...");
-	ircd_supported_umodes = BuildModeTable( ircd_umodes, user_umodes, 0 );
+	ircd_supported_umodes |= BuildModeTable( ircd_umodes, user_umodes_default, 0 );
+	if( user_umodes )
+		ircd_supported_umodes |= BuildModeTable( ircd_umodes, user_umodes, 0 );
 	/* build smode lookup table */
 	if (user_smodes) {
 		os_memset(&ircd_smodes, 0, sizeof(ircd_smodes));

Modified: trunk/src/protocol/bahamut14.c
==============================================================================
--- trunk/src/protocol/bahamut14.c	(original)
+++ trunk/src/protocol/bahamut14.c	Sat Apr 16 05:36:43 2005
@@ -91,21 +91,10 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
- 	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'k', CMODE_KEY, MODEPARAM},
-	{'b', CMODE_BAN, MODEPARAM},
-	{'l', CMODE_LIMIT, MODEPARAM},
 	{'r', CMODE_RGSTR, 0},
 	{'R', CMODE_RGSTRONLY, 0},
 	{'x', CMODE_NOCOLOR, 0},
@@ -118,10 +107,8 @@
 mode_init user_umodes[] = {
 	{'a', UMODE_SADMIN},
 	{'A', UMODE_ADMIN},
-	{'o', UMODE_OPER},
-	{'o', UMODE_LOCOP},
+	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'s', UMODE_SERVNOTICE},
 	{'c', UMODE_CLIENT},

Modified: trunk/src/protocol/bahamut18.c
==============================================================================
--- trunk/src/protocol/bahamut18.c	(original)
+++ trunk/src/protocol/bahamut18.c	Sat Apr 16 05:36:43 2005
@@ -89,21 +89,10 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
- 	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'k', CMODE_KEY, MODEPARAM},
-	{'b', CMODE_BAN, MODEPARAM},
-	{'l', CMODE_LIMIT, MODEPARAM},
 	{'r', CMODE_RGSTR, 0},
 	{'R', CMODE_RGSTRONLY, 0},
 	{'x', CMODE_NOCOLOR, 0},
@@ -116,10 +105,8 @@
 mode_init user_umodes[] = {
 	{'a', UMODE_SADMIN},
 	{'A', UMODE_ADMIN},
-	{'o', UMODE_OPER},
-	{'o', UMODE_LOCOP},
+	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'s', UMODE_SERVNOTICE},
 	{'c', UMODE_CLIENT},

Modified: trunk/src/protocol/client.c
==============================================================================
--- trunk/src/protocol/client.c	(original)
+++ trunk/src/protocol/client.c	Sat Apr 16 05:36:43 2005
@@ -82,23 +82,13 @@
 };
 
 mode_init chan_umodes[] = {
-	{'v', CUMODE_VOICE, 0, '+'},
 	{'h', CUMODE_HALFOP, 0, '%'},
-	{'o', CUMODE_CHANOP, 0, '@'},
 	{'a', CUMODE_CHANPROT, 0, '*'},
 	{'q', CUMODE_CHANOWNER, 0, '~'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'k', CMODE_KEY, MODEPARAM},
 	{'r', CMODE_RGSTR, 0},
 	{'R', CMODE_RGSTRONLY, 0},
 	{'c', CMODE_NOCOLOR, 0},
@@ -106,7 +96,6 @@
 	{'A', CMODE_ADMONLY, 0},
 	{'L', CMODE_LINK, MODEPARAM},
 	{'Q', CMODE_NOKICKS, 0},
-	{'b', CMODE_BAN, MODEPARAM},
 	{'S', CMODE_STRIP, 0},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'K', CMODE_NOKNOCK, 0},
@@ -127,10 +116,8 @@
 	{'a', UMODE_SADMIN},
 	{'A', UMODE_ADMIN},
 	{'C', UMODE_COADMIN},
-	{'o', UMODE_OPER},
 	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'g', UMODE_FAILOP},
 	{'h', UMODE_HELPOP},

Modified: trunk/src/protocol/hybrid7.c
==============================================================================
--- trunk/src/protocol/hybrid7.c	(original)
+++ trunk/src/protocol/hybrid7.c	Sat Apr 16 05:36:43 2005
@@ -88,38 +88,25 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{'h', CUMODE_HALFOP, 0, '%'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'b', CMODE_BAN, MODEPARAM},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'I', CMODE_INVEX, MODEPARAM},
 	{'a', CMODE_HIDEOPS, 0},
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'k', CMODE_KEY, MODEPARAM},
 	{0, 0, 0},
 };
 
 mode_init user_umodes[] = {
 	{'d', UMODE_DEBUG},
 	{'a', UMODE_ADMIN},
-	{'o', UMODE_OPER},
 	{'l', UMODE_LOCOP},
 	{'b', UMODE_BOTS},
 	{'c', UMODE_CLIENT},
 	{'f', UMODE_FULL},
 	{'g', UMODE_CALLERID},
-	{'i', UMODE_INVISIBLE},
 	{'k', UMODE_SKILL},
 	{'n', UMODE_NCHANGE},
 	{'r', UMODE_REJ},

Modified: trunk/src/protocol/ircup10.c
==============================================================================
--- trunk/src/protocol/ircup10.c	(original)
+++ trunk/src/protocol/ircup10.c	Sat Apr 16 05:36:43 2005
@@ -112,21 +112,10 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'s', CMODE_SECRET, 0},
-	{'p', CMODE_PRIVATE, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'l', CMODE_LIMIT, 1},
-	{'k', CMODE_KEY, 1},
-	{'b', CMODE_BAN, 1},
 	/*{'b', CMODE_SENDTS, 1},*/
 #if ( defined NEFARIOUS ) || (defined ASUKA )
 	{'c', CMODE_NOCOLOR, 0},
@@ -152,10 +141,8 @@
 };
 
 mode_init user_umodes[] = {
-	{'o', UMODE_OPER},
 	{'O', UMODE_LOCOP},
 	{'g', UMODE_DEBUG},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'s', UMODE_SERVNOTICE},
 	{'d', UMODE_DEAF},

Modified: trunk/src/protocol/plexus.c
==============================================================================
--- trunk/src/protocol/plexus.c	(original)
+++ trunk/src/protocol/plexus.c	Sat Apr 16 05:36:43 2005
@@ -88,38 +88,25 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{'h', CUMODE_HALFOP, 0, '%'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'b', CMODE_BAN, MODEPARAM},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'I', CMODE_INVEX, MODEPARAM},
 	{'a', CMODE_HIDEOPS, 0},
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'k', CMODE_KEY, MODEPARAM},
 	{0, 0, 0},
 };
 
 mode_init user_umodes[] = {
 	{'d', UMODE_DEBUG},
 	{'a', UMODE_ADMIN},
-	{'o', UMODE_OPER},
 	{'l', UMODE_LOCOP},
 	{'b', UMODE_BOTS},
 	{'c', UMODE_CLIENT},
 	{'f', UMODE_FULL},
 	{'g', UMODE_CALLERID},
-	{'i', UMODE_INVISIBLE},
 	{'k', UMODE_SKILL},
 	{'n', UMODE_NCHANGE},
 	{'r', UMODE_REJ},

Modified: trunk/src/protocol/ultimate2.c
==============================================================================
--- trunk/src/protocol/ultimate2.c	(original)
+++ trunk/src/protocol/ultimate2.c	Sat Apr 16 05:36:43 2005
@@ -95,26 +95,15 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
 	{'h', CUMODE_HALFOP, 0, '%'},
 	{'a', CUMODE_CHANADMIN, 0, '!'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'b', CMODE_BAN, MODEPARAM},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'f', CMODE_FLOODLIMIT, MODEPARAM},
-	{'i', CMODE_INVITEONLY, 0},
-	{'k', CMODE_KEY, MODEPARAM},
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'m', CMODE_MODERATED, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'p', CMODE_PRIVATE, 0},
 	{'r', CMODE_RGSTR, 0},
-	{'s', CMODE_SECRET, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
 	{'x', CMODE_NOCOLOR, 0},
 	{'A', CMODE_ADMONLY, 0},
 	{'I', CMODE_NOINVITE, 0},
@@ -135,11 +124,9 @@
 	{'Z', UMODE_IRCADMIN},
 	{'z', UMODE_ADMIN},
 	{'i', UMODE_ALTADMIN},
-	{'o', UMODE_OPER},
 	{'p', UMODE_SUPER},
 	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'g', UMODE_FAILOP},
 	{'h', UMODE_HELPOP},

Modified: trunk/src/protocol/ultimate3.c
==============================================================================
--- trunk/src/protocol/ultimate3.c	(original)
+++ trunk/src/protocol/ultimate3.c	Sat Apr 16 05:36:43 2005
@@ -103,26 +103,15 @@
 };
 
 mode_init chan_umodes[] = {
-	{'o', CUMODE_CHANOP, 0, '@'},
 	{'h', CUMODE_HALFOP, 0, '%'},
 	{'a', CUMODE_CHANADMIN, 0, '!'},
-	{'v', CUMODE_VOICE, 0, '+'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'b', CMODE_BAN, MODEPARAM},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'f', CMODE_FLOODLIMIT, MODEPARAM},
-	{'i', CMODE_INVITEONLY, 0},
-	{'k', CMODE_KEY, MODEPARAM},
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'m', CMODE_MODERATED, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'p', CMODE_PRIVATE, 0},
 	{'r', CMODE_RGSTR, 0},
-	{'s', CMODE_SECRET, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
 	{'x', CMODE_NOCOLOR, 0},
 	{'A', CMODE_ADMONLY, 0},
 	{'I', CMODE_NOINVITE, 0},
@@ -139,10 +128,8 @@
 	{'S', UMODE_SERVICES},
 	{'P', UMODE_SADMIN},
 	{'a', UMODE_SERVICESOPER},
-	{'o', UMODE_OPER},
 	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'s', UMODE_SERVNOTICE},
 	{'c', UMODE_CLIENT},

Modified: trunk/src/protocol/unreal31.c
==============================================================================
--- trunk/src/protocol/unreal31.c	(original)
+++ trunk/src/protocol/unreal31.c	Sat Apr 16 05:36:43 2005
@@ -107,23 +107,13 @@
 };
 
 mode_init chan_umodes[] = {
-	{'v', CUMODE_VOICE, 0, '+'},
 	{'h', CUMODE_HALFOP, 0, '%'},
-	{'o', CUMODE_CHANOP, 0, '@'},
 	{'a', CUMODE_CHANPROT, 0, '*'},
 	{'q', CUMODE_CHANOWNER, 0, '~'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'k', CMODE_KEY, MODEPARAM},
 	{'r', CMODE_RGSTR, 0},
 	{'R', CMODE_RGSTRONLY, 0},
 	{'c', CMODE_NOCOLOR, 0},
@@ -131,7 +121,6 @@
 	{'A', CMODE_ADMONLY, 0},
 	{'L', CMODE_LINK, MODEPARAM},
 	{'Q', CMODE_NOKICKS, 0},
-	{'b', CMODE_BAN, MODEPARAM},
 	{'S', CMODE_STRIP, 0},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'K', CMODE_NOKNOCK, 0},
@@ -152,10 +141,8 @@
 	{'a', UMODE_SADMIN},
 	{'A', UMODE_ADMIN},
 	{'C', UMODE_COADMIN},
-	{'o', UMODE_OPER},
 	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'g', UMODE_FAILOP},
 	{'h', UMODE_HELPOP},

Modified: trunk/src/protocol/unreal32.c
==============================================================================
--- trunk/src/protocol/unreal32.c	(original)
+++ trunk/src/protocol/unreal32.c	Sat Apr 16 05:36:43 2005
@@ -113,23 +113,13 @@
 };
 
 mode_init chan_umodes[] = {
-	{'v', CUMODE_VOICE, 0, '+'},
 	{'h', CUMODE_HALFOP, 0, '%'},
-	{'o', CUMODE_CHANOP, 0, '@'},
 	{'a', CUMODE_CHANPROT, 0, '*'},
 	{'q', CUMODE_CHANOWNER, 0, '~'},
 	{0, 0, 0},
 };
 
 mode_init chan_modes[] = {
-	{'l', CMODE_LIMIT, MODEPARAM},
-	{'p', CMODE_PRIVATE, 0},
-	{'s', CMODE_SECRET, 0},
-	{'m', CMODE_MODERATED, 0},
-	{'n', CMODE_NOPRIVMSGS, 0},
-	{'t', CMODE_TOPICLIMIT, 0},
-	{'i', CMODE_INVITEONLY, 0},
-	{'k', CMODE_KEY, MODEPARAM},
 	{'r', CMODE_RGSTR, 0},
 	{'R', CMODE_RGSTRONLY, 0},
 	{'c', CMODE_NOCOLOR, 0},
@@ -137,7 +127,6 @@
 	{'A', CMODE_ADMONLY, 0},
 	{'L', CMODE_LINK, MODEPARAM},
 	{'Q', CMODE_NOKICKS, 0},
-	{'b', CMODE_BAN, MODEPARAM},
 	{'S', CMODE_STRIP, 0},
 	{'e', CMODE_EXCEPT, MODEPARAM},
 	{'K', CMODE_NOKNOCK, 0},
@@ -158,10 +147,8 @@
 	{'a', UMODE_SADMIN},
 	{'A', UMODE_ADMIN},
 	{'C', UMODE_COADMIN},
-	{'o', UMODE_OPER},
 	{'O', UMODE_LOCOP},
 	{'r', UMODE_REGNICK},
-	{'i', UMODE_INVISIBLE},
 	{'w', UMODE_WALLOP},
 	{'g', UMODE_FAILOP},
 	{'h', UMODE_HELPOP},
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.