Imported Upstream version 4.0.3.13
Former-commit-id: 4f1f69b42e04def9a697c2550b23b9cae645ef29
This commit is contained in:
parent
4cee7df5e0
commit
2c051c3d51
@ -85,7 +85,7 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(srcdir)/config.h.in mkinstalldirs \
|
||||
$(srcdir)/mono-core.spec.in $(srcdir)/mono-uninstalled.pc.in \
|
||||
AUTHORS COPYING.LIB ChangeLog NEWS compile config.guess \
|
||||
config.rpath config.sub depcomp install-sh missing ltmain.sh
|
||||
config.rpath config.sub install-sh missing ltmain.sh
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
|
||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||
|
@ -1 +1 @@
|
||||
0d2865058e8904b609431e735d1a6a58dd269476
|
||||
d8620aa82da0a0b38b32fce2756391f51b4f0e09
|
@ -1 +1 @@
|
||||
e26c88521f1fb3392393ffb4a102d2f9441ab54f
|
||||
eb6b931cec597bff05367555adbfdfd531547514
|
@ -122,7 +122,7 @@ mono_code_manager_invalidate (MonoCodeManager *cman)
|
||||
<div class="api-entry">mono_code_manager_new_dynamic</div>
|
||||
|
||||
<div class="prototype">MonoCodeManager*
|
||||
mono_code_manager_new_dynamic (int bind_size)
|
||||
mono_code_manager_new_dynamic (void)
|
||||
|
||||
</div>
|
||||
<p />
|
||||
@ -134,8 +134,6 @@ mono_code_manager_new_dynamic (int bind_size)
|
||||
Creates a new code manager suitable for holding native code that can be
|
||||
used for single or small methods that need to be deallocated independently
|
||||
of other native code.
|
||||
BIND_SIZE is the amount of memory reserved for storing thunks. If its 0,
|
||||
the default size is used.
|
||||
|
||||
|
||||
</div> <a name="api:mono_code_manager_new"></a>
|
||||
|
@ -476,6 +476,33 @@ mono_loader_lock (void)
|
||||
<div class="prototype">Prototype: mono_gc_enable</div>
|
||||
<p />
|
||||
|
||||
</div> <a name="api:mono_gc_is_finalizer_thread"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_gc_is_finalizer_thread</div>
|
||||
|
||||
<div class="prototype">gboolean
|
||||
mono_gc_is_finalizer_thread (MonoThread *thread)
|
||||
|
||||
</div>
|
||||
<p />
|
||||
<b>Parameters</b>
|
||||
<blockquote><dt><i>thread:</i></dt><dd> the thread to test.</dd></blockquote>
|
||||
<b>Remarks</b>
|
||||
<p />
|
||||
In Mono objects are finalized asynchronously on a separate thread.
|
||||
This routine tests whether the <i>thread</i> argument represents the
|
||||
finalization thread.
|
||||
|
||||
<p />
|
||||
Returns true if <i>thread</i> is the finalization thread.
|
||||
|
||||
</div> <a name="api:mono_gc_out_of_memory"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_gc_out_of_memory</div>
|
||||
|
||||
<div class="prototype">Prototype: mono_gc_out_of_memory</div>
|
||||
<p />
|
||||
|
||||
</div> <a name="api:mono_gc_start_world"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_gc_start_world</div>
|
||||
@ -497,6 +524,13 @@ mono_loader_lock (void)
|
||||
<div class="prototype">Prototype: mono_gc_alloc_fixed</div>
|
||||
<p />
|
||||
|
||||
</div> <a name="api:mono_gc_enable_events"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_gc_enable_events</div>
|
||||
|
||||
<div class="prototype">Prototype: mono_gc_enable_events</div>
|
||||
<p />
|
||||
|
||||
</div> <a name="api:mono_gc_free_fixed"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_gc_free_fixed</div>
|
||||
|
@ -111,7 +111,7 @@ mono_print_method_from_ip (void *ip)
|
||||
|
||||
This prints the name of the method at address <i>ip</i> in the standard
|
||||
output. Unlike mono_pmip which returns a string, this routine
|
||||
prints the value on the standard output.
|
||||
prints the value on the standard output.
|
||||
|
||||
</div> <a name="api:mono_print_thread_dump"></a>
|
||||
<div class="api">
|
||||
|
@ -108,6 +108,7 @@ MonoObject* <a href="#api:mono_object_isinst">mono_object_isinst</a>
|
||||
gpointer <a href="#api:mono_object_unbox">mono_object_unbox</a> (MonoObject *obj);
|
||||
MonoObject* <a href="#api:mono_object_castclass_mbyref">mono_object_castclass_mbyref</a> (MonoObject *obj,
|
||||
MonoClass *klass);
|
||||
<a href="#api:mono_object_is_alive"></a>
|
||||
guint <a href="#api:mono_object_get_size">mono_object_get_size</a> (MonoObject* o);
|
||||
MonoObject* <a href="#api:mono_value_box">mono_value_box</a> (MonoDomain *domain,
|
||||
MonoClass *class,
|
||||
@ -422,6 +423,13 @@ mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass)
|
||||
<blockquote> <i>obj</i> if <i>obj</i> is derived from <i>klass</i>, throws an exception otherwise
|
||||
</blockquote>
|
||||
|
||||
</div> <a name="api:mono_object_is_alive"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_object_is_alive</div>
|
||||
|
||||
<div class="prototype">Prototype: mono_object_is_alive</div>
|
||||
<p />
|
||||
|
||||
</div> <a name="api:mono_object_get_size"></a>
|
||||
<div class="api">
|
||||
<div class="api-entry">mono_object_get_size</div>
|
||||
|
@ -104,12 +104,12 @@
|
||||
<div class="api-entry">mono_profiler_install</div>
|
||||
|
||||
<div class="prototype">void
|
||||
mono_profiler_install (MonoProfiler *prof, int version, MonoProfileFunc callback)
|
||||
mono_profiler_install (MonoProfiler *prof, MonoProfileFunc callback)
|
||||
|
||||
</div>
|
||||
<p />
|
||||
<b>Parameters</b>
|
||||
<blockquote><dt><i>prof:</i></dt><dd> a MonoProfiler structure pointer, or a pointer to a derived structure.</dd><dt><i>version:</i></dt><dd> profiler API version (see profiler.h)</dd><dt><i>callback:</i></dt><dd> the function to invoke at shutdown</dd></blockquote>
|
||||
<blockquote><dt><i>prof:</i></dt><dd> a MonoProfiler structure pointer, or a pointer to a derived structure.</dd><dt><i>callback:</i></dt><dd> the function to invoke at shutdown</dd></blockquote>
|
||||
<b>Remarks</b>
|
||||
<p />
|
||||
Use mono_profiler_install to activate profiling in the Mono runtime.
|
||||
|
@ -14,6 +14,7 @@ mobile_SUBDIRS := build class
|
||||
mobile_static_SUBDIRS := build class
|
||||
binary_reference_assemblies_SUBDIRS := build class
|
||||
net_4_5_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs
|
||||
xammac_net_4_5_SUBDIRS := build class
|
||||
xbuild_12_SUBDIRS := build class tools/xbuild
|
||||
xbuild_14_SUBDIRS := build class tools/xbuild
|
||||
|
||||
@ -57,6 +58,7 @@ $(_boot_:%=profile-do--monodroid--%): profile-do--monodroid--%:
|
||||
$(_boot_:%=profile-do--monotouch--%): profile-do--monotouch--%: profile-do--build--%
|
||||
$(_boot_:%=profile-do--monotouch_runtime--%): profile-do--monotouch_runtime--%: profile-do--build--%
|
||||
$(_boot_:%=profile-do--xammac--%): profile-do--xammac--%: profile-do--build--%
|
||||
$(_boot_:%=profile-do--xammac_net_4_5--%): profile-do--xammac_net_4_5--%: profile-do--build--%
|
||||
$(_boot_:%=profile-do--mobile--%): profile-do--mobile--%: profile-do--build--%
|
||||
$(_boot_:%=profile-do--mobile_static--%): profile-do--mobile_static--%: profile-do--build--%
|
||||
$(_boot_:%=profile-do--build--%): profile-do--build--%: profile-do--basic--%
|
||||
|
@ -34,7 +34,7 @@ static class Consts
|
||||
// Use these assembly version constants to make code more maintainable.
|
||||
//
|
||||
|
||||
public const string MonoVersion = "4.0.2.0";
|
||||
public const string MonoVersion = "4.0.3.0";
|
||||
public const string MonoCompany = "Mono development team";
|
||||
public const string MonoProduct = "Mono Common Language Infrastructure";
|
||||
public const string MonoCopyright = "(c) Various Mono authors";
|
||||
|
@ -9,7 +9,6 @@ static class AssemblyRef
|
||||
public const string EcmaPublicKey = "b77a5c561934e089";
|
||||
public const string MicrosoftPublicKey = "b03f5f7f11d50a3a";
|
||||
|
||||
public const string MicrosoftVSDesigner = Consts.AssemblyMicrosoft_VSDesigner;
|
||||
public const string SystemDesign = Consts.AssemblySystem_Design;
|
||||
public const string SystemDrawing = Consts.AssemblySystem_Drawing;
|
||||
public const string SystemWeb = Consts.AssemblySystem_Web;
|
||||
|
@ -18,6 +18,7 @@ net_4_5_SUBDIRS = $(monotouch_SUBDIRS) System.Reflection.Emit.ILGeneration Syste
|
||||
monodroid_SUBDIRS = $(net_4_5_SUBDIRS)
|
||||
|
||||
xammac_SUBDIRS = $(net_4_5_SUBDIRS)
|
||||
xammac_net_4_5_SUBDIRS = $(net_4_5_SUBDIRS)
|
||||
|
||||
PROFILE_SUBDIRS = $(net_4_5_SUBDIRS)
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Channels.TransportSecurityBindingElement))]
|
||||
#if !MOBILE
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.DnsEndpointIdentity))]
|
||||
#if !XAMMAC_4_5
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.MessageSecurityVersion))]
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.BasicSecurityProfileVersion))]
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.SecureConversationVersion))]
|
||||
@ -36,6 +37,7 @@
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.Tokens.SupportingTokenParameters))]
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.Tokens.UserNameSecurityTokenParameters))]
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.Security.TrustVersion))]
|
||||
#endif
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.SpnEndpointIdentity))]
|
||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.ServiceModel.UpnEndpointIdentity))]
|
||||
#endif
|
||||
|
@ -75,6 +75,48 @@ monotouch_runtime_dirs := \
|
||||
System.XML \
|
||||
Mono.CSharp
|
||||
|
||||
xammac_4_5_dirs := \
|
||||
corlib \
|
||||
System \
|
||||
Mono.Posix \
|
||||
System.Core \
|
||||
System.XML \
|
||||
Mono.Security \
|
||||
System \
|
||||
I18N \
|
||||
System.Numerics \
|
||||
Mono.Data.Tds \
|
||||
System.Transactions \
|
||||
System.EnterpriseServices \
|
||||
System.Data \
|
||||
System.Runtime.Serialization \
|
||||
System.Xml.Linq \
|
||||
Mono.Data.Sqlite \
|
||||
System.Runtime.Serialization.Formatters.Soap \
|
||||
System.ComponentModel.DataAnnotations \
|
||||
System.IdentityModel \
|
||||
System.IdentityModel.Selectors \
|
||||
Mono.Messaging \
|
||||
System.Configuration.Install \
|
||||
System.Messaging \
|
||||
System.Web.Services \
|
||||
System.Net \
|
||||
System.ServiceModel \
|
||||
System.ServiceModel.Web \
|
||||
System.Json \
|
||||
System.Data.Services.Client \
|
||||
System.IO.Compression \
|
||||
System.IO.Compression.FileSystem \
|
||||
System.ComponentModel.Composition.4.5 \
|
||||
System.Windows \
|
||||
System.Xml.Serialization \
|
||||
Mono.CSharp \
|
||||
Microsoft.CSharp \
|
||||
Mono.CompilerServices.SymbolWriter \
|
||||
System.Data.Linq \
|
||||
System.Net.Http \
|
||||
$(pcl_facade_dirs)
|
||||
|
||||
net_4_5_dirs := \
|
||||
corlib \
|
||||
System \
|
||||
@ -217,6 +259,7 @@ monotouch_runtime_SUBDIRS := $(monotouch_runtime_dirs)
|
||||
mobile_static_SUBDIRS := $(mobile_static_dirs)
|
||||
mobile_SUBDIRS := $(mobile_dynamic_dirs)
|
||||
xammac_SUBDIRS := $(xammac_dirs)
|
||||
xammac_net_4_5_SUBDIRS := $(xammac_4_5_dirs)
|
||||
binary_reference_assemblies_SUBDIRS := reference-assemblies
|
||||
net_4_5_SUBDIRS := $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
|
||||
xbuild_12_SUBDIRS := $(xbuild_4_0_dirs)
|
||||
@ -224,7 +267,7 @@ xbuild_14_SUBDIRS := $(xbuild_4_0_dirs)
|
||||
|
||||
include ../build/rules.make
|
||||
|
||||
SUBDIRS = $(mobile_static_dirs) $(mobile_dynamic_dirs) $(monotouch_dirs) $(monodroid_dirs) $(xammac_dirs) $(net_4_5_dirs)
|
||||
SUBDIRS = $(mobile_static_dirs) $(mobile_dynamic_dirs) $(monotouch_dirs) $(monodroid_dirs) $(xammac_dirs) $(net_4_5_dirs) $(xammac_net_4_5_SUBDIRS)
|
||||
|
||||
DIST_ONLY_SUBDIRS = dlr aot-compiler reference-assemblies $(xbuild_4_0_dirs)
|
||||
|
||||
|
@ -12,7 +12,7 @@ CLEAN_FILES += $(STRING_MESSAGES)
|
||||
EXTRA_DISTFILES = \
|
||||
src/ComponentModel/Strings.resx
|
||||
|
||||
VALID_PROFILE := $(filter net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
|
||||
VALID_PROFILE := $(filter net_4_5 monotouch monodroid xammac xammac_net_4_5 mobile mobile_static, $(PROFILE))
|
||||
ifndef VALID_PROFILE
|
||||
LIBRARY_NAME = dummy-System.ComponentModel.Composition.dll
|
||||
NO_INSTALL = yes
|
||||
|
@ -0,0 +1 @@
|
||||
#include net_4_5_System.Core.dll.sources
|
@ -17,7 +17,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
||||
EXTRA_DISTFILES = src/DbLinq/Schema/Dbml/DbmlSchema.xsd
|
||||
|
||||
# This is a .NET 3.5+ assembly
|
||||
VALID_PROFILE := $(filter net_4_5, $(PROFILE))
|
||||
VALID_PROFILE := $(filter xammac_net_4_5 net_4_5, $(PROFILE))
|
||||
ifndef VALID_PROFILE
|
||||
LIBRARY_NAME = dummy-System.Data.Linq.dll
|
||||
NO_INSTALL = yes
|
||||
|
@ -17,9 +17,11 @@ LIB_MCS_FLAGS = \
|
||||
-resource:Client/System.Data.Services.Client.resources \
|
||||
-warn:2
|
||||
|
||||
ifndef NO_WINDOWS_BASE
|
||||
ifneq (2.1, $(FRAMEWORK_VERSION))
|
||||
LIB_MCS_FLAGS += -r:WindowsBase
|
||||
endif
|
||||
endif
|
||||
|
||||
include ../../build/library.make
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
#include net_4_5_System.Data.Services.Client.dll.sources
|
@ -8,8 +8,8 @@ LIB_MCS_FLAGS = \
|
||||
-nowarn:649 \
|
||||
-unsafe \
|
||||
-r:System \
|
||||
-r:System.Xml.dll \
|
||||
-r:System.Core.dll
|
||||
-r:System.Xml.dll \
|
||||
-d:NET_2_0
|
||||
|
||||
MOBILE := $(filter monotouch monodroid xammac mobile mobile_static, $(PROFILE))
|
||||
ifdef MOBILE
|
||||
|
@ -11,11 +11,7 @@ static class Bid
|
||||
internal static void TraceEx(uint flags, string fmtPrintfW, params object[] args)
|
||||
{
|
||||
}
|
||||
#if !MOBILE
|
||||
internal static void TraceSqlReturn(string fmtPrintfW, System.Data.Odbc.ODBC32.RetCode a1, string a2)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
internal static void ScopeEnter(out IntPtr hScp, string fmt, params object[] args) {
|
||||
hScp = NoData;
|
||||
}
|
||||
|
@ -0,0 +1,57 @@
|
||||
using System.Data.SqlClient;
|
||||
|
||||
namespace System.Data.Common {
|
||||
internal static class DbConnectionStringDefaults {
|
||||
// all
|
||||
// internal const string NamedConnection = "";
|
||||
|
||||
// Odbc
|
||||
internal const string Driver = "";
|
||||
internal const string Dsn = "";
|
||||
|
||||
// OleDb
|
||||
internal const bool AdoNetPooler = false;
|
||||
internal const string FileName = "";
|
||||
internal const int OleDbServices = ~(/*DBPROPVAL_OS_AGR_AFTERSESSION*/0x00000008 | /*DBPROPVAL_OS_CLIENTCURSOR*/0x00000004); // -13
|
||||
internal const string Provider = "";
|
||||
|
||||
// OracleClient
|
||||
internal const bool Unicode = false;
|
||||
internal const bool OmitOracleConnectionName = false;
|
||||
|
||||
// SqlClient
|
||||
internal const ApplicationIntent ApplicationIntent = System.Data.SqlClient.ApplicationIntent.ReadWrite;
|
||||
internal const string ApplicationName = ".Net SqlClient Data Provider";
|
||||
internal const bool AsynchronousProcessing = false;
|
||||
internal const string AttachDBFilename = "";
|
||||
internal const int ConnectTimeout = 15;
|
||||
internal const bool ConnectionReset = true;
|
||||
internal const bool ContextConnection = false;
|
||||
internal const string CurrentLanguage = "";
|
||||
internal const string DataSource = "";
|
||||
internal const bool Encrypt = false;
|
||||
internal const bool Enlist = true;
|
||||
internal const string FailoverPartner = "";
|
||||
internal const string InitialCatalog = "";
|
||||
internal const bool IntegratedSecurity = false;
|
||||
internal const int LoadBalanceTimeout = 0; // default of 0 means don't use
|
||||
internal const bool MultipleActiveResultSets = false;
|
||||
internal const bool MultiSubnetFailover = false;
|
||||
internal const int MaxPoolSize = 100;
|
||||
internal const int MinPoolSize = 0;
|
||||
internal const string NetworkLibrary = "";
|
||||
internal const int PacketSize = 8000;
|
||||
internal const string Password = "";
|
||||
internal const bool PersistSecurityInfo = false;
|
||||
internal const bool Pooling = true;
|
||||
internal const bool TrustServerCertificate = false;
|
||||
internal const string TypeSystemVersion = "Latest";
|
||||
internal const string UserID = "";
|
||||
internal const bool UserInstance = false;
|
||||
internal const bool Replication = false;
|
||||
internal const string WorkstationID = "";
|
||||
internal const string TransactionBinding = "Implicit Unbind";
|
||||
internal const int ConnectRetryCount = 1;
|
||||
internal const int ConnectRetryInterval = 10;
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
using System.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace System.Data.Odbc {
|
||||
|
||||
internal abstract class OdbcHandle : SafeHandle {
|
||||
|
||||
protected OdbcHandle(ODBC32.SQL_HANDLE handleType, OdbcHandle parentHandle) : base(IntPtr.Zero, true) {
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
internal ODBC32.RetCode GetDiagnosticRecord(short record, out string sqlState, StringBuilder message, out int nativeError, out short cchActual) {
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
}
|
@ -74,7 +74,7 @@ static class Res
|
||||
public const string ADP_InvalidDataType = "ADP_InvalidDataType";
|
||||
public const string ADP_InvalidDateTimeDigits = "ADP_InvalidDateTimeDigits";
|
||||
public const string ADP_InvalidDestinationBufferIndex = "ADP_InvalidDestinationBufferIndex";
|
||||
public const string ADP_InvalidEnumerationValue = "The {0} enumeration value, {1}, is invalid.";
|
||||
public const string ADP_InvalidEnumerationValue = "ADP_InvalidEnumerationValue";
|
||||
public const string ADP_InvalidFormatValue = "ADP_InvalidFormatValue";
|
||||
public const string ADP_InvalidImplicitConversion = "ADP_InvalidImplicitConversion";
|
||||
public const string ADP_InvalidKey = "ADP_InvalidKey";
|
||||
@ -99,7 +99,7 @@ static class Res
|
||||
public const string ADP_InvalidUDL = "ADP_InvalidUDL";
|
||||
public const string ADP_InvalidValue = "ADP_InvalidValue";
|
||||
public const string ADP_InvalidXMLBadVersion = "ADP_InvalidXMLBadVersion";
|
||||
public const string ADP_KeywordNotSupported = "Keyword not supported: '{0}'.";
|
||||
public const string ADP_KeywordNotSupported = "ADP_KeywordNotSupported";
|
||||
public const string ADP_LiteralValueIsInvalid = "ADP_LiteralValueIsInvalid";
|
||||
public const string ADP_LocalTransactionPresent = "ADP_LocalTransactionPresent";
|
||||
public const string ADP_MismatchedAsyncResult = "ADP_MismatchedAsyncResult";
|
||||
|
@ -1,12 +0,0 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace System.Data
|
||||
{
|
||||
sealed class ResCategoryAttribute : CategoryAttribute
|
||||
{
|
||||
public ResCategoryAttribute (string category)
|
||||
: base (category)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
131
mcs/class/System.Data/System.Data.Common/DataColumnMapping.cs
Normal file
131
mcs/class/System.Data/System.Data.Common/DataColumnMapping.cs
Normal file
@ -0,0 +1,131 @@
|
||||
//
|
||||
// System.Data.Common.DataColumnMapping.cs
|
||||
//
|
||||
// Authors:
|
||||
// Rodrigo Moya (rodrigo@ximian.com)
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
//
|
||||
// (C) Ximian, Inc
|
||||
// Copyright (C) Tim Coleman, 2002-2003
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
|
||||
namespace System.Data.Common {
|
||||
#if NET_2_0
|
||||
[TypeConverterAttribute ("System.Data.Common.DataColumnMapping+DataColumnMappingConverter, " + Consts.AssemblySystem_Data)]
|
||||
#else
|
||||
[TypeConverterAttribute (typeof (DataColumnMappingConverter))]
|
||||
#endif
|
||||
public sealed class DataColumnMapping : MarshalByRefObject, IColumnMapping, ICloneable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
string sourceColumn;
|
||||
string dataSetColumn;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
public DataColumnMapping ()
|
||||
{
|
||||
sourceColumn = String.Empty;
|
||||
dataSetColumn = String.Empty;
|
||||
}
|
||||
|
||||
public DataColumnMapping (string sourceColumn, string dataSetColumn)
|
||||
{
|
||||
this.sourceColumn = sourceColumn;
|
||||
this.dataSetColumn = dataSetColumn;
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
#if ONLY_1_1
|
||||
[DataSysDescription ("DataColumn.ColumnName")]
|
||||
#endif
|
||||
[DefaultValue ("")]
|
||||
public string DataSetColumn {
|
||||
get { return dataSetColumn; }
|
||||
set { dataSetColumn = value; }
|
||||
}
|
||||
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("Source column name - case sensitive.")]
|
||||
#endif
|
||||
[DefaultValue ("")]
|
||||
public string SourceColumn {
|
||||
get { return sourceColumn; }
|
||||
set { sourceColumn = value; }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public DataColumn GetDataColumnBySchemaAction (DataTable dataTable, Type dataType, MissingSchemaAction schemaAction)
|
||||
{
|
||||
if (dataTable.Columns.Contains (dataSetColumn))
|
||||
return dataTable.Columns [dataSetColumn];
|
||||
if (schemaAction == MissingSchemaAction.Ignore)
|
||||
return null;
|
||||
if (schemaAction == MissingSchemaAction.Error)
|
||||
throw new InvalidOperationException (String.Format ("Missing the DataColumn '{0}' in the DataTable '{1}' for the SourceColumn '{2}'", DataSetColumn, dataTable.TableName, SourceColumn));
|
||||
return new DataColumn (dataSetColumn, dataType);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public static DataColumn GetDataColumnBySchemaAction (string sourceColumn, string dataSetColumn, DataTable dataTable, Type dataType, MissingSchemaAction schemaAction)
|
||||
{
|
||||
if (dataTable.Columns.Contains (dataSetColumn))
|
||||
return dataTable.Columns [dataSetColumn];
|
||||
if (schemaAction == MissingSchemaAction.Ignore)
|
||||
return null;
|
||||
if (schemaAction == MissingSchemaAction.Error)
|
||||
throw new InvalidOperationException (String.Format ("Missing the DataColumn '{0}' in the DataTable '{1}' for the SourceColumn '{2}'", dataSetColumn, dataTable.TableName, sourceColumn));
|
||||
return new DataColumn (dataSetColumn, dataType);
|
||||
}
|
||||
#endif
|
||||
|
||||
object ICloneable.Clone ()
|
||||
{
|
||||
return new DataColumnMapping (SourceColumn, DataSetColumn);
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return SourceColumn;
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
@ -0,0 +1,338 @@
|
||||
//
|
||||
// System.Data.Common.DataColumnMappingCollection
|
||||
//
|
||||
// Authors:
|
||||
// Rodrigo Moya (rodrigo@ximian.com)
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
//
|
||||
// (C) Ximian, Inc
|
||||
// Copyright (C) Tim Coleman, 2002-2003
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
|
||||
namespace System.Data.Common
|
||||
{
|
||||
public sealed class DataColumnMappingCollection : MarshalByRefObject, IColumnMappingCollection , IList, ICollection, IEnumerable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
readonly ArrayList list;
|
||||
readonly Hashtable sourceColumns;
|
||||
readonly Hashtable dataSetColumns;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
public DataColumnMappingCollection ()
|
||||
{
|
||||
list = new ArrayList ();
|
||||
sourceColumns = new Hashtable ();
|
||||
dataSetColumns = new Hashtable ();
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
[Browsable (false)]
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The number of items in the collection")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
public int Count {
|
||||
get { return list.Count; }
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The specified DataColumnMapping object.")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
public DataColumnMapping this [int index] {
|
||||
get { return (DataColumnMapping)(list[index]); }
|
||||
set {
|
||||
DataColumnMapping mapping = (DataColumnMapping)(list[index]);
|
||||
sourceColumns[mapping] = value;
|
||||
dataSetColumns[mapping] = value;
|
||||
list[index] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The specified DataColumnMapping object.")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
public DataColumnMapping this [string sourceColumn] {
|
||||
get {
|
||||
if (!Contains(sourceColumn))
|
||||
throw new IndexOutOfRangeException("DataColumnMappingCollection doesn't contain DataColumnMapping with SourceColumn '" + sourceColumn + "'.");
|
||||
return (DataColumnMapping) sourceColumns [sourceColumn];
|
||||
}
|
||||
set {
|
||||
this [list.IndexOf (sourceColumns [sourceColumn])] = value;
|
||||
}
|
||||
}
|
||||
|
||||
object ICollection.SyncRoot {
|
||||
get { return list.SyncRoot; }
|
||||
}
|
||||
|
||||
bool ICollection.IsSynchronized {
|
||||
get { return list.IsSynchronized; }
|
||||
}
|
||||
|
||||
object IColumnMappingCollection.this [string index] {
|
||||
get { return this [index]; }
|
||||
set {
|
||||
if (!(value is DataColumnMapping))
|
||||
throw new ArgumentException ();
|
||||
this [index] = (DataColumnMapping) value;
|
||||
}
|
||||
}
|
||||
|
||||
object IList.this [int index] {
|
||||
get { return this [index]; }
|
||||
set {
|
||||
if (!(value is DataColumnMapping))
|
||||
throw new ArgumentException ();
|
||||
this [index] = (DataColumnMapping) value;
|
||||
}
|
||||
}
|
||||
|
||||
bool IList.IsReadOnly {
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
bool IList.IsFixedSize {
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
public int Add (object value)
|
||||
{
|
||||
if (!(value is DataColumnMapping))
|
||||
throw new InvalidCastException ();
|
||||
|
||||
list.Add (value);
|
||||
sourceColumns [((DataColumnMapping) value).SourceColumn] = value;
|
||||
dataSetColumns [((DataColumnMapping )value).DataSetColumn] = value;
|
||||
return list.IndexOf (value);
|
||||
}
|
||||
|
||||
public DataColumnMapping Add (string sourceColumn, string dataSetColumn)
|
||||
{
|
||||
DataColumnMapping mapping = new DataColumnMapping (sourceColumn, dataSetColumn);
|
||||
Add (mapping);
|
||||
return mapping;
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void AddRange (Array values)
|
||||
{
|
||||
for (int i = 0; i < values.Length; ++i)
|
||||
Add (values.GetValue (i));
|
||||
}
|
||||
#endif
|
||||
|
||||
public void AddRange (DataColumnMapping[] values)
|
||||
{
|
||||
foreach (DataColumnMapping mapping in values)
|
||||
Add (mapping);
|
||||
}
|
||||
|
||||
public void Clear ()
|
||||
{
|
||||
list.Clear ();
|
||||
}
|
||||
|
||||
public bool Contains (object value)
|
||||
{
|
||||
if (!(value is DataColumnMapping))
|
||||
throw new InvalidCastException("Object is not of type DataColumnMapping");
|
||||
return (list.Contains (value));
|
||||
}
|
||||
|
||||
public bool Contains (string value)
|
||||
{
|
||||
return (sourceColumns.Contains (value));
|
||||
}
|
||||
|
||||
public void CopyTo (Array array, int index)
|
||||
{
|
||||
list.CopyTo (array,index);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void CopyTo (DataColumnMapping [] array, int index)
|
||||
{
|
||||
list.CopyTo (array, index);
|
||||
}
|
||||
#endif
|
||||
|
||||
public DataColumnMapping GetByDataSetColumn (string value)
|
||||
{
|
||||
// this should work case-insenstive.
|
||||
if (!(dataSetColumns [value] == null))
|
||||
return (DataColumnMapping) (dataSetColumns [value]);
|
||||
else {
|
||||
string lowcasevalue = value.ToLower ();
|
||||
object [] keyarray = new object [dataSetColumns.Count];
|
||||
dataSetColumns.Keys.CopyTo (keyarray, 0);
|
||||
for (int i = 0; i < keyarray.Length; i++) {
|
||||
string temp = (string) keyarray [i];
|
||||
if (lowcasevalue.Equals (temp.ToLower ()))
|
||||
return (DataColumnMapping) (dataSetColumns [keyarray [i]]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public static DataColumnMapping GetColumnMappingBySchemaAction (DataColumnMappingCollection columnMappings, string sourceColumn, MissingMappingAction mappingAction)
|
||||
{
|
||||
if (columnMappings.Contains (sourceColumn))
|
||||
return columnMappings[sourceColumn];
|
||||
if (mappingAction == MissingMappingAction.Ignore)
|
||||
return null;
|
||||
if (mappingAction == MissingMappingAction.Error)
|
||||
throw new InvalidOperationException (String.Format ("Missing SourceColumn mapping for '{0}'", sourceColumn));
|
||||
return new DataColumnMapping (sourceColumn, sourceColumn);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
[MonoTODO]
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public static DataColumn GetDataColumn (DataColumnMappingCollection columnMappings, string sourceColumn, Type dataType, DataTable dataTable, MissingMappingAction mappingAction, MissingSchemaAction schemaAction)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
#endif
|
||||
|
||||
public IEnumerator GetEnumerator ()
|
||||
{
|
||||
return list.GetEnumerator ();
|
||||
}
|
||||
|
||||
IColumnMapping IColumnMappingCollection.Add (string sourceColumnName, string dataSetColumnName)
|
||||
{
|
||||
return Add (sourceColumnName, dataSetColumnName);
|
||||
}
|
||||
|
||||
IColumnMapping IColumnMappingCollection.GetByDataSetColumn (string dataSetColumnName)
|
||||
{
|
||||
return GetByDataSetColumn (dataSetColumnName);
|
||||
}
|
||||
|
||||
public int IndexOf (object value)
|
||||
{
|
||||
return list.IndexOf (value);
|
||||
}
|
||||
|
||||
public int IndexOf (string sourceColumn)
|
||||
{
|
||||
return list.IndexOf (sourceColumns [sourceColumn]);
|
||||
}
|
||||
|
||||
public int IndexOfDataSetColumn (string dataSetColumn)
|
||||
{
|
||||
// this should work case-insensitive
|
||||
if (!(dataSetColumns [dataSetColumn] == null))
|
||||
return list.IndexOf (dataSetColumns [dataSetColumn]);
|
||||
else {
|
||||
string lowcasevalue = dataSetColumn.ToLower ();
|
||||
object [] keyarray = new object[dataSetColumns.Count];
|
||||
dataSetColumns.Keys.CopyTo (keyarray,0);
|
||||
for (int i = 0; i < keyarray.Length; i++) {
|
||||
string temp = (string) keyarray [i];
|
||||
if (lowcasevalue.Equals (temp.ToLower ()))
|
||||
return list.IndexOf (dataSetColumns [keyarray [i]]);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public void Insert (int index, object value)
|
||||
{
|
||||
list.Insert (index, value);
|
||||
sourceColumns [((DataColumnMapping) value).SourceColumn] = value;
|
||||
dataSetColumns [((DataColumnMapping) value).DataSetColumn] = value;
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void Insert (int index, DataColumnMapping value)
|
||||
{
|
||||
list.Insert (index, value);
|
||||
sourceColumns [value.SourceColumn] = value;
|
||||
dataSetColumns [value.DataSetColumn] = value;
|
||||
}
|
||||
#endif
|
||||
|
||||
public void Remove (object value)
|
||||
{
|
||||
int index = list.IndexOf (value);
|
||||
sourceColumns.Remove (((DataColumnMapping) value).SourceColumn);
|
||||
dataSetColumns.Remove (((DataColumnMapping) value).DataSetColumn);
|
||||
if (index < 0 || index >=list.Count)
|
||||
throw new ArgumentException("There is no such element in collection.");
|
||||
list.Remove (value);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void Remove (DataColumnMapping value)
|
||||
{
|
||||
int index = list.IndexOf (value);
|
||||
sourceColumns.Remove (value.SourceColumn);
|
||||
dataSetColumns.Remove (value.DataSetColumn);
|
||||
if ( index < 0 || index >=list.Count)
|
||||
throw new ArgumentException("There is no such element in collection.");
|
||||
list.Remove (value);
|
||||
}
|
||||
#endif
|
||||
|
||||
public void RemoveAt (int index)
|
||||
{
|
||||
if (index < 0 || index >=list.Count)
|
||||
throw new IndexOutOfRangeException("There is no element in collection.");
|
||||
Remove (list [index]);
|
||||
}
|
||||
|
||||
public void RemoveAt (string sourceColumn)
|
||||
{
|
||||
RemoveAt (list.IndexOf (sourceColumns [sourceColumn]));
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
//
|
||||
// System.Data.Common.DataColumnMappingConverter.cs
|
||||
//
|
||||
// Author:
|
||||
// Andreas Nahr (ClassDevelopment@A-SoftTech.com)
|
||||
//
|
||||
// (C) 2004 Andreas Nahr
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace System.Data.Common
|
||||
{
|
||||
internal sealed class DataColumnMappingConverter : ExpandableObjectConverter
|
||||
{
|
||||
[MonoTODO]
|
||||
public DataColumnMappingConverter ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
}
|
159
mcs/class/System.Data/System.Data.Common/DataTableMapping.cs
Normal file
159
mcs/class/System.Data/System.Data.Common/DataTableMapping.cs
Normal file
@ -0,0 +1,159 @@
|
||||
//
|
||||
// System.Data.Common.DataTableMapping.cs
|
||||
//
|
||||
// Authors:
|
||||
// Rodrigo Moya (rodrigo@ximian.com)
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
//
|
||||
// (C) Ximian, Inc
|
||||
// Copyright (C) Tim Coleman, 2002-2003
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
|
||||
namespace System.Data.Common {
|
||||
#if NET_2_0
|
||||
[TypeConverterAttribute ("System.Data.Common.DataTableMapping+DataTableMappingConverter, " + Consts.AssemblySystem_Data)]
|
||||
#else
|
||||
[TypeConverterAttribute (typeof (DataTableMappingConverter))]
|
||||
#endif
|
||||
public sealed class DataTableMapping : MarshalByRefObject, ITableMapping, ICloneable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
string sourceTable;
|
||||
string dataSetTable;
|
||||
DataColumnMappingCollection columnMappings;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
public DataTableMapping ()
|
||||
{
|
||||
dataSetTable = String.Empty;
|
||||
sourceTable = String.Empty;
|
||||
columnMappings = new DataColumnMappingCollection ();
|
||||
}
|
||||
|
||||
public DataTableMapping (string sourceTable, string dataSetTable)
|
||||
: this ()
|
||||
{
|
||||
this.sourceTable = sourceTable;
|
||||
this.dataSetTable = dataSetTable;
|
||||
}
|
||||
|
||||
public DataTableMapping (string sourceTable, string dataSetTable, DataColumnMapping[] columnMappings)
|
||||
: this (sourceTable, dataSetTable)
|
||||
{
|
||||
this.columnMappings.AddRange (columnMappings);
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("Individual columns mappings when this table mapping is matched.")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
|
||||
public DataColumnMappingCollection ColumnMappings {
|
||||
get { return columnMappings; }
|
||||
}
|
||||
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("DataTable.TableName")]
|
||||
#endif
|
||||
[DefaultValue ("")]
|
||||
public string DataSetTable {
|
||||
get { return dataSetTable; }
|
||||
set { dataSetTable = value; }
|
||||
}
|
||||
|
||||
IColumnMappingCollection ITableMapping.ColumnMappings {
|
||||
get { return ColumnMappings; }
|
||||
}
|
||||
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The DataTableMapping source table name. This name is case sensitive.")]
|
||||
#endif
|
||||
[DefaultValue ("")]
|
||||
public string SourceTable {
|
||||
get { return sourceTable; }
|
||||
set { sourceTable = value; }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public DataColumnMapping GetColumnMappingBySchemaAction (string sourceColumn, MissingMappingAction mappingAction)
|
||||
{
|
||||
return DataColumnMappingCollection.GetColumnMappingBySchemaAction (columnMappings, sourceColumn, mappingAction);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
[MonoTODO]
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public DataColumn GetDataColumn (string sourceColumn,
|
||||
Type dataType,
|
||||
DataTable dataTable,
|
||||
MissingMappingAction mappingAction,
|
||||
MissingSchemaAction schemaAction)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
#endif
|
||||
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public DataTable GetDataTableBySchemaAction (DataSet dataSet, MissingSchemaAction schemaAction)
|
||||
{
|
||||
if (dataSet.Tables.Contains (DataSetTable))
|
||||
return dataSet.Tables [DataSetTable];
|
||||
if (schemaAction == MissingSchemaAction.Ignore)
|
||||
return null;
|
||||
if (schemaAction == MissingSchemaAction.Error)
|
||||
throw new InvalidOperationException (String.Format ("Missing the '{0} DataTable for the '{1}' SourceTable", DataSetTable, SourceTable));
|
||||
return new DataTable (DataSetTable);
|
||||
}
|
||||
|
||||
object ICloneable.Clone ()
|
||||
{
|
||||
DataColumnMapping [] arr = new DataColumnMapping [columnMappings.Count];
|
||||
columnMappings.CopyTo (arr, 0);
|
||||
return new DataTableMapping (SourceTable, DataSetTable, arr);
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return SourceTable;
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
@ -0,0 +1,326 @@
|
||||
//
|
||||
// System.Data.Common.DataTableMappingCollection.cs
|
||||
//
|
||||
// Author:
|
||||
// Rodrigo Moya (rodrigo@ximian.com)
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
//
|
||||
// (C) Ximian, Inc
|
||||
// Copyright (C) Tim Coleman, 2002-2003
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace System.Data.Common
|
||||
{
|
||||
[ListBindable (false)]
|
||||
[EditorAttribute ("Microsoft.VSDesigner.Data.Design.DataTableMappingCollectionEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
|
||||
public sealed class DataTableMappingCollection : MarshalByRefObject, ITableMappingCollection, IList, ICollection, IEnumerable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
ArrayList mappings;
|
||||
Hashtable sourceTables;
|
||||
Hashtable dataSetTables;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public DataTableMappingCollection()
|
||||
{
|
||||
mappings = new ArrayList ();
|
||||
sourceTables = new Hashtable ();
|
||||
dataSetTables = new Hashtable ();
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
[Browsable (false)]
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The number of items in the collection")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
public int Count {
|
||||
get { return mappings.Count; }
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The specified DataTableMapping object")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
public DataTableMapping this [int index] {
|
||||
get { return (DataTableMapping)(mappings[index]); }
|
||||
set {
|
||||
DataTableMapping mapping = (DataTableMapping) mappings[index];
|
||||
sourceTables [mapping.SourceTable] = value;
|
||||
dataSetTables [mapping.DataSetTable] = value;
|
||||
mappings [index] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
#if !NET_2_0
|
||||
[DataSysDescription ("The specified DataTableMapping object")]
|
||||
#endif
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
public DataTableMapping this [string sourceTable] {
|
||||
get { return (DataTableMapping) sourceTables[sourceTable]; }
|
||||
set { this [mappings.IndexOf (sourceTables[sourceTable])] = value; }
|
||||
}
|
||||
|
||||
object IList.this [int index] {
|
||||
get { return (object)(this[index]); }
|
||||
set {
|
||||
if (!(value is DataTableMapping))
|
||||
throw new ArgumentException ();
|
||||
this[index] = (DataTableMapping)value;
|
||||
}
|
||||
}
|
||||
|
||||
bool ICollection.IsSynchronized {
|
||||
get { return mappings.IsSynchronized; }
|
||||
}
|
||||
|
||||
object ICollection.SyncRoot {
|
||||
get { return mappings.SyncRoot; }
|
||||
}
|
||||
|
||||
bool IList.IsFixedSize {
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
bool IList.IsReadOnly {
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
object ITableMappingCollection.this [string index] {
|
||||
get { return this [index]; }
|
||||
set {
|
||||
if (!(value is DataTableMapping))
|
||||
throw new ArgumentException ();
|
||||
this [index] = (DataTableMapping) value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
public int Add (object value)
|
||||
{
|
||||
if (!(value is System.Data.Common.DataTableMapping))
|
||||
throw new InvalidCastException ("The object passed in was not a DataTableMapping object.");
|
||||
|
||||
sourceTables [((DataTableMapping) value).SourceTable] = value;
|
||||
dataSetTables [((DataTableMapping) value).DataSetTable] = value;
|
||||
return mappings.Add (value);
|
||||
}
|
||||
|
||||
public DataTableMapping Add (string sourceTable, string dataSetTable)
|
||||
{
|
||||
DataTableMapping mapping = new DataTableMapping (sourceTable, dataSetTable);
|
||||
Add (mapping);
|
||||
return mapping;
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void AddRange (Array values)
|
||||
{
|
||||
for (int i = 0; i < values.Length; ++i)
|
||||
Add (values.GetValue (i));
|
||||
}
|
||||
#endif
|
||||
|
||||
public void AddRange (DataTableMapping[] values)
|
||||
{
|
||||
foreach (DataTableMapping dataTableMapping in values)
|
||||
this.Add (dataTableMapping);
|
||||
}
|
||||
|
||||
public void Clear ()
|
||||
{
|
||||
sourceTables.Clear ();
|
||||
dataSetTables.Clear ();
|
||||
mappings.Clear ();
|
||||
}
|
||||
|
||||
public bool Contains (object value)
|
||||
{
|
||||
return mappings.Contains (value);
|
||||
}
|
||||
|
||||
public bool Contains (string value)
|
||||
{
|
||||
return sourceTables.Contains (value);
|
||||
}
|
||||
|
||||
public void CopyTo (Array array, int index)
|
||||
{
|
||||
mappings.CopyTo (array, index);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void CopyTo (DataTableMapping[] array, int index)
|
||||
{
|
||||
mappings.CopyTo (array, index);
|
||||
}
|
||||
#endif
|
||||
|
||||
public DataTableMapping GetByDataSetTable (string dataSetTable)
|
||||
{
|
||||
// this should work case-insenstive.
|
||||
if (!(dataSetTables[dataSetTable] == null))
|
||||
return (DataTableMapping) (dataSetTables [dataSetTable]);
|
||||
else {
|
||||
string lowcasevalue = dataSetTable.ToLower ();
|
||||
object [] keyarray = new object [dataSetTables.Count];
|
||||
dataSetTables.Keys.CopyTo (keyarray, 0);
|
||||
for (int i=0; i<keyarray.Length; i++) {
|
||||
string temp = (string) keyarray [i];
|
||||
if (lowcasevalue.Equals (temp.ToLower ()))
|
||||
return (DataTableMapping) (dataSetTables [keyarray [i]]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
[EditorBrowsable (EditorBrowsableState.Advanced)]
|
||||
public static DataTableMapping GetTableMappingBySchemaAction (DataTableMappingCollection tableMappings, string sourceTable, string dataSetTable, MissingMappingAction mappingAction)
|
||||
{
|
||||
if (tableMappings.Contains (sourceTable))
|
||||
return tableMappings[sourceTable];
|
||||
if (mappingAction == MissingMappingAction.Error)
|
||||
throw new InvalidOperationException (String.Format ("Missing source table mapping: '{0}'",
|
||||
sourceTable));
|
||||
if (mappingAction == MissingMappingAction.Ignore)
|
||||
return null;
|
||||
return new DataTableMapping (sourceTable, dataSetTable);
|
||||
}
|
||||
|
||||
public IEnumerator GetEnumerator ()
|
||||
{
|
||||
return mappings.GetEnumerator ();
|
||||
}
|
||||
|
||||
public int IndexOf (object value)
|
||||
{
|
||||
return mappings.IndexOf (value);
|
||||
}
|
||||
|
||||
public int IndexOf (string sourceTable)
|
||||
{
|
||||
return IndexOf (sourceTables[sourceTable]);
|
||||
}
|
||||
|
||||
public int IndexOfDataSetTable (string dataSetTable)
|
||||
{
|
||||
// this should work case-insensitive
|
||||
if (!(dataSetTables[dataSetTable] == null))
|
||||
return IndexOf ((DataTableMapping)(dataSetTables[dataSetTable]));
|
||||
else {
|
||||
string lowcasevalue = dataSetTable.ToLower();
|
||||
object [] keyarray = new object[dataSetTables.Count];
|
||||
dataSetTables.Keys.CopyTo(keyarray,0);
|
||||
for (int i=0; i<keyarray.Length; i++) {
|
||||
string temp = (string) keyarray[i];
|
||||
if (lowcasevalue.Equals(temp.ToLower()))
|
||||
return IndexOf ((DataTableMapping)(dataSetTables[keyarray[i]]));
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void Insert (int index, object value)
|
||||
{
|
||||
mappings.Insert (index, value);
|
||||
sourceTables [((DataTableMapping) value).SourceTable] = value;
|
||||
dataSetTables [((DataTableMapping) value).DataSetTable] = value;
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void Insert (int index, DataTableMapping value)
|
||||
{
|
||||
mappings.Insert (index, value);
|
||||
sourceTables [value.SourceTable] = value;
|
||||
dataSetTables [value.DataSetTable] = value;
|
||||
}
|
||||
#endif
|
||||
|
||||
ITableMapping ITableMappingCollection.Add (string sourceTableName, string dataSetTableName)
|
||||
{
|
||||
ITableMapping tableMapping = new DataTableMapping (sourceTableName, dataSetTableName);
|
||||
Add (tableMapping);
|
||||
return tableMapping;
|
||||
}
|
||||
|
||||
ITableMapping ITableMappingCollection.GetByDataSetTable (string dataSetTableName)
|
||||
{
|
||||
return this [mappings.IndexOf (dataSetTables [dataSetTableName])];
|
||||
}
|
||||
|
||||
public void Remove (object value)
|
||||
{
|
||||
if (!(value is DataTableMapping))
|
||||
throw new InvalidCastException ();
|
||||
int index = mappings.IndexOf (value);
|
||||
if (index < 0 || index >= mappings.Count)
|
||||
throw new ArgumentException("There is no such element in collection.");
|
||||
mappings.Remove ((DataTableMapping) value);
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
public void Remove (DataTableMapping value)
|
||||
{
|
||||
int index = mappings.IndexOf (value);
|
||||
if (index < 0 || index >= mappings.Count)
|
||||
throw new ArgumentException("There is no such element in collection.");
|
||||
mappings.Remove ((DataTableMapping) value);
|
||||
}
|
||||
#endif
|
||||
|
||||
public void RemoveAt (int index)
|
||||
{
|
||||
if (index < 0 || index >= mappings.Count)
|
||||
throw new IndexOutOfRangeException("There is no element in collection.");
|
||||
|
||||
mappings.RemoveAt (index);
|
||||
}
|
||||
|
||||
public void RemoveAt (string sourceTable)
|
||||
{
|
||||
RemoveAt (mappings.IndexOf (sourceTables[sourceTable]));
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
//
|
||||
// System.Data.Common.DataTableMappingConverter.cs
|
||||
//
|
||||
// Author:
|
||||
// Andreas Nahr (ClassDevelopment@A-SoftTech.com)
|
||||
//
|
||||
// (C) 2004 Andreas Nahr
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace System.Data.Common
|
||||
{
|
||||
internal sealed class DataTableMappingConverter : ExpandableObjectConverter
|
||||
{
|
||||
[MonoTODO]
|
||||
public DataTableMappingConverter ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
}
|
257
mcs/class/System.Data/System.Data.Common/DbConnectionOptions.cs
Normal file
257
mcs/class/System.Data/System.Data.Common/DbConnectionOptions.cs
Normal file
@ -0,0 +1,257 @@
|
||||
//
|
||||
// System.Data.Common.DbConnectionOptions
|
||||
// adapted from older (pre beta1) DbConnectionString
|
||||
//
|
||||
// Authors:
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
// Sebastien Pouliot <sebastien@ximian.com>
|
||||
//
|
||||
// Copyright (C) Tim Coleman, 2003
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
#if NET_2_0
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Data.Common {
|
||||
|
||||
internal class DbConnectionOptions {
|
||||
|
||||
#region Fields
|
||||
|
||||
internal NameValueCollection options;
|
||||
internal string normalizedConnectionString;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
internal DbConnectionOptions ()
|
||||
{
|
||||
}
|
||||
|
||||
protected internal DbConnectionOptions (DbConnectionOptions connectionOptions)
|
||||
{
|
||||
options = connectionOptions.options;
|
||||
}
|
||||
|
||||
public DbConnectionOptions (string connectionString)
|
||||
{
|
||||
options = new NameValueCollection ();
|
||||
ParseConnectionString (connectionString);
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public DbConnectionOptions (string connectionString, Hashtable synonyms, bool useFirstKeyValuePair)
|
||||
: this (connectionString)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
[MonoTODO]
|
||||
public bool IsEmpty {
|
||||
get { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
public string this [string keyword] {
|
||||
get { return options [keyword]; }
|
||||
}
|
||||
|
||||
public ICollection Keys {
|
||||
get { return options.Keys; }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
[MonoTODO]
|
||||
protected void BuildConnectionString (StringBuilder builder, string[] withoutOptions, string insertValue)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
public bool ContainsKey (string keyword)
|
||||
{
|
||||
return (options.Get (keyword) != null);
|
||||
}
|
||||
|
||||
public bool ConvertValueToBoolean (string keyname, bool defaultvalue)
|
||||
{
|
||||
if (ContainsKey (keyname))
|
||||
return Boolean.Parse (this [keyname].Trim ());
|
||||
return defaultvalue;
|
||||
}
|
||||
|
||||
public int ConvertValueToInt32 (string keyname, int defaultvalue)
|
||||
{
|
||||
if (ContainsKey (keyname))
|
||||
return Int32.Parse (this [keyname].Trim ());
|
||||
return defaultvalue;
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public bool ConvertValueToIntegratedSecurity ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
public string ConvertValueToString (string keyname, string defaultValue)
|
||||
{
|
||||
if (ContainsKey (keyname))
|
||||
return this [keyname];
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
protected internal virtual PermissionSet CreatePermissionSet ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
protected internal virtual string Expand ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public static string RemoveKeyValuePairs (string connectionString, string[] keynames)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public string UsersConnectionString (bool hisPasswordPwd)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
internal void ParseConnectionString (string connectionString)
|
||||
{
|
||||
if (connectionString.Length == 0)
|
||||
return;
|
||||
|
||||
connectionString += ";";
|
||||
|
||||
bool inQuote = false;
|
||||
bool inDQuote = false;
|
||||
bool inName = true;
|
||||
|
||||
string name = String.Empty;
|
||||
string value = String.Empty;
|
||||
StringBuilder sb = new StringBuilder ();
|
||||
|
||||
for (int i = 0; i < connectionString.Length; i += 1) {
|
||||
char c = connectionString [i];
|
||||
char peek;
|
||||
if (i == connectionString.Length - 1)
|
||||
peek = '\0';
|
||||
else
|
||||
peek = connectionString [i + 1];
|
||||
|
||||
switch (c) {
|
||||
case '\'':
|
||||
if (inDQuote)
|
||||
sb.Append (c);
|
||||
else if (peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
i += 1;
|
||||
}
|
||||
else
|
||||
inQuote = !inQuote;
|
||||
break;
|
||||
case '"':
|
||||
if (inQuote)
|
||||
sb.Append (c);
|
||||
else if (peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
i += 1;
|
||||
}
|
||||
else
|
||||
inDQuote = !inDQuote;
|
||||
break;
|
||||
case ';':
|
||||
if (inDQuote || inQuote)
|
||||
sb.Append (c);
|
||||
else {
|
||||
if (name != String.Empty && name != null) {
|
||||
value = sb.ToString ();
|
||||
// FIXME - KeywordLookup is an NOP
|
||||
// options [KeywordLookup (name.Trim ())] = value;
|
||||
options [name.Trim ()] = value;
|
||||
}
|
||||
inName = true;
|
||||
name = String.Empty;
|
||||
value = String.Empty;
|
||||
sb = new StringBuilder ();
|
||||
}
|
||||
break;
|
||||
case '=':
|
||||
if (inDQuote || inQuote || !inName)
|
||||
sb.Append (c);
|
||||
else if (peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
i += 1;
|
||||
}
|
||||
else {
|
||||
name = sb.ToString ();
|
||||
sb = new StringBuilder ();
|
||||
inName = false;
|
||||
}
|
||||
break;
|
||||
case ' ':
|
||||
if (inQuote || inDQuote)
|
||||
sb.Append (c);
|
||||
else if (sb.Length > 0 && !peek.Equals (';'))
|
||||
sb.Append (c);
|
||||
break;
|
||||
default:
|
||||
sb.Append (c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder normalized = new StringBuilder ();
|
||||
ArrayList keys = new ArrayList ();
|
||||
keys.AddRange (Keys);
|
||||
keys.Sort ();
|
||||
foreach (string key in keys)
|
||||
{
|
||||
string entry = String.Format ("{0}=\"{1}\";", key, this [key].Replace ("\"", "\"\""));
|
||||
normalized.Append (entry);
|
||||
}
|
||||
normalizedConnectionString = normalized.ToString ();
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
113
mcs/class/System.Data/System.Data.Common/DbConnectionString.cs
Normal file
113
mcs/class/System.Data/System.Data.Common/DbConnectionString.cs
Normal file
@ -0,0 +1,113 @@
|
||||
//
|
||||
// System.Data.Common.DbConnectionString
|
||||
//
|
||||
// Authors:
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
// Sebastien Pouliot <sebastien@ximian.com>
|
||||
//
|
||||
// Copyright (C) Tim Coleman, 2003
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
#if NET_2_0
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Data.Common {
|
||||
|
||||
[Obsolete ()]
|
||||
internal class DbConnectionString : DbConnectionOptions, ISerializable {
|
||||
|
||||
#region Fields
|
||||
|
||||
KeyRestrictionBehavior behavior;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
protected internal DbConnectionString (DbConnectionString constr)
|
||||
{
|
||||
options = constr.options;
|
||||
}
|
||||
|
||||
public DbConnectionString (string connectionString)
|
||||
: base (connectionString)
|
||||
{
|
||||
options = new NameValueCollection ();
|
||||
ParseConnectionString (connectionString);
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
protected DbConnectionString (SerializationInfo si, StreamingContext sc)
|
||||
{
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public DbConnectionString (string connectionString, string restrictions, KeyRestrictionBehavior behavior)
|
||||
: this (connectionString)
|
||||
{
|
||||
this.behavior = behavior;
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
public KeyRestrictionBehavior Behavior {
|
||||
get { return behavior; }
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public string Restrictions {
|
||||
get { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
[MonoTODO]
|
||||
public virtual void GetObjectData (SerializationInfo info, StreamingContext context)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
protected virtual string KeywordLookup (string keyname)
|
||||
{
|
||||
return keyname;
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
public virtual void PermissionDemand ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,802 @@
|
||||
//
|
||||
// System.Data.Common.DbConnectionStringBuilder.cs
|
||||
//
|
||||
// Author:
|
||||
// Sureshkumar T (tsureshkumar@novell.com)
|
||||
// Gert Driesen (drieseng@users.sourceforge.net
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
#if NET_2_0
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Data.Common
|
||||
{
|
||||
public class DbConnectionStringBuilder : IDictionary, ICollection, IEnumerable, ICustomTypeDescriptor
|
||||
{
|
||||
#region Fields
|
||||
|
||||
readonly Dictionary<string, object> _dictionary;
|
||||
readonly bool useOdbcRules;
|
||||
|
||||
#endregion Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
public DbConnectionStringBuilder () : this (false)
|
||||
{
|
||||
}
|
||||
|
||||
public DbConnectionStringBuilder (bool useOdbcRules)
|
||||
{
|
||||
this.useOdbcRules = useOdbcRules;
|
||||
_dictionary = new Dictionary <string, object> (StringComparer.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
[EditorBrowsable (EditorBrowsableState.Never)]
|
||||
[Browsable (false)]
|
||||
[DesignOnly (true)]
|
||||
public bool BrowsableConnectionString {
|
||||
get { throw new NotImplementedException (); }
|
||||
set { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
[RefreshProperties (RefreshProperties.All)]
|
||||
public string ConnectionString {
|
||||
get {
|
||||
IDictionary<string, object> dictionary = (IDictionary <string, object>) _dictionary;
|
||||
StringBuilder sb = new StringBuilder ();
|
||||
foreach (string key in Keys) {
|
||||
object value = null;
|
||||
if (!dictionary.TryGetValue (key, out value))
|
||||
continue;
|
||||
string val = value.ToString ();
|
||||
AppendKeyValuePair (sb, key, val, useOdbcRules);
|
||||
}
|
||||
return sb.ToString ();
|
||||
}
|
||||
set {
|
||||
Clear ();
|
||||
if (value == null)
|
||||
return;
|
||||
if (value.Trim ().Length == 0)
|
||||
return;
|
||||
ParseConnectionString (value);
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
public virtual int Count
|
||||
{
|
||||
get { return _dictionary.Count; }
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
public virtual bool IsFixedSize
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
public bool IsReadOnly
|
||||
{
|
||||
get { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
public virtual object this [string keyword] {
|
||||
get {
|
||||
if (ContainsKey (keyword))
|
||||
return _dictionary [keyword];
|
||||
else
|
||||
throw new ArgumentException (string.Format (
|
||||
"Keyword '{0}' does not exist",
|
||||
keyword));
|
||||
}
|
||||
set {
|
||||
if (value == null) {
|
||||
Remove (keyword);
|
||||
return;
|
||||
}
|
||||
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
|
||||
if (keyword.Length == 0)
|
||||
throw CreateInvalidKeywordException (keyword);
|
||||
|
||||
for (int i = 0; i < keyword.Length; i++) {
|
||||
char c = keyword [i];
|
||||
if (i == 0 && (Char.IsWhiteSpace (c) || c == ';'))
|
||||
throw CreateInvalidKeywordException (keyword);
|
||||
if (i == (keyword.Length - 1) && Char.IsWhiteSpace (c))
|
||||
throw CreateInvalidKeywordException (keyword);
|
||||
if (Char.IsControl (c))
|
||||
throw CreateInvalidKeywordException (keyword);
|
||||
}
|
||||
|
||||
if (ContainsKey (keyword))
|
||||
_dictionary [keyword] = value;
|
||||
else
|
||||
_dictionary.Add (keyword, value);
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
public virtual ICollection Keys
|
||||
{
|
||||
get {
|
||||
string [] keys = new string [_dictionary.Keys.Count];
|
||||
((ICollection<string>) _dictionary.Keys).CopyTo (keys, 0);
|
||||
ReadOnlyCollection<string> keyColl = new ReadOnlyCollection<string> (keys);
|
||||
return keyColl;
|
||||
}
|
||||
}
|
||||
|
||||
bool ICollection.IsSynchronized
|
||||
{
|
||||
get { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
object ICollection.SyncRoot
|
||||
{
|
||||
get { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
object IDictionary.this [object keyword]
|
||||
{
|
||||
get { return this [(string) keyword]; }
|
||||
set { this [(string) keyword] = value; }
|
||||
}
|
||||
|
||||
[Browsable (false)]
|
||||
public virtual ICollection Values {
|
||||
get {
|
||||
object [] values = new object [_dictionary.Values.Count];
|
||||
((ICollection<object>) _dictionary.Values).CopyTo (values, 0);
|
||||
ReadOnlyCollection<object> valuesColl = new ReadOnlyCollection<object> (values);
|
||||
return valuesColl;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
public void Add (string keyword, object value)
|
||||
{
|
||||
this [keyword] = value;
|
||||
}
|
||||
|
||||
public static void AppendKeyValuePair (StringBuilder builder, string keyword, string value,
|
||||
bool useOdbcRules)
|
||||
{
|
||||
if (builder == null)
|
||||
throw new ArgumentNullException ("builder");
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyName");
|
||||
if (keyword.Length == 0)
|
||||
throw new ArgumentException ("Empty keyword is not valid.");
|
||||
|
||||
if (builder.Length > 0)
|
||||
builder.Append (';');
|
||||
if (!useOdbcRules)
|
||||
builder.Append (keyword.Replace ("=", "=="));
|
||||
else
|
||||
builder.Append (keyword);
|
||||
builder.Append ('=');
|
||||
|
||||
if (value == null || value.Length == 0)
|
||||
return;
|
||||
|
||||
if (!useOdbcRules) {
|
||||
bool dquoteFound = (value.IndexOf ('\"') > -1);
|
||||
bool squoteFound = (value.IndexOf ('\'') > -1);
|
||||
|
||||
if (dquoteFound && squoteFound) {
|
||||
builder.Append ('\"');
|
||||
builder.Append (value.Replace ("\"", "\"\""));
|
||||
builder.Append ('\"');
|
||||
} else if (dquoteFound) {
|
||||
builder.Append ('\'');
|
||||
builder.Append (value);
|
||||
builder.Append ('\'');
|
||||
} else if (squoteFound || value.IndexOf ('=') > -1 || value.IndexOf (';') > -1) {
|
||||
builder.Append ('\"');
|
||||
builder.Append (value);
|
||||
builder.Append ('\"');
|
||||
} else if (ValueNeedsQuoting (value)) {
|
||||
builder.Append ('\"');
|
||||
builder.Append (value);
|
||||
builder.Append ('\"');
|
||||
} else
|
||||
builder.Append (value);
|
||||
} else {
|
||||
int braces = 0;
|
||||
bool semicolonFound = false;
|
||||
int len = value.Length;
|
||||
bool needBraces = false;
|
||||
|
||||
int lastChar = -1;
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
int peek = 0;
|
||||
if (i == (len - 1))
|
||||
peek = -1;
|
||||
else
|
||||
peek = value [i + 1];
|
||||
|
||||
char c = value [i];
|
||||
switch (c) {
|
||||
case '{':
|
||||
braces++;
|
||||
break;
|
||||
case '}':
|
||||
if (peek.Equals (c)) {
|
||||
i++;
|
||||
continue;
|
||||
} else {
|
||||
braces--;
|
||||
if (peek != -1)
|
||||
needBraces = true;
|
||||
}
|
||||
break;
|
||||
case ';':
|
||||
semicolonFound = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
lastChar = c;
|
||||
}
|
||||
|
||||
if (value [0] == '{' && (lastChar != '}' || (braces == 0 && needBraces))) {
|
||||
builder.Append ('{');
|
||||
builder.Append (value.Replace ("}", "}}"));
|
||||
builder.Append ('}');
|
||||
return;
|
||||
}
|
||||
|
||||
bool isDriver = (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0);
|
||||
if (isDriver) {
|
||||
if (value [0] == '{' && lastChar == '}' && !needBraces) {
|
||||
builder.Append (value);
|
||||
return;
|
||||
}
|
||||
builder.Append ('{');
|
||||
builder.Append (value.Replace ("}", "}}"));
|
||||
builder.Append ('}');
|
||||
return;
|
||||
}
|
||||
|
||||
if (value [0] == '{' && (braces != 0 || lastChar != '}') && needBraces) {
|
||||
builder.Append ('{');
|
||||
builder.Append (value.Replace ("}", "}}"));
|
||||
builder.Append ('}');
|
||||
return;
|
||||
}
|
||||
|
||||
if (value [0] != '{' && semicolonFound) {
|
||||
builder.Append ('{');
|
||||
builder.Append (value.Replace ("}", "}}"));
|
||||
builder.Append ('}');
|
||||
return;
|
||||
}
|
||||
|
||||
builder.Append (value);
|
||||
}
|
||||
}
|
||||
|
||||
public static void AppendKeyValuePair (StringBuilder builder, string keyword, string value)
|
||||
{
|
||||
AppendKeyValuePair (builder, keyword, value, false);
|
||||
}
|
||||
|
||||
public virtual void Clear ()
|
||||
{
|
||||
_dictionary.Clear ();
|
||||
}
|
||||
|
||||
public virtual bool ContainsKey (string keyword)
|
||||
{
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
return _dictionary.ContainsKey (keyword);
|
||||
}
|
||||
|
||||
public virtual bool EquivalentTo (DbConnectionStringBuilder connectionStringBuilder)
|
||||
{
|
||||
bool ret = true;
|
||||
try {
|
||||
if (Count != connectionStringBuilder.Count)
|
||||
ret = false;
|
||||
else {
|
||||
foreach (string key in Keys) {
|
||||
if (!this [key].Equals (connectionStringBuilder [key])) {
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ArgumentException) {
|
||||
ret = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
protected virtual void GetProperties (Hashtable propertyDescriptors)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
[MonoTODO]
|
||||
protected internal void ClearPropertyDescriptors ()
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
public virtual bool Remove (string keyword)
|
||||
{
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
return _dictionary.Remove (keyword);
|
||||
}
|
||||
|
||||
public virtual bool ShouldSerialize (string keyword)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
void ICollection.CopyTo (Array array, int index)
|
||||
{
|
||||
if (array == null)
|
||||
throw new ArgumentNullException ("array");
|
||||
KeyValuePair<string, object> [] arr = array as KeyValuePair<string, object> [];
|
||||
if (arr == null)
|
||||
throw new ArgumentException ("Target array type is not compatible with the type of items in the collection");
|
||||
((ICollection<KeyValuePair<string, object>>) _dictionary).CopyTo (arr, index);
|
||||
}
|
||||
|
||||
void IDictionary.Add (object keyword, object value)
|
||||
{
|
||||
this.Add ((string) keyword, value);
|
||||
}
|
||||
|
||||
bool IDictionary.Contains (object keyword)
|
||||
{
|
||||
return ContainsKey ((string) keyword);
|
||||
}
|
||||
|
||||
IDictionaryEnumerator IDictionary.GetEnumerator ()
|
||||
{
|
||||
return (IDictionaryEnumerator) _dictionary.GetEnumerator ();
|
||||
}
|
||||
|
||||
void IDictionary.Remove (object keyword)
|
||||
{
|
||||
Remove ((string) keyword);
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator ()
|
||||
{
|
||||
return (IEnumerator) _dictionary.GetEnumerator ();
|
||||
}
|
||||
|
||||
private static object _staticAttributeCollection = null;
|
||||
AttributeCollection ICustomTypeDescriptor.GetAttributes ()
|
||||
{
|
||||
object value = _staticAttributeCollection;
|
||||
if (value == null) {
|
||||
CLSCompliantAttribute clsAttr = new CLSCompliantAttribute (true);
|
||||
DefaultMemberAttribute defMemAttr = new DefaultMemberAttribute ("Item");
|
||||
Attribute [] attrs = {clsAttr, defMemAttr};
|
||||
value = new AttributeCollection (attrs);
|
||||
}
|
||||
System.Threading.Interlocked.CompareExchange (ref _staticAttributeCollection, value, null);
|
||||
return _staticAttributeCollection as AttributeCollection;
|
||||
}
|
||||
|
||||
string ICustomTypeDescriptor.GetClassName ()
|
||||
{
|
||||
return this.GetType ().ToString ();
|
||||
}
|
||||
|
||||
string ICustomTypeDescriptor.GetComponentName ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
TypeConverter ICustomTypeDescriptor.GetConverter ()
|
||||
{
|
||||
return new CollectionConverter ();
|
||||
}
|
||||
|
||||
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
object ICustomTypeDescriptor.GetEditor (Type editorBaseType)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
EventDescriptorCollection ICustomTypeDescriptor.GetEvents ()
|
||||
{
|
||||
return EventDescriptorCollection.Empty;
|
||||
}
|
||||
|
||||
EventDescriptorCollection ICustomTypeDescriptor.GetEvents (Attribute [] attributes)
|
||||
{
|
||||
return EventDescriptorCollection.Empty;
|
||||
}
|
||||
|
||||
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties ()
|
||||
{
|
||||
return PropertyDescriptorCollection.Empty;
|
||||
}
|
||||
|
||||
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties (Attribute [] attributes)
|
||||
{
|
||||
return PropertyDescriptorCollection.Empty;
|
||||
}
|
||||
|
||||
object ICustomTypeDescriptor.GetPropertyOwner (PropertyDescriptor pd)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return ConnectionString;
|
||||
}
|
||||
|
||||
public virtual bool TryGetValue (string keyword, out object value)
|
||||
{
|
||||
// FIXME : not sure, difference between this [keyword] and this method
|
||||
bool found = ContainsKey (keyword);
|
||||
if (found)
|
||||
value = this [keyword];
|
||||
else
|
||||
value = null;
|
||||
return found;
|
||||
}
|
||||
|
||||
static ArgumentException CreateInvalidKeywordException (string keyword)
|
||||
{
|
||||
return new ArgumentException ("A keyword cannot contain "
|
||||
+ "control characters, leading semicolons or "
|
||||
+ "leading or trailing whitespace.", keyword);
|
||||
}
|
||||
|
||||
static ArgumentException CreateConnectionStringInvalidException (int index)
|
||||
{
|
||||
return new ArgumentException ("Format of initialization "
|
||||
+ "string does not conform to specifications at "
|
||||
+ "index " + index + ".");
|
||||
}
|
||||
|
||||
static bool ValueNeedsQuoting (string value)
|
||||
{
|
||||
foreach (char c in value) {
|
||||
if (char.IsWhiteSpace (c))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
void ParseConnectionString (string connectionString)
|
||||
{
|
||||
if (useOdbcRules)
|
||||
ParseConnectionStringOdbc (connectionString);
|
||||
else
|
||||
ParseConnectionStringNonOdbc (connectionString);
|
||||
}
|
||||
|
||||
void ParseConnectionStringOdbc (string connectionString)
|
||||
{
|
||||
bool inQuote = false;
|
||||
bool inDQuote = false;
|
||||
bool inName = true;
|
||||
bool inBraces = false;
|
||||
|
||||
string name = String.Empty;
|
||||
string val = String.Empty;
|
||||
StringBuilder sb = new StringBuilder ();
|
||||
int len = connectionString.Length;
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
char c = connectionString [i];
|
||||
int peek = (i == (len - 1)) ? -1 : connectionString [i + 1];
|
||||
|
||||
switch (c) {
|
||||
case '{':
|
||||
if (inName) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sb.Length == 0)
|
||||
inBraces = true;
|
||||
sb.Append (c);
|
||||
break;
|
||||
case '}':
|
||||
if (inName || !inBraces) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (peek == -1) {
|
||||
sb.Append (c);
|
||||
inBraces = false;
|
||||
} else if (peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
sb.Append (c);
|
||||
i++;
|
||||
} else {
|
||||
int next = NextNonWhitespaceChar (connectionString, i);
|
||||
if (next != -1 && ((char) next) != ';')
|
||||
throw CreateConnectionStringInvalidException (next);
|
||||
sb.Append (c);
|
||||
inBraces = false;
|
||||
}
|
||||
break;
|
||||
case ';':
|
||||
if (inName || inBraces) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (name.Length > 0 && sb.Length > 0) {
|
||||
val = sb.ToString ();
|
||||
name = name.ToLower ().TrimEnd ();
|
||||
this [name] = val;
|
||||
} else if (sb.Length > 0)
|
||||
throw CreateConnectionStringInvalidException (c);
|
||||
inName = true;
|
||||
name = String.Empty;
|
||||
sb.Length = 0;
|
||||
break;
|
||||
case '=':
|
||||
if (inBraces || !inName) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
name = sb.ToString ();
|
||||
if (name.Length == 0)
|
||||
throw CreateConnectionStringInvalidException (c);
|
||||
sb.Length = 0;
|
||||
inName = false;
|
||||
break;
|
||||
default:
|
||||
if (inDQuote || inQuote || inBraces)
|
||||
sb.Append (c);
|
||||
else if (char.IsWhiteSpace (c)) {
|
||||
// ignore leading whitespace
|
||||
if (sb.Length > 0) {
|
||||
int nextChar = SkipTrailingWhitespace (connectionString, i);
|
||||
if (nextChar == -1)
|
||||
sb.Append (c);
|
||||
else
|
||||
i = nextChar;
|
||||
}
|
||||
} else
|
||||
sb.Append (c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((inName && sb.Length > 0) || inDQuote || inQuote || inBraces)
|
||||
throw CreateConnectionStringInvalidException (len - 1);
|
||||
|
||||
if (name.Length > 0 && sb.Length > 0) {
|
||||
val = sb.ToString ();
|
||||
name = name.ToLower ().TrimEnd ();
|
||||
this [name] = val;
|
||||
}
|
||||
}
|
||||
|
||||
void ParseConnectionStringNonOdbc (string connectionString)
|
||||
{
|
||||
bool inQuote = false;
|
||||
bool inDQuote = false;
|
||||
bool inName = true;
|
||||
|
||||
string name = String.Empty;
|
||||
string val = String.Empty;
|
||||
StringBuilder sb = new StringBuilder ();
|
||||
int len = connectionString.Length;
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
char c = connectionString [i];
|
||||
int peek = (i == (len - 1)) ? -1 : connectionString [i + 1];
|
||||
|
||||
switch (c) {
|
||||
case '\'':
|
||||
if (inName) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (inDQuote)
|
||||
sb.Append (c);
|
||||
else if (inQuote) {
|
||||
if (peek == -1)
|
||||
inQuote = false;
|
||||
else if (peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
i++;
|
||||
} else {
|
||||
int next = NextNonWhitespaceChar (connectionString, i);
|
||||
if (next != -1 && ((char) next) != ';')
|
||||
throw CreateConnectionStringInvalidException (next);
|
||||
inQuote = false;
|
||||
}
|
||||
|
||||
if (!inQuote) {
|
||||
val = sb.ToString ();
|
||||
name = name.ToLower ().TrimEnd ();
|
||||
this [name] = val;
|
||||
inName = true;
|
||||
name = String.Empty;
|
||||
sb.Length = 0;
|
||||
}
|
||||
} else if (sb.Length == 0)
|
||||
inQuote = true;
|
||||
else
|
||||
sb.Append (c);
|
||||
break;
|
||||
case '"':
|
||||
if (inName) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (inQuote)
|
||||
sb.Append (c);
|
||||
else if (inDQuote) {
|
||||
if (peek == -1)
|
||||
inDQuote = false;
|
||||
else if (peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
i++;
|
||||
} else {
|
||||
int next = NextNonWhitespaceChar (connectionString, i);
|
||||
if (next != -1 && ((char) next) != ';')
|
||||
throw CreateConnectionStringInvalidException (next);
|
||||
inDQuote = false;
|
||||
}
|
||||
} else if (sb.Length == 0)
|
||||
inDQuote = true;
|
||||
else
|
||||
sb.Append (c);
|
||||
break;
|
||||
case ';':
|
||||
if (inName) {
|
||||
sb.Append (c);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (inDQuote || inQuote)
|
||||
sb.Append (c);
|
||||
else {
|
||||
if (name.Length > 0 && sb.Length > 0) {
|
||||
val = sb.ToString ();
|
||||
name = name.ToLower ().TrimEnd ();
|
||||
this [name] = val;
|
||||
} else if (sb.Length > 0)
|
||||
throw CreateConnectionStringInvalidException (c);
|
||||
inName = true;
|
||||
name = String.Empty;
|
||||
sb.Length = 0;
|
||||
}
|
||||
break;
|
||||
case '=':
|
||||
if (inDQuote || inQuote || !inName)
|
||||
sb.Append (c);
|
||||
else if (peek != -1 && peek.Equals (c)) {
|
||||
sb.Append (c);
|
||||
i++;
|
||||
} else {
|
||||
name = sb.ToString ();
|
||||
if (name.Length == 0)
|
||||
throw CreateConnectionStringInvalidException (c);
|
||||
sb.Length = 0;
|
||||
inName = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (inDQuote || inQuote)
|
||||
sb.Append (c);
|
||||
else if (char.IsWhiteSpace (c)) {
|
||||
// ignore leading whitespace
|
||||
if (sb.Length > 0) {
|
||||
int nextChar = SkipTrailingWhitespace (connectionString, i);
|
||||
if (nextChar == -1)
|
||||
sb.Append (c);
|
||||
else
|
||||
i = nextChar;
|
||||
}
|
||||
} else
|
||||
sb.Append (c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((inName && sb.Length > 0) || inDQuote || inQuote)
|
||||
throw CreateConnectionStringInvalidException (len -1);
|
||||
|
||||
if (name.Length > 0 && sb.Length > 0) {
|
||||
val = sb.ToString ();
|
||||
name = name.ToLower ().TrimEnd ();
|
||||
this [name] = val;
|
||||
}
|
||||
}
|
||||
|
||||
static int SkipTrailingWhitespace (string value, int index)
|
||||
{
|
||||
int len = value.Length;
|
||||
for (int i = (index + 1); i < len; i++) {
|
||||
char c = value [i];
|
||||
if (c == ';')
|
||||
return (i - 1);
|
||||
if (!char.IsWhiteSpace (c))
|
||||
return -1;
|
||||
}
|
||||
return len - 1;
|
||||
}
|
||||
|
||||
static int NextNonWhitespaceChar (string value, int index)
|
||||
{
|
||||
int len = value.Length;
|
||||
for (int i = (index + 1); i < len; i++) {
|
||||
char c = value [i];
|
||||
if (!char.IsWhiteSpace (c))
|
||||
return (int) c;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endregion // Public Methods
|
||||
}
|
||||
}
|
||||
#endif // NET_2_0 using
|
317
mcs/class/System.Data/System.Data.Common/DbDataPermission.cs
Normal file
317
mcs/class/System.Data/System.Data.Common/DbDataPermission.cs
Normal file
@ -0,0 +1,317 @@
|
||||
//
|
||||
// System.Data.Common.DbDataPermission.cs
|
||||
//
|
||||
// Authors:
|
||||
// Rodrigo Moya (rodrigo@ximian.com)
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
// Sebastien Pouliot <sebastien@ximian.com>
|
||||
//
|
||||
// (C) Ximian, Inc
|
||||
// Copyright (C) Tim Coleman, 2002-2003
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.Collections;
|
||||
using System.Security;
|
||||
using System.Security.Permissions;
|
||||
|
||||
namespace System.Data.Common {
|
||||
|
||||
[Serializable]
|
||||
public abstract class DBDataPermission : CodeAccessPermission, IUnrestrictedPermission {
|
||||
|
||||
#region Fields
|
||||
|
||||
private const int version = 1;
|
||||
|
||||
private bool allowBlankPassword;
|
||||
private PermissionState state;
|
||||
private Hashtable _connections;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
#if NET_2_0
|
||||
[Obsolete ("use DBDataPermission (PermissionState.None)", true)]
|
||||
#endif
|
||||
protected DBDataPermission ()
|
||||
: this (PermissionState.None)
|
||||
{
|
||||
}
|
||||
|
||||
protected DBDataPermission (DBDataPermission permission)
|
||||
{
|
||||
if (permission == null)
|
||||
throw new ArgumentNullException ("permission");
|
||||
|
||||
state = permission.state;
|
||||
if (state != PermissionState.Unrestricted) {
|
||||
allowBlankPassword = permission.allowBlankPassword;
|
||||
_connections = (Hashtable) permission._connections.Clone ();
|
||||
}
|
||||
}
|
||||
|
||||
protected DBDataPermission (DBDataPermissionAttribute permissionAttribute)
|
||||
{
|
||||
if (permissionAttribute == null)
|
||||
throw new ArgumentNullException ("permissionAttribute");
|
||||
|
||||
_connections = new Hashtable ();
|
||||
if (permissionAttribute.Unrestricted) {
|
||||
state = PermissionState.Unrestricted;
|
||||
}
|
||||
else {
|
||||
state = PermissionState.None;
|
||||
allowBlankPassword = permissionAttribute.AllowBlankPassword;
|
||||
if (permissionAttribute.ConnectionString.Length > 0) {
|
||||
Add (permissionAttribute.ConnectionString, permissionAttribute.KeyRestrictions,
|
||||
permissionAttribute.KeyRestrictionBehavior);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected DBDataPermission (PermissionState state)
|
||||
{
|
||||
this.state = PermissionHelper.CheckPermissionState (state, true);
|
||||
_connections = new Hashtable ();
|
||||
}
|
||||
|
||||
#if NET_2_0
|
||||
[Obsolete ("use DBDataPermission (PermissionState.None)", true)]
|
||||
protected
|
||||
#else
|
||||
public
|
||||
#endif
|
||||
DBDataPermission (PermissionState state, bool allowBlankPassword)
|
||||
: this (state)
|
||||
{
|
||||
this.allowBlankPassword = allowBlankPassword;
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
public bool AllowBlankPassword {
|
||||
get { return allowBlankPassword; }
|
||||
set { allowBlankPassword = value; }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
public virtual void Add (string connectionString, string restrictions, KeyRestrictionBehavior behavior)
|
||||
{
|
||||
state = PermissionState.None;
|
||||
_connections [connectionString] = new object [2] { restrictions, behavior };
|
||||
}
|
||||
|
||||
protected void Clear ()
|
||||
{
|
||||
_connections.Clear ();
|
||||
}
|
||||
|
||||
public override IPermission Copy ()
|
||||
{
|
||||
DBDataPermission dbdp = CreateInstance ();
|
||||
dbdp.allowBlankPassword = this.allowBlankPassword;
|
||||
dbdp._connections = (Hashtable) this._connections.Clone ();
|
||||
return dbdp;
|
||||
}
|
||||
|
||||
protected virtual DBDataPermission CreateInstance ()
|
||||
{
|
||||
return (DBDataPermission) Activator.CreateInstance (this.GetType (), new object [1] { PermissionState.None });
|
||||
}
|
||||
|
||||
public override void FromXml (SecurityElement securityElement)
|
||||
{
|
||||
PermissionHelper.CheckSecurityElement (securityElement, "securityElement", version, version);
|
||||
// Note: we do not (yet) care about the return value
|
||||
// as we only accept version 1 (min/max values)
|
||||
|
||||
state = (PermissionHelper.IsUnrestricted (securityElement) ?
|
||||
PermissionState.Unrestricted : PermissionState.None);
|
||||
|
||||
allowBlankPassword = false;
|
||||
string blank = securityElement.Attribute ("AllowBlankPassword");
|
||||
if (blank != null) {
|
||||
#if NET_2_0
|
||||
// avoid possible exceptions with Fx 2.0
|
||||
if (!Boolean.TryParse (blank, out allowBlankPassword))
|
||||
allowBlankPassword = false;
|
||||
#else
|
||||
try {
|
||||
allowBlankPassword = Boolean.Parse (blank);
|
||||
}
|
||||
catch {
|
||||
allowBlankPassword = false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (securityElement.Children != null) {
|
||||
foreach (SecurityElement child in securityElement.Children) {
|
||||
string connect = child.Attribute ("ConnectionString");
|
||||
string restricts = child.Attribute ("KeyRestrictions");
|
||||
KeyRestrictionBehavior behavior = (KeyRestrictionBehavior) Enum.Parse (
|
||||
typeof (KeyRestrictionBehavior), child.Attribute ("KeyRestrictionBehavior"));
|
||||
|
||||
if ((connect != null) && (connect.Length > 0))
|
||||
Add (connect, restricts, behavior);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override IPermission Intersect (IPermission target)
|
||||
{
|
||||
// FIXME: restrictions not completely implemented - nor documented
|
||||
DBDataPermission dbdp = Cast (target);
|
||||
if (dbdp == null)
|
||||
return null;
|
||||
if (IsUnrestricted ()) {
|
||||
if (dbdp.IsUnrestricted ()) {
|
||||
DBDataPermission u = CreateInstance ();
|
||||
u.state = PermissionState.Unrestricted;
|
||||
return u;
|
||||
}
|
||||
return dbdp.Copy ();
|
||||
}
|
||||
if (dbdp.IsUnrestricted ())
|
||||
return Copy ();
|
||||
if (IsEmpty () || dbdp.IsEmpty ())
|
||||
return null;
|
||||
|
||||
DBDataPermission p = CreateInstance ();
|
||||
p.allowBlankPassword = (allowBlankPassword && dbdp.allowBlankPassword);
|
||||
foreach (DictionaryEntry de in _connections) {
|
||||
object o = dbdp._connections [de.Key];
|
||||
if (o != null)
|
||||
p._connections.Add (de.Key, de.Value);
|
||||
}
|
||||
return (p._connections.Count > 0) ? p : null;
|
||||
}
|
||||
|
||||
public override bool IsSubsetOf (IPermission target)
|
||||
{
|
||||
// FIXME: restrictions not completely implemented - nor documented
|
||||
DBDataPermission dbdp = Cast (target);
|
||||
if (dbdp == null)
|
||||
return IsEmpty ();
|
||||
if (dbdp.IsUnrestricted ())
|
||||
return true;
|
||||
if (IsUnrestricted ())
|
||||
return dbdp.IsUnrestricted ();
|
||||
|
||||
if (allowBlankPassword && !dbdp.allowBlankPassword)
|
||||
return false;
|
||||
if (_connections.Count > dbdp._connections.Count)
|
||||
return false;
|
||||
|
||||
foreach (DictionaryEntry de in _connections) {
|
||||
object o = dbdp._connections [de.Key];
|
||||
if (o == null)
|
||||
return false;
|
||||
// FIXME: this is a subset of what is required
|
||||
// it seems that we must process both the connect string
|
||||
// and the restrictions - but this has other effects :-/
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IsUnrestricted ()
|
||||
{
|
||||
return (state == PermissionState.Unrestricted);
|
||||
}
|
||||
|
||||
public override SecurityElement ToXml ()
|
||||
{
|
||||
SecurityElement se = PermissionHelper.Element (this.GetType (), version);
|
||||
if (IsUnrestricted ()) {
|
||||
se.AddAttribute ("Unrestricted", "true");
|
||||
}
|
||||
else {
|
||||
// attribute is present for both True and False
|
||||
se.AddAttribute ("AllowBlankPassword", allowBlankPassword.ToString ());
|
||||
foreach (DictionaryEntry de in _connections) {
|
||||
SecurityElement child = new SecurityElement ("add");
|
||||
child.AddAttribute ("ConnectionString", (string) de.Key);
|
||||
object[] restrictionsInfo = (object[]) de.Value;
|
||||
child.AddAttribute ("KeyRestrictions", (string) restrictionsInfo [0]);
|
||||
KeyRestrictionBehavior krb = (KeyRestrictionBehavior) restrictionsInfo [1];
|
||||
child.AddAttribute ("KeyRestrictionBehavior", krb.ToString ());
|
||||
se.AddChild (child);
|
||||
}
|
||||
}
|
||||
return se;
|
||||
}
|
||||
|
||||
public override IPermission Union (IPermission target)
|
||||
{
|
||||
// FIXME: restrictions not completely implemented - nor documented
|
||||
DBDataPermission dbdp = Cast (target);
|
||||
if (dbdp == null)
|
||||
return Copy ();
|
||||
if (IsEmpty () && dbdp.IsEmpty ())
|
||||
return Copy ();
|
||||
|
||||
DBDataPermission p = CreateInstance ();
|
||||
if (IsUnrestricted () || dbdp.IsUnrestricted ()) {
|
||||
p.state = PermissionState.Unrestricted;
|
||||
}
|
||||
else {
|
||||
p.allowBlankPassword = (allowBlankPassword || dbdp.allowBlankPassword);
|
||||
p._connections = new Hashtable (_connections.Count + dbdp._connections.Count);
|
||||
foreach (DictionaryEntry de in _connections)
|
||||
p._connections.Add (de.Key, de.Value);
|
||||
// don't duplicate
|
||||
foreach (DictionaryEntry de in dbdp._connections)
|
||||
p._connections [de.Key] = de.Value;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
// helpers
|
||||
|
||||
private bool IsEmpty ()
|
||||
{
|
||||
return ((state != PermissionState.Unrestricted) && (_connections.Count == 0));
|
||||
}
|
||||
|
||||
private DBDataPermission Cast (IPermission target)
|
||||
{
|
||||
if (target == null)
|
||||
return null;
|
||||
|
||||
DBDataPermission dbdp = (target as DBDataPermission);
|
||||
if (dbdp == null) {
|
||||
PermissionHelper.ThrowInvalidPermission (target, this.GetType ());
|
||||
}
|
||||
|
||||
return dbdp;
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
//
|
||||
// System.Data.Common.DbDataPermissionAttribute.cs
|
||||
//
|
||||
// Authors:
|
||||
// Rodrigo Moya (rodrigo@ximian.com)
|
||||
// Tim Coleman (tim@timcoleman.com)
|
||||
// Sebastien Pouliot <sebastien@ximian.com>
|
||||
//
|
||||
// (C) Ximian, Inc
|
||||
// Copyright (C) Tim Coleman, 2002
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.ComponentModel;
|
||||
using System.Security.Permissions;
|
||||
using System.Globalization;
|
||||
|
||||
namespace System.Data.Common {
|
||||
|
||||
[AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Class |
|
||||
AttributeTargets.Struct | AttributeTargets.Constructor |
|
||||
AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
|
||||
[Serializable]
|
||||
public abstract class DBDataPermissionAttribute : CodeAccessSecurityAttribute {
|
||||
#region Fields
|
||||
|
||||
bool allowBlankPassword;
|
||||
string keyRestrictions;
|
||||
KeyRestrictionBehavior keyRestrictionBehavior;
|
||||
string connectionString;
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
protected DBDataPermissionAttribute (SecurityAction action)
|
||||
: base (action)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
public bool AllowBlankPassword {
|
||||
get { return allowBlankPassword; }
|
||||
set { allowBlankPassword = value; }
|
||||
}
|
||||
|
||||
public string KeyRestrictions {
|
||||
get {
|
||||
if (keyRestrictions == null)
|
||||
return String.Empty;
|
||||
return keyRestrictions;
|
||||
}
|
||||
set { keyRestrictions = value; }
|
||||
}
|
||||
|
||||
public string ConnectionString {
|
||||
get {
|
||||
if (connectionString == null)
|
||||
return String.Empty;
|
||||
return connectionString;
|
||||
}
|
||||
set { connectionString = value; }
|
||||
}
|
||||
|
||||
public KeyRestrictionBehavior KeyRestrictionBehavior {
|
||||
get { return keyRestrictionBehavior; }
|
||||
set {
|
||||
ExceptionHelper.CheckEnumValue (typeof (KeyRestrictionBehavior), value);
|
||||
keyRestrictionBehavior = value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region // Methods
|
||||
[EditorBrowsableAttribute (EditorBrowsableState.Never)]
|
||||
public bool ShouldSerializeConnectionString ()
|
||||
{
|
||||
// FIXME: configurable ? why is this in the attribute class ?
|
||||
return false;
|
||||
}
|
||||
|
||||
[EditorBrowsableAttribute (EditorBrowsableState.Never)]
|
||||
public bool ShouldSerializeKeyRestrictions ()
|
||||
{
|
||||
// FIXME: configurable ? why is this in the attribute class ?
|
||||
return false;
|
||||
}
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
@ -326,7 +326,7 @@ namespace System.Data.Odbc
|
||||
ret = libodbc.SQLAllocHandle (OdbcHandleType.Env, IntPtr.Zero, ref henv);
|
||||
if ((ret != OdbcReturn.Success) && (ret != OdbcReturn.SuccessWithInfo)) {
|
||||
OdbcErrorCollection errors = new OdbcErrorCollection ();
|
||||
errors.Add (new OdbcError (SafeDriver, "Error in " + SafeDriver, "", 1));
|
||||
errors.Add (new OdbcError (this));
|
||||
e = new OdbcException (errors);
|
||||
MessageHandler (e);
|
||||
throw e;
|
||||
@ -519,7 +519,7 @@ namespace System.Data.Odbc
|
||||
string state = RemoveTrailingNullChar (Encoding.Unicode.GetString (buf_SqlState));
|
||||
string message = Encoding.Unicode.GetString (buf_MsgText, 0, txtlen * 2);
|
||||
|
||||
errors.Add (new OdbcError (SafeDriver, message, state, nativeerror));
|
||||
errors.Add (new OdbcError (message, state, nativeerror));
|
||||
}
|
||||
|
||||
string source = SafeDriver;
|
||||
|
@ -0,0 +1,219 @@
|
||||
//
|
||||
// System.Data.Odbc.OdbcConnectionStringBuilder
|
||||
//
|
||||
// Authors:
|
||||
// Nidhi Rawal (rawalnidhi_rawal@yahoo.com)
|
||||
//
|
||||
// Copyright (C) 2007 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
#if NET_2_0
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Data.Odbc;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Data.Odbc
|
||||
{
|
||||
[DefaultProperty ("Driver")]
|
||||
[TypeConverter ("System.Data.Odbc.OdbcConnectionStringBuilder+OdbcConnectionStringBuilderConverter, " + Consts.AssemblySystem_Data)]
|
||||
public sealed class OdbcConnectionStringBuilder : DbConnectionStringBuilder
|
||||
{
|
||||
#region Fields
|
||||
string driver;
|
||||
string dsn;
|
||||
#endregion //Fields
|
||||
|
||||
#region Constructors
|
||||
|
||||
public OdbcConnectionStringBuilder () : base (true)
|
||||
{
|
||||
}
|
||||
|
||||
public OdbcConnectionStringBuilder (string connectionString) : base (true)
|
||||
{
|
||||
if (connectionString == null) {
|
||||
base.ConnectionString = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
base.ConnectionString = connectionString;
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
public override Object this [string keyword] {
|
||||
get {
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
if (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
return Driver;
|
||||
if (string.Compare (keyword, "Dsn", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
return Dsn;
|
||||
return base [keyword];
|
||||
}
|
||||
set {
|
||||
if (value == null) {
|
||||
Remove (keyword);
|
||||
return;
|
||||
}
|
||||
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
|
||||
string text_value = value.ToString ();
|
||||
|
||||
if (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0) {
|
||||
Driver = text_value;
|
||||
return;
|
||||
} else if (string.Compare (keyword, "Dsn", StringComparison.InvariantCultureIgnoreCase) == 0) {
|
||||
dsn = text_value;
|
||||
} else if (value.ToString ().IndexOf (';') != -1) {
|
||||
text_value = "{" + text_value + "}";
|
||||
}
|
||||
base [keyword] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override ICollection Keys {
|
||||
get {
|
||||
List<string> keys = new List<string> ();
|
||||
keys.Add ("Dsn");
|
||||
keys.Add ("Driver");
|
||||
|
||||
ICollection base_keys = base.Keys;
|
||||
foreach (string keyword in base_keys) {
|
||||
if (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
continue;
|
||||
if (string.Compare (keyword, "Dsn", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
continue;
|
||||
keys.Add (keyword);
|
||||
}
|
||||
|
||||
string [] final = new string [keys.Count];
|
||||
keys.CopyTo (final);
|
||||
return final;
|
||||
}
|
||||
}
|
||||
|
||||
[DisplayName ("Driver")]
|
||||
[RefreshProperties (RefreshProperties.All)]
|
||||
public string Driver {
|
||||
get {
|
||||
if (driver == null)
|
||||
return string.Empty;
|
||||
return driver;
|
||||
}
|
||||
set {
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("Driver");
|
||||
driver = value;
|
||||
|
||||
if (value.Length > 0) {
|
||||
int startBrace = value.IndexOf ('{');
|
||||
int endBrace = value.IndexOf ('}');
|
||||
if (startBrace == -1 || endBrace == -1)
|
||||
value = "{" + value + "}";
|
||||
else if (startBrace > 0 || endBrace < (value.Length - 1))
|
||||
value = "{" + value + "}";
|
||||
}
|
||||
base ["Driver"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DisplayName ("Dsn")]
|
||||
[RefreshProperties (RefreshProperties.All)]
|
||||
public string Dsn {
|
||||
get {
|
||||
if (dsn == null)
|
||||
return string.Empty;
|
||||
return dsn;
|
||||
}
|
||||
set {
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("Dsn");
|
||||
dsn = value;
|
||||
base ["Dsn"] = dsn;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Methods
|
||||
|
||||
public override bool ContainsKey (string keyword)
|
||||
{
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
if (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
return true;
|
||||
if (string.Compare (keyword, "Dsn", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
return true;
|
||||
return base.ContainsKey (keyword);
|
||||
}
|
||||
|
||||
public override bool Remove (string keyword)
|
||||
{
|
||||
if (keyword == null)
|
||||
throw new ArgumentNullException ("keyword");
|
||||
if (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
driver = string.Empty;
|
||||
else if (string.Compare (keyword, "Dsn", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
dsn = string.Empty;
|
||||
return base.Remove (keyword);
|
||||
}
|
||||
|
||||
public override void Clear ()
|
||||
{
|
||||
driver = null;
|
||||
dsn = null;
|
||||
base.Clear ();
|
||||
}
|
||||
|
||||
public override bool TryGetValue (string keyword, out Object value)
|
||||
{
|
||||
if (keyword == null )
|
||||
throw new ArgumentNullException ("keyword");
|
||||
bool found = base.TryGetValue (keyword, out value);
|
||||
if (found)
|
||||
return found;
|
||||
if (string.Compare (keyword, "Driver", StringComparison.InvariantCultureIgnoreCase) == 0) {
|
||||
value = string.Empty;
|
||||
return true;
|
||||
} else if (string.Compare (keyword, "Dsn", StringComparison.InvariantCultureIgnoreCase) == 0) {
|
||||
value = string.Empty;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion // Methods
|
||||
}
|
||||
}
|
||||
#endif // NET_2_0 using
|
104
mcs/class/System.Data/System.Data.Odbc/OdbcError.cs
Normal file
104
mcs/class/System.Data/System.Data.Odbc/OdbcError.cs
Normal file
@ -0,0 +1,104 @@
|
||||
//
|
||||
// System.Data.Odbc.OdbcError
|
||||
//
|
||||
// Author:
|
||||
// Brian Ritchie (brianlritchie@hotmail.com)
|
||||
//
|
||||
// Copyright (C) Brian Ritchie, 2002
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Data.Odbc
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class OdbcError
|
||||
{
|
||||
readonly string _message;
|
||||
string _source;
|
||||
readonly string _state;
|
||||
readonly int _nativeerror;
|
||||
|
||||
#region Constructors
|
||||
|
||||
internal OdbcError (OdbcConnection connection)
|
||||
{
|
||||
_nativeerror = 1;
|
||||
_source = connection.SafeDriver;
|
||||
_message = "Error in " + _source;
|
||||
_state = string.Empty;
|
||||
}
|
||||
|
||||
internal OdbcError (string message, string state, int nativeerror)
|
||||
{
|
||||
_message = message;
|
||||
_state = state;
|
||||
_nativeerror = nativeerror;
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
||||
#region Properties
|
||||
|
||||
public string Message {
|
||||
get { return _message; }
|
||||
}
|
||||
|
||||
public int NativeError {
|
||||
get { return _nativeerror; }
|
||||
}
|
||||
|
||||
public string Source {
|
||||
get { return _source; }
|
||||
}
|
||||
|
||||
public string SQLState {
|
||||
get { return _state; }
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region methods
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return Message;
|
||||
}
|
||||
|
||||
internal void SetSource (string source)
|
||||
{
|
||||
_source = source;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
}
|
87
mcs/class/System.Data/System.Data.Odbc/OdbcPermission.cs
Normal file
87
mcs/class/System.Data/System.Data.Odbc/OdbcPermission.cs
Normal file
@ -0,0 +1,87 @@
|
||||
//
|
||||
// System.Data.Odbc.OdbcPermission
|
||||
//
|
||||
// Authors:
|
||||
// Umadevi S (sumadevi@novell.com)
|
||||
// Sebastien Pouliot <sebastien@ximian.com>
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.Data.Common;
|
||||
using System.Security;
|
||||
using System.Security.Permissions;
|
||||
|
||||
namespace System.Data.Odbc
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class OdbcPermission : DBDataPermission
|
||||
{
|
||||
#region Constructors
|
||||
|
||||
[Obsolete ("use OdbcPermission(PermissionState.None)", true)]
|
||||
public OdbcPermission ()
|
||||
: base (PermissionState.None)
|
||||
{
|
||||
}
|
||||
|
||||
public OdbcPermission (PermissionState state)
|
||||
: base (state)
|
||||
{
|
||||
}
|
||||
|
||||
[Obsolete ("use OdbcPermission(PermissionState.None)", true)]
|
||||
public OdbcPermission (PermissionState state, bool allowBlankPassword)
|
||||
: base (state)
|
||||
{
|
||||
AllowBlankPassword = allowBlankPassword;
|
||||
}
|
||||
|
||||
// required for Copy method
|
||||
internal OdbcPermission (DBDataPermission permission)
|
||||
: base (permission)
|
||||
{
|
||||
}
|
||||
|
||||
// easier (and common) permission creation from attribute class
|
||||
internal OdbcPermission (DBDataPermissionAttribute attribute)
|
||||
: base (attribute)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public override IPermission Copy ()
|
||||
{
|
||||
return new OdbcPermission (this);
|
||||
}
|
||||
|
||||
public override void Add (string connectionString, string restrictions, KeyRestrictionBehavior behavior)
|
||||
{
|
||||
base.Add (connectionString, restrictions, behavior);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
//
|
||||
// System.Data.Odbc.OdbcPermissionAttribute
|
||||
//
|
||||
// Authors:
|
||||
// Umadevi S (sumadevi@novell.com)
|
||||
// Sebastien Pouliot <sebastien@ximian.com>
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
using System.Data.Common;
|
||||
using System.Security;
|
||||
using System.Security.Permissions;
|
||||
|
||||
namespace System.Data.Odbc {
|
||||
|
||||
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class |
|
||||
AttributeTargets.Struct | AttributeTargets.Constructor |
|
||||
AttributeTargets.Method, AllowMultiple=true,
|
||||
Inherited=false)]
|
||||
[Serializable]
|
||||
public sealed class OdbcPermissionAttribute : DBDataPermissionAttribute {
|
||||
|
||||
#region Constructors
|
||||
|
||||
public OdbcPermissionAttribute (SecurityAction action)
|
||||
: base (action)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public override IPermission CreatePermission ()
|
||||
{
|
||||
return new OdbcPermission (this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -379,7 +379,7 @@ namespace System.Data.SqlClient
|
||||
keys.Add("User Instance");
|
||||
keys.Add("Context Connection");
|
||||
keys.Add("Transaction Binding");
|
||||
var coll = new System.Collections.ObjectModel.ReadOnlyCollection<string>(keys);
|
||||
ReadOnlyCollection<string> coll = new ReadOnlyCollection<string>(keys);
|
||||
return coll;
|
||||
}
|
||||
}
|
||||
@ -528,7 +528,7 @@ namespace System.Data.SqlClient
|
||||
values.Add(_userInstance);
|
||||
values.Add(_contextConnection);
|
||||
values.Add(_transactionBinding);
|
||||
var coll = new System.Collections.ObjectModel.ReadOnlyCollection<object>(values);
|
||||
ReadOnlyCollection<object> coll = new ReadOnlyCollection<object>(values);
|
||||
return coll;
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +81,7 @@ System.Data/ISafeDataRecord.cs
|
||||
System.Data/IsolationLevel.cs
|
||||
System.Data/ITableMapping.cs
|
||||
System.Data/ITableMappingCollection.cs
|
||||
System.Data/KeyRestrictionBehavior.cs
|
||||
System.Data/LoadOption.cs
|
||||
System.Data/MappingType.cs
|
||||
System.Data/MergeFailedEventArgs.cs
|
||||
@ -128,12 +129,23 @@ System.Data/XmlDiffLoader.cs
|
||||
System.Data.Common/CatalogLocation.cs
|
||||
System.Data.Common/ComparerFactory.cs
|
||||
System.Data.Common/DataAdapter.cs
|
||||
System.Data.Common/DataColumnMappingCollection.cs
|
||||
System.Data.Common/DataColumnMapping.cs
|
||||
System.Data.Common/DataColumnMappingConverter.cs
|
||||
System.Data.Common/DataContainer.cs
|
||||
System.Data.Common/DataTableMappingCollection.cs
|
||||
System.Data.Common/DataTableMapping.cs
|
||||
System.Data.Common/DataTableMappingConverter.cs
|
||||
System.Data.Common/DbCommandBuilder.cs
|
||||
System.Data.Common/DbConnectionStringBuilder.cs
|
||||
System.Data.Common/DbConnectionStringBuilderHelper.cs
|
||||
System.Data.Common/DbCommand.cs
|
||||
System.Data.Common/DbConnection.cs
|
||||
System.Data.Common/DbConnectionOptions.cs
|
||||
System.Data.Common/DbConnectionString.cs
|
||||
System.Data.Common/DbDataAdapter.cs
|
||||
System.Data.Common/DbDataPermissionAttribute.cs
|
||||
System.Data.Common/DbDataPermission.cs
|
||||
System.Data.Common/DbDataReader.cs
|
||||
System.Data.Common/DbDataSourceEnumerator.cs
|
||||
System.Data.Common/DbException.cs
|
||||
@ -197,7 +209,9 @@ System.Data.Odbc/OdbcDescriptionAttribute.cs
|
||||
System.Data.Odbc/OdbcColumn.cs
|
||||
System.Data.Odbc/OdbcCommand.cs
|
||||
System.Data.Odbc/OdbcConnection.cs
|
||||
System.Data.Odbc/OdbcConnectionStringBuilder.cs
|
||||
System.Data.Odbc/OdbcDataReader.cs
|
||||
System.Data.Odbc/OdbcError.cs
|
||||
System.Data.Odbc/OdbcErrorCollection.cs
|
||||
System.Data.Odbc/OdbcException.cs
|
||||
System.Data.Odbc/OdbcMetaDataColumnNames.cs
|
||||
@ -214,6 +228,8 @@ System.Data.Odbc/OdbcRowUpdatedEventArgs.cs
|
||||
System.Data.Odbc/OdbcRowUpdatedEventHandler.cs
|
||||
System.Data.Odbc/OdbcRowUpdatingEventArgs.cs
|
||||
System.Data.Odbc/OdbcRowUpdatingEventHandler.cs
|
||||
System.Data.Odbc/OdbcPermissionAttribute.cs
|
||||
System.Data.Odbc/OdbcPermission.cs
|
||||
System.Data.Odbc/OdbcInfoMessageEventArgs.cs
|
||||
System.Data.Odbc/OdbcInfoMessageEventHandler.cs
|
||||
System.Data.Odbc/OdbcCommandBuilder.cs
|
||||
@ -302,38 +318,19 @@ ReferenceSources/Bid.cs
|
||||
ReferenceSources/BidArgumentTypeAttribute.cs
|
||||
ReferenceSources/BidMethodAttribute.cs
|
||||
ReferenceSources/DataStorage.cs
|
||||
ReferenceSources/DbConnectionStringDefaults.cs
|
||||
ReferenceSources/InOutOfProcHelper.cs
|
||||
ReferenceSources/ODB.cs
|
||||
ReferenceSources/Res.cs
|
||||
ReferenceSources/ResCategoryAttribute.cs
|
||||
ReferenceSources/SafeNativeMethods.cs
|
||||
ReferenceSources/ThisAssembly.cs
|
||||
|
||||
ReferenceSources/OdbcHandle.cs
|
||||
|
||||
../../../external/referencesource/System.Data/Misc/HResults.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/AdapterUtil.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataColumnMapping.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataColumnMappingCollection.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataTableMapping.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataTableMappingCollection.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataRecordInternal.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DBConnectionString.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DBDataPermission.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DBDataPermissionAttribute.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/dbdatarecord.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/dbenumerator.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/FieldNameLookup.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/NameValuePair.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/NameValuePermission.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Odbc/Odbc32.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Odbc/OdbcConnectionString.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Odbc/OdbcConnectionStringbuilder.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Odbc/OdbcError.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Odbc/OdbcPermission.cs
|
||||
../../../external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SqlClient/ApplicationIntent.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SQLTypes/INullable.cs
|
||||
|
41
mcs/class/System.Data/System.Data/KeyRestrictionBehavior.cs
Normal file
41
mcs/class/System.Data/System.Data/KeyRestrictionBehavior.cs
Normal file
@ -0,0 +1,41 @@
|
||||
//
|
||||
// System.Data.KeyRestrictionBehavior
|
||||
//
|
||||
// Author:
|
||||
// Tim Coleman <tim@timcoleman.com>
|
||||
//
|
||||
// Copyright (C) Tim Coleman, 2003
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (C) 2004 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
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
namespace System.Data {
|
||||
[Serializable]
|
||||
public enum KeyRestrictionBehavior
|
||||
{
|
||||
AllowOnly,
|
||||
PreventUsage
|
||||
}
|
||||
}
|
||||
|
@ -500,7 +500,7 @@ namespace MonoTests.System.Data.Common {
|
||||
{
|
||||
NonAbstractDBDataPermission empty = new NonAbstractDBDataPermission (PermissionState.None);
|
||||
NonAbstractDBDataPermission union = (NonAbstractDBDataPermission) empty.Union (empty);
|
||||
Assert.IsNull (union, "Empty U Empty");
|
||||
Assert.IsNotNull (union, "Empty U Empty");
|
||||
|
||||
NonAbstractDBDataPermission dbdp1 = new NonAbstractDBDataPermission (PermissionState.None);
|
||||
dbdp1.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
|
||||
|
@ -1 +1 @@
|
||||
0ff9d109c2cf0e230c09e3069a3bb7a6f7873181
|
||||
a797cf50afab63bc3e3b32e1cc95d46c9c8d5ef8
|
@ -80,6 +80,7 @@ System.Data/ISafeDataRecord.cs
|
||||
System.Data/IsolationLevel.cs
|
||||
System.Data/ITableMapping.cs
|
||||
System.Data/ITableMappingCollection.cs
|
||||
System.Data/KeyRestrictionBehavior.cs
|
||||
System.Data/LoadOption.cs
|
||||
System.Data/MappingType.cs
|
||||
System.Data/MergeFailedEventArgs.cs
|
||||
@ -126,12 +127,23 @@ System.Data/XmlDiffLoader.cs
|
||||
System.Data.Common/CatalogLocation.cs
|
||||
System.Data.Common/ComparerFactory.cs
|
||||
System.Data.Common/DataAdapter.cs
|
||||
System.Data.Common/DataColumnMappingCollection.cs
|
||||
System.Data.Common/DataColumnMapping.cs
|
||||
System.Data.Common/DataColumnMappingConverter.cs
|
||||
System.Data.Common/DataContainer.cs
|
||||
System.Data.Common/DataTableMappingCollection.cs
|
||||
System.Data.Common/DataTableMapping.cs
|
||||
System.Data.Common/DataTableMappingConverter.cs
|
||||
System.Data.Common/DbCommandBuilder.cs
|
||||
System.Data.Common/DbConnectionStringBuilder.cs
|
||||
System.Data.Common/DbConnectionStringBuilderHelper.cs
|
||||
System.Data.Common/DbCommand.cs
|
||||
System.Data.Common/DbConnection.cs
|
||||
System.Data.Common/DbConnectionOptions.cs
|
||||
System.Data.Common/DbConnectionString.cs
|
||||
System.Data.Common/DbDataAdapter.cs
|
||||
System.Data.Common/DbDataPermissionAttribute.cs
|
||||
System.Data.Common/DbDataPermission.cs
|
||||
System.Data.Common/DbDataReader.cs
|
||||
System.Data.Common/DbDataSourceEnumerator.cs
|
||||
System.Data.Common/DbException.cs
|
||||
@ -175,7 +187,6 @@ Microsoft.SqlServer.Server/TriggerAction.cs
|
||||
Microsoft.SqlServer.Server/SqlTriggerContext.cs
|
||||
Microsoft.SqlServer.Server/SqlProcedureAttribute.cs
|
||||
Microsoft.SqlServer.Server/SqlTriggerAttribute.cs
|
||||
System.Data.SqlClient/SortOrder.cs
|
||||
System.Data.SqlClient/SqlNotificationType.cs
|
||||
System.Data.SqlClient/SqlNotificationInfo.cs
|
||||
System.Data.SqlClient/SqlNotificationSource.cs
|
||||
@ -243,31 +254,19 @@ ReferenceSources/Bid.cs
|
||||
ReferenceSources/BidArgumentTypeAttribute.cs
|
||||
ReferenceSources/BidMethodAttribute.cs
|
||||
ReferenceSources/DataStorage.cs
|
||||
ReferenceSources/DbConnectionStringDefaults.cs
|
||||
ReferenceSources/InOutOfProcHelper.cs
|
||||
ReferenceSources/ODB.cs
|
||||
ReferenceSources/Res.cs
|
||||
ReferenceSources/ResCategoryAttribute.cs
|
||||
ReferenceSources/SafeNativeMethods.cs
|
||||
ReferenceSources/ThisAssembly.cs
|
||||
|
||||
../../../external/referencesource/System.Data/Misc/HResults.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/AdapterUtil.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataColumnMapping.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataColumnMappingCollection.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataTableMapping.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataTableMappingCollection.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DataRecordInternal.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DBConnectionString.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DBDataPermission.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/DBDataPermissionAttribute.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/dbdatarecord.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/dbenumerator.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/FieldNameLookup.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/NameValuePair.cs
|
||||
../../../external/referencesource/System.Data/System/Data/Common/NameValuePermission.cs
|
||||
../../../external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SqlClient/ApplicationIntent.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SQLTypes/INullable.cs
|
||||
@ -289,3 +288,4 @@ ReferenceSources/ThisAssembly.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SQLTypes/SQLSingle.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SQLTypes/SQLString.cs
|
||||
../../../external/referencesource/System.Data/System/Data/SQLTypes/SQLUtility.cs
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
#include System.Data.dll.sources
|
@ -15,7 +15,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
||||
|
||||
EXTRA_DISTFILES =
|
||||
|
||||
VALID_PROFILE := $(filter net_4_5, $(PROFILE))
|
||||
VALID_PROFILE := $(filter net_4_5 xammac_net_4_5, $(PROFILE))
|
||||
ifndef VALID_PROFILE
|
||||
LIBRARY_NAME = dummy-System.IdentityModel.Selectors.dll
|
||||
NO_INSTALL = yes
|
||||
|
@ -2,9 +2,11 @@ thisdir = class/System.IdentityModel
|
||||
SUBDIRS =
|
||||
include ../../build/rules.make
|
||||
|
||||
ifndef NO_SYSTEM_WEB_APPSERVICES_DEPENDENCY
|
||||
ifeq (4, $(FRAMEWORK_VERSION_MAJOR))
|
||||
OTHER_LIB_MCS_FLAGS = -r:System.Web.ApplicationServices.dll
|
||||
endif
|
||||
endif
|
||||
|
||||
LIBRARY = System.IdentityModel.dll
|
||||
LIB_MCS_FLAGS = \
|
||||
@ -12,12 +14,15 @@ LIB_MCS_FLAGS = \
|
||||
/r:System.dll \
|
||||
/r:System.Xml.dll \
|
||||
/r:System.Security.dll \
|
||||
/r:System.Web.dll \
|
||||
/r:System.Configuration.dll \
|
||||
/r:Mono.Security.dll \
|
||||
/r:System.Runtime.Serialization.dll \
|
||||
$(OTHER_LIB_MCS_FLAGS)
|
||||
|
||||
ifndef NO_SYSTEM_WEB_DEPENDENCY
|
||||
LIB_MCS_FLAGS += /r:System.Web.dll
|
||||
endif
|
||||
|
||||
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
||||
|
||||
EXTRA_DISTFILES = \
|
||||
@ -26,7 +31,7 @@ EXTRA_DISTFILES = \
|
||||
Test/Resources/test.pfx \
|
||||
Test/Resources/test2.pfx
|
||||
|
||||
VALID_PROFILE := $(filter net_4_5, $(PROFILE))
|
||||
VALID_PROFILE := $(filter net_4_5 xammac_net_4_5, $(PROFILE))
|
||||
ifndef VALID_PROFILE
|
||||
LIBRARY_NAME = dummy-System.IdentityModel.dll
|
||||
NO_INSTALL = yes
|
||||
|
@ -1,3 +1,4 @@
|
||||
#if !NO_SYSTEM_WEB_DEPENDENCY
|
||||
//
|
||||
// CustomUserNameSecurityTokenAuthenticator.cs
|
||||
//
|
||||
@ -133,3 +134,4 @@ namespace System.IdentityModel.Selectors
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,3 +1,4 @@
|
||||
#if !NO_SYSTEM_WEB_DEPENDENCY
|
||||
//
|
||||
// UserNamePasswordValidator.cs
|
||||
//
|
||||
@ -80,3 +81,4 @@ namespace System.IdentityModel.Selectors
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -6,17 +6,22 @@ LIBRARY = System.Messaging.dll
|
||||
LIB_MCS_FLAGS = /resource:System.Messaging/MessageQueue.resx \
|
||||
/r:System.dll \
|
||||
/r:System.Configuration.Install.dll \
|
||||
/r:System.Drawing.dll \
|
||||
/r:System.Windows.Forms.dll \
|
||||
/r:System.Xml \
|
||||
/r:Mono.Messaging.dll
|
||||
|
||||
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -nowarn:0618 -nowarn:219 -nowarn:169 \
|
||||
/r:nunit.mocks.dll
|
||||
|
||||
EXTRA_DISTFILES = System.Messaging/MessageQueue.resx
|
||||
|
||||
ifdef MESSAGING_NO_WINFORMS
|
||||
ifndef NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
LIB_MCS_FLAGS += /r:System.Drawing.dll
|
||||
endif
|
||||
|
||||
ifdef NO_WINFORMS_DEPENDENCY
|
||||
LIB_MCS_FLAGS += -d:NO_WINFORMS_DEPENDENCY
|
||||
else
|
||||
LIB_MCS_FLAGS += /r:System.Windows.Forms.dll
|
||||
endif
|
||||
|
||||
include ../../build/library.make
|
||||
|
@ -28,6 +28,7 @@
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
using System.ComponentModel;
|
||||
using System.Drawing.Design;
|
||||
|
||||
@ -53,3 +54,4 @@ namespace System.Messaging.Design
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -32,7 +32,9 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
using System.Drawing;
|
||||
#endif
|
||||
using System.Messaging.Design;
|
||||
using System.Threading;
|
||||
|
||||
@ -258,7 +260,9 @@ namespace System.Messaging
|
||||
}
|
||||
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
[TypeConverter (typeof(SizeConverter))]
|
||||
#endif
|
||||
[MessagingDescription ("MQ_MaximumJournalSize")]
|
||||
public long MaximumJournalSize {
|
||||
get {
|
||||
@ -270,7 +274,9 @@ namespace System.Messaging
|
||||
}
|
||||
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
[TypeConverter (typeof(SizeConverter))]
|
||||
#endif
|
||||
[MessagingDescription ("MQ_MaximumQueueSize")]
|
||||
public long MaximumQueueSize {
|
||||
get {
|
||||
|
@ -31,7 +31,9 @@ using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Configuration.Install;
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
using System.Drawing;
|
||||
#endif
|
||||
|
||||
namespace System.Messaging
|
||||
{
|
||||
@ -88,7 +90,9 @@ namespace System.Messaging
|
||||
set {throw new NotImplementedException();}
|
||||
}
|
||||
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
[TypeConverter (typeof(SizeConverter))]
|
||||
#endif
|
||||
public long MaximumJournalSize {
|
||||
[MonoTODO]
|
||||
get {throw new NotImplementedException();}
|
||||
@ -96,7 +100,9 @@ namespace System.Messaging
|
||||
set {throw new NotImplementedException();}
|
||||
}
|
||||
|
||||
#if !NO_SYSTEM_DRAWING_DEPENDENCY
|
||||
[TypeConverter (typeof(SizeConverter))]
|
||||
#endif
|
||||
public long MaximumQueueSize {
|
||||
[MonoTODO]
|
||||
get {throw new NotImplementedException();}
|
||||
@ -183,4 +189,4 @@ namespace System.Messaging
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
#include net_4_5_System.Runtime.Serialization.dll.sources
|
@ -7,13 +7,19 @@ LIB_MCS_FLAGS = -r:System.dll -r:System.Xml.dll -r:System.Runtime.Serialization.
|
||||
|
||||
ifneq (2.1, $(FRAMEWORK_VERSION))
|
||||
LIB_MCS_FLAGS += -d:NET_3_5 -d:NET_3_0 \
|
||||
-r:System.Configuration.dll \
|
||||
-r:System.Web.Extensions.dll
|
||||
-r:System.Configuration.dll
|
||||
|
||||
ifndef NO_SYSTEM_WEB_DEPENDENCY
|
||||
LIB_MCS_FLAGS += -r:System.Web.Extensions.dll
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
ifndef NO_SYSTEM_SERVICEMODEL_ACTIVATION_DEPENDENCY
|
||||
ifeq (4, $(FRAMEWORK_VERSION_MAJOR))
|
||||
LIB_MCS_FLAGS += -r:System.ServiceModel.Activation.dll
|
||||
endif
|
||||
endif
|
||||
|
||||
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
||||
|
||||
|
@ -146,7 +146,7 @@ namespace System.ServiceModel.Channels
|
||||
return context.GetInnerProperty<T> ();
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO]
|
||||
void IWsdlExportExtension.ExportContract (WsdlExporter exporter, WsdlContractConversionContext context)
|
||||
{
|
||||
|
@ -84,7 +84,7 @@ namespace System.ServiceModel.Description
|
||||
// clientRuntime.MessageInspectors.Add (something);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
protected virtual void AddServerErrorHandlers (ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
|
||||
{
|
||||
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add (new WebHttpErrorHandler ());
|
||||
@ -103,7 +103,7 @@ namespace System.ServiceModel.Description
|
||||
|
||||
public virtual void ApplyDispatchBehavior (ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
|
||||
{
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
throw new NotImplementedException ();
|
||||
#else
|
||||
endpointDispatcher.DispatchRuntime.OperationSelector = GetOperationSelector (endpoint);
|
||||
@ -146,7 +146,7 @@ namespace System.ServiceModel.Description
|
||||
}
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
internal class DispatchPairFormatter : IDispatchMessageFormatter
|
||||
{
|
||||
public DispatchPairFormatter (IDispatchMessageFormatter request, IDispatchMessageFormatter reply)
|
||||
|
@ -52,7 +52,7 @@ namespace System.ServiceModel
|
||||
|
||||
public WebHttpBinding (string configurationName)
|
||||
{
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
BindingsSection bindingsSection = ConfigUtil.BindingsSection;
|
||||
WebHttpBindingElement el = (WebHttpBindingElement) bindingsSection ["webHttpBinding"].ConfiguredBindings.FirstOrDefault (c => c.Name == configurationName);
|
||||
if (el != null) {
|
||||
@ -88,7 +88,7 @@ namespace System.ServiceModel
|
||||
get { return EnvelopeVersion.None; }
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[DefaultValue (false)]
|
||||
public bool AllowCookies {
|
||||
get { return t.AllowCookies; }
|
||||
|
@ -0,0 +1,39 @@
|
||||
#include mobile_System.ServiceModel.Web.dll.sources
|
||||
System.ServiceModel.Web/IncomingWebRequestContext.cs
|
||||
System.ServiceModel.Web/OutgoingWebResponseContext.cs
|
||||
System.ServiceModel.Syndication/Atom10FeedFormatter.cs
|
||||
System.ServiceModel.Syndication/Atom10FeedFormatter_1.cs
|
||||
System.ServiceModel.Syndication/Atom10ItemFormatter.cs
|
||||
System.ServiceModel.Syndication/Atom10ItemFormatter_1.cs
|
||||
System.ServiceModel.Syndication/AtomPub10CategoriesDocumentFormatter.cs
|
||||
System.ServiceModel.Syndication/AtomPub10ServiceDocumentFormatter.cs
|
||||
System.ServiceModel.Syndication/AtomPub10ServiceDocumentFormatter_1.cs
|
||||
System.ServiceModel.Syndication/CategoriesDocument.cs
|
||||
System.ServiceModel.Syndication/CategoriesDocumentFormatter.cs
|
||||
System.ServiceModel.Syndication/ISyndicationElement.cs
|
||||
System.ServiceModel.Syndication/InlineCategoriesDocument.cs
|
||||
System.ServiceModel.Syndication/ReferencedCategoriesDocument.cs
|
||||
System.ServiceModel.Syndication/ResourceCollectionInfo.cs
|
||||
System.ServiceModel.Syndication/Rss20FeedFormatter.cs
|
||||
System.ServiceModel.Syndication/Rss20FeedFormatter_1.cs
|
||||
System.ServiceModel.Syndication/Rss20ItemFormatter.cs
|
||||
System.ServiceModel.Syndication/Rss20ItemFormatter_1.cs
|
||||
System.ServiceModel.Syndication/ServiceDocument.cs
|
||||
System.ServiceModel.Syndication/ServiceDocumentFormatter.cs
|
||||
System.ServiceModel.Syndication/SyndicationCategory.cs
|
||||
System.ServiceModel.Syndication/SyndicationContent.cs
|
||||
System.ServiceModel.Syndication/SyndicationElementExtension.cs
|
||||
System.ServiceModel.Syndication/SyndicationElementExtensionCollection.cs
|
||||
System.ServiceModel.Syndication/SyndicationExtensions.cs
|
||||
System.ServiceModel.Syndication/SyndicationFeed.cs
|
||||
System.ServiceModel.Syndication/SyndicationFeedFormatter.cs
|
||||
System.ServiceModel.Syndication/SyndicationItem.cs
|
||||
System.ServiceModel.Syndication/SyndicationItemFormatter.cs
|
||||
System.ServiceModel.Syndication/SyndicationLink.cs
|
||||
System.ServiceModel.Syndication/SyndicationPerson.cs
|
||||
System.ServiceModel.Syndication/SyndicationVersions.cs
|
||||
System.ServiceModel.Syndication/TextSyndicationContent.cs
|
||||
System.ServiceModel.Syndication/TextSyndicationContentKind.cs
|
||||
System.ServiceModel.Syndication/UrlSyndicationContent.cs
|
||||
System.ServiceModel.Syndication/Workspace.cs
|
||||
System.ServiceModel.Syndication/XmlSyndicationContent.cs
|
@ -1,3 +1,4 @@
|
||||
#if !XAMMAC_4_5
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
@ -187,3 +188,4 @@ namespace Mono.Xml.XPath
|
||||
class Dummy {}
|
||||
}
|
||||
#endif
|
||||
#endif
|
69
mcs/class/System.ServiceModel/Dummy_XM_4_5.cs
Normal file
69
mcs/class/System.ServiceModel/Dummy_XM_4_5.cs
Normal file
@ -0,0 +1,69 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
|
||||
namespace System.ServiceModel
|
||||
{
|
||||
public class InstanceContext
|
||||
{
|
||||
public InstanceContext (object dummy) {}
|
||||
}
|
||||
}
|
||||
|
||||
namespace System.ServiceModel.PeerResolvers
|
||||
{
|
||||
class Dummy {}
|
||||
}
|
||||
|
||||
namespace System.ServiceModel.Configuration
|
||||
{
|
||||
class Dummy {}
|
||||
}
|
||||
namespace System.ServiceModel.Channels.Http
|
||||
{
|
||||
}
|
||||
namespace System.ServiceModel.Channels.NetTcp
|
||||
{
|
||||
}
|
||||
|
||||
namespace System.ServiceModel.Dispatcher
|
||||
{
|
||||
public sealed class EndpointDispatcher
|
||||
{
|
||||
internal EndpointDispatcher ()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace System.ServiceModel.Channels
|
||||
{
|
||||
public static class UrlUtility {
|
||||
public static string UrlEncode (string s, Encoding e)
|
||||
{
|
||||
return System.Net.WebUtility.UrlEncode (s);
|
||||
}
|
||||
|
||||
public static string UrlDecode (string s, Encoding e)
|
||||
{
|
||||
return System.Net.WebUtility.UrlDecode (s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace System.ServiceModel.Description
|
||||
{
|
||||
public interface IPolicyExportExtension {}
|
||||
public interface IPolicyImportExtension {}
|
||||
public interface IWsdlExportExtension {}
|
||||
public interface IWsdlImportExtension {}
|
||||
}
|
||||
namespace System.ServiceModel.Channels
|
||||
{
|
||||
public interface ITransportTokenAssertionProvider {}
|
||||
}
|
@ -18,6 +18,10 @@ LIB_MCS_FLAGS = \
|
||||
/r:System.Runtime.Serialization.dll \
|
||||
$(RESOURCE_FILES:%=/resource:%)
|
||||
|
||||
ifdef XAMMAC_4_5
|
||||
LIB_REFS += System.ServiceModel.Internals
|
||||
endif
|
||||
|
||||
ifneq (2.1, $(FRAMEWORK_VERSION))
|
||||
LIB_MCS_FLAGS += /d:NET_3_0 \
|
||||
/r:System.Configuration.dll \
|
||||
@ -27,22 +31,41 @@ LIB_MCS_FLAGS += /d:NET_3_0 \
|
||||
/r:System.IdentityModel.Selectors.dll \
|
||||
/r:System.Transactions.dll \
|
||||
/r:System.Messaging.dll \
|
||||
/r:System.Web.dll \
|
||||
/r:System.Web.Services.dll \
|
||||
/r:Mono.Security.dll
|
||||
|
||||
ifdef XAMAMC_4_5
|
||||
LIB_MCS_FLAGS += /r:System.Net.dll
|
||||
endif
|
||||
|
||||
ifndef NO_SYSTEM_WEB_DEPENDENCY
|
||||
LIB_MCS_FLAGS += /r:System.Web.dll
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
ifeq (4, $(FRAMEWORK_VERSION_MAJOR))
|
||||
ifndef NO_SYSTEM_WEB_APPSERVICES_DEPENDENCY
|
||||
LIB_MCS_FLAGS += /r:System.Web.ApplicationServices.dll
|
||||
endif
|
||||
|
||||
ifndef NO_SYSTEM_SERVICEMODEL_ACTIVATION_DEPENDENCY
|
||||
activation = $(the_libdir_base)System.ServiceModel.Activation.dll
|
||||
servicemodel_deps = $(activation)
|
||||
endif
|
||||
|
||||
ifneq (plainservice/,$(intermediate))
|
||||
ifndef NO_SYSTEM_SERVICEMODEL_ACTIVATION_DEPENDENCY
|
||||
LIB_MCS_FLAGS += -define:HAS_ACTIVATION -r:System.ServiceModel.Activation.dll
|
||||
endif
|
||||
|
||||
ifndef NO_SYSTEM_WEB_APPSERVICES_DEPENDENCY
|
||||
LIB_MCS_FLAGS += -r:System.Web.ApplicationServices.dll
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
||||
|
||||
TEST_EXTRA_FILES = \
|
||||
@ -87,4 +110,4 @@ CLEAN_FILES = $(the_libdir_base)plainservice/System.ServiceModel.dll
|
||||
ifndef intermediate
|
||||
csproj-local:
|
||||
$(MAKE) csproj-local intermediate=plainservice/
|
||||
endif
|
||||
endif
|
||||
|
@ -131,7 +131,7 @@ namespace System.ServiceModel.Channels
|
||||
return new BinaryMessageEncoderFactory (this);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO]
|
||||
void IWsdlExportExtension.ExportContract (WsdlExporter exporter,
|
||||
WsdlContractConversionContext context)
|
||||
|
@ -137,7 +137,7 @@ namespace System.ServiceModel.Channels
|
||||
|
||||
OperationContext ctx = OperationContext.Current;
|
||||
// FIXME: support more fault code depending on the exception type.
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
// FIXME: set correct fault reason.
|
||||
if (ctx != null && ctx.EndpointDispatcher.ChannelDispatcher.IncludeExceptionDetailInFaults) {
|
||||
ExceptionDetail detail = new ExceptionDetail (error);
|
||||
|
@ -185,7 +185,7 @@ namespace System.ServiceModel.Channels
|
||||
return typeof (TChannel) == typeof (IRequestChannel);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public override bool CanBuildChannelListener<TChannel> (
|
||||
BindingContext context)
|
||||
{
|
||||
@ -201,7 +201,7 @@ namespace System.ServiceModel.Channels
|
||||
return new HttpChannelFactory<TChannel> (this, context);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
internal static object ListenerBuildLock = new object ();
|
||||
|
||||
public override IChannelListener<TChannel> BuildChannelListener<TChannel> (
|
||||
@ -242,7 +242,7 @@ namespace System.ServiceModel.Channels
|
||||
set { throw new NotImplementedException (); }
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
void IPolicyExportExtension.ExportPolicy (
|
||||
MetadataExporter exporter,
|
||||
PolicyConversionContext context)
|
||||
|
@ -68,7 +68,7 @@ namespace System.ServiceModel.Channels
|
||||
return base.BuildChannelFactory <TChannel> (context);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO]
|
||||
public override IChannelListener<TChannel>
|
||||
BuildChannelListener<TChannel> (
|
||||
@ -83,7 +83,7 @@ namespace System.ServiceModel.Channels
|
||||
return new HttpsTransportBindingElement (this);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public XmlElement GetTransportTokenAssertion ()
|
||||
{
|
||||
var doc = new XmlDocument ();
|
||||
|
@ -59,7 +59,7 @@ namespace System.ServiceModel.Channels
|
||||
return ctx.GetInnerProperty<T> ();
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO]
|
||||
protected virtual void OnImportPolicy (XmlElement assertion,
|
||||
MessageVersion messageVersion,
|
||||
|
@ -99,7 +99,7 @@ namespace System.ServiceModel.Channels
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
#if !MOBILE
|
||||
#if !MOBILE && !XAMMAC_4_5
|
||||
void IPolicyExportExtension.ExportPolicy (MetadataExporter exporter, PolicyConversionContext context)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
|
@ -30,7 +30,7 @@ using System.Collections.ObjectModel;
|
||||
using System.ServiceModel.Description;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Security;
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
using System.ServiceModel.Channels.Security;
|
||||
using System.IdentityModel.Selectors;
|
||||
using System.IdentityModel.Tokens;
|
||||
@ -44,7 +44,7 @@ namespace System.ServiceModel.Channels
|
||||
{
|
||||
internal SecurityBindingElement ()
|
||||
{
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
DefaultAlgorithmSuite = SecurityAlgorithmSuite.Default;
|
||||
MessageSecurityVersion = MessageSecurityVersion.Default;
|
||||
KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
|
||||
@ -60,7 +60,7 @@ namespace System.ServiceModel.Channels
|
||||
|
||||
internal SecurityBindingElement (SecurityBindingElement other)
|
||||
{
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
alg_suite = other.alg_suite;
|
||||
key_entropy_mode = other.key_entropy_mode;
|
||||
security_header_layout = other.security_header_layout;
|
||||
@ -79,7 +79,7 @@ namespace System.ServiceModel.Channels
|
||||
LocalClientSettings = other.LocalClientSettings.Clone ();
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
SecurityAlgorithmSuite alg_suite;
|
||||
SecurityKeyEntropyMode key_entropy_mode;
|
||||
SecurityHeaderLayout security_header_layout;
|
||||
@ -93,7 +93,7 @@ namespace System.ServiceModel.Channels
|
||||
|
||||
public LocalClientSecuritySettings LocalClientSettings { get; private set; }
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public SecurityAlgorithmSuite DefaultAlgorithmSuite {
|
||||
get { return alg_suite; }
|
||||
set { alg_suite = value; }
|
||||
@ -138,7 +138,7 @@ namespace System.ServiceModel.Channels
|
||||
[MonoTODO ("Implement for TransportSecurityBindingElement")]
|
||||
public override bool CanBuildChannelFactory<TChannel> (BindingContext context)
|
||||
{
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
// not sure this should be like this, but there isn't Symmetric/Asymmetric elements in 2.1 anyways.
|
||||
return context.CanBuildInnerChannelFactory<TChannel> ();
|
||||
#else
|
||||
@ -183,7 +183,7 @@ namespace System.ServiceModel.Channels
|
||||
protected abstract IChannelFactory<TChannel>
|
||||
BuildChannelFactoryCore<TChannel> (BindingContext context);
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO ("Implement for TransportSecurityBindingElement")]
|
||||
public override bool CanBuildChannelListener<TChannel> (BindingContext context)
|
||||
{
|
||||
@ -270,7 +270,7 @@ namespace System.ServiceModel.Channels
|
||||
#endif
|
||||
|
||||
#region Factory methods
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public static SymmetricSecurityBindingElement
|
||||
CreateAnonymousForCertificateBindingElement ()
|
||||
{
|
||||
@ -559,14 +559,14 @@ namespace System.ServiceModel.Channels
|
||||
CreateUserNameOverTransportBindingElement ()
|
||||
{
|
||||
var be = new TransportSecurityBindingElement ();
|
||||
#if !NET_2_1 // FIXME: there should be whatever else to do for 2.1 instead.
|
||||
#if !NET_2_1 && !XAMMAC_4_5 // FIXME: there should be whatever else to do for 2.1 instead.
|
||||
be.EndpointSupportingTokenParameters.SignedEncrypted.Add (new UserNameSecurityTokenParameters ());
|
||||
#endif
|
||||
return be;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
// It seems almost internal, hardcoded like this (I tried
|
||||
// custom parameters that sets IssuedTokenSecurityTokenParameters
|
||||
// like below ones, but that didn't trigger this method).
|
||||
|
@ -143,7 +143,7 @@ namespace System.ServiceModel.Channels
|
||||
return new TextMessageEncoderFactory (this);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO]
|
||||
protected override void OnImportPolicy (XmlElement assertion,
|
||||
MessageVersion messageVersion,
|
||||
|
@ -92,7 +92,7 @@ namespace System.ServiceModel.Channels
|
||||
return context.GetInnerProperty<T> ();
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
internal static XmlElement CreateTransportBinding (XmlElement transportToken)
|
||||
{
|
||||
var doc = new XmlDocument ();
|
||||
|
@ -65,7 +65,7 @@ namespace System.ServiceModel.Channels
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
[MonoTODO]
|
||||
protected override IChannelListener<TChannel>
|
||||
BuildChannelListenerCore<TChannel> (
|
||||
|
@ -35,7 +35,9 @@ using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Configuration;
|
||||
using System.ServiceModel.Description;
|
||||
using System.ServiceModel.Dispatcher;
|
||||
#if !XAMMAC_4_5
|
||||
using System.Web.Configuration;
|
||||
#endif
|
||||
|
||||
using SysConfig = System.Configuration.Configuration;
|
||||
|
||||
@ -43,6 +45,7 @@ namespace System.ServiceModel.Configuration
|
||||
{
|
||||
internal static class ConfigUtil
|
||||
{
|
||||
#if !XAMMAC_4_5
|
||||
static object GetSection (string name)
|
||||
{
|
||||
if (ServiceHostingEnvironment.InAspNet)
|
||||
@ -242,6 +245,7 @@ namespace System.ServiceModel.Configuration
|
||||
{
|
||||
return new EndpointAddress (el.Address, el.Identity != null ? el.Identity.CreateInstance () : null, el.Headers.Headers);
|
||||
}
|
||||
#endif
|
||||
|
||||
public static EndpointIdentity CreateInstance (this IdentityElement el)
|
||||
{
|
||||
@ -299,6 +303,7 @@ namespace System.ServiceModel.Configuration
|
||||
return CreateCertificateFrom (el.StoreLocation, el.StoreName, el.X509FindType, el.FindValue);
|
||||
}
|
||||
|
||||
#if !XAMMAC_4_5
|
||||
public static BindingCollectionElement FindCollectionElement (Binding binding, SysConfig config)
|
||||
{
|
||||
var section = (BindingsSection) config.GetSection ("system.serviceModel/bindings");
|
||||
@ -309,6 +314,7 @@ namespace System.ServiceModel.Configuration
|
||||
|
||||
return null;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
enum NamedConfigCategory
|
||||
|
@ -40,7 +40,7 @@ using System.ServiceModel.Security.Tokens;
|
||||
namespace System.ServiceModel.Description
|
||||
{
|
||||
public class ClientCredentials
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
: IEndpointBehavior
|
||||
#else
|
||||
: SecurityCredentialsManager, IEndpointBehavior
|
||||
@ -128,7 +128,7 @@ namespace System.ServiceModel.Description
|
||||
return new ClientCredentials (this);
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public override SecurityTokenManager CreateSecurityTokenManager ()
|
||||
{
|
||||
return new ClientCredentialsSecurityTokenManager (this);
|
||||
|
@ -112,7 +112,7 @@ namespace System.ServiceModel.Description
|
||||
{
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
//IWsdlExportExtension
|
||||
|
||||
void IWsdlExportExtension.ExportContract (WsdlExporter exporter,
|
||||
|
@ -100,7 +100,7 @@ namespace System.ServiceModel.Description
|
||||
set { type = value; }
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
internal XsdDataContractImporter DataContractImporter { get; set; }
|
||||
internal XmlSerializerMessageContractImporterInternal XmlSerializationImporter { get; set; }
|
||||
internal System.CodeDom.CodeTypeReference CodeTypeReference { get; set; }
|
||||
|
@ -104,7 +104,7 @@ namespace System.ServiceModel.Description
|
||||
{
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
void IWsdlExportExtension.ExportContract (
|
||||
WsdlExporter exporter,
|
||||
WsdlContractConversionContext context)
|
||||
|
@ -36,7 +36,7 @@ namespace System.ServiceModel.Diagnostics
|
||||
{
|
||||
public MessageLoggingSettings ()
|
||||
{
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
var e = ConfigUtil.DiagnosticSection.MessageLogging;
|
||||
LogEntireMessage = e.LogEntireMessage;
|
||||
LogKnownPii = e.LogKnownPii;
|
||||
|
@ -214,7 +214,7 @@ namespace System.ServiceModel.Dispatcher
|
||||
|
||||
void ThrowIfOpened ()
|
||||
{
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
// FIXME: get callback client runtime status when ChannelDispatcher is not available.
|
||||
var state = Parent.ChannelDispatcher != null ? Parent.ChannelDispatcher.State : CommunicationState.Created; // Parent.CallbackClientRuntime.ChannelFactory.State;
|
||||
switch (state) {
|
||||
|
@ -31,8 +31,10 @@ using System.Collections.ObjectModel;
|
||||
using System.Reflection;
|
||||
#if !NET_2_1
|
||||
using System.IdentityModel.Policy;
|
||||
#if !XAMMAC_4_5
|
||||
using System.Web.Security;
|
||||
#endif
|
||||
#endif
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.ServiceModel;
|
||||
@ -43,7 +45,7 @@ namespace System.ServiceModel.Dispatcher
|
||||
{
|
||||
public sealed class DispatchRuntime
|
||||
{
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
internal DispatchRuntime (EndpointDispatcher dispatcher, ClientRuntime callbackClientRuntime)
|
||||
{
|
||||
UnhandledDispatchOperation = new DispatchOperation (
|
||||
|
@ -50,7 +50,7 @@ namespace System.ServiceModel
|
||||
{
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public BasicHttpBinding (string configurationName)
|
||||
: this ()
|
||||
{
|
||||
@ -110,7 +110,7 @@ namespace System.ServiceModel
|
||||
SecurityBindingElement element;
|
||||
switch (Security.Mode) {
|
||||
case BasicHttpSecurityMode.Message:
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
throw new NotImplementedException ();
|
||||
#else
|
||||
if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
|
||||
@ -121,7 +121,7 @@ namespace System.ServiceModel
|
||||
#endif
|
||||
|
||||
case BasicHttpSecurityMode.TransportWithMessageCredential:
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
throw new NotImplementedException ();
|
||||
#else
|
||||
if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
|
||||
@ -135,7 +135,7 @@ namespace System.ServiceModel
|
||||
return null;
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
element.SetKeyDerivation (false);
|
||||
element.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
|
||||
#endif
|
||||
@ -150,7 +150,7 @@ namespace System.ServiceModel
|
||||
ReaderQuotas.CopyTo (tm.ReaderQuotas);
|
||||
return tm;
|
||||
} else {
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
throw new NotImplementedException ();
|
||||
#else
|
||||
return new MtomMessageEncodingBindingElement (
|
||||
|
@ -50,7 +50,7 @@ namespace System.ServiceModel
|
||||
{
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public BasicHttpsBinding (string configurationName)
|
||||
: this ()
|
||||
{
|
||||
@ -101,7 +101,8 @@ namespace System.ServiceModel
|
||||
SecurityBindingElement element;
|
||||
switch (Security.Mode) {
|
||||
case BasicHttpsSecurityMode.TransportWithMessageCredential:
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
|
||||
throw new NotImplementedException ();
|
||||
#else
|
||||
if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
|
||||
@ -115,7 +116,7 @@ namespace System.ServiceModel
|
||||
return null;
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
element.SetKeyDerivation (false);
|
||||
element.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
|
||||
#endif
|
||||
@ -130,7 +131,7 @@ namespace System.ServiceModel
|
||||
ReaderQuotas.CopyTo (tm.ReaderQuotas);
|
||||
return tm;
|
||||
} else {
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
throw new NotImplementedException ();
|
||||
#else
|
||||
return new MtomMessageEncodingBindingElement (
|
||||
|
@ -90,7 +90,7 @@ namespace System.ServiceModel
|
||||
if (endpointConfig == null)
|
||||
return;
|
||||
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
try {
|
||||
// It should automatically use XmlXapResolver
|
||||
var cfg = new SilverlightClientConfigLoader ().Load (XmlReader.Create ("ServiceReferences.ClientConfig"));
|
||||
@ -160,7 +160,7 @@ namespace System.ServiceModel
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
private void ApplyBehavior (string behaviorConfig)
|
||||
{
|
||||
BehaviorsSection behaviorsSection = ConfigUtil.BehaviorsSection;
|
||||
|
@ -45,7 +45,7 @@ namespace System.ServiceModel
|
||||
}
|
||||
|
||||
Message incoming_message;
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
EndpointDispatcher dispatcher;
|
||||
#endif
|
||||
IContextChannel channel;
|
||||
@ -83,7 +83,7 @@ namespace System.ServiceModel
|
||||
}
|
||||
|
||||
|
||||
#if !NET_2_1
|
||||
#if !NET_2_1 && !XAMMAC_4_5
|
||||
public EndpointDispatcher EndpointDispatcher {
|
||||
get { return dispatcher; }
|
||||
set { dispatcher = value; }
|
||||
|
@ -25,7 +25,8 @@
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
#if NET_2_1
|
||||
#if NET_2_1 || XAMMAC_4_5
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ServiceModel.Channels;
|
||||
|
@ -0,0 +1,64 @@
|
||||
#include mobile_System.ServiceModel.dll.sources
|
||||
System.ServiceModel.Channels/IChannelListener.cs
|
||||
System.ServiceModel.Channels/IReplyChannel.cs
|
||||
System.ServiceModel.Channels/IReplySessionChannel.cs
|
||||
System.ServiceModel.Configuration/CertificateElement.cs
|
||||
System.ServiceModel.Configuration/CertificateReferenceElement.cs
|
||||
System.ServiceModel.Configuration/ConfigUtil.cs
|
||||
System.ServiceModel.Configuration/DnsElement.cs
|
||||
System.ServiceModel.Configuration/IdentityElement.cs
|
||||
System.ServiceModel.Configuration/RsaElement.cs
|
||||
System.ServiceModel.Configuration/ServicePrincipalNameElement.cs
|
||||
System.ServiceModel.Configuration/UserPrincipalNameElement.cs
|
||||
System.ServiceModel.Configuration/X509ClientCertificateCredentialsElement.cs
|
||||
System.ServiceModel.Configuration/X509DefaultServiceCertificateElement.cs
|
||||
System.ServiceModel.Configuration/X509ScopedServiceCertificateElement.cs
|
||||
System.ServiceModel.Description/MetadataLocation.cs
|
||||
System.ServiceModel.Description/MetadataReference.cs
|
||||
System.ServiceModel.Description/MetadataSection.cs
|
||||
System.ServiceModel.Description/MetadataSectionSerializerBase.cs
|
||||
System.ServiceModel.Description/MetadataSet.cs
|
||||
System.ServiceModel.Dispatcher/ActionMessageFilter.cs
|
||||
System.ServiceModel.Dispatcher/ActionMessageFilterTable.cs
|
||||
System.ServiceModel.Dispatcher/ICallContextInitializer.cs
|
||||
System.ServiceModel.Dispatcher/IMessageFilterTable.cs
|
||||
System.ServiceModel.Dispatcher/IOperationInvoker.cs
|
||||
System.ServiceModel.Dispatcher/MatchAllMessageFilter.cs
|
||||
System.ServiceModel.Dispatcher/MatchNoneMessageFilter.cs
|
||||
System.ServiceModel.Dispatcher/MessageFilter.cs
|
||||
System.ServiceModel.Dispatcher/MessageFilterTable.cs
|
||||
System.ServiceModel.Dispatcher/MultipleMessageFilterMatchesException.cs
|
||||
System.ServiceModel.Dispatcher/SeekableXPathNavigator.cs
|
||||
System.ServiceModel.Dispatcher/XPathMessageFilter.cs
|
||||
System.ServiceModel.Security.Tokens/SecurityContextSecurityToken.cs
|
||||
System.ServiceModel.Security.Tokens/SslnegoCookieResolver.cs
|
||||
System.ServiceModel.Security/ChannelProtectionRequirements.cs
|
||||
System.ServiceModel.Security/IdentityVerifier.cs
|
||||
System.ServiceModel.Security/IssuedTokenClientCredential.cs
|
||||
System.ServiceModel.Security/KeyEntropyMode.cs
|
||||
System.ServiceModel.Security/MessagePartSpecification.cs
|
||||
System.ServiceModel.Security/PeerCredential.cs
|
||||
System.ServiceModel.Security/ScopedMessagePartSpecification.cs
|
||||
System.ServiceModel.Security/SecurityAlgorithmSuite.cs
|
||||
System.ServiceModel.Security/SecurityContextKeyIdentifierClause.cs
|
||||
System.ServiceModel.Security/SecurityMessageProperty.cs
|
||||
System.ServiceModel.Security/SecurityStateEncoder.cs
|
||||
System.ServiceModel.Security/SecurityTokenAttachmentMode.cs
|
||||
System.ServiceModel.Security/SecurityTokenSpecification.cs
|
||||
System.ServiceModel.Security/SupportingTokenSpecification.cs
|
||||
System.ServiceModel.Security/X509CertificateInitiatorClientCredential.cs
|
||||
System.ServiceModel.Security/X509CertificateRecipientClientCredential.cs
|
||||
System.ServiceModel.Security/X509PeerCertificateAuthentication.cs
|
||||
System.ServiceModel.Security/X509ServiceCertificateAuthentication.cs
|
||||
System.ServiceModel/DnsEndpointIdentity.cs
|
||||
System.ServiceModel/EndpointAddressAugust2004.cs
|
||||
System.ServiceModel/EndpointIdentity.cs
|
||||
System.ServiceModel/IDuplexClientChannel.cs
|
||||
System.ServiceModel/OperationBehaviorAttribute.cs
|
||||
System.ServiceModel/RsaEndpointIdentity.cs
|
||||
System.ServiceModel/ServiceSecurityContext.cs
|
||||
System.ServiceModel/SpnEndpointIdentity.cs
|
||||
System.ServiceModel/UpnEndpointIdentity.cs
|
||||
System.ServiceModel/X509CertificateEndpointIdentity.cs
|
||||
System.ServiceModel.Dispatcher/IErrorHandler.cs
|
||||
Dummy_XM_4_5.cs
|
@ -20,13 +20,16 @@ LIB_MCS_FLAGS = \
|
||||
-r:System.dll \
|
||||
-r:System.EnterpriseServices.dll \
|
||||
-r:System.Xml.dll \
|
||||
-r:System.Web.dll
|
||||
|
||||
ifndef NO_SYSTEM_WEB_DEPENDENCY
|
||||
LIB_MCS_FLAGS += -r:System.Web.dll
|
||||
plainweb_dir = $(the_libdir_base)plainweb
|
||||
LOCAL_MCS_FLAGS = -lib:$(plainweb_dir)
|
||||
|
||||
plainweb = $(plainweb_dir)/System.Web.dll
|
||||
system_web_services_deps = $(plainweb)
|
||||
LOCAL_MCS_FLAGS += -lib:$(plainweb_dir)
|
||||
endif
|
||||
|
||||
ifneq (1, $(FRAMEWORK_VERSION_MAJOR))
|
||||
LIB_MCS_FLAGS += \
|
||||
@ -53,4 +56,4 @@ $(the_libdir_base)$(LIBRARY): $(system_web_services_deps)
|
||||
$(plainweb):
|
||||
(cd ../System.Web; $(MAKE) $@)
|
||||
|
||||
.NOTPARALLEL: $(plainweb)
|
||||
.NOTPARALLEL: $(plainweb)
|
||||
|
@ -71,7 +71,7 @@ namespace System.Web.Services.Description
|
||||
RegisterExtensionType (typeof (Soap12HeaderBinding));
|
||||
RegisterExtensionType (typeof (Soap12OperationBinding));
|
||||
|
||||
#if !MOBILE
|
||||
#if !MOBILE && !XAMMAC_4_5
|
||||
/*
|
||||
* Currently, the mobile profile has not support for
|
||||
* System.Configuration, so there are no external modules
|
||||
@ -164,7 +164,7 @@ namespace System.Web.Services.Description
|
||||
/*
|
||||
* The mobile profile lacks support for configuration
|
||||
*/
|
||||
#if MOBILE
|
||||
#if MOBILE || XAMMAC_4_5
|
||||
public static ArrayList BuildExtensionImporters ()
|
||||
{
|
||||
return new ArrayList (0);
|
||||
|
@ -142,7 +142,7 @@ namespace System.Web.Services.Description {
|
||||
schemas.Add (serviceDescription.Types.Schemas);
|
||||
}
|
||||
|
||||
#if !MOBILE
|
||||
#if !MOBILE && !XAMMAC_4_5
|
||||
public ServiceDescriptionImportWarnings Import (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)
|
||||
{
|
||||
foreach (ProtocolImporter importer in GetSupportedImporters ()) {
|
||||
@ -163,9 +163,6 @@ namespace System.Web.Services.Description {
|
||||
list.Add (new HttpPostProtocolImporter ());
|
||||
return list;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !MOBILE
|
||||
|
||||
[MonoTODO] // where to use Verbose and Extensions in options?
|
||||
public static StringCollection GenerateWebReferences (
|
||||
|
@ -487,7 +487,7 @@ namespace System.Web.Services.Protocols {
|
||||
xmlImporter.IncludeTypes (Type);
|
||||
soapImporter.IncludeTypes (Type);
|
||||
|
||||
#if MOBILE
|
||||
#if MOBILE || XAMMAC_4_5
|
||||
SoapExtensions = new SoapExtensionRuntimeConfig [2][];
|
||||
#else
|
||||
SoapExtensions = SoapExtension.GetTypeExtensions (Type);
|
||||
|
@ -207,7 +207,7 @@ namespace System.Web.Services.Protocols
|
||||
soap12Protocol.Initialize ();
|
||||
}
|
||||
return soap12Protocol;
|
||||
#if !MOBILE
|
||||
#if !MOBILE && !XAMMAC_4_5
|
||||
case "HttpGet":
|
||||
if (httpGetProtocol == null){
|
||||
httpGetProtocol = new HttpGetTypeStubInfo (this);
|
||||
|
@ -100,7 +100,7 @@ namespace System.Web.Services.Protocols {
|
||||
return pos;
|
||||
}
|
||||
|
||||
#if !MOBILE
|
||||
#if !MOBILE && !XAMMAC_4_5
|
||||
static void InitializeGlobalExtensions ()
|
||||
{
|
||||
globalExtensions = new ArrayList[2];
|
||||
|
@ -0,0 +1,3 @@
|
||||
#include mobile_System.Web.Services.dll.sources
|
||||
System.Web.Services.Description/ServiceDescription.cs
|
||||
System.Web.Services.Description/ServiceDescriptionImportWarnings.cs
|
@ -35,7 +35,7 @@ using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
#if NET_4_0 && !MOBILE
|
||||
#if !NO_SYSTEM_WEB_DEPENDENCY && NET_4_0 && !MOBILE
|
||||
using System.Web.Configuration;
|
||||
#endif
|
||||
|
||||
@ -163,7 +163,7 @@ namespace System.Web.Util
|
||||
|
||||
static HttpEncoder GetCustomEncoderFromConfig ()
|
||||
{
|
||||
#if MOBILE
|
||||
#if MOBILE || NO_SYSTEM_WEB_DEPENDENCY
|
||||
return defaultEncoder.Value;
|
||||
#else
|
||||
var cfg = HttpRuntime.Section;
|
||||
|
@ -511,7 +511,7 @@ namespace System.Web {
|
||||
if (value == null)
|
||||
return null;
|
||||
|
||||
#if !MOBILE
|
||||
#if !(MOBILE || NO_SYSTEM_WEB_DEPENDENCY)
|
||||
IHtmlString htmlString = value as IHtmlString;
|
||||
if (htmlString != null)
|
||||
return htmlString.ToHtmlString ();
|
||||
|
@ -595,7 +595,8 @@ namespace System.Diagnostics {
|
||||
}
|
||||
|
||||
private StreamReader error_stream=null;
|
||||
|
||||
bool error_stream_exposed;
|
||||
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden), Browsable (false)]
|
||||
[MonitoringDescription ("The standard error stream of this process.")]
|
||||
public StreamReader StandardError {
|
||||
@ -608,11 +609,13 @@ namespace System.Diagnostics {
|
||||
|
||||
async_mode |= AsyncModes.SyncError;
|
||||
|
||||
error_stream_exposed = true;
|
||||
return(error_stream);
|
||||
}
|
||||
}
|
||||
|
||||
private StreamWriter input_stream=null;
|
||||
bool input_stream_exposed;
|
||||
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden), Browsable (false)]
|
||||
[MonitoringDescription ("The standard input stream of this process.")]
|
||||
@ -621,11 +624,13 @@ namespace System.Diagnostics {
|
||||
if (input_stream == null)
|
||||
throw new InvalidOperationException("Standard input has not been redirected");
|
||||
|
||||
input_stream_exposed = true;
|
||||
return(input_stream);
|
||||
}
|
||||
}
|
||||
|
||||
private StreamReader output_stream=null;
|
||||
bool output_stream_exposed;
|
||||
|
||||
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden), Browsable (false)]
|
||||
[MonitoringDescription ("The standard output stream of this process.")]
|
||||
@ -639,6 +644,7 @@ namespace System.Diagnostics {
|
||||
|
||||
async_mode |= AsyncModes.SyncOutput;
|
||||
|
||||
output_stream_exposed = true;
|
||||
return(output_stream);
|
||||
}
|
||||
}
|
||||
@ -1568,17 +1574,18 @@ namespace System.Diagnostics {
|
||||
async_error.Close ();
|
||||
|
||||
if (input_stream != null) {
|
||||
input_stream.Close();
|
||||
if (!input_stream_exposed)
|
||||
input_stream.Close ();
|
||||
input_stream = null;
|
||||
}
|
||||
|
||||
if (output_stream != null) {
|
||||
output_stream.Close();
|
||||
if (!output_stream_exposed)
|
||||
output_stream.Close ();
|
||||
output_stream = null;
|
||||
}
|
||||
|
||||
if (error_stream != null) {
|
||||
error_stream.Close();
|
||||
if (!error_stream_exposed)
|
||||
error_stream.Close ();
|
||||
error_stream = null;
|
||||
}
|
||||
}
|
||||
|
@ -840,5 +840,19 @@ namespace MonoTests.System.Diagnostics
|
||||
public void HasExitedCurrent () {
|
||||
Assert.IsFalse (Process.GetCurrentProcess ().HasExited);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DisposeWithDisposedStreams ()
|
||||
{
|
||||
var psi = GetCrossPlatformStartInfo ();
|
||||
psi.RedirectStandardInput = true;
|
||||
psi.RedirectStandardOutput = true;
|
||||
psi.UseShellExecute = false;
|
||||
|
||||
var p = Process.Start (psi);
|
||||
p.StandardInput.BaseStream.Dispose ();
|
||||
p.StandardOutput.BaseStream.Dispose ();
|
||||
p.Dispose ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user