private void copyData(DataWrapper body, byte[] data, int offset) { for(int i = 0; i < body.getReadableSize(); i++) { //TODO: Think about using System.arrayCopy here(what is faster?) data[offset + i] = body.readByteAt(i); } }
@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); }
private ByteBuffer translate(List<Http2Msg> frames) { DataWrapper allData = dataGen.emptyWrapper(); for(Http2Msg f : frames) { DataWrapper data = this.http2EngineImpl.marshal(f); allData = dataGen.chainDataWrappers(allData, data); } byte[] byteArray = allData.createByteArray(); return ByteBuffer.wrap(byteArray); }
public static HttpFullRequest createBadJsonRequest(KnownHttpMethod method, String url) { HttpRequest request = createBaseRequest(method, url); String json = "{ `query `cats and dogs`, `meta`: { `numResults`: 4 } }".replace("`", "\""); DataWrapper body = gen.wrapByteArray(json.getBytes()); request.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, body.getReadableSize()+"")); return new HttpFullRequest(request, body); }
@Override public UnparsedState getUnParsedState() { if(inChunkParsingMode) { return new UnparsedState(ParsingState.CHUNK, leftOverData.getReadableSize()); } else if(halfParsedMessage != null) { return new UnparsedState(ParsingState.BODY, leftOverData.getReadableSize()); } return new UnparsedState(ParsingState.HEADERS, leftOverData.getReadableSize()); }
@Override public CompletableFuture<Void> packetUnencrypted(ByteBuffer out) { decryptedData = dataGen.wrapByteBuffer(out); return CompletableFuture.completedFuture(null); }
public String getBodyAsString() { Charset charset = extractCharset(); //get charset from headers? DataWrapper body = getBody(); if(body == null) return null; return body.createStringFrom(0, body.getReadableSize(), charset); }
@Override public CompletableFuture<Void> incomingData(HttpData chunk) { DataWrapper allData = dataGen.chainDataWrappers(response.getData(), chunk.getBodyNonNull()); response.setData(allData); if(chunk.isEndOfData()) { future.complete(response); response = null; } return CompletableFuture.completedFuture(null); } }
private ByteBuffer combine(ByteBuffer cachedToProcessLaterData, ByteBuffer encryptedData) { int size = cachedToProcessLaterData.remaining()+encryptedData.remaining(); ByteBuffer nextBuffer = pool.nextBuffer(size); nextBuffer.put(cachedToProcessLaterData); nextBuffer.put(encryptedData); nextBuffer.flip(); pool.releaseBuffer(cachedToProcessLaterData); pool.releaseBuffer(encryptedData); return nextBuffer; }
@Override public DataWrapper encrypt(DataWrapper data) { ByteBuffer b = ByteBuffer.wrap(data.createByteArray()); engine.feedPlainPacket(b); DataWrapper retVal = encryptedData; encryptedData = null; return retVal; } }
public Memento prepareToParse() { MementoImpl memento = new MementoImpl(); memento.setLeftOverData(dataGen.emptyWrapper()); return memento; }
public static HttpRequest createJsonRequest(KnownHttpMethod method, String url) { HttpRequest request = createRequest(method, url); String json = "{ `query`: `cats and dogs`, `meta`: { `numResults`: 4 } }".replace("`", "\""); DataWrapper body = gen.wrapByteArray(json.getBytes()); request.setBody(body); return request; }
public static HttpFrontendManager createFrontEnd( ChannelManager chanMgr, ScheduledExecutorService timer, InjectionConfig injConfig) { BufferCreationPool pool = new BufferCreationPool(); HttpParser httpParser = HttpParserFactory.createParser(pool); return createFrontEnd(chanMgr, timer, injConfig, httpParser); }
@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 static HttpFullRequest createJsonRequest(KnownHttpMethod method, String url) { HttpRequest request = createBaseRequest(method, url); String json = "{ `query`: `cats and dogs`, `meta`: { `numResults`: 4 } }".replace("`", "\""); DataWrapper body = gen.wrapByteArray(json.getBytes()); request.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, body.getReadableSize()+"")); return new HttpFullRequest(request, body); }
@Override public void setBody(DataWrapper data) { if(data.getReadableSize() != 0) throw new IllegalArgumentException("Can't set body on HttpLastChunk according to http spec. It must be size=0"); super.setBody(data); }
public CompletableFuture<Void> incomingData(FrontendSocketImpl socket, ByteBuffer b) { DataWrapper wrapper = dataGen.wrapByteBuffer(b); return incomingData(socket, wrapper); }
public static HttpRequest createBadJsonRequest(KnownHttpMethod method, String url) { HttpRequest request = createRequest(method, url); String json = "{ `query `cats and dogs`, `meta`: { `numResults`: 4 } }".replace("`", "\""); DataWrapper body = gen.wrapByteArray(json.getBytes()); request.setBody(body); return request; }
private void readChunk(MementoImpl memento, int i) { HttpChunk chunk = createHttpChunk(memento, i); memento.setHalfParsedMessage(chunk); readInBody(memento, true); if(chunk.getBody() != null && chunk.getBody().getReadableSize() == 0) { //this is the last chunk as it is 0 size memento.setInChunkParsingMode(false); } }
private Memento parse(FrontendSocketImpl socket, ByteBuffer buf) { DataWrapper moreData = dataGen.wrapByteBuffer(buf); Memento state = socket.getHttp1_1ParseState(); state = httpParser.parse(state, moreData); return state; }