View Javadoc

1   package org.apache.mina.transport.socket.apr;
2   
3   import java.net.InetSocketAddress;
4   
5   import org.apache.mina.common.DefaultTransportMetadata;
6   import org.apache.mina.common.IoBuffer;
7   import org.apache.mina.common.IoProcessor;
8   import org.apache.mina.common.IoService;
9   import org.apache.mina.common.RuntimeIoException;
10  import org.apache.mina.common.TransportMetadata;
11  import org.apache.mina.transport.socket.AbstractDatagramSessionConfig;
12  import org.apache.mina.transport.socket.DatagramSession;
13  import org.apache.mina.transport.socket.DatagramSessionConfig;
14  import org.apache.tomcat.jni.Socket;
15  
16  class AprDatagramSession extends AprSession implements DatagramSession {
17  
18      static final TransportMetadata METADATA =
19          new DefaultTransportMetadata(
20                  "apr", "datagram", true, false,
21                  InetSocketAddress.class,
22                  DatagramSessionConfig.class, IoBuffer.class);
23  
24      private final DatagramSessionConfig config = new SessionConfigImpl();
25      
26      AprDatagramSession(
27              IoService service, IoProcessor<AprSession> processor,
28              long descriptor, InetSocketAddress remoteAddress) throws Exception {
29          super(service, processor, descriptor, remoteAddress);
30          this.config.setAll(service.getSessionConfig());
31      }
32  
33  
34      public DatagramSessionConfig getConfig() {
35          return config;
36      }
37  
38      public TransportMetadata getTransportMetadata() {
39          return METADATA;
40      }
41  
42  
43      private class SessionConfigImpl extends AbstractDatagramSessionConfig {
44  
45          public boolean isReuseAddress() {
46              try {
47                  return Socket.optGet(getDescriptor(), Socket.APR_SO_REUSEADDR) == 1;
48              } catch (Exception e) {
49                  throw new RuntimeIoException("Failed to get SO_REUSEADDR.", e);
50              }
51          }
52  
53          public void setReuseAddress(boolean on) {
54              Socket.optSet(getDescriptor(), Socket.APR_SO_REUSEADDR, on ? 1 : 0);
55          }
56  
57          public int getTrafficClass() {
58              return 0;
59          }
60  
61          public void setTrafficClass(int tc) {
62          }
63  
64          public int getSendBufferSize() {
65              try {
66                  return Socket.optGet(getDescriptor(), Socket.APR_SO_SNDBUF);
67              } catch (Exception e) {
68                  throw new RuntimeException("APR Exception", e);
69              }
70          }
71  
72          public void setSendBufferSize(int size) {
73              Socket.optSet(getDescriptor(), Socket.APR_SO_SNDBUF, size);
74          }
75  
76          public int getReceiveBufferSize() {
77              try {
78                  return Socket.optGet(getDescriptor(), Socket.APR_SO_RCVBUF);
79              } catch (Exception e) {
80                  throw new RuntimeException("APR Exception", e);
81              }
82          }
83  
84          public void setReceiveBufferSize(int size) {
85              Socket.optSet(getDescriptor(), Socket.APR_SO_RCVBUF, size);
86          }
87  
88          public boolean isBroadcast() {
89              return false;
90          }
91  
92          public void setBroadcast(boolean broadcast) {
93          }
94      }
95  }