Skip to content

Commit 164599e

Browse files
committed
Add Node parameter to DhtSocket.QueryHandler handle methods
1 parent 1cf6f83 commit 164599e

File tree

1 file changed

+39
-17
lines changed

1 file changed

+39
-17
lines changed

src/main/java/jtorrent/domain/socket/DhtSocket.java

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import jtorrent.domain.model.dht.message.response.FindNodeResponse;
2929
import jtorrent.domain.model.dht.message.response.GetPeersResponse;
3030
import jtorrent.domain.model.dht.message.response.PingResponse;
31+
import jtorrent.domain.model.dht.node.Node;
32+
import jtorrent.domain.model.dht.node.NodeContactInfo;
3133
import jtorrent.domain.util.BackgroundTask;
3234

3335
public class DhtSocket {
@@ -127,13 +129,13 @@ private Method getTransactionId(TransactionId transactionId) {
127129

128130
public interface QueryHandler {
129131

130-
void handle(Ping ping);
132+
void handle(Ping ping, Node node);
131133

132-
void handle(FindNode findNode);
134+
void handle(FindNode findNode, Node node);
133135

134-
void handle(AnnouncePeer announcePeer);
136+
void handle(GetPeers getPeers, Node node);
135137

136-
void handle(GetPeers getPeers);
138+
void handle(AnnouncePeer announcePeer, Node node);
137139
}
138140

139141
private class HandleIncomingMessagesTask extends BackgroundTask {
@@ -150,8 +152,8 @@ private HandleIncomingMessagesTask(QueryHandler queryHandler) {
150152
protected void execute() {
151153
try {
152154
LOGGER.log(Level.DEBUG, "[DHT] Waiting for message");
153-
DhtMessage message = receiveMessage();
154-
handleMessage(message);
155+
IncomingMessage incomingMessage = receiveMessage();
156+
handleMessage(incomingMessage.getMessage(), incomingMessage.getAddress());
155157
} catch (IOException e) {
156158
LOGGER.log(Level.ERROR, "[DHT] Error while receiving message: {0}", e.getMessage());
157159
HandleIncomingMessagesTask.this.stop();
@@ -167,19 +169,19 @@ protected void execute() {
167169
* @return the received message
168170
* @throws IOException if an I/O error occurs
169171
*/
170-
private DhtMessage receiveMessage() throws IOException {
172+
private IncomingMessage receiveMessage() throws IOException {
171173
byte[] buffer = new byte[1024];
172174
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
173175
socket.receive(packet);
176+
InetSocketAddress address = new InetSocketAddress(packet.getAddress(), packet.getPort());
174177
DhtMessage message = dhtMessageDecoder.decode(packet.getData());
175-
LOGGER.log(Level.DEBUG, "[DHT] Received {0}: {1}", message.getMessageType(), message);
176-
return message;
178+
return new IncomingMessage(address, message);
177179
}
178180

179-
private void handleMessage(DhtMessage message) {
181+
private void handleMessage(DhtMessage message, InetSocketAddress address) {
180182
switch (message.getMessageType()) {
181183
case QUERY:
182-
handleQuery((Query) message);
184+
handleQuery((Query) message, address);
183185
break;
184186
case RESPONSE:
185187
handleResponse((DefinedResponse) message);
@@ -192,21 +194,22 @@ private void handleMessage(DhtMessage message) {
192194
}
193195
}
194196

195-
private void handleQuery(Query query) {
197+
private void handleQuery(Query query, InetSocketAddress address) {
196198
LOGGER.log(Level.DEBUG, "[DHT] Received {0} query: {1}", query.getMethod(), query);
197-
199+
NodeContactInfo nodeContactInfo = new NodeContactInfo(query.getId(), address);
200+
Node node = Node.seenNowWithContactInfo(nodeContactInfo);
198201
switch (query.getMethod()) {
199202
case PING:
200-
queryHandler.handle((Ping) query);
203+
queryHandler.handle((Ping) query, node);
201204
break;
202205
case FIND_NODE:
203-
queryHandler.handle((FindNode) query);
206+
queryHandler.handle((FindNode) query, node);
204207
break;
205208
case ANNOUNCE_PEER:
206-
queryHandler.handle((AnnouncePeer) query);
209+
queryHandler.handle((AnnouncePeer) query, node);
207210
break;
208211
case GET_PEERS:
209-
queryHandler.handle((GetPeers) query);
212+
queryHandler.handle((GetPeers) query, node);
210213
break;
211214
default:
212215
throw new AssertionError(String.format(FORMAT_UNKNOWN_METHOD, query.getMethod()));
@@ -248,4 +251,23 @@ private void logNoOutstandingQueryFound(TransactionId transactionId) {
248251
LOGGER.log(Level.ERROR, "[DHT] No outstanding query found for transaction id: {0}", transactionId);
249252
}
250253
}
254+
255+
private static class IncomingMessage {
256+
257+
private final InetSocketAddress address;
258+
private final DhtMessage message;
259+
260+
public IncomingMessage(InetSocketAddress address, DhtMessage message) {
261+
this.address = requireNonNull(address);
262+
this.message = requireNonNull(message);
263+
}
264+
265+
public InetSocketAddress getAddress() {
266+
return address;
267+
}
268+
269+
public DhtMessage getMessage() {
270+
return message;
271+
}
272+
}
251273
}

0 commit comments

Comments
 (0)