List of usage examples for io.netty.util.internal AppendableCharSequence length
@Override public int length()
From source file:io.maelstorm.server.RequestHandler.java
License:Open Source License
protected String getEndPoint(final AppendableCharSequence uri) { if (uri.length() < 1) { throw new DefectiveRequest("Empty query"); }/*from w w w . j a va 2s . co m*/ if (uri.charAt(0) != '/') { throw new DefectiveRequest("Query doesn't start with a slash: <code>" + uri + "</code>"); } int questionmark = -1; int slash = -1; boolean foundAll = false; for (int i = 1; i < uri.length() && !foundAll; i++) { switch (uri.charAt(i)) { case '?': questionmark = i; break; case '/': slash = i; break; default: if (i > 1 && (questionmark > 1 || slash > 1)) { foundAll = true; } break; } } int pos = uri.length(); // Will be set to where the first path segment ends. if (questionmark > 0) { if (slash > 0) { pos = (questionmark < slash ? questionmark // Request: /foo?bar/quux : slash); // Request: /foo/bar?quux } else { pos = questionmark; // Request: /foo?bar } } else { pos = (slash > 0 ? slash // Request: /foo/bar : uri.length()); // Request: /foo } return uri.substring(1, pos); }
From source file:io.maelstorm.server.statistics.StatisticsEndPoint.java
License:Open Source License
public Deferred<FullHttpResponse> process(ChannelHandlerContext context, AggregatedFullHttpRequest request) { AppendableCharSequence uri = request.geturi(); StringBuilder buffer = new StringBuilder(); Deferred<FullHttpResponse> deferred = new Deferred<FullHttpResponse>(); FullHttpResponse response;/*from w w w. jav a 2 s . c om*/ if (uri.length() == 6) {// uri = "/stats" for (Entry<String, ICollector> entry : statistics.entrySet()) { buffer.append(entry.getKey()).append("<br>").append("<table>") .append(mapToBuffer(entry.getValue().getStatistics(), entry.getValue().isDisplayed())) .append("</table>").append("<br>").append("<br>"); } response = new DefaultFullHttpResponse(request.getProtocolVersion(), HttpResponseStatus.OK, ResponseUtils.makePage(null, "Stats", "Stats", buffer)); } else { ArrayList<Integer> splitterLocations = new ArrayList<Integer>(3); for (int i = 6; i < uri.length(); i++) { if (splitter == uri.charAt(i)) { splitterLocations.add(i); } } String key1; switch (splitterLocations.size()) { case 1: key1 = uri.substring(splitterLocations.get(0) + 1, uri.length()); buffer.append(key1).append("<br>").append("<table>") .append(mapToBuffer(statistics.get(key1).getStatistics(), true)).append("</table>") .append("<br>").append("<br>"); response = new DefaultFullHttpResponse(request.getProtocolVersion(), HttpResponseStatus.OK, ResponseUtils.makePage(null, "Stats", "Stats", buffer)); break; case 2: key1 = uri.substring(splitterLocations.get(0) + 1, splitterLocations.get(1)); String key2 = uri.substring(splitterLocations.get(1) + 1, uri.length()); buffer.append(statistics.get(key1).getStatistics().get(key2)); response = new DefaultFullHttpResponse(request.getProtocolVersion(), HttpResponseStatus.OK, ResponseUtils.getChannelBuffer(buffer)); break; default: response = new DefaultFullHttpResponse(request.getProtocolVersion(), HttpResponseStatus.NOT_FOUND); } } deferred.callback(response); return deferred; }
From source file:openbns.commons.net.codec.sts.HttpObjectDecoder.java
License:Apache License
private State readHeaders(ByteBuf buffer) { headerSize = 0;// w ww .jav a2s. c o m final StsMessage message = this.message; final StsHeaders headers = message.headers(); AppendableCharSequence line = readHeader(buffer); String name = null; String value = null; if (line.length() > 0) { headers.clear(); do { char firstChar = line.charAt(0); if (name != null && (firstChar == ' ' || firstChar == '\t')) { value = value + ' ' + line.toString().trim(); } else { if (name != null) { headers.add(name, value); } String[] header = splitHeader(line); name = header[0]; value = header[1]; } line = readHeader(buffer); } while (line.length() > 0); // Add the last header. if (name != null) { headers.add(name, value); } } State nextState; if (isContentAlwaysEmpty(message)) { nextState = State.SKIP_CONTROL_CHARS; } else if (contentLength() >= 0) { nextState = State.READ_FIXED_LENGTH_CONTENT; } else { nextState = State.READ_VARIABLE_LENGTH_CONTENT; } return nextState; }
From source file:openbns.commons.net.codec.sts.HttpObjectDecoder.java
License:Apache License
private LastStsContent readTrailingHeaders(ByteBuf buffer) { headerSize = 0;//from w w w . j ava 2s .c om AppendableCharSequence line = readHeader(buffer); String lastHeader = null; if (line.length() > 0) { LastStsContent trailer = new DefaultLastStsContent(Unpooled.EMPTY_BUFFER, validateHeaders); do { char firstChar = line.charAt(0); if (lastHeader != null && (firstChar == ' ' || firstChar == '\t')) { List<String> current = trailer.trailingHeaders().getAll(lastHeader); if (!current.isEmpty()) { int lastPos = current.size() - 1; String newString = current.get(lastPos) + line.toString().trim(); current.set(lastPos, newString); } else { // Content-Length, Transfer-Encoding, or Trailer } } else { String[] header = splitHeader(line); String name = header[0]; if (!StsHeaders.equalsIgnoreCase(name, StsHeaders.Names.CONTENT_LENGTH)) { trailer.trailingHeaders().add(name, header[1]); } lastHeader = name; } line = readHeader(buffer); } while (line.length() > 0); return trailer; } return LastStsContent.EMPTY_LAST_CONTENT; }
From source file:openbns.commons.net.codec.sts.HttpObjectDecoder.java
License:Apache License
private static String[] splitHeader(AppendableCharSequence sb) { final int length = sb.length(); int nameStart; int nameEnd;/*w ww . j ava 2 s . co m*/ int colonEnd; int valueStart; int valueEnd; nameStart = findNonWhitespace(sb, 0); for (nameEnd = nameStart; nameEnd < length; nameEnd++) { char ch = sb.charAt(nameEnd); if (ch == ':' || Character.isWhitespace(ch)) { break; } } for (colonEnd = nameEnd; colonEnd < length; colonEnd++) { if (sb.charAt(colonEnd) == ':') { colonEnd++; break; } } valueStart = findNonWhitespace(sb, colonEnd); if (valueStart == length) { return new String[] { sb.substring(nameStart, nameEnd), "" }; } valueEnd = findEndOfString(sb); return new String[] { sb.substring(nameStart, nameEnd), sb.substring(valueStart, valueEnd) }; }