1 /*
2 * Copyright 2012 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the 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.InetAddress;
19 import java.net.NetworkInterface;
20 import java.net.StandardSocketOptions;
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>
53 * <td>{@link #setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)}</td>
54 * </tr><tr>
55 * <td>{@code "receiveBufferSizePredictorFactory"}</td>
56 * <td>{@link #setReceiveBufferSizePredictorFactory(ReceiveBufferSizePredictorFactory)}</td>
57 * </tr><tr>
58 * <td>{@code "sendBufferSize"}</td><td>{@link #setSendBufferSize(int)}</td>
59 * </tr><tr>
60 * <td>{@code "timeToLive"}</td><td>{@link #setTimeToLive(int)}</td>
61 * </tr><tr>
62 * <td>{@code "trafficClass"}</td><td>{@link #setTrafficClass(int)}</td>
63 * </tr>
64 * </table>
65 */
66 public interface DatagramChannelConfig extends ChannelConfig {
67
68 /**
69 * Gets the {@link StandardSocketOptions#SO_SNDBUF} option.
70 */
71 int getSendBufferSize();
72
73 /**
74 * Sets the {@link StandardSocketOptions#SO_SNDBUF} option.
75 */
76 void setSendBufferSize(int sendBufferSize);
77
78 /**
79 * Gets the {@link StandardSocketOptions#SO_RCVBUF} option.
80 */
81 int getReceiveBufferSize();
82
83 /**
84 * Sets the {@link StandardSocketOptions#SO_RCVBUF} option.
85 */
86 void setReceiveBufferSize(int receiveBufferSize);
87
88 /**
89 * Gets the {@link StandardSocketOptions#IP_TOS} option.
90 */
91 int getTrafficClass();
92
93 /**
94 * Gets the {@link StandardSocketOptions#IP_TOS} option.
95 */
96 void setTrafficClass(int trafficClass);
97
98 /**
99 * Gets the {@link StandardSocketOptions#SO_REUSEADDR} option.
100 */
101 boolean isReuseAddress();
102
103 /**
104 * Sets the {@link StandardSocketOptions#SO_REUSEADDR} option.
105 */
106 void setReuseAddress(boolean reuseAddress);
107
108 /**
109 * Gets the {@link StandardSocketOptions#SO_BROADCAST} option.
110 */
111 boolean isBroadcast();
112
113 /**
114 * Sets the {@link StandardSocketOptions#SO_BROADCAST} option.
115 */
116 void setBroadcast(boolean broadcast);
117
118 /**
119 * Gets the {@link StandardSocketOptions#IP_MULTICAST_LOOP} option.
120 */
121 boolean isLoopbackModeDisabled();
122
123 /**
124 * Sets the {@link StandardSocketOptions#IP_MULTICAST_LOOP} option.
125 *
126 * @param loopbackModeDisabled
127 * {@code true} if and only if the loopback mode has been disabled
128 */
129 void setLoopbackModeDisabled(boolean loopbackModeDisabled);
130
131 /**
132 * Gets the {@link StandardSocketOptions#IP_MULTICAST_TTL} option.
133 */
134 int getTimeToLive();
135
136 /**
137 * Sets the {@link StandardSocketOptions#IP_MULTICAST_TTL} option.
138 */
139 void setTimeToLive(int ttl);
140
141 /**
142 * Gets the address of the network interface used for multicast packets.
143 */
144 InetAddress getInterface();
145
146 /**
147 * Sets the address of the network interface used for multicast packets.
148 */
149 void setInterface(InetAddress interfaceAddress);
150
151 /**
152 * Gets the {@link StandardSocketOptions#IP_MULTICAST_IF} option.
153 */
154 NetworkInterface getNetworkInterface();
155
156 /**
157 * Sets the {@link StandardSocketOptions#IP_MULTICAST_IF} option.
158 */
159 void setNetworkInterface(NetworkInterface networkInterface);
160
161 /**
162 * Returns the {@link ReceiveBufferSizePredictor} which predicts the
163 * number of readable bytes in the socket receive buffer. The default
164 * predictor is <tt>{@link FixedReceiveBufferSizePredictor}(768)</tt>.
165 */
166 ReceiveBufferSizePredictor getReceiveBufferSizePredictor();
167
168 /**
169 * Sets the {@link ReceiveBufferSizePredictor} which predicts the
170 * number of readable bytes in the socket receive buffer. The default
171 * predictor is <tt>{@link FixedReceiveBufferSizePredictor}(768)</tt>.
172 */
173 void setReceiveBufferSizePredictor(ReceiveBufferSizePredictor predictor);
174
175 /**
176 * Returns the {@link ReceiveBufferSizePredictorFactory} which creates a new
177 * {@link ReceiveBufferSizePredictor} when a new channel is created and
178 * no {@link ReceiveBufferSizePredictor} was set. If no predictor was set
179 * for the channel, {@link #setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)}
180 * will be called with the new predictor. The default factory is
181 * <tt>{@link FixedReceiveBufferSizePredictorFactory}(768)</tt>.
182 */
183 ReceiveBufferSizePredictorFactory getReceiveBufferSizePredictorFactory();
184
185 /**
186 * Sets the {@link ReceiveBufferSizePredictor} which creates a new
187 * {@link ReceiveBufferSizePredictor} when a new channel is created and
188 * no {@link ReceiveBufferSizePredictor} was set. If no predictor was set
189 * for the channel, {@link #setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)}
190 * will be called with the new predictor. The default factory is
191 * <tt>{@link FixedReceiveBufferSizePredictorFactory}(768)</tt>.
192 */
193 void setReceiveBufferSizePredictorFactory(ReceiveBufferSizePredictorFactory predictorFactory);
194 }