package multicast; import java.io.File; import java.net.InetAddress; import java.net.UnknownHostException; import java.security.MessageDigest; import multicast.interfaces.NetworkP2P; import multicast.interfaces.OnReceiveHandler; import multicast.utils.Receiver; import multicast.utils.Sender; import net.jxta.id.IDFactory; import net.jxta.peergroup.PeerGroup; import net.jxta.platform.NetworkManager; public class Peer2PeerConnection implements NetworkP2P { private String peerID = ""; private NetworkManager manager = null; private Sender sender; private Receiver receiver; @Override public String connect(OnReceiveHandler handler) { if (peerID.equals("")) { this.manager = getManager(); this.sender = new Sender(this.manager); this.receiver = new Receiver(this.manager, handler); this.receiver.start(); } String uniqueID = sender.getPeerID(); try { uniqueID += InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } return uniqueID; } /** * Create a new network manager if doesn't exist. * * @return the network manager. */ private NetworkManager getManager() { if (this.manager == null) { try { this.manager = new net.jxta.platform.NetworkManager( NetworkManager.ConfigMode.RENDEZVOUS_RELAY, "JxtaMulticastSocketServer", new File(new File(".cache"), "JxtaMulticastSocketServer").toURI()); net.jxta.peergroup.PeerGroupID pgid = createInfrastructurePeerGroupID("logout", "alma42"); //this.manager.setInfrastructureID(pgid); PeerGroup npg = this.manager.startNetwork(); System.out.println( "Infrastructure Peer Group ID : " + npg.getPeerGroupID() ); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } } return manager; } @Override public void sendMessage(String message) { this.sender.sendMessage(message); } @Override public void stopConnection() { this.receiver.stopReceiver(); this.manager.stopNetwork(); } public static final net.jxta.peergroup.PeerGroupID createInfrastructurePeerGroupID(String clearTextID, String function){ byte[] digest = generateHash(clearTextID, function); net.jxta.peergroup.PeerGroupID peerGroupID = IDFactory.newPeerGroupID(digest); return peerGroupID; } /** * Generates an SHA-1 digest hash of the string: clearTextID+"-"+function or: clearTextID if function was blank.<p> * * Note that the SHA-1 used only creates a 20 byte hash.<p> * * @param clearTextID A string that is to be hashed. This can be any string used for hashing or hiding data. * @param function A function related to the clearTextID string. This is used to create a hash associated with clearTextID so that it is a uique code. * * @return array of bytes containing the hash of the string: clearTextID+"-"+function or clearTextID if function was blank. Can return null if SHA-1 does not exist on platform. */ public static final byte[] generateHash(String clearTextID, String function) { String id; if (function == null) { id = clearTextID; } else { id = clearTextID + "-" + function; } byte[] buffer = id.getBytes(); MessageDigest algorithm = null; try { algorithm = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.println("Cannot load selected Digest Hash implementation: "+ e); return null; } // Generate the digest. algorithm.reset(); algorithm.update(buffer); try{ byte[] digest1 = algorithm.digest(); return digest1; }catch(Exception de){ System.out.println("Failed to creat a digest. " + de); return null; } } }