2 // TcpTransportBindingElement.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
6 // Marcos Cobena (marcoscobena@gmail.com)
8 // Copyright (C) 2005 Novell, Inc. http://www.novell.com
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using System.Collections.Generic;
33 using System.ServiceModel.Channels;
34 using System.ServiceModel.Channels.NetTcp;
35 using System.ServiceModel.Description;
37 namespace System.ServiceModel.Channels
39 public class TcpTransportBindingElement
40 : ConnectionOrientedTransportBindingElement
42 internal const int DefaultPort = 808;
44 int listen_backlog = 10;
45 bool port_sharing_enabled = false;
46 bool teredo_enabled = false;
47 TcpConnectionPoolSettings pool = new TcpConnectionPoolSettings ();
49 public TcpTransportBindingElement ()
53 protected TcpTransportBindingElement (
54 TcpTransportBindingElement other)
57 listen_backlog = other.listen_backlog;
58 port_sharing_enabled = other.port_sharing_enabled;
59 pool.CopyPropertiesFrom (other.pool);
62 public TcpConnectionPoolSettings ConnectionPoolSettings {
66 public int ListenBacklog {
67 get { return listen_backlog; }
68 set { listen_backlog = value; }
71 public bool PortSharingEnabled {
72 get { return port_sharing_enabled; }
73 set { port_sharing_enabled = value; }
76 public override string Scheme {
77 get { return "net.tcp"; }
80 // As MSDN exposes, this' only available on Windows XP SP2 and Windows Server 2003
81 public bool TeredoEnabled {
82 get { return teredo_enabled; }
83 set { teredo_enabled = value; }
86 public override IChannelFactory<TChannel> BuildChannelFactory<TChannel> (
87 BindingContext context)
89 if (!CanBuildChannelFactory<TChannel> (context))
90 throw new InvalidOperationException (String.Format ("Not supported channel factory type '{0}'", typeof (TChannel)));
91 return new TcpChannelFactory<TChannel> (this, context);
94 public override IChannelListener<TChannel>
95 BuildChannelListener<TChannel> (
96 BindingContext context)
98 if (!CanBuildChannelListener<TChannel> (context))
99 throw new InvalidOperationException (String.Format ("Not supported channel listener type '{0}'", typeof (TChannel)));
100 return new TcpChannelListener<TChannel> (this, context);
103 public override BindingElement Clone ()
105 return new TcpTransportBindingElement (this);
108 public override T GetProperty<T> (BindingContext context)
110 if (typeof (T) == typeof (IBindingDeliveryCapabilities))
111 return (T) (object) new TcpBindingProperties (this);
112 return base.GetProperty<T> (context);
116 class TcpBindingProperties : IBindingDeliveryCapabilities
118 TcpTransportBindingElement source;
120 public TcpBindingProperties (TcpTransportBindingElement source)
122 this.source = source;
125 public bool AssuresOrderedDelivery {
129 public bool QueuedDelivery {
130 get { return false; }