package com.limegroup.gnutella.filters;
import java.util.Arrays;
import com.limegroup.gnutella.messages.Message;
import com.limegroup.gnutella.messages.QueryReply;
public class ClientGuidFilter implements SpamFilter {
@Override
public boolean allow(Message m) {
if(m instanceof QueryReply) {
QueryReply q = (QueryReply)m;
byte[] clientGUID = q.getClientGUID();
if(isAllZeroesOrAllAToF(clientGUID))
return false;
if(Arrays.equals(clientGUID, q.getGUID()))
return false;
}
return true;
}
private static boolean isAllZeroesOrAllAToF(byte[] guid) {
boolean allZeroes = true, allAToF = true;
for(byte b : guid) {
if(b == (byte)0) {
allAToF = false;
if(!allZeroes)
return false;
} else {
allZeroes = false;
if(!allAToF)
return false;
int unsigned = b < 0 ? b + 255 : b;
if((unsigned & 0x0F) < 0x0A)
return false;
if((unsigned & 0xF0) < 0xA0)
return false;
}
}
return true;
}
}