Package com.biglybt.net.udp.uc.impl
Class PRUDPPacketHandlerImpl
- java.lang.Object
-
- com.biglybt.net.udp.uc.impl.PRUDPPacketHandlerImpl
-
- All Implemented Interfaces:
PRUDPPacketHandler
public class PRUDPPacketHandlerImpl extends java.lang.Object implements PRUDPPacketHandler
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
PRUDPPacketHandlerImpl.MyByteArrayOutputStream
protected static interface
PRUDPPacketHandlerImpl.PacketTransformer
-
Field Summary
-
Fields inherited from interface com.biglybt.net.udp.uc.PRUDPPacketHandler
PRIORITY_HIGH, PRIORITY_IMMEDIATE, PRIORITY_LOW, PRIORITY_MEDIUM
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
PRUDPPacketHandlerImpl(int _port, java.net.InetAddress _bind_ip, PRUDPPacketHandlerImpl.PacketTransformer _packet_transformer)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addPrimordialHandler(PRUDPPrimordialHandler handler)
protected void
calcBind()
protected void
checkTargetAddress(java.net.InetSocketAddress address)
protected boolean
checkTimeouts()
void
closeSession()
void
destroy()
java.net.InetAddress
getCurrentBindAddress()
java.net.InetAddress
getExplicitBindAddress()
int
getPort()
long
getReceiveQueueLength()
PRUDPRequestHandler
getRequestHandler()
long
getSendQueueLength()
PRUDPPacketHandlerStats
getStats()
boolean
hasPrimordialHandler()
PRUDPPacketHandler
openSession(java.net.InetSocketAddress target)
void
primordialSend(byte[] buffer, java.net.InetSocketAddress target)
protected void
process(java.net.DatagramPacket dg_packet, long receive_time)
private void
receiveFromSocket(java.net.DatagramPacket p)
protected void
receiveLoop(AESemaphore init_sem)
void
removePrimordialHandler(PRUDPPrimordialHandler handler)
void
send(PRUDPPacket request_packet, java.net.InetSocketAddress destination_address)
Send onlyPRUDPPacket
sendAndReceive(PRUDPPacket request_packet, java.net.InetSocketAddress destination_address)
void
sendAndReceive(PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, PRUDPPacketReceiver receiver, long timeout, int priority)
Asynchronous send and receivePRUDPPacket
sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address)
Synchronous send and receivePRUDPPacket
sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, long timeout)
PRUDPPacket
sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, long timeout, int priority)
PRUDPPacketHandlerRequestImpl
sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, PRUDPPacketReceiver receiver, long timeout, int priority)
private void
sendToSocket(java.net.DatagramPacket p)
protected void
setDefaultBindAddress(java.net.InetAddress address)
void
setDelays(int _send_delay, int _receive_delay, int _queued_request_timeout)
void
setExplicitBindAddress(java.net.InetAddress address, boolean autoDelegate)
void
setRequestHandler(PRUDPRequestHandler _request_handler)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.biglybt.net.udp.uc.PRUDPPacketHandler
getBindIP
-
-
-
-
Field Detail
-
LOGID
private static final LogIDs LOGID
-
TRACE_REQUESTS
private boolean TRACE_REQUESTS
-
MAX_PACKET_SIZE
private static int MAX_PACKET_SIZE
-
MAX_SEND_QUEUE_DATA_SIZE
private static final long MAX_SEND_QUEUE_DATA_SIZE
- See Also:
- Constant Field Values
-
MAX_RECV_QUEUE_DATA_SIZE
private static final long MAX_RECV_QUEUE_DATA_SIZE
- See Also:
- Constant Field Values
-
use_socks
private static boolean use_socks
-
port
private int port
-
socket
private java.net.DatagramSocket socket
-
primordial_handlers
private CopyOnWriteList<PRUDPPrimordialHandler> primordial_handlers
-
request_handler
private PRUDPRequestHandler request_handler
-
stats
private PRUDPPacketHandlerStatsImpl stats
-
requests
private java.util.Map requests
-
requests_mon
private AEMonitor requests_mon
-
send_queue_mon
private AEMonitor send_queue_mon
-
send_queue_data_size
private long send_queue_data_size
-
send_queues
private final java.util.List[] send_queues
-
send_queue_sem
private AESemaphore send_queue_sem
-
send_thread
private AEThread2 send_thread
-
recv_queue_mon
private AEMonitor recv_queue_mon
-
recv_queue_data_size
private long recv_queue_data_size
-
recv_queue
private java.util.List<java.lang.Object[]> recv_queue
-
recv_queue_sem
private AESemaphore recv_queue_sem
-
recv_thread
private AEThread2 recv_thread
-
send_delay
private int send_delay
-
receive_delay
private int receive_delay
-
queued_request_timeout
private int queued_request_timeout
-
total_requests_received
private long total_requests_received
-
total_requests_processed
private long total_requests_processed
-
total_replies
private long total_replies
-
last_error_report
private long last_error_report
-
bind_address_mon
private AEMonitor bind_address_mon
-
default_bind_ip
private java.net.InetAddress default_bind_ip
-
explicit_bind_ip
private java.net.InetAddress explicit_bind_ip
-
explicit_bind_ip_ad
private boolean explicit_bind_ip_ad
-
current_bind_ip
private volatile java.net.InetAddress current_bind_ip
-
target_bind_ip
private volatile java.net.InetAddress target_bind_ip
-
failed
private volatile boolean failed
-
destroyed
private volatile boolean destroyed
-
destroy_sem
private AESemaphore destroy_sem
-
init_error
private java.lang.Throwable init_error
-
altProtocolDelegate
private PRUDPPacketHandlerImpl altProtocolDelegate
-
packet_transformer
private final PRUDPPacketHandlerImpl.PacketTransformer packet_transformer
-
-
Constructor Detail
-
PRUDPPacketHandlerImpl
protected PRUDPPacketHandlerImpl(int _port, java.net.InetAddress _bind_ip, PRUDPPacketHandlerImpl.PacketTransformer _packet_transformer)
-
-
Method Detail
-
hasPrimordialHandler
public boolean hasPrimordialHandler()
- Specified by:
hasPrimordialHandler
in interfacePRUDPPacketHandler
-
addPrimordialHandler
public void addPrimordialHandler(PRUDPPrimordialHandler handler)
- Specified by:
addPrimordialHandler
in interfacePRUDPPacketHandler
-
removePrimordialHandler
public void removePrimordialHandler(PRUDPPrimordialHandler handler)
- Specified by:
removePrimordialHandler
in interfacePRUDPPacketHandler
-
setRequestHandler
public void setRequestHandler(PRUDPRequestHandler _request_handler)
- Specified by:
setRequestHandler
in interfacePRUDPPacketHandler
-
getRequestHandler
public PRUDPRequestHandler getRequestHandler()
- Specified by:
getRequestHandler
in interfacePRUDPPacketHandler
-
getPort
public int getPort()
- Specified by:
getPort
in interfacePRUDPPacketHandler
-
getCurrentBindAddress
public java.net.InetAddress getCurrentBindAddress()
- Specified by:
getCurrentBindAddress
in interfacePRUDPPacketHandler
-
setDefaultBindAddress
protected void setDefaultBindAddress(java.net.InetAddress address)
-
getExplicitBindAddress
public java.net.InetAddress getExplicitBindAddress()
- Specified by:
getExplicitBindAddress
in interfacePRUDPPacketHandler
-
setExplicitBindAddress
public void setExplicitBindAddress(java.net.InetAddress address, boolean autoDelegate)
- Specified by:
setExplicitBindAddress
in interfacePRUDPPacketHandler
-
calcBind
protected void calcBind()
-
receiveLoop
protected void receiveLoop(AESemaphore init_sem)
-
checkTimeouts
protected boolean checkTimeouts()
-
process
protected void process(java.net.DatagramPacket dg_packet, long receive_time)
-
sendAndReceive
public PRUDPPacket sendAndReceive(PRUDPPacket request_packet, java.net.InetSocketAddress destination_address) throws PRUDPPacketHandlerException
- Throws:
PRUDPPacketHandlerException
-
sendAndReceive
public PRUDPPacket sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address) throws PRUDPPacketHandlerException
Description copied from interface:PRUDPPacketHandler
Synchronous send and receive- Specified by:
sendAndReceive
in interfacePRUDPPacketHandler
- Returns:
- Throws:
PRUDPPacketHandlerException
-
sendAndReceive
public PRUDPPacket sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, long timeout) throws PRUDPPacketHandlerException
- Specified by:
sendAndReceive
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
sendAndReceive
public PRUDPPacket sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, long timeout, int priority) throws PRUDPPacketHandlerException
- Specified by:
sendAndReceive
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
sendAndReceive
public void sendAndReceive(PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, PRUDPPacketReceiver receiver, long timeout, int priority) throws PRUDPPacketHandlerException
Description copied from interface:PRUDPPacketHandler
Asynchronous send and receive- Specified by:
sendAndReceive
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
sendAndReceive
public PRUDPPacketHandlerRequestImpl sendAndReceive(java.net.PasswordAuthentication auth, PRUDPPacket request_packet, java.net.InetSocketAddress destination_address, PRUDPPacketReceiver receiver, long timeout, int priority) throws PRUDPPacketHandlerException
- Throws:
PRUDPPacketHandlerException
-
send
public void send(PRUDPPacket request_packet, java.net.InetSocketAddress destination_address) throws PRUDPPacketHandlerException
Description copied from interface:PRUDPPacketHandler
Send only- Specified by:
send
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
checkTargetAddress
protected void checkTargetAddress(java.net.InetSocketAddress address) throws PRUDPPacketHandlerException
- Throws:
PRUDPPacketHandlerException
-
setDelays
public void setDelays(int _send_delay, int _receive_delay, int _queued_request_timeout)
- Specified by:
setDelays
in interfacePRUDPPacketHandler
-
getSendQueueLength
public long getSendQueueLength()
-
getReceiveQueueLength
public long getReceiveQueueLength()
-
primordialSend
public void primordialSend(byte[] buffer, java.net.InetSocketAddress target) throws PRUDPPacketHandlerException
- Specified by:
primordialSend
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
sendToSocket
private void sendToSocket(java.net.DatagramPacket p) throws java.io.IOException
- Throws:
java.io.IOException
-
receiveFromSocket
private void receiveFromSocket(java.net.DatagramPacket p) throws java.io.IOException
- Throws:
java.io.IOException
-
getStats
public PRUDPPacketHandlerStats getStats()
- Specified by:
getStats
in interfacePRUDPPacketHandler
-
destroy
public void destroy()
- Specified by:
destroy
in interfacePRUDPPacketHandler
-
openSession
public PRUDPPacketHandler openSession(java.net.InetSocketAddress target) throws PRUDPPacketHandlerException
- Specified by:
openSession
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
closeSession
public void closeSession() throws PRUDPPacketHandlerException
- Specified by:
closeSession
in interfacePRUDPPacketHandler
- Throws:
PRUDPPacketHandlerException
-
-