refactoring: making fields readonly
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Protocols / SoapMessage.cs
index 8fc0f04e2889b793da84a85e8c1808ef0a6f7885..038cd76137607d85f2362f0db161d838585cddd6 100644 (file)
@@ -1,12 +1,12 @@
-// \r
-// System.Web.Services.Protocols.SoapMessage.cs\r
-//\r
-// Author:\r
-//   Tim Coleman (tim@timcoleman.com)\r
-//   Lluis Sanchez Gual (lluis@ximian.com)\r
-//\r
-// Copyright (C) Tim Coleman, 2002\r
-//\r
+// 
+// System.Web.Services.Protocols.SoapMessage.cs
+//
+// Author:
+//   Tim Coleman (tim@timcoleman.com)
+//   Lluis Sanchez Gual (lluis@ximian.com)
+//
+// Copyright (C) Tim Coleman, 2002
+//
 
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-\r
-using System.IO;\r
-using System.Web.Services;\r
-\r
-namespace System.Web.Services.Protocols {\r
-       public abstract class SoapMessage {\r
-\r
-               #region Fields\r
-\r
-               string content_type = "text/xml";\r
-               string content_encoding;\r
-               SoapException exception = null;\r
-               SoapHeaderCollection headers;\r
-               SoapMessageStage stage;\r
-               Stream stream;\r
-               object[] inParameters;\r
-               object[] outParameters;\r
-               \r
-#if NET_2_0\r
-               SoapProtocolVersion soapVersion;\r
-#endif\r
-\r
-               #endregion // Fields\r
-\r
-               #region Constructors\r
-\r
-               internal SoapMessage ()\r
-               {\r
-                       headers = new SoapHeaderCollection ();\r
-               }\r
-\r
-               internal SoapMessage (Stream stream, SoapException exception)\r
-               {\r
-                       this.exception = exception;\r
-                       this.stream = stream;\r
-                       headers = new SoapHeaderCollection ();\r
-               }\r
-\r
-               #endregion\r
-\r
-               #region Properties\r
-\r
-               internal object[] InParameters \r
-               {\r
-                       get { return inParameters; }\r
-                       set { inParameters = value; }\r
-               }\r
-\r
-               internal object[] OutParameters \r
-               {\r
-                       get { return outParameters; }\r
-                       set { outParameters = value; }\r
-               }\r
-\r
-               public abstract string Action \r
-               {\r
-                       get;\r
-               }\r
-\r
-               public string ContentType {\r
-                       get { return content_type; }\r
-                       set { content_type = value; }\r
-               }\r
-\r
-               public SoapException Exception {\r
-                       get { return exception; }\r
-#if NET_2_0\r
-                       set { exception = value; }\r
-#endif\r
-               }\r
-\r
-               public SoapHeaderCollection Headers {\r
-                       get { return headers; }\r
-               }\r
-\r
-               public abstract LogicalMethodInfo MethodInfo {\r
-                       get;\r
-               }\r
-\r
-               public abstract bool OneWay {\r
-                       get;\r
-               }\r
-\r
-               public SoapMessageStage Stage {\r
-                       get { return stage; }\r
-               }\r
-\r
-               internal void SetStage (SoapMessageStage stage)\r
-               {\r
-                       this.stage = stage;\r
-               }\r
-               \r
-               public Stream Stream {\r
-                       get {\r
-                               return stream;\r
-                       }\r
-               }\r
-\r
-               public abstract string Url {\r
-                       get;\r
-               }\r
-               \r
-#if NET_1_1\r
-               public string ContentEncoding\r
-               {\r
-                       get { return content_encoding; }\r
-                       set { content_encoding = value; }\r
-               }\r
-#else\r
-               internal string ContentEncoding\r
-               {\r
-                       get { return content_encoding; }\r
-                       set { content_encoding = value; }\r
-               }\r
-#endif\r
-\r
-#if NET_2_0\r
-               [System.Runtime.InteropServices.ComVisible(false)]\r
-               public virtual SoapProtocolVersion SoapVersion {\r
-                       get { return soapVersion; }\r
-               }\r
-#endif\r
\r
-               internal Stream InternalStream \r
-               { \r
-                       // for getter use public stream property\r
-                       set {\r
-                               stream = value;\r
-                       }\r
-               }\r
-\r
-               #endregion Properties\r
-\r
-               #region Methods\r
-\r
-               protected abstract void EnsureInStage ();\r
-               protected abstract void EnsureOutStage ();\r
-\r
-               protected void EnsureStage (SoapMessageStage stage) \r
-               {\r
-                       if ((((int) stage) & ((int) Stage)) == 0)\r
-                               throw new InvalidOperationException ("The current SoapMessageStage is not the asserted stage or stages.");\r
-               }\r
-\r
-               public object GetInParameterValue (int index) \r
-               {\r
-                       return inParameters [index];\r
-               }\r
-\r
-               public object GetOutParameterValue (int index) \r
-               {\r
-                       if (MethodInfo.IsVoid) return outParameters [index];\r
-                       else return outParameters [index + 1];\r
-               }\r
-\r
-               public object GetReturnValue ()\r
-               {\r
-                       if (!MethodInfo.IsVoid && exception == null) return outParameters [0];\r
-                       else return null;\r
-               }\r
-\r
-               internal void SetHeaders (SoapHeaderCollection headers)\r
-               {\r
-                       this.headers = headers;\r
-               }\r
-\r
-               internal void SetException (SoapException ex)\r
-               {\r
-                       exception = ex;\r
-               }\r
-\r
-               internal void CollectHeaders (object target, HeaderInfo[] headers, SoapHeaderDirection direction)\r
-               {\r
-                       Headers.Clear ();\r
-                       foreach (HeaderInfo hi in headers) \r
-                       {\r
-                               if ((hi.Direction & direction) != 0 && !hi.IsUnknownHeader) \r
-                               {\r
-                                       SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader;\r
-                                       if (headerVal != null)\r
-                                               Headers.Add (headerVal);\r
-                               }\r
-                       }\r
-               }\r
-\r
-               internal void UpdateHeaderValues (object target, HeaderInfo[] headersInfo)\r
-               {\r
-                       foreach (SoapHeader header in Headers)\r
-                       {\r
-                               HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ());\r
-                               if (hinfo != null) {\r
+
+using HeaderInfo = System.Web.Services.Protocols.SoapHeaderMapping;
+
+using System.ComponentModel;
+using System.IO;
+using System.Web.Services;
+
+namespace System.Web.Services.Protocols {
+       public abstract class SoapMessage {
+
+               #region Fields
+
+               string content_type = "text/xml";
+               string content_encoding;
+               SoapException exception = null;
+               SoapHeaderCollection headers;
+               SoapMessageStage stage;
+               Stream stream;
+               object[] inParameters;
+               object[] outParameters;
+               
+#if NET_2_0
+               SoapProtocolVersion soapVersion;
+#endif
+
+               #endregion // Fields
+
+               #region Constructors
+
+               internal SoapMessage ()
+               {
+                       headers = new SoapHeaderCollection ();
+               }
+
+               internal SoapMessage (Stream stream, SoapException exception)
+               {
+                       this.exception = exception;
+                       this.stream = stream;
+                       headers = new SoapHeaderCollection ();
+               }
+
+               #endregion
+
+               #region Properties
+
+               internal object[] InParameters 
+               {
+                       get { return inParameters; }
+                       set { inParameters = value; }
+               }
+
+               internal object[] OutParameters 
+               {
+                       get { return outParameters; }
+                       set { outParameters = value; }
+               }
+
+               public abstract string Action 
+               {
+                       get;
+               }
+
+               public string ContentType {
+                       get { return content_type; }
+                       set { content_type = value; }
+               }
+
+               public SoapException Exception {
+                       get { return exception; }
+#if NET_2_0
+                       set { exception = value; }
+#endif
+               }
+
+               public SoapHeaderCollection Headers {
+                       get { return headers; }
+               }
+
+               public abstract LogicalMethodInfo MethodInfo {
+                       get;
+               }
+
+               public abstract bool OneWay {
+                       get;
+               }
+
+               public SoapMessageStage Stage {
+                       get { return stage; }
+               }
+
+               internal void SetStage (SoapMessageStage stage)
+               {
+                       this.stage = stage;
+               }
+               
+               public Stream Stream {
+                       get {
+                               return stream;
+                       }
+               }
+
+               public abstract string Url {
+                       get;
+               }
+               
+#if NET_1_1
+               public string ContentEncoding
+               {
+                       get { return content_encoding; }
+                       set { content_encoding = value; }
+               }
+#else
+               internal string ContentEncoding
+               {
+                       get { return content_encoding; }
+                       set { content_encoding = value; }
+               }
+#endif
+
+               internal bool IsSoap12 {
+                       get {
+#if NET_2_0
+                               return SoapVersion == SoapProtocolVersion.Soap12;
+#else
+                               return false;
+#endif
+                       }
+               }
+
+#if NET_2_0
+               [System.Runtime.InteropServices.ComVisible(false)]
+               [DefaultValue (SoapProtocolVersion.Default)]
+               public virtual SoapProtocolVersion SoapVersion {
+                       get { return soapVersion; }
+               }
+#endif
+               internal Stream InternalStream 
+               { 
+                       // for getter use public stream property
+                       set {
+                               stream = value;
+                       }
+               }
+
+               #endregion Properties
+
+               #region Methods
+
+               protected abstract void EnsureInStage ();
+               protected abstract void EnsureOutStage ();
+
+               protected void EnsureStage (SoapMessageStage stage) 
+               {
+                       if ((((int) stage) & ((int) Stage)) == 0)
+                               throw new InvalidOperationException ("The current SoapMessageStage is not the asserted stage or stages.");
+               }
+
+               public object GetInParameterValue (int index) 
+               {
+                       return inParameters [index];
+               }
+
+               public object GetOutParameterValue (int index) 
+               {
+                       if (MethodInfo.IsVoid) return outParameters [index];
+                       else return outParameters [index + 1];
+               }
+
+               public object GetReturnValue ()
+               {
+                       if (!MethodInfo.IsVoid && exception == null) return outParameters [0];
+                       else return null;
+               }
+
+               internal void SetHeaders (SoapHeaderCollection headers)
+               {
+                       this.headers = headers;
+               }
+
+               internal void SetException (SoapException ex)
+               {
+                       exception = ex;
+               }
+
+               internal void CollectHeaders (object target, HeaderInfo[] headers, SoapHeaderDirection direction)
+               {
+                       Headers.Clear ();
+                       foreach (HeaderInfo hi in headers) 
+                       {
+                               if ((hi.Direction & direction) != 0 && !hi.Custom) 
+                               {
+                                       SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader;
+                                       if (headerVal != null)
+                                               Headers.Add (headerVal);
+                               }
+                       }
+               }
+
+               internal void UpdateHeaderValues (object target, HeaderInfo[] headersInfo)
+               {
+                       foreach (SoapHeader header in Headers)
+                       {
+                               HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ());
+                               if (hinfo != null) {
                                        hinfo.SetHeaderValue (target, header);
-                                       header.DidUnderstand = !hinfo.IsUnknownHeader;
-                               }\r
-                       }\r
-               }\r
-\r
-               HeaderInfo FindHeader (HeaderInfo[] headersInfo, Type headerType)\r
+                                       header.DidUnderstand = !hinfo.Custom;
+                               }
+                       }
+               }
+
+               HeaderInfo FindHeader (HeaderInfo[] headersInfo, Type headerType)
                {
                        HeaderInfo unknownHeaderInfo = null;
-               \r
+               
                        foreach (HeaderInfo headerInfo in headersInfo) {
                                if (headerInfo.HeaderType == headerType)
                                        return headerInfo;
-                               else if (headerInfo.IsUnknownHeader
+                               else if (headerInfo.Custom
                                        unknownHeaderInfo = headerInfo;
                        }
                        return unknownHeaderInfo;
-               }\r
-\r
-               #endregion // Methods\r
-       }\r
+               }
+
+               #endregion // Methods
+       }
 }