aboutsummaryrefslogtreecommitdiff
path: root/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp164
-rw-r--r--cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.11&content-type=text/x-cvsweb-markup&sortby=author/index.html508
-rw-r--r--cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.3&content-type=text/x-cvsweb-markup/index.html164
-rw-r--r--cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?sortby=author237
4 files changed, 1073 insertions, 0 deletions
diff --git a/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp
new file mode 100644
index 00000000..2130257b
--- /dev/null
+++ b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp
@@ -0,0 +1,164 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : cvs</TITLE>
+ <META name="keywords" content="freesoftware,nel,newt,snowballs,richard stallman,GNU,Multi-User Online World">
+
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-free.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Free Software">Free software</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/cvs/"><img src="http://www.nevrax.org/inc/img/t_cvs.gif" ALT="cvs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+
+<!-- title -->
+<table width=100%><tr><td align=left><b> <a href="/cvs/cvsweb.cgi/">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/">code</a> / <a href="/cvs/cvsweb.cgi/code/nelns/">nelns</a> / <a href="/cvs/cvsweb.cgi/code/nelns/login_service/">login_service</a> / connection_client.cpp</b></td><td align=right><b></b></td></TR></TABLE>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>connection_client.cpp</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<p>Default branch: MAIN<BR>
+<HR size=1 NOSHADE><P><a NAME="rev1.4"></a><a NAME="HEAD"></a><a NAME="MAIN"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.4&amp;content-type=text/x-cvsweb-markup"><b>1.4</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.4&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.4&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.4">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.4">[select for diffs]</A>
+, <i>Mon Jul 2 14:27:43 2001 UTC</i> (2 weeks, 6 days ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>CVS Tags: <b><A HREF="connection_client.cpp?only_with_tag=HEAD">HEAD</A>
+</b><BR>Changes since <b>1.3: +7 -4
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.3&amp;r2=1.4">1.3</A>
+<PRE>
+BUGFIX: linux doesn't receive the message just before the disconnection
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.3"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.3&amp;content-type=text/x-cvsweb-markup"><b>1.3</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.3&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.3&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.3">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.3">[select for diffs]</A>
+, <i>Fri May 18 16:51:01 2001 UTC</i> (2 months ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.2: +6 -6
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.2&amp;r2=1.3">1.2</A>
+<PRE>
+MODIFIED: work with new service
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.2"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.2&amp;content-type=text/x-cvsweb-markup"><b>1.2</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.2&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.2&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.2">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.2">[select for diffs]</A>
+, <i>Thu May 3 13:19:13 2001 UTC</i> (2 months, 2 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.1: +8 -2
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.1&amp;r2=1.2">1.1</A>
+<PRE>
+BUGFIX: now compile on linux
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.1"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.1&amp;content-type=text/x-cvsweb-markup"><b>1.1</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.1&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.1&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.1">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.1">[select for diffs]</A>
+, <i>Wed May 2 12:36:39 2001 UTC</i> (2 months, 2 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Diff<PRE>
+ADD: new version of the network system (in NeL and NeLns)
+</PRE>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Request Diffs</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<P>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff" NAME="diff_select">
+Diffs between
+<SELECT NAME="r1">
+<OPTION VALUE="text" SELECTED>Use Text Field
+<OPTION VALUE="1:MAIN">MAIN
+<OPTION VALUE="1.4:HEAD">HEAD
+</SELECT>
+<INPUT TYPE="TEXT" SIZE="12" NAME="tr1" VALUE="1.1" onChange='document.diff_select.r1.selectedIndex=0'>
+ and
+<SELECT NAME="r2">
+<OPTION VALUE="text" SELECTED>Use Text Field
+<OPTION VALUE="1:MAIN">MAIN
+<OPTION VALUE="1.4:HEAD">HEAD
+</SELECT>
+<INPUT TYPE="TEXT" SIZE="12" NAME="tr2" VALUE="1.4" onChange='docuement.diff_select.r2.selectedIndex=0'>
+<BR>Type of Diff should be a&nbsp;<SELECT NAME="f">
+<OPTION VALUE=h SELECTED>Colored Diff<OPTION VALUE=H>Long Colored Diff<OPTION VALUE=u>Unidiff<OPTION VALUE=c>Context Diff<OPTION VALUE=s>Side by Side</SELECT><INPUT TYPE=SUBMIT VALUE=" Get Diffs ">
+</FORM>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Select branch</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<P>
+<A name=branch></A>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp">
+View only Branch:
+<SELECT NAME="only_with_tag" onchange="submit()">
+<OPTION VALUE="">Show all branches
+<OPTION>MAIN
+</SELECT>
+<INPUT TYPE=SUBMIT VALUE=" View Branch ">
+</FORM>
+<A name=logsort></A>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp">
+Sort log by:
+<SELECT NAME="logsort" onchange="submit()">
+<OPTION VALUE=cvs>Not sorted<OPTION VALUE=date SELECTED>Commit date<OPTION VALUE=rev>Revision</SELECT>
+<INPUT TYPE=SUBMIT VALUE=" Sort ">
+</FORM>
+
+<!-- footer -->
+<BR><FONT Size=+5>&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; &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; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML></BODY></HTML>
diff --git a/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.11&content-type=text/x-cvsweb-markup&sortby=author/index.html b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.11&content-type=text/x-cvsweb-markup&sortby=author/index.html
new file mode 100644
index 00000000..19d52d3b
--- /dev/null
+++ b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.11&content-type=text/x-cvsweb-markup&sortby=author/index.html
@@ -0,0 +1,508 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
+<HEAD><style> A { color:black }</style>
+<!-- hennerik CVSweb $Revision: 1.93 $ -->
+<TITLE>code/nelns/login_service/connection_client.cpp - view - 1.11</TITLE></HEAD>
+<BODY BGCOLOR="#eeeeee">
+<table width="100%" border=0 cellspacing=0 cellpadding=1 bgcolor="#aaaaaa"><tr valign=bottom><td><a href="connection_client.cpp?sortby=author"><IMG SRC="http://www.nevrax.org/inc/img/picto-up.gif" ALT="[BACK]" BORDER="0" WIDTH="14" HEIGHT="13"></a> <b>Return to <A HREF="connection_client.cpp?sortby=author">connection_client.cpp</A>
+ CVS log</b> <IMG SRC="http://www.nevrax.org/inc/img/picto-news.gif" ALT="[TXT]" BORDER="0" WIDTH="13" HEIGHT="15"></td><td align=right><IMG SRC="http://www.nevrax.org/inc/img/picto-dir.gif" ALT="[DIR]" BORDER="0" WIDTH="15" HEIGHT="13"> <b>Up to <a href="/cvs/cvsweb.cgi/?sortby=author">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=author">code</a> / <a href="/cvs/cvsweb.cgi/code/nelns/?sortby=author">nelns</a> / <a href="/cvs/cvsweb.cgi/code/nelns/login_service/?sortby=author">login_service</a></b></td></tr></table><HR noshade><table width="100%"><tr><td bgcolor="#ffffff">File: <a href="/cvs/cvsweb.cgi/?sortby=author">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=author">code</a> / <a href="/cvs/cvsweb.cgi/code/nelns/?sortby=author">nelns</a> / <a href="/cvs/cvsweb.cgi/code/nelns/login_service/?sortby=author">login_service</a> / <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?sortby=author">connection_client.cpp</a>&nbsp;(<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.11&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.11','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>)<BR>
+Revision <B>1.11</B>, <i>Mon Mar 25 09:29:24 2002 UTC</i> (4 months ago) by <i>lecroart</i>
+<BR>Branch: <b>MAIN</b>
+<BR>CVS Tags: <b>HEAD</b><BR>Changes since <b>1.10: +3 -3
+ lines</b><PRE>
+CHANGED: use new service functions
+</PRE>
+</td></tr></table><HR noshade><PRE>/** \file login_service.cpp
+ * Login Service (LS)
+ *
+ * $Id: connection_client.cpp,v 1.11 2002/03/25 09:29:24 lecroart Exp $
+ *
+ */
+
+/* Copyright, 2000 Nevrax Ltd.
+ *
+ * This file is part of NEVRAX NeL Network Services.
+ * NEVRAX NeL Network Services is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * NEVRAX NeL Network Services is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NEVRAX NeL Network Services; see the file COPYING. If not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#include &quot;nel/misc/types_nl.h&quot;
+
+#include &lt;stdio.h&gt;
+#include &lt;ctype.h&gt;
+#include &lt;math.h&gt;
+
+#include &lt;vector&gt;
+#include &lt;map&gt;
+
+#include &quot;nel/misc/debug.h&quot;
+#include &quot;nel/misc/config_file.h&quot;
+#include &quot;nel/misc/displayer.h&quot;
+#include &quot;nel/misc/log.h&quot;
+
+#include &quot;nel/net/service.h&quot;
+#include &quot;nel/net/net_manager.h&quot;
+#include &quot;nel/net/login_cookie.h&quot;
+#include &quot;login_service.h&quot;
+
+#define CRYPT_PASSWORD 1
+
+#if defined(NL_OS_UNIX) &amp;&amp; CRYPT_PASSWORD
+extern &quot;C&quot; char *crypt (const char *__key, const char *__salt);
+#endif
+
+using namespace std;
+using namespace NLMISC;
+using namespace NLNET;
+
+
+// These functions enable crypting password, work only on unix
+
+const uint32 EncryptedSize = 13;
+
+// Get a number between 0 and 64, used by cryptPassword
+static uint32 rand64 ()
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;return (uint32) floor(64.0*(double)rand()/((double)RAND_MAX+1.0));
+}
+
+// Crypt a password
+string cryptPassword (const string &amp;password)
+{
+#if defined(NL_OS_UNIX) &amp;&amp; CRYPT_PASSWORD
+ &nbsp; &nbsp; &nbsp; &nbsp;if (CryptPassword)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char Salt[3];
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;static char SaltString[65] = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./&quot;;
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Salt[0] = SaltString[rand64()];
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Salt[1] = SaltString[rand64()];
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Salt[2] = '\0';
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return string (crypt (password.c_str(), Salt));
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return password;
+#else
+ &nbsp; &nbsp; &nbsp; &nbsp;return password;
+#endif
+}
+
+// Check if a password is valid
+bool checkPassword (const string &amp;password, const string &amp;encrypted)
+{
+#if defined(NL_OS_UNIX) &amp;&amp; CRYPT_PASSWORD
+ &nbsp; &nbsp; &nbsp; &nbsp;if (CryptPassword)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char Salt[3];
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (encrypted.size() != EncryptedSize)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nlwarning (&quot;checkPassword(): \&quot;%s\&quot; is not a valid encrypted password&quot;, encrypted.c_str());
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Salt[0] = encrypted[0];
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Salt[1] = encrypted[1];
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Salt[2] = '\0';
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return encrypted == crypt (password.c_str(), Salt);
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return encrypted == password;
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+#else
+ &nbsp; &nbsp; &nbsp; &nbsp;return encrypted == password;
+#endif
+}
+
+sint findUser (string &amp;login)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;for (sint i = 0; i &lt; (sint) Users.size (); i++)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Users[i].Login == login)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return i;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;// user not found
+ &nbsp; &nbsp; &nbsp; &nbsp;return -1;
+}
+
+void addUser (string &amp;login, string &amp;password)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;if (findUser (login) == -1)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Users.push_back (CUser (login, cryptPassword(password)));
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writePlayerDatabase ();
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nlwarning (&quot;user '%s' already exists in the base&quot;, login.c_str ());
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+}
+
+sint userToLog(sint userPos)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;if (userPos == -1) return userPos;
+ &nbsp; &nbsp; &nbsp; &nbsp;else return Users[userPos].Id;
+}
+
+
+bool stringIsStandard(const string &amp;str)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;for (sint i = 0; i &lt; (sint) str.size(); i++)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (!isalnum (str[i])) return false;
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;return true;
+}
+
+bool havePrivilege (string userPriv, string shardPriv)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;if (userPriv == &quot;::&quot;)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return shardPriv == &quot;::&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (shardPriv == &quot;::&quot;)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return true;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return userPriv.find (shardPriv) != string::npos;
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////// CONNECTION TO THE CLIENTS //////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Callback for service unregistration.
+ *
+ * Message expected :
+ * - nothing
+ */
+static void cbClientVerifyLoginPassword (CMessage &amp;msgin, TSockId from, CCallbackNetBase &amp;netbase)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;// reason is empty if everything goes right or contains the reason of the failure
+ &nbsp; &nbsp; &nbsp; &nbsp;string reason = &quot;&quot;;
+
+ &nbsp; &nbsp; &nbsp; &nbsp;//
+ &nbsp; &nbsp; &nbsp; &nbsp;// S03: check the validity of the client login/password and send &quot;VLP&quot; message to client
+ &nbsp; &nbsp; &nbsp; &nbsp;//
+
+ &nbsp; &nbsp; &nbsp; &nbsp;string Login, Password;
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (Login);
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (Password);
+
+ &nbsp; &nbsp; &nbsp; &nbsp;sint userPos = findUser (Login);
+ &nbsp; &nbsp; &nbsp; &nbsp;const CInetAddress &amp;ia = netbase.hostAddress (from);
+
+ &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;***: %3d Login '%s' Ip '%s'&quot;, userToLog(userPos), Login.c_str(), ia.asString().c_str());
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// recv the client version and check it
+
+ &nbsp; &nbsp; &nbsp; &nbsp;uint32 ClientVersion;
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (ClientVersion);
+ &nbsp; &nbsp; &nbsp; &nbsp;if (ClientVersion &lt; ServerVersion || ClientVersion &gt; ServerVersion)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// reject the use, bad version
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (ClientVersion &lt; ServerVersion)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;Your client is out of date. You have to download the last version.&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;Your client is too new compare to the server. You have to get an older version of the client.&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d Bad Version, ClientVersion: %d ServerVersion: %d&quot;, userToLog(userPos), ClientVersion, ServerVersion);
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// recv client hardware info
+
+ &nbsp; &nbsp; &nbsp; &nbsp;string OS, Proc, Mem, Gfx;
+
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (OS);
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (Proc);
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (Mem);
+ &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (Gfx);
+
+ &nbsp; &nbsp; &nbsp; &nbsp;if (!OS.empty()) Output.displayNL (&quot;OS : %3d %s&quot;, userToLog(userPos), OS.c_str());
+ &nbsp; &nbsp; &nbsp; &nbsp;if (!Proc.empty()) Output.displayNL (&quot;PRC: %3d %s&quot;, userToLog(userPos), Proc.c_str());
+ &nbsp; &nbsp; &nbsp; &nbsp;if (!Mem.empty()) Output.displayNL (&quot;MEM: %3d %s&quot;, userToLog(userPos), Mem.c_str());
+ &nbsp; &nbsp; &nbsp; &nbsp;if (!Gfx.empty()) Output.displayNL (&quot;GFX: %3d %s&quot;, userToLog(userPos), Gfx.c_str());
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// check the login &amp; pass
+
+ &nbsp; &nbsp; &nbsp; &nbsp;if (reason.empty() &amp;&amp; !stringIsStandard (Login))
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// reject the new user, bad login format
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;Bad login format, only alphanumeric character&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d Bad Login Format&quot;, userToLog(userPos));
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;if (reason.empty() &amp;&amp; !stringIsStandard (Password))
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// reject the new user, bad password format
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;Bad password format, only alphanumeric character&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d Bad Password Format&quot;, userToLog(userPos));
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;if (reason.empty())
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (userPos == -1)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// unknown user
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (AcceptNewUser)
+ &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;// add the new user
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addUser (Login, Password);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// take the new user entry
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;userPos = findUser (Login);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d New User (new id:%d)&quot;, -1, userToLog(userPos));
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
+ &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;// reject the new user
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;Bad login&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d Bad Login&quot;, userToLog(userPos));
+ &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;else
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// check id the account is active
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (!Users[userPos].Active)
+ &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;reason = &quot;Your account was disactivated&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d Your account was disactivated&quot;, userToLog(userPos));
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if (!checkPassword (Password, Users[userPos].Password))
+ &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;// error reason
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;Bad password&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;---: %3d Bad Password&quot;, userToLog(userPos));
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
+ &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;Output.displayNL (&quot;---: %3d Ok&quot;, userToLog(userPos));
+ &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;if (reason.empty())
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = Users[userPos].Authorize (from, netbase);
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;uint32 nbshard = 0;
+ &nbsp; &nbsp; &nbsp; &nbsp;if (reason.empty())
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// count online shards
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (uint i = 0; i &lt; Shards.size (); i++)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// add it only if the shard is on line and the user can go to this shard
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Shards[i].Online &amp;&amp; havePrivilege(Users[userPos].ShardPrivilege, Shards[i].ShardName))
+ &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;nbshard++;
+ &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;if (nbshard==0)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reason = &quot;No shards available&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;CMessage msgout (netbase.getSIDA (), &quot;VLP&quot;);
+
+ &nbsp; &nbsp; &nbsp; &nbsp;if (reason.empty())
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint8 ok = 1;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (ok);
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// send number of online shard
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (nbshard);
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// send address and name of all online shards
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (uint i = 0; i &lt; Shards.size (); i++)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Shards[i].Online &amp;&amp; havePrivilege (Users[userPos].ShardPrivilege, Shards[i].ShardName))
+ &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;// serial the name of the shard
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string shardname;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;shardname = Shards[i].Name;
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Shards[i].NbPlayers == 0)
+ &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;shardname += &quot; (no users)&quot;;
+ &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;else
+ &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;char num[1024];
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;smprintf(num, 1024, &quot;%d&quot;, Shards[i].NbPlayers);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;shardname += &quot; (&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;shardname += num;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Shards[i].NbPlayers == 1)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;shardname += &quot; user)&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;shardname += &quot; users)&quot;;
+ &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;msgout.serial (shardname);
+ &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;// serial the address of the WS service
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (Shards[i].WSAddr);
+ &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;netbase.send (msgout, from);
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;netbase.authorizeOnly (&quot;CS&quot;, from);
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// put the error message
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint8 ok = 0;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (ok);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (reason);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;netbase.send (msgout, from);
+// FIX: On linux, when we disconnect now, sometime the other side doesnt receive the message sent just before.
+// &nbsp; &nbsp; &nbsp;So it's the other side to disconnect
+// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;netbase.disconnect (from);
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+}
+
+static void cbClientChooseShard (CMessage &amp;msgin, TSockId from, CCallbackNetBase &amp;netbase)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;//
+ &nbsp; &nbsp; &nbsp; &nbsp;// S06: receive &quot;CS&quot; message from client
+ &nbsp; &nbsp; &nbsp; &nbsp;//
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// first find if the user is authorized
+ &nbsp; &nbsp; &nbsp; &nbsp;for (vector&lt;CUser&gt;::iterator it = Users.begin (); it != Users.end (); it++)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((*it).Authorized &amp;&amp; (*it).SockId == from)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// it's ok, so we found the wanted shard
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string WSAddr;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgin.serial (WSAddr);
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (sint32 i = 0; i &lt; (sint32) Shards.size (); i++)
+ &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;if (Shards[i].Online &amp;&amp; Shards[i].WSAddr == WSAddr &amp;&amp; havePrivilege ((*it).ShardPrivilege, Shards[i].ShardName))
+ &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;CMessage msgout (CNetManager::getNetBase(&quot;WSLS&quot;)-&gt;getSIDA (), &quot;CS&quot;);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const CInetAddress &amp;ia = netbase.hostAddress ((*it).SockId);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial ((*it).Cookie);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CNetManager::send(&quot;WSLS&quot;, msgout, Shards[i].SockId);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;beep (1000, 1, 100, 100);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;
+ &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;// the shard is not available, denied the user
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nlwarning(&quot;User try to choose a shard without authorization&quot;);
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CMessage msgout (netbase.getSIDA (), &quot;SCS&quot;);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint8 ok = false;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string reason = &quot;Selected shard is not available&quot;;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (ok);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgout.serial (reason);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;netbase.send (msgout, from);
+// FIX: On linux, when we disconnect now, sometime the other side doesnt receive the message sent just before.
+// &nbsp; &nbsp; &nbsp;So it's the other side to disconnect
+// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;netbase.disconnect (from);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// the user isn t authorized
+ &nbsp; &nbsp; &nbsp; &nbsp;nlwarning(&quot;User try to choose a shard without authorization&quot;);
+ &nbsp; &nbsp; &nbsp; &nbsp;// disconnect him
+ &nbsp; &nbsp; &nbsp; &nbsp;netbase.disconnect (from);
+}
+
+static void cbClientConnection (const string &amp;serviceName, TSockId from, void *arg)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;CCallbackNetBase *cnb = CNetManager::getNetBase(&quot;LS&quot;);
+ &nbsp; &nbsp; &nbsp; &nbsp;const CInetAddress &amp;ia = cnb-&gt;hostAddress (from);
+
+ &nbsp; &nbsp; &nbsp; &nbsp;nldebug(&quot;new client connection: %s&quot;, ia.asString ().c_str ());
+
+ &nbsp; &nbsp; &nbsp; &nbsp;Output.displayNL (&quot;CCC: Connection from %s&quot;, ia.asString ().c_str ());
+
+ &nbsp; &nbsp; &nbsp; &nbsp;if (ia.asString().find (&quot;nevrax&quot;) != string::npos)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// internal connection
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;beep ();
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// external connection
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;beep (1000, 2, 100, 100);
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;cnb-&gt;authorizeOnly (&quot;VLP&quot;, from);
+}
+
+static void cbClientDisconnection (const string &amp;serviceName, TSockId from, void *arg)
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;CCallbackNetBase *cnb = CNetManager::getNetBase(&quot;LS&quot;);
+ &nbsp; &nbsp; &nbsp; &nbsp;const CInetAddress &amp;ia = cnb-&gt;hostAddress (from);
+
+ &nbsp; &nbsp; &nbsp; &nbsp;nldebug(&quot;new client disconnection: %s&quot;, ia.asString ().c_str ());
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// remove the user if necessary
+ &nbsp; &nbsp; &nbsp; &nbsp;for (vector&lt;CUser&gt;::iterator it = Users.begin (); it != Users.end (); it++)
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((*it).SockId == from)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((*it).State == CUser::Awaiting)
+ &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;// the user is disconnected from me because he have to connect to the front end right now, so we wait...
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
+ &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;// prematurated disconnection, clean everything
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;disconnectClient (*it, false, false);
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(*it).SockId = NULL;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+}
+
+
+const TCallbackItem ClientCallbackArray[] =
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;{ &quot;VLP&quot;, cbClientVerifyLoginPassword },
+ &nbsp; &nbsp; &nbsp; &nbsp;{ &quot;CS&quot;, cbClientChooseShard },
+};
+
+// if you add callback in the client side, don't forget to add it here!!!
+static const char *OtherSideAssociations[] =
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;&quot;AA&quot;,
+ &nbsp; &nbsp; &nbsp; &nbsp;&quot;RA&quot;,
+ &nbsp; &nbsp; &nbsp; &nbsp;&quot;RAA&quot;,
+ &nbsp; &nbsp; &nbsp; &nbsp;&quot;VLP&quot;,
+ &nbsp; &nbsp; &nbsp; &nbsp;&quot;SCS&quot;,
+};
+
+void connectionClientInit ()
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;CNetManager::addCallbackArray (&quot;LS&quot;, ClientCallbackArray, sizeof(ClientCallbackArray)/sizeof(ClientCallbackArray[0]));
+ &nbsp; &nbsp; &nbsp; &nbsp;CNetManager::setConnectionCallback (&quot;LS&quot;, cbClientConnection, NULL);
+ &nbsp; &nbsp; &nbsp; &nbsp;CNetManager::setDisconnectionCallback (&quot;LS&quot;, cbClientDisconnection, NULL);
+ &nbsp; &nbsp; &nbsp; &nbsp;CNetManager::getNetBase(&quot;LS&quot;)-&gt;setOtherSideAssociations(OtherSideAssociations, sizeof(OtherSideAssociations)/sizeof(OtherSideAssociations[0]));
+}
+</PRE> \ No newline at end of file
diff --git a/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.3&content-type=text/x-cvsweb-markup/index.html b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.3&content-type=text/x-cvsweb-markup/index.html
new file mode 100644
index 00000000..2130257b
--- /dev/null
+++ b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?rev=1.3&content-type=text/x-cvsweb-markup/index.html
@@ -0,0 +1,164 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : cvs</TITLE>
+ <META name="keywords" content="freesoftware,nel,newt,snowballs,richard stallman,GNU,Multi-User Online World">
+
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-free.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Free Software">Free software</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/cvs/"><img src="http://www.nevrax.org/inc/img/t_cvs.gif" ALT="cvs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+
+<!-- title -->
+<table width=100%><tr><td align=left><b> <a href="/cvs/cvsweb.cgi/">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/">code</a> / <a href="/cvs/cvsweb.cgi/code/nelns/">nelns</a> / <a href="/cvs/cvsweb.cgi/code/nelns/login_service/">login_service</a> / connection_client.cpp</b></td><td align=right><b></b></td></TR></TABLE>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>connection_client.cpp</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<p>Default branch: MAIN<BR>
+<HR size=1 NOSHADE><P><a NAME="rev1.4"></a><a NAME="HEAD"></a><a NAME="MAIN"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.4&amp;content-type=text/x-cvsweb-markup"><b>1.4</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.4&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.4&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.4">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.4">[select for diffs]</A>
+, <i>Mon Jul 2 14:27:43 2001 UTC</i> (2 weeks, 6 days ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>CVS Tags: <b><A HREF="connection_client.cpp?only_with_tag=HEAD">HEAD</A>
+</b><BR>Changes since <b>1.3: +7 -4
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.3&amp;r2=1.4">1.3</A>
+<PRE>
+BUGFIX: linux doesn't receive the message just before the disconnection
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.3"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.3&amp;content-type=text/x-cvsweb-markup"><b>1.3</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.3&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.3&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.3">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.3">[select for diffs]</A>
+, <i>Fri May 18 16:51:01 2001 UTC</i> (2 months ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.2: +6 -6
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.2&amp;r2=1.3">1.2</A>
+<PRE>
+MODIFIED: work with new service
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.2"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.2&amp;content-type=text/x-cvsweb-markup"><b>1.2</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.2&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.2&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.2">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.2">[select for diffs]</A>
+, <i>Thu May 3 13:19:13 2001 UTC</i> (2 months, 2 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.1: +8 -2
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.1&amp;r2=1.2">1.1</A>
+<PRE>
+BUGFIX: now compile on linux
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.1"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.1&amp;content-type=text/x-cvsweb-markup"><b>1.1</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.1&amp;content-type=text/plain" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.1&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.1">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.1">[select for diffs]</A>
+, <i>Wed May 2 12:36:39 2001 UTC</i> (2 months, 2 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Diff<PRE>
+ADD: new version of the network system (in NeL and NeLns)
+</PRE>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Request Diffs</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<P>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff" NAME="diff_select">
+Diffs between
+<SELECT NAME="r1">
+<OPTION VALUE="text" SELECTED>Use Text Field
+<OPTION VALUE="1:MAIN">MAIN
+<OPTION VALUE="1.4:HEAD">HEAD
+</SELECT>
+<INPUT TYPE="TEXT" SIZE="12" NAME="tr1" VALUE="1.1" onChange='document.diff_select.r1.selectedIndex=0'>
+ and
+<SELECT NAME="r2">
+<OPTION VALUE="text" SELECTED>Use Text Field
+<OPTION VALUE="1:MAIN">MAIN
+<OPTION VALUE="1.4:HEAD">HEAD
+</SELECT>
+<INPUT TYPE="TEXT" SIZE="12" NAME="tr2" VALUE="1.4" onChange='docuement.diff_select.r2.selectedIndex=0'>
+<BR>Type of Diff should be a&nbsp;<SELECT NAME="f">
+<OPTION VALUE=h SELECTED>Colored Diff<OPTION VALUE=H>Long Colored Diff<OPTION VALUE=u>Unidiff<OPTION VALUE=c>Context Diff<OPTION VALUE=s>Side by Side</SELECT><INPUT TYPE=SUBMIT VALUE=" Get Diffs ">
+</FORM>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Select branch</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<P>
+<A name=branch></A>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp">
+View only Branch:
+<SELECT NAME="only_with_tag" onchange="submit()">
+<OPTION VALUE="">Show all branches
+<OPTION>MAIN
+</SELECT>
+<INPUT TYPE=SUBMIT VALUE=" View Branch ">
+</FORM>
+<A name=logsort></A>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp">
+Sort log by:
+<SELECT NAME="logsort" onchange="submit()">
+<OPTION VALUE=cvs>Not sorted<OPTION VALUE=date SELECTED>Commit date<OPTION VALUE=rev>Revision</SELECT>
+<INPUT TYPE=SUBMIT VALUE=" Sort ">
+</FORM>
+
+<!-- footer -->
+<BR><FONT Size=+5>&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; &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; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML></BODY></HTML>
diff --git a/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?sortby=author b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?sortby=author
new file mode 100644
index 00000000..3cdf43cb
--- /dev/null
+++ b/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?sortby=author
@@ -0,0 +1,237 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : cvs</TITLE>
+ <META name="keywords" content="freesoftware,nel,newt,snowballs,richard stallman,GNU,Multi-User Online World">
+
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-free.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Free Software">Free software</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/cvs/"><img src="http://www.nevrax.org/inc/img/t_cvs.gif" ALT="cvs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+
+<!-- title -->
+<table width=100%><tr><td align=left><b> <a href="/cvs/cvsweb.cgi/?sortby=author">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=author">code</a> / <a href="/cvs/cvsweb.cgi/code/nelns/?sortby=author">nelns</a> / <a href="/cvs/cvsweb.cgi/code/nelns/login_service/?sortby=author">login_service</a> / connection_client.cpp</b></td><td align=right><b></b></td></TR></TABLE>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>connection_client.cpp</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<p>Default branch: MAIN<BR>
+<HR size=1 NOSHADE><P><a NAME="rev1.11"></a><a NAME="HEAD"></a><a NAME="MAIN"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.11&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.11</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.11&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.11&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.11&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.11&amp;sortby=author">[select for diffs]</A>
+, <i>Mon Mar 25 09:29:24 2002 UTC</i> (4 months ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>CVS Tags: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=HEAD">HEAD</A>
+</b><BR>Changes since <b>1.10: +3 -3
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.10&amp;r2=1.11&amp;sortby=author">1.10</A>
+<PRE>
+CHANGED: use new service functions
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.10"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.10&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.10</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.10&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.10&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.10&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.10&amp;sortby=author">[select for diffs]</A>
+, <i>Mon Mar 4 15:33:15 2002 UTC</i> (4 months, 3 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.9: +12 -5
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.9&amp;r2=1.10&amp;sortby=author">1.9</A>
+<PRE>
+CHANGED: removed the loging_service_database.cfg and now use login_service.udb
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.9"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.9&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.9</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.9&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.9&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.9&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.9&amp;sortby=author">[select for diffs]</A>
+, <i>Mon Mar 4 10:24:54 2002 UTC</i> (4 months, 3 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.8: +11 -4
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.8&amp;r2=1.9&amp;sortby=author">1.8</A>
+<PRE>
+BUGFIX: player was badly removed
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.8"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.8&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.8</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.8&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.8&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.8&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.8&amp;sortby=author">[select for diffs]</A>
+, <i>Wed Jan 23 10:55:13 2002 UTC</i> (6 months ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.7: +19 -6
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.7&amp;r2=1.8&amp;sortby=author">1.7</A>
+<PRE>
+ADDED: beep and displays information
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.7"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.7&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.7</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.7&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.7&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.7&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.7&amp;sortby=author">[select for diffs]</A>
+, <i>Thu Jan 17 10:49:27 2002 UTC</i> (6 months, 1 week ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.6: +3 -1
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.6&amp;r2=1.7&amp;sortby=author">1.6</A>
+<PRE>
+ADDED: beep
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.6"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.6&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.6</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.6&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.6&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.6&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.6&amp;sortby=author">[select for diffs]</A>
+, <i>Mon Jan 14 17:48:05 2002 UTC</i> (6 months, 1 week ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.5: +64 -33
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.5&amp;r2=1.6&amp;sortby=author">1.5</A>
+<PRE>
+ADDED: variables in config file and identification of shard name
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.5"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.5&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.5</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.5&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.5&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.5&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.5&amp;sortby=author">[select for diffs]</A>
+, <i>Thu Sep 20 08:54:47 2001 UTC</i> (10 months ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.4: +2 -5
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.4&amp;r2=1.5&amp;sortby=author">1.4</A>
+<PRE>
+ADDED: more spike error message when authorization failed
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.4"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.4&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.4</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.4&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.4&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.4&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.4&amp;sortby=author">[select for diffs]</A>
+, <i>Mon Jul 2 14:27:43 2001 UTC</i> (12 months, 3 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.3: +7 -4
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.3&amp;r2=1.4&amp;sortby=author">1.3</A>
+<PRE>
+BUGFIX: linux doesn't receive the message just before the disconnection
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.3"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.3&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.3</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.3&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.3&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.3&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.3&amp;sortby=author">[select for diffs]</A>
+, <i>Fri May 18 16:51:01 2001 UTC</i> (14 months, 1 week ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.2: +6 -6
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.2&amp;r2=1.3&amp;sortby=author">1.2</A>
+<PRE>
+MODIFIED: work with new service
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.2"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.2&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.2</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.2&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.2&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.2&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.2&amp;sortby=author">[select for diffs]</A>
+, <i>Thu May 3 13:19:13 2001 UTC</i> (14 months, 3 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Changes since <b>1.1: +8 -2
+ lines</b><BR>Diff to previous <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff?r1=1.1&amp;r2=1.2&amp;sortby=author">1.1</A>
+<PRE>
+BUGFIX: now compile on linux
+</PRE>
+<HR size=1 NOSHADE><P><a NAME="rev1.1"></a>
+ Revision <A HREF="connection_client.cpp?rev=1.1&amp;content-type=text/x-cvsweb-markup&amp;sortby=author"><b>1.1</b></A> / (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.1&amp;content-type=text/plain&amp;sortby=author" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nelns/login_service/connection_client.cpp?rev=1.1&amp;content-type=text/plain','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>) - <a href="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?annotate=1.1&amp;sortby=author">annotate</a> - <A HREF="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp?r1=1.1&amp;sortby=author">[select for diffs]</A>
+, <i>Wed May 2 12:36:39 2001 UTC</i> (14 months, 3 weeks ago) by <i>lecroart</i>
+<BR>Branch: <b><A HREF="connection_client.cpp?sortby=author&amp;only_with_tag=MAIN">MAIN</A>
+</b>
+<BR>Diff<PRE>
+ADD: new version of the network system (in NeL and NeLns)
+</PRE>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Request Diffs</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<P>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp.diff" NAME="diff_select">
+<INPUT TYPE=HIDDEN NAME="sortby" VALUE="author">
+Diffs between
+<SELECT NAME="r1">
+<OPTION VALUE="text" SELECTED>Use Text Field
+<OPTION VALUE="1:MAIN">MAIN
+<OPTION VALUE="1.11:HEAD">HEAD
+</SELECT>
+<INPUT TYPE="TEXT" SIZE="12" NAME="tr1" VALUE="1.1" onChange='document.diff_select.r1.selectedIndex=0'>
+ and
+<SELECT NAME="r2">
+<OPTION VALUE="text" SELECTED>Use Text Field
+<OPTION VALUE="1:MAIN">MAIN
+<OPTION VALUE="1.11:HEAD">HEAD
+</SELECT>
+<INPUT TYPE="TEXT" SIZE="12" NAME="tr2" VALUE="1.11" onChange='docuement.diff_select.r2.selectedIndex=0'>
+<BR>Type of Diff should be a&nbsp;<SELECT NAME="f">
+<OPTION VALUE=h SELECTED>Colored Diff<OPTION VALUE=H>Long Colored Diff<OPTION VALUE=u>Unidiff<OPTION VALUE=c>Context Diff<OPTION VALUE=s>Side by Side</SELECT><INPUT TYPE=SUBMIT VALUE=" Get Diffs ">
+</FORM>
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Select branch</B></TD>
+ <TD ALIGN=RIGHT> </td>
+</tr></table>
+<P>
+<P>
+<A name=branch></A>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp">
+<INPUT TYPE=HIDDEN NAME="sortby" VALUE="author">
+View only Branch:
+<SELECT NAME="only_with_tag" onchange="submit()">
+<OPTION VALUE="">Show all branches
+<OPTION>MAIN
+</SELECT>
+<INPUT TYPE=SUBMIT VALUE=" View Branch ">
+</FORM>
+<A name=logsort></A>
+<FORM METHOD="GET" ACTION="/cvs/cvsweb.cgi/code/nelns/login_service/connection_client.cpp">
+<INPUT TYPE=HIDDEN NAME="sortby" VALUE="author">
+Sort log by:
+<SELECT NAME="logsort" onchange="submit()">
+<OPTION VALUE=cvs>Not sorted<OPTION VALUE=date SELECTED>Commit date<OPTION VALUE=rev>Revision</SELECT>
+<INPUT TYPE=SUBMIT VALUE=" Sort ">
+</FORM>
+
+<!-- footer -->
+<BR><FONT Size=+5>&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; &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; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML></BODY></HTML>