001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019 package org.apache.directory.server.protocol.shared.transport;
020
021
022 import org.apache.mina.core.service.IoAcceptor;
023
024 public abstract class AbstractTransport implements Transport
025 {
026 /** The server address */
027 private String address;
028
029 /** The service's port */
030 private int port = -1;
031
032 /** A flag set if SSL is enabled */
033 private boolean sslEnabled = false;
034
035 /** The number of threads to use for the IoAcceptor executor */
036 private int nbThreads;
037
038 /** The backlog for the transport services */
039 private int backlog;
040
041 /** The IoAcceptor used to accept requests */
042 protected IoAcceptor acceptor;
043
044 /** The default backlog queue size */
045 protected static final int DEFAULT_BACKLOG_NB = 50;
046
047 /** The default hostname */
048 protected static final String LOCAL_HOST = "localhost";
049
050 /** The default number of threads */
051 protected static final int DEFAULT_NB_THREADS = 3;
052
053 /**
054 * Creates an instance of an Abstract Transport class.
055 */
056 public AbstractTransport()
057 {
058 address = null;
059 nbThreads = DEFAULT_NB_THREADS;
060 port = -1;
061 backlog = DEFAULT_BACKLOG_NB;
062 }
063
064
065 /**
066 * Creates an instance of an Abstract Transport class, using localhost
067 * and port.
068 *
069 * @param port The port
070 */
071 public AbstractTransport( int port )
072 {
073 this.address = "localhost";
074 this.port = port;
075 }
076
077
078 /**
079 * Creates an instance of an Abstract Transport class, using localhost
080 * and port.
081 *
082 * @param port The port
083 * @param nbThreads The number of threads to create in the acceptor
084 */
085 public AbstractTransport( int port, int nbThreads )
086 {
087 this.address = "localhost";
088 this.port = port;
089 this.nbThreads = nbThreads;
090 }
091
092
093 /**
094 * Creates an instance of an Abstract Transport class, using the given address
095 * and port.
096 *
097 * @param address The address
098 * @param port The port
099 */
100 public AbstractTransport( String address, int port )
101 {
102 this.address = address;
103 this.port = port;
104 }
105
106
107 /**
108 * Creates an instance of the AbstractTransport class on LocalHost
109 * @param tcpPort The port
110 * @param nbThreads The number of threads to create in the acceptor
111 * @param backlog The queue size for incoming messages, waiting for the
112 * acceptor to be ready
113 */
114 public AbstractTransport( int port, int nbThreads, int backLog )
115 {
116 this.address ="localHost";
117 this.port = port;
118 this.nbThreads = nbThreads;
119 this.backlog = backLog;
120 }
121
122
123 /**
124 * Creates an instance of the AbstractTransport class
125 * @param address The address
126 * @param tcpPort The port
127 * @param nbThreads The number of threads to create in the acceptor
128 * @param backlog The queue size for incoming messages, waiting for the
129 * acceptor to be ready
130 */
131 public AbstractTransport( String address, int port, int nbThreads, int backLog )
132 {
133 this.address = address;
134 this.port = port;
135 this.nbThreads = nbThreads;
136 this.backlog = backLog;
137 }
138
139
140 /**
141 * Initialize the Acceptor if needed
142 */
143 public abstract void init();
144
145
146 /**
147 * {@inheritDoc}
148 */
149 public int getPort()
150 {
151 return port;
152 }
153
154
155 /**
156 * {@inheritDoc}
157 */
158 public void setPort( int port )
159 {
160 this.port = port;
161 }
162
163
164 /**
165 * {@inheritDoc}
166 */
167 public String getAddress()
168 {
169 return address;
170 }
171
172
173 /**
174 * Stores the Address in this transport
175 *
176 * @param address the Address to store
177 */
178 public void setAddress( String address )
179 {
180 this.address = address;
181 }
182
183
184 /**
185 * {@inheritDoc}
186 */
187 public abstract IoAcceptor getAcceptor();
188
189
190 /**
191 * {@inheritDoc}
192 */
193 public int getNbThreads()
194 {
195 return nbThreads;
196 }
197
198
199 /**
200 * {@inheritDoc}
201 */
202 public void setNbThreads( int nbThreads )
203 {
204 this.nbThreads = nbThreads;
205 }
206
207
208 /**
209 * {@inheritDoc}
210 */
211 public int getBackLog()
212 {
213 return backlog;
214 }
215
216
217 /**
218 * {@inheritDoc}
219 */
220 public void setBackLog( int backLog )
221 {
222 this.backlog = backLog;
223 }
224
225
226 /**
227 * Enable or disable SSL
228 * @param enableSSL if <code>true</code>, SSL is enabled.
229 */
230 public void setEnableSSL( boolean sslEnabled )
231 {
232 this.sslEnabled = sslEnabled;
233 }
234
235
236 /**
237 * Enable or disable SSL
238 * @param enableSSL if <code>true</code>, SSL is enabled.
239 */
240 public void enableSSL( boolean sslEnabled )
241 {
242 this.sslEnabled = sslEnabled;
243 }
244
245
246 /**
247 * @return <code>true</code> id SSL is enabled for this transport
248 */
249 public boolean isSSLEnabled()
250 {
251 return sslEnabled;
252 }
253
254 /**
255 * @return <code>true</code> id SSL is enabled for this transport
256 */
257 public boolean getEnableSSL()
258 {
259 return sslEnabled;
260 }
261
262
263 /**
264 * @see Object#toString()
265 */
266 public String toString()
267 {
268 StringBuilder sb = new StringBuilder();
269 sb.append( "[<" ).append( address ).append( ':' ).append( port );
270 sb.append( ">], backlog=" ).append( backlog );
271 sb.append( ", nbThreads = " ).append( nbThreads );
272
273 if ( sslEnabled )
274 {
275 sb.append( ", SSL" );
276 }
277
278 sb.append( ']' );
279
280 return sb.toString() ;
281 }
282 }