@Override public void failed(IOException ioe) { wrappee.failed(ioe); } }
@Override public void send(Address address, ByteBuffer buffer, final SendCallback callback) { if (socket == null) { throw new IllegalStateException("send() must be called after connect()"); } try { while (buffer.hasRemaining()) { int r = socket.write(address.ip, buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); if (r == 0) { throw new IOException("Error writing to: " + address); } buffer.position(buffer.position() + r); } callback.sent(); } catch (Exception e) { callback.failed(new IOException("Could not write", e)); } }
@Override public void sent() { wrappee.sent(); }
@Override public void sent() { wait.run(); wrappee.sent(); }
@Override public void failed(IOException ioe) { IOException e = new IOException("Failed to send discover packet", ioe); for (PendingRequest r : pendingRequests) { r.sendCallback.failed(e); } pendingRequests.clear(); } });
@Override public void send(Address address, ByteBuffer buffer, final SendCallback callback) { if (socket == null) { throw new IllegalStateException("send() must be called after connect()"); } LOGGER.trace("Sending datagram to: {}", address); if (buffer != null) { if (SUPERVISION != null) { SUPERVISION.incOut(buffer.remaining()); } } try { if (closed) { throw new IOException("Closed"); } if (buffer == null) { // socket.close(); } else { DatagramPacket packet = new DatagramPacket(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining(), InetAddress.getByAddress(address.ip), address.port); socket.send(packet); } callback.sent(); } catch (Exception e) { callback.failed(new IOException("Could not write", e)); } }
wrappee.send(toSend, callback); } else { callback.sent();
@Override public void failed(IOException ioe) { lock.fail(ioe); wrappee.failed(ioe); } }
@Override public HttpContentSender send(final ByteBuffer buffer, final SendCallback callback) { if (finished) { throw new IllegalStateException(); } if (!buffer.hasRemaining()) { callback.sent(); return this; } wrappee.send(LineReader.toBuffer(Integer.toHexString(buffer.remaining())), new Nop()); wrappee.send(buffer, new Nop()); wrappee.send(emptyLineByteBuffer.duplicate(), callback); return this; }
@Override public void close() { List<ToSend> callbacks = null; if (toSend != null) { callbacks = toSend; toSend = null; } if (connecter != null) { connecter.close(); connecter = null; } closed = true; if (callbacks != null) { for (ToSend s : callbacks) { s.callback.failed(new IOException("Closed")); } } }
@Override public void send(Address address, ByteBuffer buffer, SendCallback callback) { if (toSend == null) { if (connecter == null) { callback.failed(new IOException("Closed")); } else { connecter.send(address, buffer, callback); } } else { toSend.add(new ToSend(address, buffer, callback)); } } @Override
toWrite.callback.failed(e);
toWrite.callback.failed(e);
callback.failed(new IOException("Connection lost")); return;
@Override public void run() { if (closed) { callback.failed(new IOException("Closed")); return; if ((WRITE_MAX_BUFFER_SIZE > 0L) && (toWriteLength > WRITE_MAX_BUFFER_SIZE)) { LOGGER.warn("Dropping {} bytes that should have been sent to {}", buffer.remaining(), address); callback.failed(new IOException("Packet dropped")); return;
@Override public void run() { if (closed) { callback.failed(new IOException("Closed")); return; if ((WRITE_MAX_BUFFER_SIZE > 0L) && (toWriteLength > WRITE_MAX_BUFFER_SIZE)) { LOGGER.warn("Dropping {} bytes that should have been sent to {}", buffer.remaining(), address); callback.failed(new IOException("Packet dropped")); return;
private void disconnect(DatagramChannel channel, SelectionKey selectionKey, Connection callback, IOException error) { if (channel != null) { channel.socket().close(); try { channel.close(); } catch (IOException e) { } } if (selectionKey != null) { selectionKey.cancel(); } IOException e = (error == null) ? new IOException("Closed") : new IOException("Closed because of", error); for (ToWrite toWrite : toWriteQueue) { toWrite.callback.failed(e); } toWriteQueue.clear(); currentChannel = null; currentSelectionKey = null; if (!closed) { closed = true; if (callback != null) { callback.closed(); } } } }
private void doClose() { if (sent != null) { IOException e = new IOException("SSL engine failed"); for (ToWrite toWrite : sent) { toWrite.callback.failed(e); } } sent = null; received = null; if (engine != null) { try { engine.closeInbound(); } catch (IOException e) { } engine.closeOutbound(); engine = null; } if (connecting != null) { connecting.close(); connecting = null; } }