private void sendData()

in src/main/java/com/twitter/whiskey/net/SpdySession.java [630:668]


    private void sendData(SpdyStream stream) {

        int streamId = stream.getStreamId();
        int sendWindow = Math.min(sessionSendWindow, stream.getSendWindow());

        while (stream.hasPendingData()) {
            assert(!stream.isClosedLocally());
            if (sendWindow == 0) {
                // TODO: measure flow control delay here
                // stream.markBlocked();
                return;
            }
            // stream.markUnblocked();

            ByteBuffer data;
            try {
                data = stream.readData(sendWindow);
            } catch (IOException e) {
                sendRstStream(streamId, SPDY_STREAM_INTERNAL_ERROR);
                activeStreams.remove(stream);
                stream.close(e);
                return;
            }

            int bytesSent = data.remaining();
            boolean last = !stream.hasPendingData();
            if (bytesSent > 0 || last) {
                WriteLogger logger = new WriteLogger(
                    "sent DATA (%d)\n--> Stream-ID = " + streamId + "\n--> Last = " + last);
                socket.write(frameEncoder.encodeDataFrame(streamId, last, data))
                    .addListener(logger);

                sessionSendWindow -= bytesSent;
                stream.reduceSendWindow(bytesSent);
            }

            if (last) stream.closeLocally();
        }
    }