/** * Tests conditional ranges requests. * * @throws Exception */ public void testConditionalRanges() throws Exception { Client client = new Client(Protocol.HTTP); // Test partial Get. Request request = new Request(Method.GET, "http://localhost:" + TEST_PORT + "/testGet"); Response response = client.handle(request); Tag entityTag = response.getEntity().getTag(); request.setRanges(Arrays.asList(new Range(1, Range.SIZE_MAX))); request.getConditions().setRangeTag(entityTag); response = client.handle(request); assertEquals(Status.SUCCESS_PARTIAL_CONTENT, response.getStatus()); assertEquals("234567890", response.getEntity().getText()); assertEquals(10, response.getEntity().getSize()); assertEquals(9, response.getEntity().getAvailableSize()); assertEquals(1, response.getEntity().getRange().getIndex()); assertEquals(9, response.getEntity().getRange().getSize()); entityTag = new Tag(entityTag.getName() + "-test"); request.setRanges(Arrays.asList(new Range(1, Range.SIZE_MAX))); request.getConditions().setRangeTag(entityTag); response = client.handle(request); assertEquals(Status.SUCCESS_OK, response.getStatus()); assertEquals("1234567890", response.getEntity().getText()); client.stop(); }
@Override public Tag getSipIfMatch() { if (!sipIfMatchAdded) { String header = (getHeaders() == null) ? null : getHeaders().getValues(SipConstants.HEADER_SIP_IF_MATCH); if (header != null) { try { setSipIfMatch(Tag.parse(header)); } catch (Exception e) { Context.getCurrentLogger().info(e.getMessage()); } } sipIfMatchAdded = true; } return super.getSipIfMatch(); }
/** * Returns the condition data applying to this call. * * @return The condition data applying to this call. */ @Override public Conditions getConditions() { Conditions result = super.getConditions(); if (!this.conditionAdded) { if (getHeaders() != null) { // Extract the header values String ifMatchHeader = getHeaders().getValues(HeaderConstants.HEADER_IF_MATCH); String ifNoneMatchHeader = getHeaders().getValues(HeaderConstants.HEADER_IF_NONE_MATCH); Date ifModifiedSince = null; Date ifUnmodifiedSince = null; String ifRangeHeader = getHeaders().getFirstValue(HeaderConstants.HEADER_IF_RANGE, true); for (Header header : getHeaders()) { if (header.getName().equalsIgnoreCase(HeaderConstants.HEADER_IF_MODIFIED_SINCE)) { ifModifiedSince = HeaderReader.readDate(header.getValue(), false); } else if (header .getName() .equalsIgnoreCase(HeaderConstants.HEADER_IF_UNMODIFIED_SINCE)) { ifUnmodifiedSince = HeaderReader.readDate(header.getValue(), false); } } // Set the If-Modified-Since date if ((ifModifiedSince != null) && (ifModifiedSince.getTime() != -1)) { result.setModifiedSince(ifModifiedSince); } // Set the If-Unmodified-Since date if ((ifUnmodifiedSince != null) && (ifUnmodifiedSince.getTime() != -1)) { result.setUnmodifiedSince(ifUnmodifiedSince); } // Set the If-Match tags List<Tag> match = null; Tag current = null; if (ifMatchHeader != null) { try { HeaderReader<Object> hr = new HeaderReader<Object>(ifMatchHeader); String value = hr.readRawValue(); while (value != null) { current = Tag.parse(value); // Is it the first tag? if (match == null) { match = new ArrayList<Tag>(); result.setMatch(match); } // Add the new tag match.add(current); // Read the next token value = hr.readRawValue(); } } catch (Exception e) { this.context .getLogger() .log(Level.INFO, "Unable to process the if-match header: " + ifMatchHeader); } } // Set the If-None-Match tags List<Tag> noneMatch = null; if (ifNoneMatchHeader != null) { try { HeaderReader<Object> hr = new HeaderReader<Object>(ifNoneMatchHeader); String value = hr.readRawValue(); while (value != null) { current = Tag.parse(value); // Is it the first tag? if (noneMatch == null) { noneMatch = new ArrayList<Tag>(); result.setNoneMatch(noneMatch); } noneMatch.add(current); // Read the next token value = hr.readRawValue(); } } catch (Exception e) { this.context .getLogger() .log( Level.INFO, "Unable to process the if-none-match header: " + ifNoneMatchHeader); } } if (ifRangeHeader != null && ifRangeHeader.length() > 0) { Tag tag = Tag.parse(ifRangeHeader); if (tag != null) { result.setRangeTag(tag); } else { Date date = HeaderReader.readDate(ifRangeHeader, false); result.setRangeDate(date); } } } this.conditionAdded = true; } return result; }