private static void earlyBlock2Negotiation(final Exchange exchange, final Request request) { // Call this method when a request has completely arrived (might have // been sent in one piece without blockwise). BlockOption block2 = request.getOptions().getBlock2(); if (block2 != null) { BlockwiseStatus status2 = new BlockwiseStatus(request.getOptions().getContentFormat(), block2.getNum(), block2.getSzx()); LOGGER.log(Level.FINE, "Request with early block negotiation {0}. Create and set new Block2 status: {1}", new Object[]{block2, status2}); exchange.setResponseBlockStatus(status2); } }
private BlockwiseStatus findResponseBlockStatus(final Exchange exchange, final Response response) { BlockwiseStatus status = exchange.getResponseBlockStatus(); if (status == null) { status = new BlockwiseStatus(response.getOptions().getContentFormat()); status.setCurrentSzx( computeSZX(preferred_block_size) ); status.setFirst(response); exchange.setResponseBlockStatus(status); LOGGER.finer("There is no blockwise status yet. Create and set new Block2 status: "+status); } else { LOGGER.finer("Current Block2 status: "+status); } // sets a timeout to complete exchange prepareBlockCleanup(exchange); return status; }
private void earlyBlock2Negotiation(final Exchange exchange, final Request request) { // Call this method when a request has completely arrived (might have // been sent in one piece without blockwise). if (request.getOptions().hasBlock2()) { BlockOption block2 = request.getOptions().getBlock2(); BlockwiseStatus status2 = new BlockwiseStatus(request.getOptions().getContentFormat(), block2.getNum(), block2.getSzx()); LOGGER.fine("Request with early block negotiation "+block2+". Create and set new Block2 status: "+status2); exchange.setResponseBlockStatus(status2); } }
exchange.setResponseBlockStatus(null); exchange.setBlockCleanupHandle(null); } else {
private BlockwiseStatus findResponseBlockStatus(final Exchange exchange, final Response response) { BlockwiseStatus status = exchange.getResponseBlockStatus(); if (status == null) { if (exchange.isOfLocalOrigin()) { // we are receiving a large body in response to a request originating locally // we need to be prepared to buffer up to MAX_RESOURCE_BODY_SIZE bytes int bufferSize = maxResourceBodySize; if (response.getOptions().hasBlock2() && response.getOptions().hasSize2()) { // use size indication for allocating buffer bufferSize = response.getOptions().getSize2(); } status = new BlockwiseStatus(bufferSize, response.getOptions().getContentFormat()); } else { // we are sending out a large body in response to a request from a peer // we do not need to buffer and assemble anything status = new BlockwiseStatus(0, response.getOptions().getContentFormat()); } status.setCurrentSzx(computeSZX(preferredBlockSize)); status.setFirst(response); exchange.setResponseBlockStatus(status); LOGGER.log(Level.FINER, "There is no blockwise status yet. Create and set new Block2 status: {0}", status); } else { LOGGER.log(Level.FINER, "Current Block2 status: {0}", status); } // sets a timeout to complete exchange prepareBlockCleanup(exchange); return status; }
exchange.setResponseBlockStatus(null); exchange.setBlockCleanupHandle(null); } else {
exchange.setResponseBlockStatus(null); exchange.setBlockCleanupHandle(null); } else {
@Override public void sendRequest(final Exchange exchange, final Request request) { BlockOption block2 = request.getOptions().getBlock2(); if (block2 != null && block2.getNum() > 0) { // This is the case if the user has explicitly added a block option // for random access. // Note: We do not regard it as random access when the block num is // 0. This is because the user might just want to do early block // size negotiation but actually wants to receive all blocks. LOGGER.fine("request contains block2 option, creating random-access blockwise status"); BlockwiseStatus status = new BlockwiseStatus(getSizeForSzx(block2.getSzx()), request.getOptions().getContentFormat()); status.setCurrentSzx(block2.getSzx()); status.setCurrentNum(block2.getNum()); status.setRandomAccess(true); exchange.setResponseBlockStatus(status); lower().sendRequest(exchange, request); } else if (requiresBlockwise(request)) { // This must be a large POST or PUT request startBlockwiseUpload(exchange, request); } else { // no blockwise transfer required exchange.setCurrentRequest(request); lower().sendRequest(exchange, request); } }
@Override public void sendRequest(final Exchange exchange, final Request request) { if (request.getOptions().hasBlock2() && request.getOptions().getBlock2().getNum() > 0) { // This is the case if the user has explicitly added a block option // for random access. // Note: We do not regard it as random access when the block num is // 0. This is because the user might just want to do early block // size negotiation but actually wants to receive all blocks. LOGGER.fine("Request carries explicit defined block2 option: create random access blockwise status"); BlockwiseStatus status = new BlockwiseStatus(request.getOptions().getContentFormat()); BlockOption block2 = request.getOptions().getBlock2(); status.setCurrentSzx(block2.getSzx()); status.setCurrentNum(block2.getNum()); status.setRandomAccess(true); exchange.setResponseBlockStatus(status); super.sendRequest(exchange, request); } else if (requiresBlockwise(request)) { // This must be a large POST or PUT request LOGGER.fine("Request payload "+request.getPayloadSize()+"/"+max_message_size+" requires Blockwise"); BlockwiseStatus status = findRequestBlockStatus(exchange, request); Request block = getNextRequestBlock(request, status); exchange.setRequestBlockStatus(status); exchange.setCurrentRequest(block); super.sendRequest(exchange, block); } else { exchange.setCurrentRequest(request); super.sendRequest(exchange, request); } }
exchange.setResponseBlockStatus(null); exchange.setResponseBlockStatus(null);
exchange.setResponseBlockStatus(null); exchange.setResponseBlockStatus(null);
exchange.setResponseBlockStatus(null); exchange.setBlockCleanupHandle(null); } else {