Merge pull request #5120 from lambdageek/bug-57744
[mono.git] / mcs / class / corlib / System.Runtime.Remoting.Messaging / RemotingSurrogate.cs
1 //
2 // System.Runtime.Remoting.Messaging.RemotingSurrogate.cs
3 //
4 // Author:    Patrik Torstensson
5 //
6 // (C) Ximian, Inc.  http://www.ximian.com
7 //
8
9 //
10 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31
32 using System;
33 using System.Runtime.Remoting;
34 using System.Runtime.Remoting.Proxies;
35 using System.Runtime.Serialization;
36
37 namespace System.Runtime.Remoting.Messaging \r
38 {
39         internal class RemotingSurrogate : ISerializationSurrogate\r
40         {\r
41                 public virtual void GetObjectData(Object obj, SerializationInfo si, StreamingContext sc)\r
42                 {               \r
43                         if (null == obj || null == si)\r
44                                 throw new ArgumentNullException();\r
45 \r
46                         if (RemotingServices.IsTransparentProxy (obj) )\r
47                         {\r
48                                 RealProxy rp = RemotingServices.GetRealProxy (obj);\r
49                                 rp.GetObjectData (si, sc);\r
50                         } else RemotingServices.GetObjectData (obj, si, sc);\r
51                 }\r
52 \r
53                 public virtual Object  SetObjectData(Object obj, SerializationInfo si, StreamingContext sc, ISurrogateSelector selector)\r
54                 { \r
55                         throw new NotSupportedException();\r
56                 }\r
57         }
58
59         internal class ObjRefSurrogate : ISerializationSurrogate\r
60         {\r
61                 public virtual void GetObjectData(Object obj, SerializationInfo si, StreamingContext sc)\r
62                 {               \r
63                         if (null == obj || null == si)\r
64                                 throw new ArgumentNullException();\r
65                         \r
66                         ((ObjRef) obj).GetObjectData (si, sc);\r
67 \r
68                         // added to support same syntax as MS\r
69                         si.AddValue("fIsMarshalled", 0);            \r
70                 }\r
71 \r
72                 public virtual Object SetObjectData(Object obj, SerializationInfo si, StreamingContext sc, ISurrogateSelector selector)\r
73                 { \r
74                         // ObjRef is deserialized using the IObjectReference interface
75                         throw new NotSupportedException ("Do not use RemotingSurrogateSelector when deserializating");
76                 }\r
77         }
78 }