/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.io.comm;
import freenet.io.AddressTracker.Status;
import freenet.io.comm.Peer.LocalAddressException;
/**
* Base class for UdpSocketHandler and any other datagram-based transports.
*/
public interface PacketSocketHandler extends SocketHandler {
/** The maximum size of a packet, not including transport layer headers */
int getMaxPacketSize();
/**
* Send a block of encoded bytes to a peer. This is called by
* send, and by IncomingPacketFilter.processOutgoing(..).
* @param blockToSend The data block to send.
* @param destination The peer to send it to.
*/
public void sendPacket(byte[] blockToSend, Peer destination, boolean allowLocalAddresses) throws LocalAddressException;
/**
* Get the size of the transport layer headers, for byte accounting purposes.
*/
public int getHeadersLength();
/**
* Get the size of the transport layer headers, for byte accounting purposes.
* @param peer used to detect address family.
*/
public int getHeadersLength(Peer peer);
/** Set the decryption filter to which incoming packets will be fed */
public void setLowLevelFilter(IncomingPacketFilter f);
/** How big must the pending data be before we send a packet? *Includes* transport layer headers. */
public int getPacketSendThreshold();
/** Does this port appear to be port forwarded? @see AddressTracker */
Status getDetectedConnectivityStatus();
}