package net.i2p.client.streaming.impl; import net.i2p.I2PAppContext; import net.i2p.util.Log; /** * Scheduler used after receiving an inbound connection but before * we have sent our own SYN. * */ class SchedulerReceived extends SchedulerImpl { public SchedulerReceived(I2PAppContext ctx) { super(ctx); } public boolean accept(Connection con) { return (con != null) && (con.getLastSendId() < 0) && (con.getSendStreamId() > 0); } public void eventOccurred(Connection con) { if (con.getUnackedPacketsReceived() <= 0) { if (_log.shouldLog(Log.WARN)) _log.warn("hmm, state is received, but no unacked packets received?"); return; } long timeTillSend = con.getNextSendTime() - _context.clock().now(); if (timeTillSend <= 0) { if (con.getNextSendTime() > 0) { if (_log.shouldLog(Log.DEBUG)) _log.debug("received con... send a packet"); con.sendAvailable(); con.setNextSendTime(-1); } else { con.setNextSendTime(_context.clock().now() + con.getOptions().getSendAckDelay()); reschedule(con.getOptions().getSendAckDelay(), con); } } else { if (_log.shouldLog(Log.DEBUG)) _log.debug("received con... time till next send: " + timeTillSend); reschedule(timeTillSend, con); } } }