Hello community,
here is the log from the commit of package xsp
checked in at Tue Aug 1 17:15:52 CEST 2006.
--------
--- xsp/xsp.changes 2006-04-26 02:22:29.000000000 +0200
+++ xsp/xsp.changes 2006-08-01 02:56:13.000000000 +0200
@@ -1,0 +2,7 @@
+Tue Aug 1 02:53:13 CEST 2006 - wberrier@suse.de
+
+- update to 1.1.16.1
+- better connection handling
+- fixes bugs: 77698,78034,78621
+
+-------------------------------------------------------------------
Old:
----
xsp-1.1.13.7.tar.gz
New:
----
xsp-1.1.16.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xsp.spec ++++++
--- /var/tmp/diff_new_pack.AMJTyD/_old 2006-08-01 17:15:46.000000000 +0200
+++ /var/tmp/diff_new_pack.AMJTyD/_new 2006-08-01 17:15:46.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package xsp (Version 1.1.13.7)
+# spec file for package xsp (Version 1.1.16.1)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -20,8 +20,8 @@
Group: Productivity/Networking/Web/Servers
Autoreqprov: on
Requires: gnome-filesystem
-Version: 1.1.13.7
-Release: 2
+Version: 1.1.16.1
+Release: 1
Summary: Small Web Server Hosting ASP.NET
Source: %{name}-%{version}.tar.gz
#Patch: xsp-libexecdir.patch
@@ -65,6 +65,10 @@
%doc NEWS README
%changelog -n xsp
+* Tue Aug 01 2006 - wberrier@suse.de
+- update to 1.1.16.1
+- better connection handling
+- fixes bugs: 77698,78034,78621
* Wed Apr 26 2006 - wberrier@suse.de
- Security update (remove all the duplicated slashes
and don't do an extra Replace on non-windows.) and minor fix for
++++++ xsp-1.1.13.7.tar.gz -> xsp-1.1.16.1.tar.gz ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/ChangeLog new/xsp-1.1.16.1/ChangeLog
--- old/xsp-1.1.13.7/ChangeLog 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/ChangeLog 2006-07-20 09:47:38.000000000 +0200
@@ -1,3 +1,33 @@
+2006-07-20 Gonzalo Paniagua Javier
+
+ * src/ModMonoApplicationHost.cs: don't prepend the file:// scheme, as
+ it's currently breaking mod-mono-server 2.0.
+
+2006-06-14 Gonzalo Paniagua Javier
+
+ * src/Mono.WebServer/ApplicationServer.cs: when stopping the server,
+ reset the 'started' variable. Fixes bug #78621.
+
+2006-06-01 Gonzalo Paniagua Javier
+
+ * tools/asp_state/asp-state.exe.config:
+ * tools/asp_state/asp-state2.exe.config: use FQDN.
+
+2006-05-10 Gonzalo Paniagua Javier
+
+ * src/server.cs:
+ * src/Mono.WebServer/XSPWorkerRequest.cs:
+ * src/Mono.WebServer/BaseRequestBroker.cs:
+ * src/Mono.WebServer/ApplicationServer.cs:
+ * src/Mono.WebServer/XSPApplicationHost.cs:
+ * src/Mono.WebServer/InitialWorkerRequest.cs:
+ * src/Mono.WebServer/LingeringNetworkStream.cs:
+ * src/Mono.WebServer/IWebSource.cs:
+ * src/ModMonoApplicationHost.cs: accepting a connection and the initial
+ read are now done asynchronously. SocketPool class and that Select are
+ over now and xsp/mod-mono-server behave much better when getting many
+ simultaneous connections.
+
2006-04-25 Gonzalo Paniagua Javier
* src/Mono.WebServer/MonoWorkerRequest.cs: remove all the duplicated
@@ -9,16 +39,32 @@
option (like a port number). Fixes bug #78034. Thanks to Hubert
Fongarnand.
-2006-01-24 Gonzalo Paniagua Javier
+2006-03-05 Robert Jordan
+
+ * tools/dbsessmgr/dbsessmgr.cs:
+ * tools/dbsessmgr/dbsessmgr.exe.config:
+ * man/dbsessmgr.1.in: make SQL statements and parameters
+ provider independent/configurable. Fixes bug #77698.
+
+2006-01-25 Chris Toshok
+
+ * src/Mono.WebServer/Makefile.am: define NET_2_0 in the
+ Mono.WebServer2.dll case.
+
+ * src/Mono.WebServer/XSPWorkerRequest.cs: use ConfigurationManager
+ in 2.0.
- * src/Mono.WebServer/ApplicationServer.cs: revert the workaround. The
- problem is now fixed in the runtime.
+ * src/Makefile.am: define NET_2_0 in the
+ xsp2.exe/mod-moon-server2.exe cases.
-2006-01-23 Gonzalo Paniagua Javier
+ * src/server.cs (AppSettings): use ConfigurationManager in 2.0,
+ and isolate the ifdef here so everywhere else we can just use
+ "AppSettings".
+ (Main): s/ConfigurationSettings.AppSettings/AppSettings/
- * src/Mono.WebServer/ApplicationServer.cs: temporary workaround to
- prevent threadpool exhaustion.
+ * src/ModMonoWorkerRequest.cs: use ConfigurationManager in 2.0
+>>>>>>> .r59119
2005-12-27 Gonzalo Paniagua Javier
* src/ModMonoRequest.cs: use UTF8 instead of the default encoding. Fixes
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/INSTALL new/xsp-1.1.16.1/INSTALL
--- old/xsp-1.1.13.7/INSTALL 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/INSTALL 2006-07-06 00:27:10.000000000 +0200
@@ -11,17 +11,8 @@
If you don't specify --prefix, it will default to /usr/local.
- If ./configure finds 'gmcs' it will assume that you have an
- installation able to compile .NET 2.0 executables. This means that
- you need to make sure you have the required assemblies installed.
- This is done from svn by:
-
- ./configure --profile=net_2_0
- make
- make install
-
- in the mcs/ svn module or configuring the mono tarball/module
- using the '--with-preview=yes' option.
+ If ./configure finds a working 'gmcs' it will automatically build a
+ 2.0 profile version of xsp, named xsp2.
* Running XSP with the bundled tests
------------------------------------
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/configure new/xsp-1.1.16.1/configure
--- old/xsp-1.1.13.7/configure 2006-04-26 02:12:46.000000000 +0200
+++ new/xsp-1.1.16.1/configure 2006-07-20 09:47:53.000000000 +0200
@@ -1620,7 +1620,7 @@
# Define the identity of the package.
PACKAGE=xsp
- VERSION=1.1.13.7
+ VERSION=1.1.16.1
cat >>confdefs.h <<_ACEOF
@@ -2119,7 +2119,7 @@
-if test ! x$CSC = xno; then
+if test x$platform_win32 = xyes; then
XSP_ONLY_TRUE=
XSP_ONLY_FALSE='#'
else
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/configure.in new/xsp-1.1.16.1/configure.in
--- old/xsp-1.1.13.7/configure.in 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/configure.in 2006-07-20 09:47:38.000000000 +0200
@@ -1,7 +1,7 @@
AC_PREREQ(2.57)
AC_INIT(src/server.cs)
AC_CANONICAL_SYSTEM
-AM_INIT_AUTOMAKE(xsp, 1.1.13.7)
+AM_INIT_AUTOMAKE(xsp, 1.1.16.1)
AM_MAINTAINER_MODE
AC_PROG_INSTALL
@@ -49,7 +49,7 @@
AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
AM_CONDITIONAL(NET_2_0, test ! x$GMCS = xno)
-AM_CONDITIONAL(XSP_ONLY, test ! x$CSC = xno)
+AM_CONDITIONAL(XSP_ONLY, test x$platform_win32 = xyes)
echo "$CS compiler: $MCS"
test x$GMCS = xno || echo "$CS 2.0 compiler: $GMCS"
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/man/dbsessmgr.1.in new/xsp-1.1.16.1/man/dbsessmgr.1.in
--- old/xsp-1.1.13.7/man/dbsessmgr.1.in 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/man/dbsessmgr.1.in 2006-07-06 00:27:10.000000000 +0200
@@ -24,8 +24,8 @@
Display session data.
.SH CONFIGURATION
You can choose the assembly and type used to connect to your database
-backend and also set the connection string through the configuration
-file, named dbsessmgr.exe.config.
+backend and also set the connection string and the SQL parameter prefix
+through the configuration file, named dbsessmgr.exe.config.
The configuration shipped by default is:
.nf
@@ -36,6 +36,8 @@
value="Npgsql.NpgsqlConnection"/>
<add key="DBConnectionString"
value="SERVER=127.0.0.1;USER ID=monostate;PASSWORD=monostate;dbname=monostate"/>
+
</appSettings>
.fi
.SH AUTHORS
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Makefile.am new/xsp-1.1.16.1/src/Makefile.am
--- old/xsp-1.1.13.7/src/Makefile.am 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/src/Makefile.am 2006-07-06 00:27:10.000000000 +0200
@@ -26,7 +26,7 @@
#
xsp_references= -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer.dll -r:Mono.Security.dll
-xsp2_references= -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Security.dll
+xsp2_references= -r:System.Web.dll -r:System.Configuration.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Security.dll
if PLATFORM_WIN32
modmono_references= -lib:"$(prefix)/lib" -r:Mono.WebServer/Mono.WebServer.dll \
-r:System.Web.dll -r:Mono.Posix.dll
@@ -34,7 +34,7 @@
-r:System.Web.dll -r:Mono.Posix.dll
else
modmono_references= -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer.dll -r:Mono.Posix.dll
-modmono2_references= -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Posix.dll
+modmono2_references= -r:System.Web.dll -r:System.Configuration.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Posix.dll
endif
xsp_sources = server.cs security.cs
@@ -56,8 +56,8 @@
$(MCS) $(MCSFLAGS) $(modmono_references) /d:MODMONO_SERVER /out:$@ $(modmono_build_sources)
xsp2.exe: $(xsp_build_sources)
- $(GMCS) $(MCSFLAGS) $(xsp2_references) /out:$@ $(xsp_build_sources)
+ $(GMCS) -d:NET_2_0 $(MCSFLAGS) $(xsp2_references) /out:$@ $(xsp_build_sources)
mod-mono-server2.exe: $(modmono_build_sources)
- $(GMCS) $(MCSFLAGS) $(modmono2_references) /d:MODMONO_SERVER /out:$@ $(modmono_build_sources)
+ $(GMCS) -d:NET_2_0 $(MCSFLAGS) $(modmono2_references) /d:MODMONO_SERVER /out:$@ $(modmono_build_sources)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Makefile.in new/xsp-1.1.16.1/src/Makefile.in
--- old/xsp-1.1.13.7/src/Makefile.in 2006-04-26 02:12:43.000000000 +0200
+++ new/xsp-1.1.16.1/src/Makefile.in 2006-07-20 09:47:50.000000000 +0200
@@ -165,12 +165,12 @@
#
xsp_references = -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer.dll -r:Mono.Security.dll
-xsp2_references = -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Security.dll
+xsp2_references = -r:System.Web.dll -r:System.Configuration.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Security.dll
@PLATFORM_WIN32_FALSE@modmono_references = -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer.dll -r:Mono.Posix.dll
@PLATFORM_WIN32_TRUE@modmono_references = -lib:"$(prefix)/lib" -r:Mono.WebServer/Mono.WebServer.dll \
@PLATFORM_WIN32_TRUE@ -r:System.Web.dll -r:Mono.Posix.dll
-@PLATFORM_WIN32_FALSE@modmono2_references = -r:System.Web.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Posix.dll
+@PLATFORM_WIN32_FALSE@modmono2_references = -r:System.Web.dll -r:System.Configuration.dll -r:Mono.WebServer/Mono.WebServer2.dll -r:Mono.Posix.dll
@PLATFORM_WIN32_TRUE@modmono2_references = -lib:"$(prefix)/lib" -r:Mono.WebServer/Mono.WebServer2.dll \
@PLATFORM_WIN32_TRUE@ -r:System.Web.dll -r:Mono.Posix.dll
@@ -580,10 +580,10 @@
$(MCS) $(MCSFLAGS) $(modmono_references) /d:MODMONO_SERVER /out:$@ $(modmono_build_sources)
xsp2.exe: $(xsp_build_sources)
- $(GMCS) $(MCSFLAGS) $(xsp2_references) /out:$@ $(xsp_build_sources)
+ $(GMCS) -d:NET_2_0 $(MCSFLAGS) $(xsp2_references) /out:$@ $(xsp_build_sources)
mod-mono-server2.exe: $(modmono_build_sources)
- $(GMCS) $(MCSFLAGS) $(modmono2_references) /d:MODMONO_SERVER /out:$@ $(modmono_build_sources)
+ $(GMCS) -d:NET_2_0 $(MCSFLAGS) $(modmono2_references) /d:MODMONO_SERVER /out:$@ $(modmono_build_sources)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/ModMonoApplicationHost.cs new/xsp-1.1.16.1/src/ModMonoApplicationHost.cs
--- old/xsp-1.1.13.7/src/ModMonoApplicationHost.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/ModMonoApplicationHost.cs 2006-07-20 09:47:38.000000000 +0200
@@ -39,7 +39,7 @@
// ModMonoWebSource: Provides methods to get objects and types specific
// to mod_mono.
//
- public class ModMonoWebSource: IWebSource, IDisposable
+ public class ModMonoWebSource: WebSource
{
string filename;
bool file_bound;
@@ -94,7 +94,7 @@
return result;
}
- public virtual Socket CreateSocket ()
+ public override Socket CreateSocket ()
{
if (filename == null)
throw new InvalidOperationException ("filename not set");
@@ -106,7 +106,7 @@
conn.Connect (ep);
conn.Close ();
throw new InvalidOperationException ("There's already a server listening on " + filename);
- } catch (SocketException se) {
+ } catch (SocketException) {
}
File.Delete (filename);
}
@@ -117,27 +117,22 @@
return listen_socket;
}
- public IWorker CreateWorker (Socket client, ApplicationServer server)
+ public override Worker CreateWorker (Socket client, ApplicationServer server)
{
return new ModMonoWorker (client, server);
}
- public Type GetApplicationHostType ()
+ public override Type GetApplicationHostType ()
{
return typeof (ModMonoApplicationHost);
}
- public IRequestBroker CreateRequestBroker ()
+ public override IRequestBroker CreateRequestBroker ()
{
return new ModMonoRequestBroker ();
}
- public void Dispose ()
- {
- Dispose (true);
- }
-
- protected virtual void Dispose (bool expl)
+ protected override void Dispose (bool expl)
{
if (filename != null) {
string f = filename;
@@ -209,7 +204,7 @@
// ModMonoWorker: The worker that do the initial processing of mod_mono
// requests.
//
- internal class ModMonoWorker: IWorker
+ internal class ModMonoWorker: Worker
{
ApplicationServer server;
public LingeringNetworkStream Stream;
@@ -226,12 +221,11 @@
int requestId = -1;
ModMonoRequestBroker broker = null;
- public void Run (object state)
+ public override void Run (object state)
{
try {
InnerRun (state);
- } catch (Exception e) {
- //Console.WriteLine ("In ModMonoWorker.Run: {0}", e.Message);
+ } catch (Exception) {
try {
// Closing is enough for mod_mono. the module will return a 50x
Stream.Close ();
@@ -277,10 +271,11 @@
}
- Console.Error.WriteLine ("final_pdir: {0} final_vdir: {1}", final_pdir, final_vdir);
+ //Console.Error.WriteLine ("final_pdir: {0} final_vdir: {1}", final_pdir, final_vdir);
vapp = server.GetApplicationForPath (vhost, port, virt, false);
if (vapp == null) {
- final_pdir = "file://" + final_pdir;
+ // Don't know why this breaks mod-mono-server2.exe, but not mod-mono-server.exe
+ //final_pdir = "file://" + final_pdir;
if (final_vdir [0] != '/')
final_vdir = "/" + final_vdir;
server.AddApplication (vhost, port, final_vdir, final_pdir);
@@ -372,17 +367,17 @@
modRequest.GetAllHeaderValues());
}
- public int Read (byte[] buffer, int position, int size)
+ public override int Read (byte[] buffer, int position, int size)
{
return modRequest.GetClientBlock (buffer, position, size);
}
- public void Write (byte[] buffer, int position, int size)
+ public override void Write (byte[] buffer, int position, int size)
{
modRequest.SendResponseFromMemory (buffer, position, size);
}
- public void Close ()
+ public override void Close ()
{
if (closed)
return;
@@ -399,12 +394,12 @@
} catch {}
}
- public void Flush ()
+ public override void Flush ()
{
//modRequest.Flush (); No-op
}
- public bool IsConnected ()
+ public override bool IsConnected ()
{
return modRequest.IsConnected ();
}
@@ -430,3 +425,4 @@
}
}
}
+
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/ModMonoWorkerRequest.cs new/xsp-1.1.16.1/src/ModMonoWorkerRequest.cs
--- old/xsp-1.1.13.7/src/ModMonoWorkerRequest.cs 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/src/ModMonoWorkerRequest.cs 2006-07-06 00:27:10.000000000 +0200
@@ -116,7 +116,11 @@
static ModMonoWorkerRequest ()
{
+#if NET_2_0
+ string indexes = ConfigurationManager.AppSettings ["MonoServerDefaultIndexFiles"];
+#else
string indexes = ConfigurationSettings.AppSettings ["MonoServerDefaultIndexFiles"];
+#endif
SetDefaultIndexFiles (indexes);
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/ApplicationServer.cs new/xsp-1.1.16.1/src/Mono.WebServer/ApplicationServer.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/ApplicationServer.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/ApplicationServer.cs 2006-07-06 00:27:10.000000000 +0200
@@ -45,8 +45,8 @@
{
// ApplicationServer runs the main server thread, which accepts client
// connections and forwards the requests to the correct web application.
- // ApplicationServer takes an IWebSource object as parameter in the
- // constructor. IWebSource provides methods for getting some objects
+ // ApplicationServer takes an WebSource object as parameter in the
+ // constructor. WebSource provides methods for getting some objects
// whose behavior is specific to XSP or mod_mono.
// Each web application lives in its own application domain, and incoming
@@ -66,24 +66,24 @@
// The complete sequence of servicing a request is the following:
//
// 1) The listener accepts an incoming connection.
- // 2) An IWorker object is created (through the IWebSource), and it is
+ // 2) An Worker object is created (through the WebSource), and it is
// queued in the thread pool.
- // 3) When the IWorker's run method is called, it registers itself in
+ // 3) When the Worker's run method is called, it registers itself in
// the application's request broker, and gets a request id. All this is
// done in the main domain.
- // 4) The IWorker starts the request processing by making a cross-app domain
+ // 4) The Worker starts the request processing by making a cross-app domain
// call to the application host. It passes as parameters the request id
// and other information already read from the request.
// 5) The application host executes the request. When it needs to read or
// write request data, it performs remote calls to the request broker,
- // passing the request id provided by the IWorker.
+ // passing the request id provided by the Worker.
// 6) When the request broker receives a call from the application host,
- // it locates the IWorker registered with the provided request id and
+ // it locates the Worker registered with the provided request id and
// forwards the call to it.
public class ApplicationServer : MarshalByRefObject
{
- IWebSource webSource;
+ WebSource webSource;
bool started;
bool stop;
bool verbose;
@@ -94,7 +94,7 @@
// This is much faster than hashtable for typical cases.
ArrayList vpathToHost = new ArrayList ();
- public ApplicationServer (IWebSource source)
+ public ApplicationServer (WebSource source)
{
webSource = source;
}
@@ -283,6 +283,7 @@
runner.Abort ();
listen_socket.Close ();
UnloadAll ();
+ started = false;
Thread.Sleep (1000);
}
@@ -307,46 +308,56 @@
#endif
}
- SocketPool spool = new SocketPool ();
+ AsyncCallback accept_cb;
void RunServer ()
{
- spool.AddReadSocket (listen_socket);
started = true;
- Socket client;
- int w;
- while (!stop){
- ArrayList wSockets = spool.SelectRead ();
- w = wSockets.Count;
- for (int i = 0; i < w; i++) {
- Socket s = (Socket) wSockets [i];
- if (s == listen_socket) {
- try {
- client = s.Accept ();
- client.Blocking = true;
- } catch (Exception e) {
- continue;
- }
- SetSocketOptions (client);
- spool.AddReadSocket (client, DateTime.UtcNow);
- continue;
- }
-
- spool.RemoveReadSocket (s);
- IWorker worker = null;
- try {
- // This might happen when reusing and the client closes.
- worker = webSource.CreateWorker (s, this);
- } catch (Exception) {
- try { s.Close (); } catch {}
- continue;
- }
+ accept_cb = new AsyncCallback (OnAccept);
+ listen_socket.BeginAccept (accept_cb, null);
+ if (runner.IsBackground)
+ return;
+
+ while (true) // Just sleep until we're aborted.
+ Thread.Sleep (1000000);
+ }
+ void OnAccept (IAsyncResult ares)
+ {
+ Socket accepted = null;
+ try {
+ accepted = listen_socket.EndAccept (ares);
+ } catch {
+ } finally {
+ listen_socket.BeginAccept (accept_cb, null);
+ }
+
+ if (accepted == null)
+ return;
+ accepted.Blocking = true;
+ SetSocketOptions (accepted);
+ StartRequest (accepted, 0);
+ }
+
+ void StartRequest (Socket accepted, int reuses)
+ {
+ Worker worker = null;
+ try {
+ // The next line can throw (reusing and the client closed)
+ worker = webSource.CreateWorker (accepted, this);
+ worker.SetReuseCount (reuses);
+ if (false == worker.IsAsync)
ThreadPool.QueueUserWorkItem (new WaitCallback (worker.Run));
- }
+ else
+ worker.Run (null);
+ } catch (Exception) {
+ try { accepted.Close (); } catch {}
}
+ }
- started = false;
+ public void ReuseSocket (Socket sock, int reuses)
+ {
+ StartRequest (sock, reuses);
}
public VPathToHost GetApplicationForPath (string vhost, int port, string path,
@@ -398,134 +409,8 @@
{
return null;
}
-
- public int GetAvailableReuses (Socket sock)
- {
- int res = spool.GetReuseCount (sock);
- if (res == -1 || res >= 100)
- return -1;
-
- return 100 - res;
- }
-
- public void ReuseSocket (Socket sock)
- {
- IWorker worker = webSource.CreateWorker (sock, this);
- spool.IncrementReuseCount (sock);
- ThreadPool.QueueUserWorkItem (new WaitCallback (worker.Run));
- }
-
- public void CloseSocket (Socket sock)
- {
- spool.RemoveReadSocket (sock);
- }
}
- class SocketPool {
- ArrayList readSockets = new ArrayList ();
- Hashtable timeouts = new Hashtable ();
- Hashtable uses = new Hashtable ();
- object locker = new object ();
-
- public ArrayList SelectRead ()
- {
- if (readSockets.Count == 0)
- throw new InvalidOperationException ("There are no sockets.");
-
- ArrayList wSockets = new ArrayList (readSockets);
- // A bug on MS (or is it just me?) makes the following select return immediately
- // when there's only one socket (the listen socket) in the array:
- // Socket.Select (wSockets, null, null, (w == 1) ? -1 : 1000 * 1000); // 1s
- // so i have to do this for the MS runtime not to hung all the CPU.
- if (wSockets.Count > 1) {
- Socket.Select (wSockets, null, null, 1000 * 1000); // 1s
- } else {
- Socket sock = (Socket) wSockets [0];
- sock.Poll (-1, SelectMode.SelectRead);
- // wSockets already contains listen_socket.
- }
-
- lock (locker)
- CheckTimeouts (wSockets);
-
- return wSockets;
- }
-
- void CheckTimeouts (ArrayList wSockets)
- {
- int w = timeouts.Count;
- if (w > 0) {
- Socket [] socks_timeout = new Socket [w];
- timeouts.Keys.CopyTo (socks_timeout, 0);
- DateTime now = DateTime.UtcNow;
- foreach (Socket k in socks_timeout) {
- if (wSockets.Contains (k))
- continue;
-
- DateTime atime = (DateTime) timeouts [k];
- TimeSpan diff = now - atime;
- if (diff.TotalMilliseconds > 15 * 1000) {
- RemoveReadSocket (k);
- wSockets.Remove (k);
- k.Close ();
- continue;
- }
- }
- }
- }
-
- public void IncrementReuseCount (Socket sock)
- {
- lock (locker) {
- if (uses.ContainsKey (sock)) {
- int n = (int) uses [sock];
- uses [sock] = n + 1;
- } else {
- uses [sock] = 1;
- }
- }
- }
-
- public int GetReuseCount (Socket sock)
- {
- lock (locker) {
- if (uses.ContainsKey (sock))
- return (int) uses [sock];
-
- uses [sock] = 1;
- return 1;
- }
- }
-
- public void AddReadSocket (Socket sock)
- {
- lock (locker)
- readSockets.Add (sock);
- }
-
- public void AddReadSocket (Socket sock, DateTime time)
- {
- lock (locker) {
- if (readSockets.Contains (sock)) {
- timeouts [sock] = time;
- return;
- }
-
- readSockets.Add (sock);
- timeouts [sock] = time;
- }
- }
-
- public void RemoveReadSocket (Socket sock)
- {
- lock (locker) {
- readSockets.Remove (sock);
- timeouts.Remove (sock);
- uses.Remove (sock);
- }
- }
- }
-
public class VPathToHost
{
public readonly string vhost;
@@ -628,7 +513,7 @@
return (vpath.StartsWith (this.vpath));
}
- public void CreateHost (ApplicationServer server, IWebSource webSource)
+ public void CreateHost (ApplicationServer server, WebSource webSource)
{
string v = vpath;
if (v != "/" && v.EndsWith ("/")) {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/BaseRequestBroker.cs new/xsp-1.1.16.1/src/Mono.WebServer/BaseRequestBroker.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/BaseRequestBroker.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/BaseRequestBroker.cs 2006-07-06 00:27:10.000000000 +0200
@@ -52,7 +52,7 @@
stk.Push (buffer);
}
- public int RegisterRequest (IWorker worker)
+ public int RegisterRequest (Worker worker)
{
int result = worker.GetHashCode ();
lock (requests) {
@@ -79,9 +79,9 @@
} else {
buffer = new byte[size];
}
- IWorker w;
+ Worker w;
lock (requests) {
- w = (IWorker) requests [requestId];
+ w = (Worker) requests [requestId];
}
int nread = 0;
@@ -91,30 +91,30 @@
return nread;
}
- public IWorker GetWorker (int requestId)
+ public Worker GetWorker (int requestId)
{
lock (requests) {
- return (IWorker) requests [requestId];
+ return (Worker) requests [requestId];
}
}
public void Write (int requestId, byte[] buffer, int position, int size)
{
- IWorker worker = GetWorker (requestId);
+ Worker worker = GetWorker (requestId);
if (worker != null)
worker.Write (buffer, position, size);
}
public void Close (int requestId)
{
- IWorker worker = GetWorker (requestId);
+ Worker worker = GetWorker (requestId);
if (worker != null)
worker.Close ();
}
public void Flush (int requestId)
{
- IWorker worker = GetWorker (requestId);
+ Worker worker = GetWorker (requestId);
if (worker != null)
worker.Flush ();
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/IWebSource.cs new/xsp-1.1.16.1/src/Mono.WebServer/IWebSource.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/IWebSource.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/IWebSource.cs 2006-07-06 00:27:10.000000000 +0200
@@ -27,29 +27,51 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-
-
using System;
+using System.IO;
using System.Net.Sockets;
-namespace Mono.WebServer
-{
- public interface IWebSource : IDisposable
+namespace Mono.WebServer {
+
+ public abstract class WebSource : IDisposable
{
- Socket CreateSocket ();
- IWorker CreateWorker (Socket client, ApplicationServer server);
- Type GetApplicationHostType ();
- IRequestBroker CreateRequestBroker ();
+ public abstract Socket CreateSocket ();
+ public abstract Worker CreateWorker (Socket client, ApplicationServer server);
+ public abstract Type GetApplicationHostType ();
+ public abstract IRequestBroker CreateRequestBroker ();
+
+ public void Dispose ()
+ {
+ Dispose (true);
+ GC.SuppressFinalize (this);
+ }
+
+ protected virtual void Dispose (bool disposing)
+ {
+ }
}
- public interface IWorker
+ public abstract class Worker
{
- void Run (object state);
- int Read (byte[] buffer, int position, int size);
- void Write (byte[] buffer, int position, int size);
- void Close ();
- void Flush ();
- bool IsConnected ();
+ public virtual bool IsAsync {
+ get { return false; }
+ }
+
+ public virtual void SetReuseCount (int reuses)
+ {
+ }
+
+ public virtual int GetRemainingReuses ()
+ {
+ return 0;
+ }
+
+ public abstract void Run (object state);
+ public abstract int Read (byte [] buffer, int position, int size);
+ public abstract void Write (byte [] buffer, int position, int size);
+ public abstract void Close ();
+ public abstract void Flush ();
+ public abstract bool IsConnected ();
}
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/InitialWorkerRequest.cs new/xsp-1.1.16.1/src/Mono.WebServer/InitialWorkerRequest.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/InitialWorkerRequest.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/InitialWorkerRequest.cs 2006-07-06 00:27:10.000000000 +0200
@@ -88,7 +88,7 @@
static Stack bufferStack = new Stack ();
static Encoding encoding = Encoding.GetEncoding (28591);
- static byte [] AllocateBuffer ()
+ public static byte [] AllocateBuffer ()
{
lock (bufferStack) {
if (bufferStack.Count != 0)
@@ -97,8 +97,11 @@
return new byte [BSize];
}
- static void FreeBuffer (byte [] buf)
+ public static void FreeBuffer (byte [] buf)
{
+ if (buf == null)
+ return;
+
lock (bufferStack) {
bufferStack.Push (buf);
}
@@ -118,6 +121,14 @@
FreeBuffer (inputBuffer);
}
+ public void SetBuffer (byte [] buffer, int length)
+ {
+ inputBuffer = buffer;
+ inputLength = length;
+ gotSomeInput = (length > 0);
+ position = 0;
+ }
+
void FillBuffer ()
{
position = 0;
@@ -288,13 +299,16 @@
get { return gotSomeInput; }
}
+ public byte [] InputBuffer {
+ get { return inputBuffer; }
+ }
+
public RequestData RequestData {
get {
RequestData rd = new RequestData (verb, path, queryString, protocol);
byte [] buffer = new byte [inputLength - position];
Buffer.BlockCopy (inputBuffer, position, buffer, 0, inputLength - position);
rd.InputBuffer = buffer;
- FreeBuffer (inputBuffer);
return rd;
}
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/LingeringNetworkStream.cs new/xsp-1.1.16.1/src/Mono.WebServer/LingeringNetworkStream.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/LingeringNetworkStream.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/LingeringNetworkStream.cs 2006-07-06 00:27:10.000000000 +0200
@@ -38,9 +38,15 @@
bool enableLingering = true;
// We dont actually use the data from this buffer. So we cache it...
static byte [] buffer;
+ bool owns;
public LingeringNetworkStream (Socket sock, bool owns) : base (sock, owns)
{
+ this.owns = owns;
+ }
+
+ public bool OwnsSocket {
+ get { return owns; }
}
public bool EnableLingering
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/Makefile.am new/xsp-1.1.16.1/src/Mono.WebServer/Makefile.am
--- old/xsp-1.1.13.7/src/Mono.WebServer/Makefile.am 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/Makefile.am 2006-07-06 00:27:10.000000000 +0200
@@ -10,6 +10,7 @@
if NET_2_0
monowebserver2_install = Mono.WebServer2.dll
+monowebserver2_references = -r:System.Web.dll -r:System.Configuration.dll -r:Mono.Security.dll
endif
CLEANFILES = Mono.WebServer.dll* Mono.WebServer2.dll*
@@ -37,5 +38,5 @@
$(MCS) $(MCSFLAGS) $(monowebserver_references) /target:library /out:$@ $(monowebserver_build_sources)
Mono.WebServer2.dll: $(monowebserver2_build_sources)
- $(GMCS) $(MCSFLAGS) $(monowebserver_references) /target:library /out:$@ $(monowebserver2_build_sources)
+ $(GMCS) -d:NET_2_0 $(MCSFLAGS) $(monowebserver2_references) /target:library /out:$@ $(monowebserver2_build_sources)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/Makefile.in new/xsp-1.1.16.1/src/Mono.WebServer/Makefile.in
--- old/xsp-1.1.13.7/src/Mono.WebServer/Makefile.in 2006-04-26 02:12:43.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/Makefile.in 2006-07-20 09:47:50.000000000 +0200
@@ -153,6 +153,7 @@
monowebserver_SCRIPTS = Mono.WebServer.dll
monowebserver2_SCRIPTS = $(monowebserver2_install)
@NET_2_0_TRUE@monowebserver2_install = Mono.WebServer2.dll
+@NET_2_0_TRUE@monowebserver2_references = -r:System.Web.dll -r:System.Configuration.dll -r:Mono.Security.dll
CLEANFILES = Mono.WebServer.dll* Mono.WebServer2.dll*
EXTRA_DIST = $(monowebserver_sources) AssemblyInfo.cs.in AssemblyInfo2.cs.in
@@ -399,7 +400,7 @@
$(MCS) $(MCSFLAGS) $(monowebserver_references) /target:library /out:$@ $(monowebserver_build_sources)
Mono.WebServer2.dll: $(monowebserver2_build_sources)
- $(GMCS) $(MCSFLAGS) $(monowebserver_references) /target:library /out:$@ $(monowebserver2_build_sources)
+ $(GMCS) -d:NET_2_0 $(MCSFLAGS) $(monowebserver2_references) /target:library /out:$@ $(monowebserver2_build_sources)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/XSPApplicationHost.cs new/xsp-1.1.16.1/src/Mono.WebServer/XSPApplicationHost.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/XSPApplicationHost.cs 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/XSPApplicationHost.cs 2006-07-06 00:27:10.000000000 +0200
@@ -5,7 +5,7 @@
// Gonzalo Paniagua Javier (gonzalo@ximian.com)
// Lluis Sanchez Gual (lluis@ximian.com)
//
-// (C) Copyright 2004 Novell, Inc. (http://www.novell.com)
+// (C) Copyright 2004,2005,2006 Novell, Inc. (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
@@ -33,6 +33,7 @@
using System.Net;
using System.Net.Sockets;
using System.Text;
+using System.Threading;
using System.Web;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
@@ -47,7 +48,7 @@
// XSPWebSource: Provides methods to get objects and types specific
// to XSP.
//
- public class XSPWebSource: IWebSource
+ public class XSPWebSource: WebSource
{
IPEndPoint bindAddress;
bool secureConnection;
@@ -93,32 +94,28 @@
this.bindAddress = bindAddress;
}
- public Socket CreateSocket ()
+ public override Socket CreateSocket ()
{
Socket listen_socket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
listen_socket.Bind (bindAddress);
return listen_socket;
}
- public IWorker CreateWorker (Socket client, ApplicationServer server)
+ public override Worker CreateWorker (Socket client, ApplicationServer server)
{
return new XSPWorker (client, client.LocalEndPoint, server,
secureConnection, SecurityProtocol, cert, keyCB, allowClientCert, requireClientCert);
}
- public Type GetApplicationHostType ()
+ public override Type GetApplicationHostType ()
{
return typeof (XSPApplicationHost);
}
- public IRequestBroker CreateRequestBroker ()
+ public override IRequestBroker CreateRequestBroker ()
{
return new XSPRequestBroker ();
}
-
- public void Dispose ()
- {
- }
}
//
@@ -130,7 +127,7 @@
public int GetReuseCount (int requestId)
{
XSPWorker worker = (XSPWorker) GetWorker (requestId);
- return worker.GetReuseCount ();
+ return worker.GetRemainingReuses ();
}
public void Close (int requestId, bool keepAlive)
@@ -288,7 +285,7 @@
// XSPWorker: The worker that do the initial processing of XSP
// requests.
//
- internal class XSPWorker: IWorker
+ class XSPWorker: Worker
{
ApplicationServer server;
LingeringNetworkStream netStream;
@@ -297,6 +294,10 @@
IPEndPoint localEP;
Socket sock;
SslInformations ssl;
+ InitialWorkerRequest initial;
+ int requestId = -1;
+ XSPRequestBroker broker = null;
+ int reuses;
public XSPWorker (Socket client, EndPoint localEP, ApplicationServer server,
bool secureConnection,
@@ -328,60 +329,67 @@
this.localEP = (IPEndPoint) localEP;
}
- public int GetReuseCount ()
+ public override bool IsAsync {
+ get { return true; }
+ }
+
+ public override void SetReuseCount (int nreuses)
{
- return server.GetAvailableReuses (sock);
+ reuses = nreuses;
}
- int requestId = -1;
- XSPRequestBroker broker = null;
- public void Run (object state)
+ public override int GetRemainingReuses ()
{
- try {
- InnerRun (state);
- } catch (Exception e) {
- bool ignore = ((e is RequestLineException) || (e is IOException));
- if (!ignore)
- Console.WriteLine (e);
+ return 100 - reuses;
+ }
- try {
- if (!ignore) {
- byte [] error = HttpErrors.ServerError ();
- Write (error, 0, error.Length);
- }
- } catch {}
- try {
- Close ();
- } catch {}
+ public override void Run (object state)
+ {
+ initial = new InitialWorkerRequest (stream);
+ byte [] buffer = InitialWorkerRequest.AllocateBuffer ();
+ sock.BeginReceive (buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback (ReadCB), buffer);
+ }
- if (broker != null && requestId != -1)
- broker.UnregisterRequest (requestId);
+ void ReadCB (IAsyncResult ares)
+ {
+ byte [] buffer = (byte []) ares.AsyncState;
+ try {
+ int nread = sock.EndReceive (ares);
+ // See if we got at least 1 line
+ initial.SetBuffer (buffer, nread);
+ initial.ReadRequestData ();
+ ThreadPool.QueueUserWorkItem (new WaitCallback (RunInternal));
+ } catch (Exception e) {
+ InitialWorkerRequest.FreeBuffer (buffer);
+ HandleInitialException (e);
}
}
- void InnerRun (object state)
+ void HandleInitialException (Exception e)
{
- requestId = -1;
- broker = null;
-
- if (remoteEP == null)
- return;
+ //bool ignore = ((e is RequestLineException) || (e is IOException));
+ //if (!ignore)
+ // Console.WriteLine (e);
- InitialWorkerRequest ir = new InitialWorkerRequest (stream);
try {
- ir.ReadRequestData ();
- } catch (Exception ex) {
- if (ir.GotSomeInput) {
- byte [] badReq = HttpErrors.BadRequest ();
- Write (badReq, 0, badReq.Length);
+ if (initial != null && initial.GotSomeInput && sock.Connected) {
+ byte [] error = HttpErrors.ServerError ();
+ Write (error, 0, error.Length);
}
+ } catch {}
- ir.FreeBuffer ();
+ try {
+ Close ();
+ } catch {}
- throw ex;
- }
+ if (broker != null && requestId != -1)
+ broker.UnregisterRequest (requestId);
+ }
- RequestData rdata = ir.RequestData;
+ void RunInternal (object state)
+ {
+ RequestData rdata = initial.RequestData;
+ initial.FreeBuffer ();
string vhost = null; // TODO: read the headers in InitialWorkerRequest
int port = ((IPEndPoint) localEP).Port;
@@ -414,23 +422,23 @@
rdata.Protocol, rdata.InputBuffer, redirect, sock.Handle, ssl);
}
- public int Read (byte[] buffer, int position, int size)
+ public override int Read (byte[] buffer, int position, int size)
{
int n = stream.Read (buffer, position, size);
return (n >= 0) ? n : -1;
}
- public void Write (byte[] buffer, int position, int size)
+ public override void Write (byte[] buffer, int position, int size)
{
try {
stream.Write (buffer, position, size);
- } catch (Exception e) {
+ } catch (Exception) {
Close ();
throw;
}
}
- public void Close ()
+ public override void Close ()
{
Close (false);
}
@@ -439,10 +447,12 @@
{
if (!keepAlive || !IsConnected ()) {
stream.Close ();
- if (stream != netStream)
+ if (stream != netStream) {
netStream.Close ();
+ } else if (false == netStream.OwnsSocket) {
+ try { sock.Close (); } catch {}
+ }
- server.CloseSocket (sock);
return;
}
@@ -451,21 +461,21 @@
if (stream != netStream)
netStream.Close ();
- server.ReuseSocket (sock);
+ server.ReuseSocket (sock, reuses + 1);
}
- public bool IsConnected ()
+ public override bool IsConnected ()
{
return netStream.Connected;
}
- public void Flush ()
+ public override void Flush ()
{
if (stream != netStream)
stream.Flush ();
}
- private bool ClientCertificateValidation (X509Certificate certificate, int[] certificateErrors)
+ bool ClientCertificateValidation (X509Certificate certificate, int [] certificateErrors)
{
if (certificate != null)
ssl.RawClientCertificate = certificate.GetRawCertData (); // to avoid serialization
@@ -473,8 +483,8 @@
// right now we're accepting any client certificate - i.e. it's up to the
// web application to check if the certificate is valid (HttpClientCertificate.IsValid)
ssl.ClientCertificateValid = (certificateErrors.Length == 0);
-
return ssl.RequireClientCertificate ? (certificate != null) : true;
}
}
}
+
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/Mono.WebServer/XSPWorkerRequest.cs new/xsp-1.1.16.1/src/Mono.WebServer/XSPWorkerRequest.cs
--- old/xsp-1.1.13.7/src/Mono.WebServer/XSPWorkerRequest.cs 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/src/Mono.WebServer/XSPWorkerRequest.cs 2006-07-06 00:27:10.000000000 +0200
@@ -106,7 +106,11 @@
server_software = String.Format ("{0}/{1}", title, version);
serverHeader = String.Format ("Server: {0} {1}\r\n", server_software, plat);
+#if NET_2_0
+ string indexes = ConfigurationManager.AppSettings ["MonoServerDefaultIndexFiles"];
+#else
string indexes = ConfigurationSettings.AppSettings ["MonoServerDefaultIndexFiles"];
+#endif
SetDefaultIndexFiles (indexes);
}
@@ -117,10 +121,11 @@
bool is_linux = false;
try {
- Stream st = File.OpenRead ("/proc/sys/kernel/ostype");
- StreamReader sr = new StreamReader (st);
- string os = sr.ReadToEnd ();
- sr.Close ();
+ string os = "";
+ using (Stream st = File.OpenRead ("/proc/sys/kernel/ostype")) {
+ StreamReader sr = new StreamReader (st);
+ os = sr.ReadToEnd ();
+ }
is_linux = os.StartsWith ("Linux");
} catch {
}
@@ -190,6 +195,9 @@
keepAlive = false;
}
+ if (secure)
+ keepAlive = false; //FIXME: until the NetworkStream don't own the socket for ssl streams.
+
responseHeaders = new StringBuilder ();
responseHeaders.Append (serverHeader);
status = protocol + " 200 OK\r\n";
@@ -278,7 +286,7 @@
string value = line.Substring (colon + 1).Trim ();
headers [key] = value;
}
- } catch (IOException ioe) {
+ } catch (IOException) {
throw;
} catch (Exception e) {
throw new Exception ("Error reading headers.", e);
@@ -337,7 +345,7 @@
if (finalFlush)
CloseConnection ();
- } catch (Exception e) {
+ } catch (Exception) {
CloseConnection ();
}
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/src/server.cs new/xsp-1.1.16.1/src/server.cs
--- old/xsp-1.1.13.7/src/server.cs 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/src/server.cs 2006-07-06 00:27:10.000000000 +0200
@@ -29,6 +29,7 @@
using System;
using System.Configuration;
+using System.Collections.Specialized;
using System.Diagnostics;
using System.IO;
using System.Net;
@@ -226,26 +227,36 @@
}
#endif
+ static NameValueCollection AppSettings {
+ get {
+#if NET_2_0
+ return ConfigurationManager.AppSettings;
+#else
+ return ConfigurationSettings.AppSettings;
+#endif
+ }
+ }
+
public static int Main (string [] args)
{
SecurityConfiguration security = new SecurityConfiguration ();
bool nonstop = false;
bool verbose = false;
Trace.Listeners.Add (new TextWriterTraceListener (Console.Out));
- string apps = ConfigurationSettings.AppSettings ["MonoApplications"];
- string appConfigDir = ConfigurationSettings.AppSettings ["MonoApplicationsConfigDir"];
- string appConfigFile = ConfigurationSettings.AppSettings ["MonoApplicationsConfigFile"];
- string rootDir = ConfigurationSettings.AppSettings ["MonoServerRootDir"];
+ string apps = AppSettings ["MonoApplications"];
+ string appConfigDir = AppSettings ["MonoApplicationsConfigDir"];
+ string appConfigFile = AppSettings ["MonoApplicationsConfigFile"];
+ string rootDir = AppSettings ["MonoServerRootDir"];
object oport;
- string ip = ConfigurationSettings.AppSettings ["MonoServerAddress"];
+ string ip = AppSettings ["MonoServerAddress"];
bool master = false;
#if MODMONO_SERVER
- string filename = ConfigurationSettings.AppSettings ["MonoUnixSocket"];
+ string filename = AppSettings ["MonoUnixSocket"];
#endif
if (ip == "" || ip == null)
ip = "0.0.0.0";
- oport = ConfigurationSettings.AppSettings ["MonoServerPort"];
+ oport = AppSettings ["MonoServerPort"];
if (oport == null)
oport = 8080;
@@ -394,7 +405,7 @@
rootDir = Directory.GetCurrentDirectory ();
- IWebSource webSource;
+ WebSource webSource;
#if MODMONO_SERVER
if (useTCP) {
webSource = new ModMonoTCPWebSource (ipaddr, port, lockfile);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/test/2.0/menu/menu1.aspx new/xsp-1.1.16.1/test/2.0/menu/menu1.aspx
--- old/xsp-1.1.13.7/test/2.0/menu/menu1.aspx 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/test/2.0/menu/menu1.aspx 2006-07-06 00:27:09.000000000 +0200
@@ -4,7 +4,6 @@
void Menu1_MenuItemClick(Object s, System.Web.UI.WebControls.MenuEventArgs e)
{
Label1.Text = "You selected " + e.Item.Text;
- Page.Header.Metadata ["un"] = "dos";
Page.Header.Title = "You selected " + e.Item.Text;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/tools/asp_state/asp-state.exe.config new/xsp-1.1.16.1/tools/asp_state/asp-state.exe.config
--- old/xsp-1.1.13.7/tools/asp_state/asp-state.exe.config 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/tools/asp_state/asp-state.exe.config 2006-07-06 00:27:10.000000000 +0200
@@ -4,7 +4,7 @@
<application name="ASP.NET State Server">
<service>
</service>
<channels>
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/tools/asp_state/asp-state2.exe.config new/xsp-1.1.16.1/tools/asp_state/asp-state2.exe.config
--- old/xsp-1.1.13.7/tools/asp_state/asp-state2.exe.config 2006-04-07 22:29:55.000000000 +0200
+++ new/xsp-1.1.16.1/tools/asp_state/asp-state2.exe.config 2006-07-06 00:27:10.000000000 +0200
@@ -4,7 +4,7 @@
<application name="ASP.NET State Server">
<service>
</service>
<channels>
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/tools/dbsessmgr/dbsessmgr.cs new/xsp-1.1.16.1/tools/dbsessmgr/dbsessmgr.cs
--- old/xsp-1.1.13.7/tools/dbsessmgr/dbsessmgr.cs 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/tools/dbsessmgr/dbsessmgr.cs 2006-07-06 00:27:10.000000000 +0200
@@ -17,6 +17,8 @@
internal sealed class DbSession {
+ static string paramPrefix;
+
private delegate void DbSessionCommand (IDbConnection conn);
private static int Main (string [] args)
@@ -42,10 +44,10 @@
using (IDbCommand command = conn.CreateCommand ()) {
IDataParameterCollection param;
- command.CommandText = "DELETE FROM ASPStateTempSessions WHERE Expires < :Now";
+ command.CommandText = "DELETE FROM ASPStateTempSessions WHERE Expires < " + paramPrefix + "Now";
param = command.Parameters;
- param.Add (CreateParam (command, DbType.DateTime, ":Now", DateTime.Now));
+ param.Add (CreateParam (command, DbType.DateTime, "Now", DateTime.Now));
command.ExecuteNonQuery ();
}
@@ -70,7 +72,7 @@
Console.WriteLine ();
using (IDbCommand command = conn.CreateCommand ()) {
- command.CommandText = "SELECT * from aspstatetempsessions";
+ command.CommandText = "SELECT * FROM ASPStateTempSessions";
using (IDataReader reader = command.ExecuteReader ()) {
while (reader.Read ()) {
@@ -102,7 +104,7 @@
string asm, type, conn_str;
IDbConnection conn;
- GetConnectionData (out asm, out type, out conn_str);
+ GetConnectionData (out asm, out type, out conn_str, out paramPrefix);
Assembly dbAssembly = Assembly.LoadWithPartialName (asm);
Type cnc_type = dbAssembly.GetType (type, true);
@@ -118,23 +120,20 @@
}
private static void GetConnectionData (out string asm,
- out string type, out string conn_str)
+ out string type, out string conn_str,
+ out string param_prefix)
{
asm = null;
type = null;
conn_str = null;
+ param_prefix = null;
- NameValueCollection config = ConfigurationSettings.AppSettings as NameValueCollection;
+ NameValueCollection config = ConfigurationSettings.AppSettings;
if (config != null) {
- foreach (string s in config.Keys) {
- if (0 == String.Compare ("DBProviderAssembly", s, true)) {
- asm = config [s];
- } else if (0 == String.Compare ("DBConnectionType", s, true)) {
- type = config [s];
- } else if (0 == String.Compare ("DBConnectionString", s, true)) {
- conn_str = config [s];
- }
- }
+ asm = config ["DBProviderAssembly"];
+ type = config ["DBConnectionType"];
+ conn_str = config ["DBConnectionString"];
+ param_prefix = config ["DBParamPrefix"];
}
if (asm == null || asm == String.Empty)
@@ -145,6 +144,9 @@
if (conn_str == null || conn_str == String.Empty)
conn_str = "SERVER=127.0.0.1;USER ID=monostate;PASSWORD=monostate;dbname=monostate";
+
+ if (param_prefix == null || param_prefix == String.Empty)
+ param_prefix = ":";
}
private static DbSessionCommand GetCommand (string [] args)
@@ -178,7 +180,7 @@
{
IDataParameter result = command.CreateParameter ();
result.DbType = type;
- result.ParameterName = name;
+ result.ParameterName = paramPrefix + name;
result.Value = value;
return result;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xsp-1.1.13.7/tools/dbsessmgr/dbsessmgr.exe.config new/xsp-1.1.16.1/tools/dbsessmgr/dbsessmgr.exe.config
--- old/xsp-1.1.13.7/tools/dbsessmgr/dbsessmgr.exe.config 2006-04-26 02:12:39.000000000 +0200
+++ new/xsp-1.1.16.1/tools/dbsessmgr/dbsessmgr.exe.config 2006-07-06 00:27:10.000000000 +0200
@@ -7,6 +7,8 @@
value="Npgsql.NpgsqlConnection"/>
<add key="DBConnectionString"
value="SERVER=127.0.0.1;USER ID=monostate;PASSWORD=monostate;dbname=monostate"/>
+
</appSettings>
</configuration>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...