Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2003-12-12 06:32:55 +0300
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2003-12-12 06:32:55 +0300
commit0e8a82b2eda3b8a2b34f1ba0582f7c3f85be53b9 (patch)
tree79495564b9ff7f88041ecdafa964e3a02c92c531 /mcs/class/Mono.Http
parent38764bc26bdb3be16ede773ac13b4338eb5844bf (diff)
2003-12-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* Makefile: reference Mono.Security. * Mono.Http.dll.sources: added/renamed files. * NEWS: updated. * Assembly/AssemblyInfo.cs: assembly stuff. * Mono.Http/AcceptEncodingConfig.cs: Removed file. * Mono.Http/AcceptEncodingModule.cs: * Mono.Http/AcceptEncodingSectionHandler.cs: * Mono.Http.Configuration/AcceptEncodingConfig.cs: * Mono.Http.Configuration/AcceptEncodingSectionHandler.cs: moved files to new directory. * Mono.Http/GZipWebRequest.cs: small fixes to inject gzip header. * Mono.Http/GZipWebRequestCreator.cs: web request creator for gzip. * Mono.Http/GZipWebResponse.cs: fixed dispose/close. * Mono.Http/NtlmClient.cs: NTLM for HTTP. Used from System.Net. * samples/http-get-gzip.cs: * samples/http-get-gzip.exe.config: use the request creator. svn path=/trunk/mcs/; revision=21050
Diffstat (limited to 'mcs/class/Mono.Http')
-rw-r--r--mcs/class/Mono.Http/Assembly/AssemblyInfo.cs20
-rw-r--r--mcs/class/Mono.Http/Assembly/ChangeLog4
-rw-r--r--mcs/class/Mono.Http/Makefile8
-rw-r--r--mcs/class/Mono.Http/Mono.Http.Configuration/AcceptEncodingConfig.cs (renamed from mcs/class/Mono.Http/Mono.Http/AcceptEncodingConfig.cs)2
-rw-r--r--mcs/class/Mono.Http/Mono.Http.Configuration/AcceptEncodingSectionHandler.cs (renamed from mcs/class/Mono.Http/Mono.Http/AcceptEncodingSectionHandler.cs)2
-rw-r--r--mcs/class/Mono.Http/Mono.Http.Configuration/ChangeLog5
-rw-r--r--mcs/class/Mono.Http/Mono.Http.dll.sources8
-rw-r--r--mcs/class/Mono.Http/Mono.Http/AcceptEncodingModule.cs46
-rw-r--r--mcs/class/Mono.Http/Mono.Http/ChangeLog10
-rw-r--r--mcs/class/Mono.Http/Mono.Http/GZipWebRequest.cs5
-rw-r--r--mcs/class/Mono.Http/Mono.Http/GZipWebRequestCreator.cs33
-rw-r--r--mcs/class/Mono.Http/Mono.Http/GZipWebResponse.cs16
-rw-r--r--mcs/class/Mono.Http/Mono.Http/NtlmClient.cs129
-rw-r--r--mcs/class/Mono.Http/NEWS6
-rw-r--r--mcs/class/Mono.Http/samples/ChangeLog5
-rw-r--r--mcs/class/Mono.Http/samples/http-get-gzip.cs23
-rw-r--r--mcs/class/Mono.Http/samples/http-get-gzip.exe.config11
17 files changed, 266 insertions, 67 deletions
diff --git a/mcs/class/Mono.Http/Assembly/AssemblyInfo.cs b/mcs/class/Mono.Http/Assembly/AssemblyInfo.cs
new file mode 100644
index 00000000000..b212d7f33db
--- /dev/null
+++ b/mcs/class/Mono.Http/Assembly/AssemblyInfo.cs
@@ -0,0 +1,20 @@
+//
+// AssemblyInfo.cs
+//
+// Author:
+// Gonzalo Paniagua (gonzalo@ximian.com)
+//
+// (C) 2003 Novell, Inc. http://www.novell.com
+//
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyTitle("Mono.Http.dll")]
+[assembly: AssemblyDescription("Http and ASP.NET utilities")]
+[assembly: AssemblyConfiguration("Development version")]
+[assembly: AssemblyCompany("MONO development team")]
+[assembly: AssemblyProduct("MONO CLI")]
+[assembly: AssemblyCopyright("(c) 2003 Various Authors")]
+
diff --git a/mcs/class/Mono.Http/Assembly/ChangeLog b/mcs/class/Mono.Http/Assembly/ChangeLog
new file mode 100644
index 00000000000..76199015e4a
--- /dev/null
+++ b/mcs/class/Mono.Http/Assembly/ChangeLog
@@ -0,0 +1,4 @@
+2003-12-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * AssemblyInfo.cs: assembly stuff.
+
diff --git a/mcs/class/Mono.Http/Makefile b/mcs/class/Mono.Http/Makefile
index fa52b9dd723..820e4ce3009 100644
--- a/mcs/class/Mono.Http/Makefile
+++ b/mcs/class/Mono.Http/Makefile
@@ -3,8 +3,12 @@ SUBDIRS =
include ../../build/rules.make
LIBRARY = Mono.Http.dll
-LIB_MCS_FLAGS = -r:$(corlib) -r:System.dll -r:System.Xml.dll \
- -r:System.Web.dll -r:ICSharpCode.SharpZipLib.dll
+LIB_MCS_FLAGS = -r:$(corlib) \
+ -r:System.dll \
+ -r:System.Xml.dll \
+ -r:System.Web.dll \
+ -r:ICSharpCode.SharpZipLib.dll \
+ -r:Mono.Security.dll
NO_TEST = yes
diff --git a/mcs/class/Mono.Http/Mono.Http/AcceptEncodingConfig.cs b/mcs/class/Mono.Http/Mono.Http.Configuration/AcceptEncodingConfig.cs
index 051909d70a1..7e799a0304c 100644
--- a/mcs/class/Mono.Http/Mono.Http/AcceptEncodingConfig.cs
+++ b/mcs/class/Mono.Http/Mono.Http.Configuration/AcceptEncodingConfig.cs
@@ -13,7 +13,7 @@ using System.Collections.Specialized;
using System.IO;
using System.Web;
-namespace Mono.Http
+namespace Mono.Http.Configuration
{
public class AcceptEncodingConfig
{
diff --git a/mcs/class/Mono.Http/Mono.Http/AcceptEncodingSectionHandler.cs b/mcs/class/Mono.Http/Mono.Http.Configuration/AcceptEncodingSectionHandler.cs
index 86e5dacc6cb..de5079185e7 100644
--- a/mcs/class/Mono.Http/Mono.Http/AcceptEncodingSectionHandler.cs
+++ b/mcs/class/Mono.Http/Mono.Http.Configuration/AcceptEncodingSectionHandler.cs
@@ -12,7 +12,7 @@ using System.Configuration;
using System.IO;
using System.Xml;
-namespace Mono.Http
+namespace Mono.Http.Configuration
{
public class AcceptEncodingSectionHandler : IConfigurationSectionHandler
{
diff --git a/mcs/class/Mono.Http/Mono.Http.Configuration/ChangeLog b/mcs/class/Mono.Http/Mono.Http.Configuration/ChangeLog
new file mode 100644
index 00000000000..35b53dea225
--- /dev/null
+++ b/mcs/class/Mono.Http/Mono.Http.Configuration/ChangeLog
@@ -0,0 +1,5 @@
+2003-12-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * AcceptEncodingConfig.cs:
+ * AcceptEncodingSectionHandler.cs: moved these files here.
+
diff --git a/mcs/class/Mono.Http/Mono.Http.dll.sources b/mcs/class/Mono.Http/Mono.Http.dll.sources
index 12d2366cf14..ba3f6122223 100644
--- a/mcs/class/Mono.Http/Mono.Http.dll.sources
+++ b/mcs/class/Mono.Http/Mono.Http.dll.sources
@@ -1,6 +1,8 @@
-Mono.Http/AcceptEncodingConfig.cs
-Mono.Http/AcceptEncodingModule.cs
-Mono.Http/AcceptEncodingSectionHandler.cs
+Assembly/AssemblyInfo.cs
Mono.Http/GZipWebRequest.cs
Mono.Http/GZipWebResponse.cs
Mono.Http/GZipWriteFilter.cs
+Mono.Http/GZipWebRequestCreator.cs
+Mono.Http/NtlmClient.cs
+Mono.Http.Configuration/AcceptEncodingConfig.cs
+Mono.Http.Configuration/AcceptEncodingSectionHandler.cs
diff --git a/mcs/class/Mono.Http/Mono.Http/AcceptEncodingModule.cs b/mcs/class/Mono.Http/Mono.Http/AcceptEncodingModule.cs
deleted file mode 100644
index a46e9b779b0..00000000000
--- a/mcs/class/Mono.Http/Mono.Http/AcceptEncodingModule.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// AcceptEncodingModule.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo@ximian.com)
-//
-// (c) 2003 Ximian, Inc (http://www.ximian.com)
-//
-
-using System;
-using System.Configuration;
-using System.IO;
-using System.Web;
-
-namespace Mono.Http
-{
- public class AcceptEncodingModule : IHttpModule
- {
- static readonly string configSection = "mono.aspnet/acceptEncoding";
- AcceptEncodingConfig config;
-
- public void Init (HttpApplication app)
- {
- app.BeginRequest += new EventHandler (CheckIfAddFilter);
- }
-
- public void Dispose ()
- {
- }
-
- void CheckIfAddFilter (object sender, EventArgs args)
- {
- HttpApplication app = (HttpApplication) sender;
- HttpRequest request = app.Request;
- HttpResponse response = app.Response;
-
- //FIXME: fix this when config is cached
- if (config == null)
- //config = (AcceptEncodingConfig) app.Context.GetConfig (configSection);
- config = (AcceptEncodingConfig) ConfigurationSettings.GetConfig (configSection);
-
- config.SetFilter (response, request.Headers ["Accept-Encoding"]);
- }
- }
-}
-
diff --git a/mcs/class/Mono.Http/Mono.Http/ChangeLog b/mcs/class/Mono.Http/Mono.Http/ChangeLog
index 213fe969699..3d3471ed09f 100644
--- a/mcs/class/Mono.Http/Mono.Http/ChangeLog
+++ b/mcs/class/Mono.Http/Mono.Http/ChangeLog
@@ -1,3 +1,13 @@
+2003-12-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * AcceptEncodingModule.cs:
+ * AcceptEncodingSectionHandler.cs: moved files from here.
+
+ * GZipWebRequest.cs: small fixes to inject gzip header.
+ * GZipWebRequestCreator.cs: web request creator for gzip.
+ * GZipWebResponse.cs: fixed dispose/close.
+ * NtlmClient.cs: NTLM for HTTP. Used from System.Net.
+
2003-07-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* GZipWebRequest.cs:
diff --git a/mcs/class/Mono.Http/Mono.Http/GZipWebRequest.cs b/mcs/class/Mono.Http/Mono.Http/GZipWebRequest.cs
index 8948747c483..59700214c1d 100644
--- a/mcs/class/Mono.Http/Mono.Http/GZipWebRequest.cs
+++ b/mcs/class/Mono.Http/Mono.Http/GZipWebRequest.cs
@@ -109,6 +109,7 @@ namespace Mono.Http
public override IAsyncResult BeginGetRequestStream (AsyncCallback callback, object state)
{
+ CheckHeader ();
return request.BeginGetRequestStream (callback, state);
}
@@ -119,6 +120,7 @@ namespace Mono.Http
public override Stream GetRequestStream ()
{
+ CheckHeader ();
return request.GetRequestStream ();
}
@@ -142,6 +144,9 @@ namespace Mono.Http
{
WebResponse response = request.EndGetResponse (asyncResult);
bool compressed = (String.Compare (response.Headers ["Content-Encoding"], "gzip", true) == 0);
+ if (!compressed)
+ return response;
+
return new GZipWebResponse (response, compressed);
}
diff --git a/mcs/class/Mono.Http/Mono.Http/GZipWebRequestCreator.cs b/mcs/class/Mono.Http/Mono.Http/GZipWebRequestCreator.cs
new file mode 100644
index 00000000000..9d7e354d203
--- /dev/null
+++ b/mcs/class/Mono.Http/Mono.Http/GZipWebRequestCreator.cs
@@ -0,0 +1,33 @@
+//
+// Mono.Http.GZipWebRequestCreator
+//
+// Authors:
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
+//
+// (C) 2003 Novell, Inc (http://www.novell.com)
+//
+
+using System;
+using System.Net;
+
+namespace Mono.Http
+{
+ public class GZipWebRequestCreator : IWebRequestCreate
+ {
+ public GZipWebRequestCreator ()
+ {
+ }
+
+ public WebRequest Create (Uri uri)
+ {
+ string scheme = uri.Scheme;
+ if (scheme != "gziphttp")
+ throw new ArgumentException ("Must be gziphttp", "uri");
+
+ Uri newuri = new Uri (uri.ToString ().Substring (4));
+ WebRequest req = WebRequest.Create (newuri);
+ return new GZipWebRequest (req);
+ }
+ }
+}
+
diff --git a/mcs/class/Mono.Http/Mono.Http/GZipWebResponse.cs b/mcs/class/Mono.Http/Mono.Http/GZipWebResponse.cs
index 0aba1413f06..0a99222861c 100644
--- a/mcs/class/Mono.Http/Mono.Http/GZipWebResponse.cs
+++ b/mcs/class/Mono.Http/Mono.Http/GZipWebResponse.cs
@@ -72,9 +72,6 @@ namespace System.Net
void SetStream ()
{
- if (stream != null)
- return;
-
lock (this) {
if (stream != null)
return;
@@ -92,16 +89,25 @@ namespace System.Net
void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context)
{
info.AddValue ("response", response);
+ info.AddValue ("compressed", compressed);
}
public override void Close ()
{
- response.Close ();
+ ((IDisposable) this).Dispose ();
}
void IDisposable.Dispose ()
{
- response.Close ();
+ if (stream != null) {
+ stream.Close ();
+ stream = null;
+ }
+
+ if (response != null) {
+ response.Close ();
+ response = null;
+ }
}
}
}
diff --git a/mcs/class/Mono.Http/Mono.Http/NtlmClient.cs b/mcs/class/Mono.Http/Mono.Http/NtlmClient.cs
new file mode 100644
index 00000000000..18ca95095d1
--- /dev/null
+++ b/mcs/class/Mono.Http/Mono.Http/NtlmClient.cs
@@ -0,0 +1,129 @@
+//
+// Mono.Http.NtlmClient
+//
+// Authors:
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
+//
+// (c) 2003 Novell, Inc. (http://www.novell.com)
+//
+
+using System;
+using System.Collections;
+using System.Net;
+using Mono.Security.Protocol.Ntlm;
+
+namespace Mono.Http
+{
+ class NtlmSession
+ {
+ MessageBase message;
+
+ public NtlmSession ()
+ {
+ }
+
+ public Authorization Authenticate (string challenge, WebRequest webRequest, ICredentials credentials)
+ {
+ HttpWebRequest request = webRequest as HttpWebRequest;
+ if (request == null)
+ return null;
+
+ NetworkCredential cred = credentials.GetCredential (request.RequestUri, "NTLM");
+ string userName = cred.UserName;
+ string domain = cred.Domain;
+ string password = cred.Password;
+ if (userName == null || userName == "" || domain == null || domain == "")
+ return null;
+
+ bool completed = false;
+ if (message == null) {
+ Type1Message type1 = new Type1Message ();
+ type1.Domain = domain;
+ message = type1;
+ } else if (message.Type == 1) {
+ // Should I check the credentials?
+ if (challenge == null) {
+ message = null;
+ return null;
+ }
+
+ Type2Message type2 = new Type2Message (Convert.FromBase64String (challenge));
+ if (password == null)
+ password = "";
+
+ Type3Message type3 = new Type3Message ();
+ type3.Domain = domain;
+ type3.Username = userName;
+ type3.Challenge = type2.Nonce;
+ type3.Password = password;
+ message = type3;
+ completed = true;
+ } else {
+ // Should I check the credentials?
+ // type must be 3 here
+ completed = true;
+ }
+
+ string token = "NTLM " + Convert.ToBase64String (message.GetBytes ());
+ return new Authorization (token, completed);
+ }
+ }
+
+ public class NtlmClient : IAuthenticationModule
+ {
+ static Hashtable cache;
+
+ static NtlmClient ()
+ {
+ cache = new Hashtable ();
+ }
+
+ public NtlmClient () {}
+
+ public Authorization Authenticate (string challenge, WebRequest webRequest, ICredentials credentials)
+ {
+ if (credentials == null || challenge == null)
+ return null;
+
+ string header = challenge.Trim ();
+ int idx = header.ToLower ().IndexOf ("ntlm");
+ if (idx == -1)
+ return null;
+
+ idx = header.IndexOfAny (new char [] {' ', '\t'});
+ if (idx != -1) {
+ header = header.Substring (idx).Trim ();
+ } else {
+ header = null;
+ }
+
+ HttpWebRequest request = webRequest as HttpWebRequest;
+ if (request == null)
+ return null;
+
+ lock (cache) {
+ NtlmSession ds = (NtlmSession) cache [request.RequestUri];
+ if (ds == null) {
+ ds = new NtlmSession ();
+ cache.Add (request.RequestUri, ds);
+ }
+
+ return ds.Authenticate (header, webRequest, credentials);
+ }
+ }
+
+ public Authorization PreAuthenticate (WebRequest webRequest, ICredentials credentials)
+ {
+ return null;
+ }
+
+ public string AuthenticationType {
+ get { return "NTLM"; }
+ }
+
+ public bool CanPreAuthenticate {
+ get { return false; }
+ }
+ }
+}
+
diff --git a/mcs/class/Mono.Http/NEWS b/mcs/class/Mono.Http/NEWS
index 4bc0cf2dfed..e3d04b08da6 100644
--- a/mcs/class/Mono.Http/NEWS
+++ b/mcs/class/Mono.Http/NEWS
@@ -1,3 +1,9 @@
+December 12, 2003 - Gonzalo Paniagua
+----------------------------------
+
+* Added NtlmClient
+* Added request creator for gzip.
+
July 26, 2003 - Gonzalo Paniagua
----------------------------------
diff --git a/mcs/class/Mono.Http/samples/ChangeLog b/mcs/class/Mono.Http/samples/ChangeLog
index eb80bb49955..c067ee7c036 100644
--- a/mcs/class/Mono.Http/samples/ChangeLog
+++ b/mcs/class/Mono.Http/samples/ChangeLog
@@ -1,3 +1,8 @@
+2003-12-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * http-get-gzip.cs:
+ * http-get-gzip.exe.config: use the request creator.
+
2003-07-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* ChangeLog:
diff --git a/mcs/class/Mono.Http/samples/http-get-gzip.cs b/mcs/class/Mono.Http/samples/http-get-gzip.cs
index f390896e9dc..1b7e595febc 100644
--- a/mcs/class/Mono.Http/samples/http-get-gzip.cs
+++ b/mcs/class/Mono.Http/samples/http-get-gzip.cs
@@ -15,28 +15,33 @@ using Mono.Http;
class GZipTest
{
- static string url = "http://127.0.0.1/index.php";
-
- static void GZWR ()
+ static void GZWR (string url)
{
- WebRequest req = new GZipWebRequest (WebRequest.Create (url));
+ WebRequest req = WebRequest.Create ("gziphttp://" + url);
WebResponse wr = req.GetResponse ();
- Console.WriteLine ("Content-Encoding: '{0}' (if empty, not compressed)", wr.Headers ["Content-Encoding"]);
Stream st = wr.GetResponseStream ();
byte [] b = new byte [4096];
long total = 0;
int count;
- while ((count = st.Read (b, 0, 4096)) != 0)
+ while ((count = st.Read (b, 0, 4096)) != 0) {
Console.Write (Encoding.Default.GetString (b, 0, count));
+ total += count;
+ }
st.Close ();
- // Console.WriteLine ("Read: {0}", total);
+ Console.WriteLine ("\nContent-Encoding: '{0}' (if empty, not compressed)",
+ wr.Headers ["Content-Encoding"]);
}
- static void Main ()
+ static void Main (string [] args)
{
- GZWR ();
+ if (args.Length != 1) {
+ Console.WriteLine ("You should provide a HTTP URL without 'http://'");
+ return;
+ }
+
+ GZWR (args [0]);
}
}
diff --git a/mcs/class/Mono.Http/samples/http-get-gzip.exe.config b/mcs/class/Mono.Http/samples/http-get-gzip.exe.config
new file mode 100644
index 00000000000..4c6352c2e7b
--- /dev/null
+++ b/mcs/class/Mono.Http/samples/http-get-gzip.exe.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <system.net>
+ <webRequestModules>
+ <add prefix="gziphttp"
+ type="Mono.Http.GZipWebRequestCreator, Mono.Http" />
+ </webRequestModules>
+ </system.net>
+</configuration>
+
+