View Javadoc

1   /*
2    * Copyright 2009 Red Hat, Inc.
3    *
4    * Red Hat licenses this file to you under the Apache License, version 2.0
5    * (the "License"); you may not use this file except in compliance with the
6    * License.  You may obtain a copy of the License at:
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  package org.jboss.netty.channel.socket;
17  
18  import java.net.DatagramSocket;
19  import java.net.InetAddress;
20  import java.net.NetworkInterface;
21  
22  import org.jboss.netty.channel.ChannelConfig;
23  import org.jboss.netty.channel.FixedReceiveBufferSizePredictor;
24  import org.jboss.netty.channel.FixedReceiveBufferSizePredictorFactory;
25  import org.jboss.netty.channel.ReceiveBufferSizePredictor;
26  import org.jboss.netty.channel.ReceiveBufferSizePredictorFactory;
27  
28  /**
29   * A {@link ChannelConfig} for a {@link DatagramChannel}.
30   *
31   * <h3>Available options</h3>
32   *
33   * In addition to the options provided by {@link ChannelConfig},
34   * {@link DatagramChannelConfig} allows the following options in the option map:
35   *
36   * <table border="1" cellspacing="0" cellpadding="6">
37   * <tr>
38   * <th>Name</th><th>Associated setter method</th>
39   * </tr><tr>
40   * <td>{@code "broadcast"}</td><td>{@link #setBroadcast(boolean)}</td>
41   * </tr><tr>
42   * <td>{@code "interface"}</td><td>{@link #setInterface(InetAddress)}</td>
43   * </tr><tr>
44   * <td>{@code "loopbackModeDisabled"}</td><td>{@link #setLoopbackModeDisabled(boolean)}</td>
45   * </tr><tr>
46   * <td>{@code "networkInterface"}</td><td>{@link #setNetworkInterface(NetworkInterface)}</td>
47   * </tr><tr>
48   * <td>{@code "reuseAddress"}</td><td>{@link #setReuseAddress(boolean)}</td>
49   * </tr><tr>
50   * <td>{@code "receiveBufferSize"}</td><td>{@link #setReceiveBufferSize(int)}</td>
51   * </tr><tr>
52   * <td>{@code "receiveBufferSizePredictor"}</td><td>{@link #setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)}</td>
53   * </tr><tr>
54   * <td>{@code "receiveBufferSizePredictorFactory"}</td><td>{@link #setReceiveBufferSizePredictorFactory(ReceiveBufferSizePredictorFactory)}</td>
55   * </tr><tr>
56   * <td>{@code "sendBufferSize"}</td><td>{@link #setSendBufferSize(int)}</td>
57   * </tr><tr>
58   * <td>{@code "timeToLive"}</td><td>{@link #setTimeToLive(int)}</td>
59   * </tr><tr>
60   * <td>{@code "trafficClass"}</td><td>{@link #setTrafficClass(int)}</td>
61   * </tr>
62   * </table>
63   *
64   * @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
65   * @author <a href="http://gleamynode.net/">Trustin Lee</a>
66   *
67   * @version $Rev: 2080 $, $Date: 2010-01-26 18:04:19 +0900 (Tue, 26 Jan 2010) $
68   */
69  public interface DatagramChannelConfig extends ChannelConfig {
70  
71      /**
72       * Gets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_SNDBUF}</a> option.
73       */
74      int getSendBufferSize();
75  
76      /**
77       * Sets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_SNDBUF}</a> option.
78       */
79      void setSendBufferSize(int sendBufferSize);
80  
81      /**
82       * Gets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_RCVBUF}</a> option.
83       */
84      int getReceiveBufferSize();
85  
86      /**
87       * Gets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_RCVBUF}</a> option.
88       */
89      void setReceiveBufferSize(int receiveBufferSize);
90  
91      /**
92       * Gets the traffic class.
93       */
94      int getTrafficClass();
95  
96      /**
97       * Sets the traffic class as specified in {@link DatagramSocket#setTrafficClass(int)}.
98       */
99      void setTrafficClass(int trafficClass);
100 
101     /**
102      * Gets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_REUSEADDR}</a> option.
103      */
104     boolean isReuseAddress();
105 
106     /**
107      * Sets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_REUSEADDR}</a> option.
108      */
109     void setReuseAddress(boolean reuseAddress);
110 
111     /**
112      * Gets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_BROADCAST}</a> option.
113      */
114     boolean isBroadcast();
115 
116     /**
117      * Sets the <a href="http://java.sun.com/javase/6/docs/technotes/guides/net/socketOpt.html">{@code SO_BROADCAST}</a> option.
118      */
119     void setBroadcast(boolean broadcast);
120 
121     /**
122      * Gets the setting for local loopback of multicast datagrams.
123      *
124      * @return {@code true} if and only if the loopback mode has been disabled
125      */
126     boolean isLoopbackModeDisabled();
127 
128     /**
129      * Sets the setting for local loopback of multicast datagrams.
130      *
131      * @param loopbackModeDisabled
132      *        {@code true} if and only if the loopback mode has been disabled
133      */
134     void setLoopbackModeDisabled(boolean loopbackModeDisabled);
135 
136     /**
137      * Gets the default time-to-live for multicast packets sent out on the
138      * socket.
139      */
140     int getTimeToLive();
141 
142     /**
143      * Sets the default time-to-live for multicast packets sent out on the
144      * {@link DatagramChannel} in order to control the scope of the multicasts.
145      */
146     void setTimeToLive(int ttl);
147 
148     /**
149      * Gets the address of the network interface used for multicast packets.
150      */
151     InetAddress getInterface();
152 
153     /**
154      * Sets the address of the network interface used for multicast packets.
155      */
156     void setInterface(InetAddress interfaceAddress);
157 
158     /**
159      * Gets the network interface for outgoing multicast datagrams sent on
160      * the {@link DatagramChannel}.
161      */
162     NetworkInterface getNetworkInterface();
163 
164     /**
165      * Sets the network interface for outgoing multicast datagrams sent on
166      * the {@link DatagramChannel}.
167      */
168     void setNetworkInterface(NetworkInterface networkInterface);
169 
170     /**
171      * Returns the {@link ReceiveBufferSizePredictor} which predicts the
172      * number of readable bytes in the socket receive buffer.  The default
173      * predictor is <tt>{@link FixedReceiveBufferSizePredictor}(768)</tt>.
174      */
175     ReceiveBufferSizePredictor getReceiveBufferSizePredictor();
176 
177     /**
178      * Sets the {@link ReceiveBufferSizePredictor} which predicts the
179      * number of readable bytes in the socket receive buffer.  The default
180      * predictor is <tt>{@link FixedReceiveBufferSizePredictor}(768)</tt>.
181      */
182     void setReceiveBufferSizePredictor(ReceiveBufferSizePredictor predictor);
183 
184     /**
185      * Returns the {@link ReceiveBufferSizePredictorFactory} which creates a new
186      * {@link ReceiveBufferSizePredictor} when a new channel is created and
187      * no {@link ReceiveBufferSizePredictor} was set.  If no predictor was set
188      * for the channel, {@link #setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)}
189      * will be called with the new predictor.  The default factory is
190      * <tt>{@link FixedReceiveBufferSizePredictorFactory}(768)</tt>.
191      */
192     ReceiveBufferSizePredictorFactory getReceiveBufferSizePredictorFactory();
193 
194     /**
195      * Sets the {@link ReceiveBufferSizePredictor} which creates a new
196      * {@link ReceiveBufferSizePredictor} when a new channel is created and
197      * no {@link ReceiveBufferSizePredictor} was set.  If no predictor was set
198      * for the channel, {@link #setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)}
199      * will be called with the new predictor.  The default factory is
200      * <tt>{@link FixedReceiveBufferSizePredictorFactory}(768)</tt>.
201      */
202     void setReceiveBufferSizePredictorFactory(ReceiveBufferSizePredictorFactory predictorFactory);
203 }