Fix tcp
This commit is contained in:
parent
3387b90b14
commit
ad2b796071
@ -108,11 +108,14 @@ public class ProtocolP2PPacketTCP extends ProtocolP2PPacket {
|
|||||||
Socket ss = (Socket)socket;
|
Socket ss = (Socket)socket;
|
||||||
byte[] packet = new byte[1024];
|
byte[] packet = new byte[1024];
|
||||||
try {
|
try {
|
||||||
System.err.println("Reading " + ss.getInputStream().read(packet) + " bytes");
|
if (-1 == ss.getInputStream().read(packet)) {
|
||||||
|
throw new IOException();
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// Error: cannot read request, closing socket
|
// Error: cannot read request, closing socket
|
||||||
try {
|
try {
|
||||||
ss.close();
|
ss.close();
|
||||||
|
throw new SocketClosed();
|
||||||
} catch (IOException e2) {
|
} catch (IOException e2) {
|
||||||
System.err.println("Cannot close socket");
|
System.err.println("Cannot close socket");
|
||||||
throw new SocketClosed();
|
throw new SocketClosed();
|
||||||
@ -208,7 +211,20 @@ public class ProtocolP2PPacketTCP extends ProtocolP2PPacket {
|
|||||||
}
|
}
|
||||||
// reception
|
// reception
|
||||||
byte[] packet = new byte[8192];
|
byte[] packet = new byte[8192];
|
||||||
requestSocket.getInputStream().read(packet);
|
try {
|
||||||
|
if (-1== requestSocket.getInputStream().read(packet)) {
|
||||||
|
throw new IOException();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Error: cannot read request, closing socket
|
||||||
|
try {
|
||||||
|
requestSocket.close();
|
||||||
|
throw new SocketClosed();
|
||||||
|
} catch (IOException e2) {
|
||||||
|
System.err.println("Cannot close socket");
|
||||||
|
throw new SocketClosed();
|
||||||
|
}
|
||||||
|
}
|
||||||
// contruction
|
// contruction
|
||||||
try {
|
try {
|
||||||
ProtocolP2PPacketTCP p = new ProtocolP2PPacketTCP(packet);
|
ProtocolP2PPacketTCP p = new ProtocolP2PPacketTCP(packet);
|
||||||
|
@ -109,11 +109,11 @@ public class ServerManagementTCP implements Runnable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
boolean end = false;
|
boolean end = false;
|
||||||
logger.writeTCP("[ " + addr + "] New connection", LogLevel.Action);
|
logger.writeTCP("[" + addr + "] New connection", LogLevel.Action);
|
||||||
do {
|
do {
|
||||||
end = handleRequest();
|
end = handleRequest();
|
||||||
} while(!end);
|
} while(!end);
|
||||||
logger.writeTCP("[ " + addr + "] End of connection", LogLevel.Action);
|
logger.writeTCP("[" + addr + "] End of connection", LogLevel.Action);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Respond to next request incomming on socket s.
|
/** Respond to next request incomming on socket s.
|
||||||
@ -354,12 +354,18 @@ public class ServerManagementTCP implements Runnable {
|
|||||||
logger.writeTCP("Unregistering from tracker", LogLevel.Info);
|
logger.writeTCP("Unregistering from tracker", LogLevel.Info);
|
||||||
ProtocolP2PPacket p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Unregister(server));
|
ProtocolP2PPacket p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Unregister(server));
|
||||||
p.sendRequest((Object)tracker.getTCPSocket());
|
p.sendRequest((Object)tracker.getTCPSocket());
|
||||||
//tracker.closeTCPSocket();
|
// FIXME: this is a hack
|
||||||
|
// ProtocolP2PPacketTCP reads 1024 bytes but if 2 request comes at the same time InputStream is cleared fully
|
||||||
|
// and we keep waiting forever on the other side
|
||||||
|
// a fix could be to read only the header first, and read the required size after
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
} catch (InterruptedException e) {}
|
||||||
logger.writeTCP("Registering into tracker", LogLevel.Info);
|
logger.writeTCP("Registering into tracker", LogLevel.Info);
|
||||||
p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Register(server));
|
p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Register(server));
|
||||||
p.sendRequest((Object)tracker.getTCPSocket());
|
p.sendRequest((Object)tracker.getTCPSocket());
|
||||||
logger.writeTCP("Registering completed", LogLevel.Debug);
|
logger.writeTCP("Registering completed", LogLevel.Debug);
|
||||||
//tracker.closeTCPSocket();
|
tracker.closeTCPSocket();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ import protocolP2P.HashRequest;
|
|||||||
import localException.InternalError;
|
import localException.InternalError;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
import localException.SocketClosed;
|
||||||
|
|
||||||
|
|
||||||
/** Tracker management implementation with tcp
|
/** Tracker management implementation with tcp
|
||||||
@ -119,9 +120,11 @@ public class TrackerManagementTCP implements Runnable {
|
|||||||
sendNotFound(pd);
|
sendNotFound(pd);
|
||||||
break;
|
break;
|
||||||
case REGISTER:
|
case REGISTER:
|
||||||
|
logger.writeTCP("Received REGISTER from host " + pd.getHostItem(), LogLevel.Debug);
|
||||||
handleRegister(pd);
|
handleRegister(pd);
|
||||||
break;
|
break;
|
||||||
case UNREGISTER:
|
case UNREGISTER:
|
||||||
|
logger.writeTCP("Received UNREGISTER from host " + pd.getHostItem(), LogLevel.Debug);
|
||||||
handleUnregister(pd);
|
handleUnregister(pd);
|
||||||
break;
|
break;
|
||||||
case DISCOVER_REQUEST:
|
case DISCOVER_REQUEST:
|
||||||
@ -135,6 +138,8 @@ public class TrackerManagementTCP implements Runnable {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.writeTCP(e, LogLevel.Warning);
|
logger.writeTCP(e, LogLevel.Warning);
|
||||||
return true;
|
return true;
|
||||||
|
} catch (SocketClosed e) {
|
||||||
|
return true;
|
||||||
} catch (LocalException e) {
|
} catch (LocalException e) {
|
||||||
logger.writeTCP(e, LogLevel.Warning);
|
logger.writeTCP(e, LogLevel.Warning);
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user