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 }