* SoapMessageFormater.cs: In BuildSoapMessageFromMethodResponse, add the
[mono.git] / mcs / class / System.Runtime.Remoting / System.Runtime.Remoting.Channels / SoapCore.cs
index 8a522bc3938bbe9c8f17bb13410fdbcbd82bb1a9..31c13ca263ff518864400a90f5fd0517ec94cd1b 100644 (file)
@@ -6,6 +6,27 @@
 // 2003 (C) Copyright, Novell, Inc.
 //
 
+//
+// 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.Runtime.Remoting.Messaging;
 using System.Runtime.Serialization;
@@ -18,29 +39,53 @@ namespace System.Runtime.Remoting.Channels
        {
                SoapFormatter _serializationFormatter;
                SoapFormatter _deserializationFormatter;
-               bool _includeVersions;
-               bool _strictBinding;
+               bool _includeVersions = true;
+               bool _strictBinding = false;
+               IDictionary _properties;
                
-               public static SoapCore DefaultInstance = new SoapCore (true, false);
+#if NET_1_1
+               TypeFilterLevel _filterLevel = TypeFilterLevel.Low;
+#endif
+
+               public static SoapCore DefaultInstance = new SoapCore ();
                
-               public SoapCore (IDictionary properties)
+               public SoapCore (object owner, IDictionary properties, string[] allowedProperties)
                {
-                       _includeVersions = true;
-                       _strictBinding = false;
-                       
-                       object val = properties ["includeVersions"];
-                       if (val != null) _includeVersions = Convert.ToBoolean (val);
-                       
-                       val = properties ["strictBinding"];
-                       if (val != null) _strictBinding = Convert.ToBoolean (val);
+                       _properties = properties;
+
+                       foreach(DictionaryEntry property in properties)
+                       {
+                               string key = (string) property.Key;
+                               if (Array.IndexOf (allowedProperties, key) == -1)
+                                       throw new RemotingException (owner.GetType().Name + " does not recognize '" + key + "' configuration property");
+                               
+                               switch (key)
+                               {
+                                       case "includeVersions": 
+                                               _includeVersions = Convert.ToBoolean (property.Value);
+                                               break;
+                                               
+                                       case "strictBinding":
+                                               _strictBinding = Convert.ToBoolean (property.Value);
+                                               break;
+#if NET_1_1
+                                       case "typeFilterLevel":
+                                               if (property.Value is TypeFilterLevel)
+                                                       _filterLevel = (TypeFilterLevel) property.Value;
+                                               else {
+                                                       string s = (string) property.Value;
+                                                       _filterLevel = (TypeFilterLevel) Enum.Parse (typeof(TypeFilterLevel), s);
+                                               }
+                                               break;
+#endif
+                               }
+                       }
                        
                        Init ();
                }
                
-               public SoapCore (bool includeVersions, bool strictBinding)
+               public SoapCore ()
                {
-                       _includeVersions = includeVersions;
-                       _strictBinding = strictBinding;
                        Init ();
                }
                
@@ -51,6 +96,11 @@ namespace System.Runtime.Remoting.Channels
 
                        _serializationFormatter = CreateFormatter (surrogateSelector, context);
                        _deserializationFormatter = CreateFormatter (null, context);
+
+#if NET_1_1
+                       _serializationFormatter.FilterLevel = _filterLevel;
+                       _deserializationFormatter.FilterLevel = _filterLevel;
+#endif
                }
                
                SoapFormatter CreateFormatter (ISurrogateSelector selector, StreamingContext context)
@@ -81,6 +131,18 @@ namespace System.Runtime.Remoting.Channels
                {
                        get { return _deserializationFormatter; }
                }
+               
+               public IDictionary Properties
+               {
+                       get { return _properties; }
+               }
+               
+#if NET_1_1
+               public TypeFilterLevel TypeFilterLevel
+               {
+                       get { return _filterLevel; }
+               }
+#endif
        }
 }