Class PeerSocketHandler
- java.lang.Object
-
- org.bitcoinj.core.PeerSocketHandler
-
- All Implemented Interfaces:
StreamConnection
,TimeoutHandler
- Direct Known Subclasses:
Peer
public abstract class PeerSocketHandler extends java.lang.Object implements TimeoutHandler, StreamConnection
Handles high-level message (de)serialization for peers, acting as the bridge between theorg.bitcoinj.net
classes andPeer
.
-
-
Field Summary
Fields Modifier and Type Field Description protected PeerAddress
peerAddress
protected MessageWriteTarget
writeTarget
-
Constructor Summary
Constructors Constructor Description PeerSocketHandler(NetworkParameters params, java.net.InetSocketAddress remoteIp)
PeerSocketHandler(NetworkParameters params, PeerAddress peerAddress)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
close()
Closes the connection to the peer if one exists, or immediately closes the connection as soon as it opensPeerAddress
getAddress()
int
getMaxMessageSize()
Returns the maximum message size of a message on the socket.protected abstract void
processMessage(Message m)
Called every time a message is received from the networkint
receiveBytes(java.nio.ByteBuffer buff)
Called when new bytes are available from the remote end.ListenableCompletableFuture<java.lang.Void>
sendMessage(Message message)
Sends the given message to the peer.void
setSocketTimeout(java.time.Duration timeout)
Sets the receive timeout, automatically killing the connection if no messages are received for this longvoid
setTimeoutEnabled(boolean timeoutEnabled)
Enables or disables the timeout entirely.void
setWriteTarget(MessageWriteTarget writeTarget)
Sets theMessageWriteTarget
used to write messages to the peer.protected void
timeoutOccurred()
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.bitcoinj.net.StreamConnection
connectionClosed, connectionOpened
-
-
-
-
Field Detail
-
peerAddress
protected final PeerAddress peerAddress
-
writeTarget
protected MessageWriteTarget writeTarget
-
-
Constructor Detail
-
PeerSocketHandler
public PeerSocketHandler(NetworkParameters params, java.net.InetSocketAddress remoteIp)
-
PeerSocketHandler
public PeerSocketHandler(NetworkParameters params, PeerAddress peerAddress)
-
-
Method Detail
-
setTimeoutEnabled
public void setTimeoutEnabled(boolean timeoutEnabled)
Description copied from interface:TimeoutHandler
Enables or disables the timeout entirely. This may be useful if you want to store the timeout value but wish to temporarily disable/enable timeouts.
The default is for timeoutEnabled to be true but timeout to be set to 0 (ie disabled).
This call will reset the current progress towards the timeout.
- Specified by:
setTimeoutEnabled
in interfaceTimeoutHandler
-
setSocketTimeout
public void setSocketTimeout(java.time.Duration timeout)
Description copied from interface:TimeoutHandler
Sets the receive timeout, automatically killing the connection if no messages are received for this long
A timeout of
Duration.ZERO
is interpreted as no timeout.The default is for timeoutEnabled to be true but timeout to be set to
Duration.ZERO
(ie disabled).This call will reset the current progress towards the timeout.
- Specified by:
setSocketTimeout
in interfaceTimeoutHandler
-
sendMessage
public ListenableCompletableFuture<java.lang.Void> sendMessage(Message message) throws java.nio.channels.NotYetConnectedException
Sends the given message to the peer. Due to the asynchronousness of network programming, there is no guarantee the peer will have received it. Throws NotYetConnectedException if we are not yet connected to the remote peer. TODO: Maybe use something other than the unchecked NotYetConnectedException here- Throws:
java.nio.channels.NotYetConnectedException
-
close
public void close()
Closes the connection to the peer if one exists, or immediately closes the connection as soon as it opens
-
timeoutOccurred
protected void timeoutOccurred()
-
processMessage
protected abstract void processMessage(Message m) throws java.lang.Exception
Called every time a message is received from the network- Throws:
java.lang.Exception
-
receiveBytes
public int receiveBytes(java.nio.ByteBuffer buff)
Description copied from interface:StreamConnection
Called when new bytes are available from the remote end. This should only ever be called by the single writeTarget associated with any given StreamConnection, multiple callers will likely confuse implementations.
Implementers/callers must follow the following conventions exactly:- buff will start with its limit set to the position we can read to and its position set to the location we will start reading at (always 0)
- May read more than one message (recursively) if there are enough bytes available
- Uses some internal buffering to store message which are larger (incl their length prefix) than buff's capacity(), ie it is up to this method to ensure we don't run out of buffer space to decode the next message.
- buff will end with its limit the same as it was previously, and its position set to the position up to which bytes have been read (the same as its return value)
- buff must be at least the size of a Bitcoin header (incl magic bytes).
- Specified by:
receiveBytes
in interfaceStreamConnection
- Returns:
- The amount of bytes consumed which should not be provided again
-
setWriteTarget
public void setWriteTarget(MessageWriteTarget writeTarget)
Sets theMessageWriteTarget
used to write messages to the peer. This should almost never be called, it is called automatically byNioClient
orNioClientManager
once the socket finishes initialization.- Specified by:
setWriteTarget
in interfaceStreamConnection
-
getMaxMessageSize
public int getMaxMessageSize()
Description copied from interface:StreamConnection
Returns the maximum message size of a message on the socket. This is used in calculating size of buffers to allocate.- Specified by:
getMaxMessageSize
in interfaceStreamConnection
-
getAddress
public PeerAddress getAddress()
- Returns:
- the IP address and port of peer.
-
-