@Override protected void handleSuccess(HttpServletRequest request, HttpServletResponse response, UpgradeInfo upgradeInfo, TyrusUpgradeResponse upgradeResponse) throws IOException, ServletException { TyrusHttpUpgradeHandler handler = request.upgrade(TyrusHttpUpgradeHandler.class); Writer servletWriter = newServletWriter(handler); handler.preInit(upgradeInfo, servletWriter, request.getUserPrincipal() != null); response.setStatus(upgradeResponse.getStatus()); upgradeResponse.getHeaders().forEach((key, value) -> response.addHeader(key, Utils.getHeaderFromList(value))); response.flushBuffer(); }
/** * Get typed property from generic property map. * * @param properties property map. * @param key key of value to be retrieved. * @param type type of value to be retrieved. * @param <T> type of value to be retrieved. * @return typed value or {@code null} if property is not set or value is not assignable. */ public static <T> T getProperty(Map<String, Object> properties, String key, Class<T> type) { return getProperty(properties, key, type, null); }
AuthConfig authConfig = Utils.getProperty(properties, ClientProperties.AUTH_CONFIG, AuthConfig.class, AuthConfig.Builder.create().build()); .WWW_AUTHENTICATE); if (authHeader != null) { wwwAuthenticateHeader = Utils.getHeaderFromList(authHeader);
requestContext.getHeaders().put(name, Utils.parseHeaderValue( headerValues.nextElement().trim())); } else { values.addAll(Utils.parseHeaderValue(headerValues.nextElement().trim())); httpServletResponse.addHeader(entry.getKey(), Utils.getHeaderFromList(entry.getValue()));
final List<String> locationHeader = upgradeResponse.getHeaders().get(UpgradeResponse.LOCATION); if (locationHeader != null) { locationString = Utils.getHeaderFromList(locationHeader); scheme = "wss"; int port = Utils.getWsPort(location, scheme); location = new URI(scheme, location.getUserInfo(), location.getHost(), port, location .getPath(), location.getQuery(), location.getFragment());
+ "response: \n" + Utils.stringifyUpgradeResponse(upgradeResponse)); } else { if (logUpgradeMessages) { debugContext.appendStandardOutputMessage(DebugContext.Type.MESSAGE_IN, "Received handshake response: " + "\n" + Utils.stringifyUpgradeResponse(upgradeResponse)); .get(UpgradeResponse.RETRY_AFTER); if (retryAfterHeader != null) { retryAfterString = Utils.getHeaderFromList(retryAfterHeader); try { Date date = Utils.parseHttpDate(retryAfterString); delay = (date.getTime() - System.currentTimeMillis()) / 1000; } catch (ParseException e) {
/** * Get port from provided {@link URI}. * <p> * Expected schemes are {@code "ws"} and {@code "wss"} and this method will return {@code 80} or * {@code 443} when the port is not explicitly set in the provided {@link URI}. * * @param uri provided uri. * @return port number which should be used for creating connections/etc. */ public static int getWsPort(URI uri) { return getWsPort(uri, uri.getScheme()); }
@Override public void sendBinary(ByteBuffer data, SendHandler handler) { checkNotNull(data, "data"); checkNotNull(handler, "handler"); clusterContext.sendBinary(sessionId, Utils.getRemainingArray(data), handler); }
TyrusUpgradeResponse parseUpgradeResponse() throws ParseException { String response = bufferToString(); String[] tokens = response.split(LINE_SEPARATOR); TyrusUpgradeResponse tyrusUpgradeResponse = new TyrusUpgradeResponse(); parseFirstLine(tokens, tyrusUpgradeResponse); List<String> lines = new LinkedList<>(); lines.addAll(Arrays.asList(tokens).subList(1, tokens.length)); Map<String, String> headers = parseHeaders(lines); for (Map.Entry<String, String> entry : headers.entrySet()) { final List<String> values = tyrusUpgradeResponse.getHeaders().get(entry.getKey()); if (values == null) { tyrusUpgradeResponse.getHeaders().put(entry.getKey(), Utils.parseHeaderValue(entry.getValue())); } else { values.addAll(Utils.parseHeaderValue(entry.getValue())); } } return tyrusUpgradeResponse; }
private String bufferToString() { byte[] bytes = Utils.getRemainingArray(buffer); String str; try { str = new String(bytes, ENCODING); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Unsupported encoding" + ENCODING, e); } return str; }
void append(ByteBuffer b) { if (buffer == null) { buffer = ByteBuffer.allocate(b.remaining()); buffer.flip(); } int newSize = buffer.limit() + b.remaining(); buffer = Utils.appendBuffers(buffer, b, newSize, 50); } }
"Received handshake request:\n" + Utils.stringifyUpgradeRequest(request)); debugContext.appendLogMessage(LOGGER, Level.FINE, DebugContext.Type.MESSAGE_OUT, "Sending handshake response:\n" + Utils.stringifyUpgradeResponse(response)); debugContext.appendLogMessage(LOGGER, Level.FINE, DebugContext.Type.MESSAGE_OUT, "Sending handshake response:\n" + Utils.stringifyUpgradeResponse(response) + "\n");
private void logUpgradeRequest(UpgradeRequest upgradeRequest) { if (LOGGER.isLoggable(Level.FINE)) { debugContext.appendLogMessage(LOGGER, Level.FINE, DebugContext.Type.MESSAGE_OUT, "Sending handshake " + "request:\n" + Utils.stringifyUpgradeRequest(upgradeRequest)); } else { if (logUpgradeMessages) { debugContext.appendStandardOutputMessage(DebugContext.Type.MESSAGE_OUT, "Sending handshake " + "request:\n" + Utils.stringifyUpgradeRequest(upgradeRequest)); } } }
/** * Get typed property from generic property map. * * @param properties property map. * @param key key of value to be retrieved. * @param type type of value to be retrieved. * @param <T> type of value to be retrieved. * @return typed value or {@code null} if property is not set or value is not assignable. */ public static <T> T getProperty(Map<String, Object> properties, String key, Class<T> type) { return getProperty(properties, key, type, null); }
AuthConfig authConfig = Utils.getProperty(properties, ClientProperties.AUTH_CONFIG, AuthConfig.class, AuthConfig.Builder.create().build()); .WWW_AUTHENTICATE); if (authHeader != null) { wwwAuthenticateHeader = Utils.getHeaderFromList(authHeader);
final List<String> locationHeader = upgradeResponse.getHeaders().get(UpgradeResponse.LOCATION); if (locationHeader != null) { locationString = Utils.getHeaderFromList(locationHeader); scheme = "wss"; int port = Utils.getWsPort(location, scheme); location = new URI(scheme, location.getUserInfo(), location.getHost(), port, location .getPath(), location.getQuery(), location.getFragment());
+ "response: \n" + Utils.stringifyUpgradeResponse(upgradeResponse)); } else { if (logUpgradeMessages) { debugContext.appendStandardOutputMessage(DebugContext.Type.MESSAGE_IN, "Received handshake response: " + "\n" + Utils.stringifyUpgradeResponse(upgradeResponse)); .get(UpgradeResponse.RETRY_AFTER); if (retryAfterHeader != null) { retryAfterString = Utils.getHeaderFromList(retryAfterHeader); try { Date date = Utils.parseHttpDate(retryAfterString); delay = (date.getTime() - System.currentTimeMillis()) / 1000; } catch (ParseException e) {
/** * Get port from provided {@link URI}. * <p> * Expected schemes are {@code "ws"} and {@code "wss"} and this method will return {@code 80} or * {@code 443} when the port is not explicitly set in the provided {@link URI}. * * @param uri provided uri. * @return port number which should be used for creating connections/etc. */ public static int getWsPort(URI uri) { return getWsPort(uri, uri.getScheme()); }
@Override public void sendBinary(ByteBuffer data, SendHandler handler) { checkNotNull(data, "data"); checkNotNull(handler, "handler"); clusterContext.sendBinary(sessionId, Utils.getRemainingArray(data), handler); }
private static UpgradeResponse getUpgradeResponse(HttpResponsePacket httpResponsePacket) { TyrusUpgradeResponse tyrusUpgradeResponse = new TyrusUpgradeResponse(); for (String name : httpResponsePacket.getHeaders().names()) { for (String headerValue : httpResponsePacket.getHeaders().values(name)) { final List<String> values = tyrusUpgradeResponse.getHeaders().get(name); if (values == null) { tyrusUpgradeResponse.getHeaders().put(name, Utils.parseHeaderValue(headerValue.trim())); } else { values.addAll(Utils.parseHeaderValue(headerValue.trim())); } } } tyrusUpgradeResponse.setStatus(httpResponsePacket.getStatus()); return tyrusUpgradeResponse; }