private BlockwiseStatus findRequestBlockStatus(final Exchange exchange, final Request request) { BlockwiseStatus status = exchange.getRequestBlockStatus(); if (status == null) { status = new BlockwiseStatus(request.getOptions().getContentFormat()); status.setFirst(request); status.setCurrentSzx( computeSZX(preferred_block_size) ); exchange.setRequestBlockStatus(status); LOGGER.finer("There is no assembler status yet. Create and set new Block1 status: "+status); } else { LOGGER.finer("Current Block1 status: "+status); } // sets a timeout to complete exchange prepareBlockCleanup(exchange); return status; }
private void startBlockwiseUpload(final Exchange exchange, final Request request) { BlockwiseStatus status = findRequestBlockStatus(exchange, request); final Request block = getNextRequestBlock(request, status); // indicate overall body size to peer block.getOptions().setSize1(request.getPayloadSize()); exchange.setRequestBlockStatus(status); exchange.setCurrentRequest(block); lower().sendRequest(exchange, block); }
private BlockwiseStatus findRequestBlockStatus(final Exchange exchange, final Request request) { BlockwiseStatus status = exchange.getRequestBlockStatus(); if (status == null) { if (exchange.isOfLocalOrigin()) { // we are sending a large body out in a POST/GET to a peer // we only need to buffer one block each status = new BlockwiseStatus(preferredBlockSize, request.getOptions().getContentFormat()); } else { // we are receiving a large body in a POST/GET from a peer // we need to be prepared to buffer up to MAX_RESOURCE_BODY_SIZE bytes int bufferSize = maxResourceBodySize; if (request.getOptions().hasBlock1() && request.getOptions().hasSize1()) { // use size indication for allocating buffer bufferSize = request.getOptions().getSize1(); } status = new BlockwiseStatus(bufferSize, request.getOptions().getContentFormat()); } status.setFirst(request); status.setCurrentSzx(computeSZX(preferredBlockSize)); exchange.setRequestBlockStatus(status); LOGGER.log(Level.FINER, "There is no assembler status yet. Create and set new Block1 status: {0}", status); } else { LOGGER.log(Level.FINER, "Current Block1 status: {0}", status); } // sets a timeout to complete exchange prepareBlockCleanup(exchange); return status; }
@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.setRequestBlockStatus(null);