You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@@ -0,0 +1,252 @@
|
||||
//------------------------------------------------------------
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------
|
||||
|
||||
namespace System.ServiceModel
|
||||
{
|
||||
using System.ComponentModel;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Configuration;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
|
||||
public class UdpBinding : Binding, IBindingRuntimePreferences
|
||||
{
|
||||
TextMessageEncodingBindingElement textEncoding;
|
||||
UdpTransportBindingElement udpTransport;
|
||||
|
||||
public UdpBinding()
|
||||
: base()
|
||||
{
|
||||
this.textEncoding = new TextMessageEncodingBindingElement();
|
||||
this.udpTransport = new UdpTransportBindingElement();
|
||||
}
|
||||
|
||||
public UdpBinding(string configurationName)
|
||||
: this()
|
||||
{
|
||||
UdpBindingCollectionElement section = UdpBindingCollectionElement.GetBindingCollectionElement();
|
||||
UdpBindingElement element = section.Bindings[configurationName];
|
||||
if (element == null)
|
||||
{
|
||||
throw FxTrace.Exception.AsError(new ConfigurationErrorsException(
|
||||
SR.GetString(SR.ConfigInvalidBindingConfigurationName,
|
||||
configurationName,
|
||||
UdpTransportConfigurationStrings.UdpBindingElementName)));
|
||||
}
|
||||
else
|
||||
{
|
||||
element.ApplyConfiguration(this);
|
||||
}
|
||||
}
|
||||
|
||||
private UdpBinding(UdpTransportBindingElement transport, TextMessageEncodingBindingElement encoding)
|
||||
: this()
|
||||
{
|
||||
this.DuplicateMessageHistoryLength = transport.DuplicateMessageHistoryLength;
|
||||
this.MaxBufferPoolSize = transport.MaxBufferPoolSize;
|
||||
this.MaxPendingMessagesTotalSize = transport.MaxPendingMessagesTotalSize;
|
||||
this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
|
||||
this.MaxRetransmitCount = Math.Max(transport.RetransmissionSettings.MaxUnicastRetransmitCount, transport.RetransmissionSettings.MaxMulticastRetransmitCount);
|
||||
this.MulticastInterfaceId = transport.MulticastInterfaceId;
|
||||
this.TimeToLive = transport.TimeToLive;
|
||||
|
||||
this.ReaderQuotas = encoding.ReaderQuotas;
|
||||
this.TextEncoding = encoding.WriteEncoding;
|
||||
}
|
||||
|
||||
[DefaultValue(UdpConstants.Defaults.DuplicateMessageHistoryLength)]
|
||||
public int DuplicateMessageHistoryLength
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.udpTransport.DuplicateMessageHistoryLength;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.udpTransport.DuplicateMessageHistoryLength = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(TransportDefaults.MaxBufferPoolSize)]
|
||||
public long MaxBufferPoolSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.udpTransport.MaxBufferPoolSize;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.udpTransport.MaxBufferPoolSize = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(UdpConstants.Defaults.MaxRetransmitCount)]
|
||||
public int MaxRetransmitCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return Math.Max(this.udpTransport.RetransmissionSettings.MaxUnicastRetransmitCount, this.udpTransport.RetransmissionSettings.MaxMulticastRetransmitCount);
|
||||
}
|
||||
set
|
||||
{
|
||||
this.udpTransport.RetransmissionSettings.MaxUnicastRetransmitCount = value;
|
||||
this.udpTransport.RetransmissionSettings.MaxMulticastRetransmitCount = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(UdpConstants.Defaults.DefaultMaxPendingMessagesTotalSize)]
|
||||
public long MaxPendingMessagesTotalSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.udpTransport.MaxPendingMessagesTotalSize;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.udpTransport.MaxPendingMessagesTotalSize = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(UdpConstants.Defaults.MaxReceivedMessageSize)]
|
||||
public long MaxReceivedMessageSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.udpTransport.MaxReceivedMessageSize;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.udpTransport.MaxReceivedMessageSize = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(UdpConstants.Defaults.MulticastInterfaceId)]
|
||||
public string MulticastInterfaceId
|
||||
{
|
||||
get { return this.udpTransport.MulticastInterfaceId; }
|
||||
set { this.udpTransport.MulticastInterfaceId = value; }
|
||||
}
|
||||
|
||||
public XmlDictionaryReaderQuotas ReaderQuotas
|
||||
{
|
||||
get { return this.textEncoding.ReaderQuotas; }
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw FxTrace.Exception.ArgumentNull("value");
|
||||
}
|
||||
value.CopyTo(this.textEncoding.ReaderQuotas);
|
||||
}
|
||||
}
|
||||
|
||||
[TypeConverter(typeof(EncodingConverter))]
|
||||
public Encoding TextEncoding
|
||||
{
|
||||
get { return this.textEncoding.WriteEncoding; }
|
||||
set { this.textEncoding.WriteEncoding = value; }
|
||||
}
|
||||
|
||||
[DefaultValue(UdpConstants.Defaults.TimeToLive)]
|
||||
public int TimeToLive
|
||||
{
|
||||
get { return this.udpTransport.TimeToLive; }
|
||||
set { this.udpTransport.TimeToLive = value; }
|
||||
}
|
||||
|
||||
public override string Scheme
|
||||
{
|
||||
get { return this.udpTransport.Scheme; }
|
||||
}
|
||||
|
||||
public override BindingElementCollection CreateBindingElements()
|
||||
{
|
||||
BindingElementCollection bindingElements = new BindingElementCollection();
|
||||
bindingElements.Add(this.textEncoding);
|
||||
bindingElements.Add(this.udpTransport);
|
||||
|
||||
return bindingElements.Clone();
|
||||
}
|
||||
|
||||
bool BindingElementsPropertiesMatch(UdpTransportBindingElement transport, MessageEncodingBindingElement encoding)
|
||||
{
|
||||
if (!this.udpTransport.IsMatch(transport))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!this.textEncoding.IsMatch(encoding))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
[SuppressMessage(FxCop.Category.Design, FxCop.Rule.InterfaceMethodsShouldBeCallableByChildTypes, Justification = "no need to call this from derrived classes")]
|
||||
bool IBindingRuntimePreferences.ReceiveSynchronously
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public bool ShouldSerializeReaderQuotas()
|
||||
{
|
||||
return (!EncoderDefaults.IsDefaultReaderQuotas(this.ReaderQuotas));
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public bool ShouldSerializeTextEncoding()
|
||||
{
|
||||
return (!this.TextEncoding.Equals(TextEncoderDefaults.Encoding));
|
||||
}
|
||||
|
||||
internal static bool TryCreate(BindingElementCollection bindingElements, out Binding binding)
|
||||
{
|
||||
binding = null;
|
||||
|
||||
if (bindingElements.Count > 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
UdpTransportBindingElement transport = null;
|
||||
TextMessageEncodingBindingElement encoding = null;
|
||||
|
||||
foreach (BindingElement bindingElement in bindingElements)
|
||||
{
|
||||
if (bindingElement is UdpTransportBindingElement)
|
||||
{
|
||||
transport = bindingElement as UdpTransportBindingElement;
|
||||
}
|
||||
else if (bindingElement is TextMessageEncodingBindingElement)
|
||||
{
|
||||
encoding = bindingElement as TextMessageEncodingBindingElement;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (transport == null || encoding == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
UdpBinding udpBinding = new UdpBinding(transport, encoding);
|
||||
|
||||
if (!udpBinding.BindingElementsPropertiesMatch(transport, encoding))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
binding = udpBinding;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user