public TransportFilter createTransportFilter(Connection connection, TransportCipher read_cipher, TransportCipher write_cipher) throws TransportException {
Transport transport = connection.getTransport();
com.aelitis.azureus.core.networkmanager.Transport core_transport;
try {core_transport = ((TransportImpl)transport).coreTransport();}
catch (IOException e) {throw new TransportException(e);}
TransportHelper helper;
if (core_transport instanceof TCPTransportImpl) {
TransportHelperFilter hfilter = ((TCPTransportImpl)core_transport).getFilter();
if (hfilter != null) {helper = hfilter.getHelper();}
else {
helper = new TCPTransportHelper(((TCPTransportImpl)(core_transport)).getSocketChannel());
}
} else if (core_transport instanceof UDPTransport) {
TransportHelperFilter hfilter = ((UDPTransport)core_transport).getFilter();
if (hfilter != null) {helper = hfilter.getHelper();}
else {
helper = ((UDPTransport)core_transport).getFilter().getHelper();
InetSocketAddress addr = core_transport.getTransportEndpoint().getProtocolEndpoint().getConnectionEndpoint().getNotionalAddress();
if (!connection.isIncoming()) {
try {helper = new UDPTransportHelper(UDPNetworkManager.getSingleton().getConnectionManager(), addr, (UDPTransport)core_transport);}
catch (IOException ioe) {throw new TransportException(ioe);}
}
else {
/**
* Not sure how I can grab the UDPConnection object to pass to the incoming
* connection constructor. The only time I can figure out where we can link
* up the UDPConnection object is in UDPConnectionManager.accept - we have a
* transport object and we construct a UDPConnection object, so we could link
* them there - but I don't know if we really should associate the UDP connection
* with the transport (might breaks encapsulation).
*/
//helper = new UDPTransportHelper(UDPNetworkManager.getSingleton().getConnectionManager(), addr, (UDPTransport)core_transport);
throw new TransportException("udp incoming transport type not supported - " + core_transport);
}
}
} else {
throw new TransportException("transport type not supported - " + core_transport);
}
TransportHelperFilterStreamCipher core_filter = new TransportHelperFilterStreamCipher(helper, ((TransportCipherImpl)read_cipher).cipher, ((TransportCipherImpl)write_cipher).cipher);
return new TransportFilterImpl(core_filter);
}