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 #if !MOBILE && !XAMMAC_4_5
35 using System.ServiceModel.Channels.NetTcp;
37 using System.ServiceModel.Description;
39 namespace System.ServiceModel.Channels
41 public class TcpTransportBindingElement
42 : ConnectionOrientedTransportBindingElement
44 internal const int DefaultPort = 808;
46 int listen_backlog = 10;
47 bool port_sharing_enabled = false;
48 bool teredo_enabled = false;
49 TcpConnectionPoolSettings pool = new TcpConnectionPoolSettings ();
51 public TcpTransportBindingElement ()
55 protected TcpTransportBindingElement (
56 TcpTransportBindingElement other)
59 listen_backlog = other.listen_backlog;
60 port_sharing_enabled = other.port_sharing_enabled;
61 pool.CopyPropertiesFrom (other.pool);
64 public TcpConnectionPoolSettings ConnectionPoolSettings {
68 public int ListenBacklog {
69 get { return listen_backlog; }
70 set { listen_backlog = value; }
73 public bool PortSharingEnabled {
74 get { return port_sharing_enabled; }
75 set { port_sharing_enabled = value; }
78 public override string Scheme {
79 get { return "net.tcp"; }
82 // As MSDN exposes, this' only available on Windows XP SP2 and Windows Server 2003
83 public bool TeredoEnabled {
84 get { return teredo_enabled; }
85 set { teredo_enabled = value; }
88 public override IChannelFactory<TChannel> BuildChannelFactory<TChannel> (
89 BindingContext context)
91 if (!CanBuildChannelFactory<TChannel> (context))
92 throw new InvalidOperationException (String.Format ("Not supported channel factory type '{0}'", typeof (TChannel)));
94 #if !MOBILE && !XAMMAC_4_5
95 return new TcpChannelFactory<TChannel> (this, context);
97 throw new NotImplementedException ();
101 #if !MOBILE && !XAMMAC_4_5
102 public override IChannelListener<TChannel>
103 BuildChannelListener<TChannel> (
104 BindingContext context)
106 if (!CanBuildChannelListener<TChannel> (context))
107 throw new InvalidOperationException (String.Format ("Not supported channel listener type '{0}'", typeof (TChannel)));
108 return new TcpChannelListener<TChannel> (this, context);
112 public override BindingElement Clone ()
114 return new TcpTransportBindingElement (this);
117 public override T GetProperty<T> (BindingContext context)
119 if (typeof (T) == typeof (IBindingDeliveryCapabilities))
120 return (T) (object) new TcpBindingProperties (this);
121 return base.GetProperty<T> (context);
125 class TcpBindingProperties : IBindingDeliveryCapabilities
127 TcpTransportBindingElement source;
129 public TcpBindingProperties (TcpTransportBindingElement source)
131 this.source = source;
134 public bool AssuresOrderedDelivery {
138 public bool QueuedDelivery {
139 get { return false; }