/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.redPandaLib.core; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.redPandaLib.core.messages.RawMsg; import org.redPandaLib.crypt.ECKey; import org.redPandaLib.crypt.Utils; import org.redPandaLib.services.MessageDownloader; /** * * @author rflohr */ public class PeerTrustData implements Serializable { private static final long serialVersionUID = -2628506219264601849L; public int internalId = -1; long nonce; byte[] authKey; int trustLevel; public long lastSeen = System.currentTimeMillis(); public ArrayList<String> ips; int port; public int loadedMsgsCount = 0; //not 100 percent accurate, because not thread safe public int receivedMsgsCount = 0; public HashMap<Integer, ECKey> keyToIdHis = new HashMap<Integer, ECKey>(); public HashMap<Integer, RawMsg> pendingMessagesPublic = new HashMap<Integer, RawMsg>(); public ArrayList<Integer> loadedMsgs = new ArrayList<Integer>(); //not 100 percent accurate, because not thread safe public ArrayList<Integer> keyToIdMine = new ArrayList<Integer>(); public HashMap<Integer, RawMsg> pendingMessages = new HashMap<Integer, RawMsg>(); public HashMap<Integer, RawMsg> pendingMessagesTimedOut = new HashMap<Integer, RawMsg>(); public long rating = 10000; public HashMap<Integer, RawMsg> getPendingMessagesTimedOut() { return pendingMessagesTimedOut; } public int synchronizedMessages = 0; public int badMessages = 0; public ArrayList<Integer> sendChannelsToFilter = new ArrayList<Integer>(); public long backSyncedTill = Long.MAX_VALUE; public int peerMode = -1; //supernode, lightclient, normal? -1 = unset public PeerTrustData() { authKey = new byte[32]; ips = new ArrayList<String>(); } // public void removePendingMessage(RawMsg m ) { // pendingMessages.; // } public void addPendingMessage(int id, RawMsg m) { synchronized (pendingMessages) { pendingMessages.put(id, m); } MessageDownloader.trigger(); } public HashMap<Integer, RawMsg> getPendingMessagesPublic() { return pendingMessagesPublic; } public ECKey id2KeyHis(int id) { return keyToIdHis.get(id); } public int key2IdHis(ECKey k) { Set<Map.Entry<Integer, ECKey>> entrySet = keyToIdHis.entrySet(); for (Map.Entry<Integer, ECKey> entry : entrySet) { if (entry.getValue().equals(k)) { return entry.getKey(); } } return -1; } // public ECKey id2KeyMine(int id) { // return keyToIdMine.get(id); // } // // public int key2IdMine(ECKey k) { // // if (!keyToIdMine.contains(k)) { // keyToIdMine.add(k); // } // // return keyToIdMine.indexOf(k); // } public HashMap<Integer, RawMsg> getPendingMessages() { return pendingMessages; } @Override protected PeerTrustData clone() throws CloneNotSupportedException { PeerTrustData cloned = (PeerTrustData) super.clone(); cloned.keyToIdHis = (HashMap<Integer, ECKey>) keyToIdHis.clone(); cloned.pendingMessagesPublic = (HashMap<Integer, RawMsg>) pendingMessagesPublic.clone(); cloned.loadedMsgs = (ArrayList<Integer>) loadedMsgs.clone(); cloned.keyToIdMine = (ArrayList<Integer>) keyToIdMine.clone(); cloned.pendingMessages = (HashMap<Integer, RawMsg>) pendingMessages.clone(); cloned.sendChannelsToFilter = (ArrayList<Integer>) sendChannelsToFilter.clone(); System.out.println("CLONED: " + Utils.bytesToHexString(cloned.authKey)); return cloned; } public void initInternalId() { synchronized (Test.peerTrusts) { internalId = 0; while (true) { internalId++; boolean inUse = false; for (PeerTrustData ptd : Test.peerTrusts) { if (ptd == this) { continue; } if (ptd.internalId == internalId) { inUse = true; break; } } if (!inUse) { break; } } Test.messageStore.clearFilterChannel(internalId); Test.messageStore.removeMessageToSend(internalId); System.out.println("GOT ID: " + internalId); } } public int getMessageLoadedCount() { return loadedMsgsCount + loadedMsgs.size(); } }