@Override public CompletableFuture<Void> packetUnencrypted(ByteBuffer out) { decryptedData = dataGen.wrapByteBuffer(out); return CompletableFuture.completedFuture(null); }
@Override public CompletableFuture<Void> packetEncrypted(ByteBuffer engineToSocketData) { if(encryptedData != null) { DataWrapper newBuf = dataGen.wrapByteBuffer(engineToSocketData); encryptedData = dataGen.chainDataWrappers(encryptedData, newBuf); return CompletableFuture.completedFuture(null); } encryptedData = dataGen.wrapByteBuffer(engineToSocketData); return CompletableFuture.completedFuture(null); }
@Override public CompletableFuture<Void> sendEncryptedHandshakeData(ByteBuffer engineToSocketData) { if(encryptedData != null) { DataWrapper newBuf = dataGen.wrapByteBuffer(engineToSocketData); encryptedData = dataGen.chainDataWrappers(encryptedData, newBuf); return CompletableFuture.completedFuture(null); } encryptedData = dataGen.wrapByteBuffer(engineToSocketData); return CompletableFuture.completedFuture(null); }
public CompletableFuture<Void> incomingData(FrontendSocketImpl socket, ByteBuffer b) { DataWrapper wrapper = dataGen.wrapByteBuffer(b); return incomingData(socket, wrapper); }
private Memento parse(FrontendSocketImpl socket, ByteBuffer buf) { DataWrapper moreData = dataGen.wrapByteBuffer(buf); Memento state = socket.getHttp1_1ParseState(); state = httpParser.parse(state, moreData); return state; }
public void uncompressBodyAndAssertContainsString(String text) { Header header = getResponse().getHeaderLookupStruct().getHeader(KnownHeaderName.CONTENT_ENCODING); if(header == null) throw new IllegalStateException("Body is not compressed as no CONTENT_ENCODING header field exists"); else if(!"gzip".equals(header.getValue())) throw new IllegalStateException("Body has wrong compression type="+header.getValue()+" in CONTENT_ENCODING header field"); DataWrapper wrapper = getBody(); byte[] compressed = wrapper.createByteArray(); ByteArrayInputStream in = new ByteArrayInputStream(compressed); byte[] out = new byte[10000]; DataWrapper output = dataGen.emptyWrapper(); try (GZIPInputStream str = new GZIPInputStream(in)) { int read = 0; while((read = str.read(out)) > 0) { ByteBuffer buffer = ByteBuffer.wrap(out, 0, read); DataWrapper byteWrapper = dataGen.wrapByteBuffer(buffer); output = dataGen.chainDataWrappers(output, byteWrapper); out = new byte[10000]; } } catch(IOException e) { throw new RuntimeException(e); } Charset charset = extractCharset(); String bodyAsString = output.createStringFrom(0, output.getReadableSize(), charset); if(!bodyAsString.contains(text)) throw new IllegalStateException("Expected compressed body to contain='"+text+"' but body was="+bodyAsString); }
@Override public CompletableFuture<Void> incomingData(Channel channel, ByteBuffer b) { DataWrapper wrapper = wrapperGen.wrapByteBuffer(b); int bytesIn = b.remaining(); CompletableFuture<Void> future2 = tracker2.addBytesToTrack(bytesIn); memento = parser.parse(memento, wrapper); List<HttpPayload> parsedMessages = memento.getParsedMessages(); AckAggregator aggregator = new AckAggregator(parsedMessages.size(), memento.getNumBytesJustParsed(), tracker2); //AckAggregator ack = tracker.createTracker(bytesIn, parsedMessages.size(), memento.getNumBytesJustParsed()); for(HttpPayload msg : parsedMessages) { if(msg instanceof HttpData) { HttpData data = (HttpData) msg; if(data.isEndOfData()) responsesToComplete.poll(); future.thenCompose(w -> { return w.incomingData(data).handle((v, t) -> aggregator.ack(v, t)); }); } else if(msg instanceof HttpResponse) { future = processResponse((HttpResponse)msg) .handle((w, t) -> aggregator.ack(w, t)); } else throw new IllegalStateException("invalid payload received="+msg); } return future2; }
@Override public void incomingData(Channel channel, ByteBuffer b) { DataWrapper newData = Http2EngineImpl.wrapperGen.wrapByteBuffer(b); try {
private List<HttpRequest> doTheWork(Channel channel, ByteBuffer chunk) { ChannelSession session = channel.getSession(); Memento memento = (Memento) session.get("memento"); if(memento == null) { memento = parser.prepareToParse(); session.put("memento", memento); } DataWrapper dataWrapper = generator.wrapByteBuffer(chunk); Memento resultMemento = parse(memento, dataWrapper); List<HttpPayload> parsedMsgs = resultMemento.getParsedMessages(); List<HttpRequest> parsedRequests = new ArrayList<>(); for(HttpPayload msg : parsedMsgs) { if(msg.getMessageType() != HttpMessageType.REQUEST) throw new ParseException("Wrong message type="+msg.getMessageType()+" should be="+HttpMessageType.REQUEST); HttpRequest req = msg.getHttpRequest(); if(channel.isSslChannel()) req.setHttpScheme(HTTPS); parsedRequests.add(msg.getHttpRequest()); } return parsedRequests; }