1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.transport.socket;
21
22 import java.net.DatagramSocket;
23 import java.net.SocketException;
24
25 import org.apache.mina.common.ExceptionMonitor;
26
27
28
29
30
31
32
33 public class DefaultDatagramSessionConfig extends AbstractDatagramSessionConfig {
34
35 private static boolean SET_RECEIVE_BUFFER_SIZE_AVAILABLE = false;
36
37 private static boolean SET_SEND_BUFFER_SIZE_AVAILABLE = false;
38
39 private static boolean GET_TRAFFIC_CLASS_AVAILABLE = false;
40
41 private static final boolean SET_TRAFFIC_CLASS_AVAILABLE = false;
42
43 private static boolean DEFAULT_BROADCAST = false;
44
45 private static boolean DEFAULT_REUSE_ADDRESS = false;
46
47 private static int DEFAULT_RECEIVE_BUFFER_SIZE = 1024;
48
49 private static int DEFAULT_SEND_BUFFER_SIZE = 1024;
50
51 private static int DEFAULT_TRAFFIC_CLASS = 0;
52
53 static {
54 initialize();
55 }
56
57 private static void initialize() {
58 DatagramSocket socket = null;
59
60 try {
61 socket = new DatagramSocket();
62 DEFAULT_BROADCAST = socket.getBroadcast();
63 DEFAULT_REUSE_ADDRESS = socket.getReuseAddress();
64 DEFAULT_RECEIVE_BUFFER_SIZE = socket.getReceiveBufferSize();
65 DEFAULT_SEND_BUFFER_SIZE = socket.getSendBufferSize();
66
67
68 try {
69 socket.setReceiveBufferSize(DEFAULT_RECEIVE_BUFFER_SIZE);
70 SET_RECEIVE_BUFFER_SIZE_AVAILABLE = true;
71 } catch (SocketException e) {
72 SET_RECEIVE_BUFFER_SIZE_AVAILABLE = false;
73 }
74
75
76 try {
77 socket.setSendBufferSize(DEFAULT_SEND_BUFFER_SIZE);
78 SET_SEND_BUFFER_SIZE_AVAILABLE = true;
79 } catch (SocketException e) {
80 SET_SEND_BUFFER_SIZE_AVAILABLE = false;
81 }
82
83
84 try {
85 DEFAULT_TRAFFIC_CLASS = socket.getTrafficClass();
86 GET_TRAFFIC_CLASS_AVAILABLE = true;
87 } catch (SocketException e) {
88 GET_TRAFFIC_CLASS_AVAILABLE = false;
89 DEFAULT_TRAFFIC_CLASS = 0;
90 }
91 } catch (SocketException e) {
92 ExceptionMonitor.getInstance().exceptionCaught(e);
93 } finally {
94 if (socket != null) {
95 socket.close();
96 }
97 }
98 }
99
100 public static boolean isSetReceiveBufferSizeAvailable() {
101 return SET_RECEIVE_BUFFER_SIZE_AVAILABLE;
102 }
103
104 public static boolean isSetSendBufferSizeAvailable() {
105 return SET_SEND_BUFFER_SIZE_AVAILABLE;
106 }
107
108 public static boolean isGetTrafficClassAvailable() {
109 return GET_TRAFFIC_CLASS_AVAILABLE;
110 }
111
112 public static boolean isSetTrafficClassAvailable() {
113 return SET_TRAFFIC_CLASS_AVAILABLE;
114 }
115
116 private boolean broadcast = DEFAULT_BROADCAST;
117
118 private boolean reuseAddress = DEFAULT_REUSE_ADDRESS;
119
120 private int receiveBufferSize = DEFAULT_RECEIVE_BUFFER_SIZE;
121
122 private int sendBufferSize = DEFAULT_SEND_BUFFER_SIZE;
123
124 private int trafficClass = DEFAULT_TRAFFIC_CLASS;
125
126
127
128
129 public DefaultDatagramSessionConfig() {
130 }
131
132
133
134
135 public boolean isBroadcast() {
136 return broadcast;
137 }
138
139
140
141
142 public void setBroadcast(boolean broadcast) {
143 this.broadcast = broadcast;
144 }
145
146
147
148
149 public boolean isReuseAddress() {
150 return reuseAddress;
151 }
152
153
154
155
156 public void setReuseAddress(boolean reuseAddress) {
157 this.reuseAddress = reuseAddress;
158 }
159
160
161
162
163 public int getReceiveBufferSize() {
164 return receiveBufferSize;
165 }
166
167
168
169
170 public void setReceiveBufferSize(int receiveBufferSize) {
171 this.receiveBufferSize = receiveBufferSize;
172 }
173
174
175
176
177 public int getSendBufferSize() {
178 return sendBufferSize;
179 }
180
181
182
183
184 public void setSendBufferSize(int sendBufferSize) {
185 this.sendBufferSize = sendBufferSize;
186 }
187
188
189
190
191 public int getTrafficClass() {
192 return trafficClass;
193 }
194
195
196
197
198 public void setTrafficClass(int trafficClass) {
199 this.trafficClass = trafficClass;
200 }
201 }