in src/main/java/com/twitter/whiskey/net/SpdySession.java [149:181]
public void queue(RequestOperation operation) {
final SpdyStream stream = SpdyStream.newStream(operation);
final int streamId = nextStreamId;
nextStreamId += 2;
stream.open(streamId, initialSendWindow, configuration.getStreamReceiveWindow());
activeStreams.add(stream);
// TODO: implement via interrupts to avoid unnecessary calls
operation.addListener(new Listener<Response>() {
@Override
public void onComplete(Response result) {}
@Override
public void onError(Throwable throwable) {
if (activeStreams.contains(stream)) {
activeStreams.remove(stream);
sendRstStream(streamId, SPDY_STREAM_CANCEL);
}
}
@Override
public Executor getExecutor() {
return RunLoop.instance();
}
});
boolean hasBody = stream.hasPendingData();
sendSynStream(
streamId, stream.getPriority(), !hasBody, stream.getCanonicalHeaders());
if (hasBody) {
sendData(stream);
}
}