package net.i2p.sam; /* * free (adj.): unencumbered; not under the control of others * Written by human in 2004 and released into the public domain * with no warranty of any kind, either expressed or implied. * It probably won't make your computer catch on fire, or eat * your children, but it might. Use at your own risk. * */ import java.util.HashMap; /** * basically a HashMap from String to SessionRecord * * @since 0.9.25 moved from SAMv3Handler */ class SessionsDB { private static final long serialVersionUID = 0x1; static class ExistingIdException extends Exception { private static final long serialVersionUID = 0x1; } static class ExistingDestException extends Exception { private static final long serialVersionUID = 0x1; } private final HashMap<String, SessionRecord> map; public SessionsDB() { map = new HashMap<String, SessionRecord>() ; } public synchronized void put(String nick, SessionRecord session) throws ExistingIdException, ExistingDestException { if ( map.containsKey(nick) ) { throw new ExistingIdException(); } for ( SessionRecord r : map.values() ) { if (r.getDest().equals(session.getDest())) { throw new ExistingDestException(); } } session.createThreadGroup("SAM session "+nick); map.put(nick, session) ; } /** @since 0.9.25 */ public synchronized void putDupDestOK(String nick, SessionRecord session) throws ExistingIdException { if (map.containsKey(nick)) { throw new ExistingIdException(); } session.createThreadGroup("SAM session "+nick); map.put(nick, session) ; } /** @return true if removed */ synchronized public boolean del( String nick ) { return map.remove(nick) != null; } synchronized public SessionRecord get(String nick) { return map.get(nick); } synchronized public boolean containsKey( String nick ) { return map.containsKey(nick); } }