|
|
|
@ -1,201 +0,0 @@ |
|
|
|
|
#region Copyright notice and license |
|
|
|
|
|
|
|
|
|
// Protocol Buffers - Google's data interchange format |
|
|
|
|
// Copyright 2008 Google Inc. All rights reserved. |
|
|
|
|
// http://github.com/jskeet/dotnet-protobufs/ |
|
|
|
|
// Original C++/Java/Python code: |
|
|
|
|
// http://code.google.com/p/protobuf/ |
|
|
|
|
// |
|
|
|
|
// Redistribution and use in source and binary forms, with or without |
|
|
|
|
// modification, are permitted provided that the following conditions are |
|
|
|
|
// met: |
|
|
|
|
// |
|
|
|
|
// * Redistributions of source code must retain the above copyright |
|
|
|
|
// notice, this list of conditions and the following disclaimer. |
|
|
|
|
// * Redistributions in binary form must reproduce the above |
|
|
|
|
// copyright notice, this list of conditions and the following disclaimer |
|
|
|
|
// in the documentation and/or other materials provided with the |
|
|
|
|
// distribution. |
|
|
|
|
// * Neither the name of Google Inc. nor the names of its |
|
|
|
|
// contributors may be used to endorse or promote products derived from |
|
|
|
|
// this software without specific prior written permission. |
|
|
|
|
// |
|
|
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
|
|
|
|
|
|
|
#endregion |
|
|
|
|
/* |
|
|
|
|
* This entire source file is not supported on some platform |
|
|
|
|
*/ |
|
|
|
|
#if !NOSERIALIZABLE |
|
|
|
|
using System; |
|
|
|
|
using System.Security.Permissions; |
|
|
|
|
using System.Runtime.Serialization; |
|
|
|
|
using System.Security; |
|
|
|
|
|
|
|
|
|
namespace Google.ProtocolBuffers |
|
|
|
|
{ |
|
|
|
|
/* |
|
|
|
|
* Specialized handing of *all* message types. Messages are serialized into a byte[] and stored |
|
|
|
|
* into the SerializationInfo, and are then reconstituted by an IObjectReference class after |
|
|
|
|
* deserialization. IDeserializationCallback is supported on both the Builder and Message. |
|
|
|
|
*/ |
|
|
|
|
[Serializable] |
|
|
|
|
partial class AbstractMessageLite<TMessage, TBuilder> : ISerializable |
|
|
|
|
{ |
|
|
|
|
[SecurityCritical] |
|
|
|
|
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] |
|
|
|
|
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
info.SetType(typeof(SerializationSurrogate)); |
|
|
|
|
info.AddValue("message", ToByteArray()); |
|
|
|
|
info.AddValue("initialized", IsInitialized); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
private sealed class SerializationSurrogate : IObjectReference, ISerializable |
|
|
|
|
{ |
|
|
|
|
static readonly TBuilder TemplateInstance = (TBuilder)Activator.CreateInstance(typeof(TBuilder)); |
|
|
|
|
private readonly byte[] _message; |
|
|
|
|
private readonly bool _initialized; |
|
|
|
|
|
|
|
|
|
private SerializationSurrogate(SerializationInfo info, StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
_message = (byte[])info.GetValue("message", typeof(byte[])); |
|
|
|
|
_initialized = info.GetBoolean("initialized"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[SecurityCritical] |
|
|
|
|
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] |
|
|
|
|
object IObjectReference.GetRealObject(StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
ExtensionRegistry registry = context.Context as ExtensionRegistry; |
|
|
|
|
TBuilder builder = TemplateInstance.DefaultInstanceForType.CreateBuilderForType(); |
|
|
|
|
builder.MergeFrom(_message, registry ?? ExtensionRegistry.Empty); |
|
|
|
|
|
|
|
|
|
IDeserializationCallback callback = builder as IDeserializationCallback; |
|
|
|
|
if(callback != null) |
|
|
|
|
{ |
|
|
|
|
callback.OnDeserialization(context); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TMessage message = _initialized ? builder.Build() : builder.BuildPartial(); |
|
|
|
|
callback = message as IDeserializationCallback; |
|
|
|
|
if (callback != null) |
|
|
|
|
{ |
|
|
|
|
callback.OnDeserialization(context); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return message; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[SecurityCritical] |
|
|
|
|
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] |
|
|
|
|
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
info.AddValue("message", _message); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class AbstractBuilderLite<TMessage, TBuilder> : ISerializable |
|
|
|
|
{ |
|
|
|
|
[SecurityCritical] |
|
|
|
|
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] |
|
|
|
|
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
info.SetType(typeof(SerializationSurrogate)); |
|
|
|
|
info.AddValue("message", Clone().BuildPartial().ToByteArray()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
private sealed class SerializationSurrogate : IObjectReference, ISerializable |
|
|
|
|
{ |
|
|
|
|
static readonly TBuilder TemplateInstance = (TBuilder)Activator.CreateInstance(typeof(TBuilder)); |
|
|
|
|
private readonly byte[] _message; |
|
|
|
|
|
|
|
|
|
private SerializationSurrogate(SerializationInfo info, StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
_message = (byte[])info.GetValue("message", typeof(byte[])); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[SecurityCritical] |
|
|
|
|
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] |
|
|
|
|
object IObjectReference.GetRealObject(StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
ExtensionRegistry registry = context.Context as ExtensionRegistry; |
|
|
|
|
TBuilder builder = TemplateInstance.DefaultInstanceForType.CreateBuilderForType(); |
|
|
|
|
builder.MergeFrom(_message, registry ?? ExtensionRegistry.Empty); |
|
|
|
|
|
|
|
|
|
IDeserializationCallback callback = builder as IDeserializationCallback; |
|
|
|
|
if(callback != null) |
|
|
|
|
{ |
|
|
|
|
callback.OnDeserialization(context); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return builder; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[SecurityCritical] |
|
|
|
|
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] |
|
|
|
|
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) |
|
|
|
|
{ |
|
|
|
|
info.AddValue("message", _message); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Spread some attribute love around, keeping this all here so we don't use conditional compliation |
|
|
|
|
* in every one of these classes. If we introduce a new platform that also does not support this |
|
|
|
|
* we can control it all from this source file. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class GeneratedMessageLite<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class ExtendableMessageLite<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class AbstractMessage<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class GeneratedMessage<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class ExtendableMessage<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class GeneratedBuilderLite<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class ExtendableBuilderLite<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class AbstractBuilder<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class GeneratedBuilder<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class ExtendableBuilder<TMessage, TBuilder> { } |
|
|
|
|
|
|
|
|
|
[Serializable] |
|
|
|
|
partial class DynamicMessage |
|
|
|
|
{ |
|
|
|
|
[Serializable] |
|
|
|
|
partial class Builder { } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |