protected String constructStatusAndHeaders(AtmosphereResponse response, int contentLength) { StringBuffer b = new StringBuffer("HTTP/1.1") .append(" ") .append(response.getStatus()) .append(" ") .append(response.getStatusMessage()) .append(CRLF); Map<String, String> headers = response.headers(); String contentType = response.getContentType(); b.append("Content-Type").append(":").append(headers.get("Content-Type") == null ? contentType : headers.get("Content-Type")).append(CRLF); if (contentLength != -1) { b.append("Content-Length").append(":").append(contentLength).append(CRLF); } for (String s : headers.keySet()) { if (!s.equalsIgnoreCase("Content-Type")) { b.append(s).append(":").append(headers.get(s)).append(CRLF); } } b.append(CRLF); return b.toString(); }
@Override public AsyncIOWriter write(AtmosphereResponse response, byte[] data, int offset, int length) throws IOException { if (doneProcessing.get()) { throw Utils.ioExceptionForChannel(channel, response.uuid()); } boolean transform = filters.size() > 0 && response.getStatus() < 400; if (transform) { data = transform(response, data, offset, length); offset = 0; length = data.length; } logger.trace("About to write to {}", channel); if (channel.isOpen()) { asyncWrite(response, data, offset, length); } else { logger.trace("Trying to write on a closed channel {}", channel); throw new IOException("Channel closed"); } return this; }
protected String constructStatusAndHeaders(AtmosphereResponse response, int contentLength) { StringBuffer b = new StringBuffer("HTTP/1.1") .append(" ") .append(response.getStatus()) .append(" ") .append(response.getStatusMessage()) .append(CRLF); Map<String, String> headers = response.headers(); String contentType = response.getContentType(); b.append("Content-Type").append(":").append(headers.get("Content-Type") == null ? contentType : headers.get("Content-Type")).append(CRLF); if (contentLength != -1) { b.append("Content-Length").append(":").append(contentLength).append(CRLF); } for (String s : headers.keySet()) { if (!s.equalsIgnoreCase("Content-Type")) { b.append(s).append(":").append(headers.get(s)).append(CRLF); } } b.append(CRLF); return b.toString(); }
@Override public AsyncIOWriter write(AtmosphereResponse response, byte[] data, int offset, int length) throws IOException { if (doneProcessing.get()) { throw Utils.ioExceptionForChannel(channel, response.uuid()); } boolean transform = filters.size() > 0 && response.getStatus() < 400; if (transform) { data = transform(response, data, offset, length); offset = 0; length = data.length; } logger.trace("About to write to {}", channel); if (channel.isOpen()) { asyncWrite(response, data, offset, length); } else { logger.trace("Trying to write on a closed channel {}", channel); throw new IOException("Channel closed"); } return this; }
@Override public byte[] error(AtmosphereResponse response, int statusCode, String reasonPhrase) { Request swaggerSocketRequest = lookupRequest(response.request()); if (swaggerSocketRequest == null) { logger.debug("Handshake mapping (could be expected) {} : {}", response.getStatus(), response.getStatusMessage()); return new byte[0]; } logger.debug("Unexpected status code {} : {}", response.getStatus(), response.getStatusMessage()); StatusMessage statusMessage = new StatusMessage.Builder() .status(new StatusMessage.Status(response.getStatus(), response.getStatusMessage())) .identity(swaggerSocketRequest.getUuid()).build(); try { return mapper.writeValueAsBytes(statusMessage); } catch (IOException e) { throw new RuntimeException(e); } } }
void send(boolean complete) throws IOException { if (out == null) { return; } if (response.getStatus() >= 400) { int i = response.getStatus(); response.setStatus(200); response.addIntHeader(WebSocketUtils.SC_KEY, i); } out.flush(); out.lockOutputStream(); out.writeCacheTo(delegate); delegate.flush(); out.close(); out = null; }
private Builder createResponseBuilder(AtmosphereResponse res, String message) { Request swaggerSocketRequest = lookupRequest(res.request()); Response.Builder builder = new Response.Builder(); builder.status(res.getStatus(), res.getStatusMessage()); // only include some headers and not all headers from the response if (message != null && message.length() > 0) { builder.body(message).header(new Header("Content-Type", res.getContentType())); } // transfer those headers that match included and does not match excluded for (Map.Entry<String, String> hv : res.headers().entrySet()) { if (!"Content-Type".equalsIgnoreCase(hv.getKey()) && includedheaders != null && includedheaders.matcher(hv.getKey()).matches() && !(excludedheaders != null && excludedheaders.matcher(hv.getKey()).matches())) { builder.header(new Header(hv.getKey(), hv.getValue())); } } builder.uuid(swaggerSocketRequest.getUuid()).path(swaggerSocketRequest.getPath()); if (res instanceof WrappedAtmosphereResponse && ((WrappedAtmosphereResponse)res).isLast()) { builder.last(true); } return builder; }
void send(boolean complete) throws IOException { if (out == null) { return; } if (response.getStatus() >= 400) { int i = response.getStatus(); response.setStatus(200); response.addIntHeader(WebSocketUtils.SC_KEY, i); } out.flush(); out.lockOutputStream(); out.writeCacheTo(delegate); delegate.flush(); out.close(); out = null; }
/** * {@inheritDoc} */ @Override public void onError(WebSocket webSocket, WebSocketProcessor.WebSocketException t) { if (t.response() != null) { Request swaggerSocketRequest = Request.class.cast(t.response().request().getAttribute(String.valueOf(t.response().request().hashCode()))); if (swaggerSocketRequest == null) { logger.debug("Handshake mapping (could be expected) {} : {}", t.response().getStatus(), t.response().getStatusMessage()); return; } logger.debug("Unexpected status code {} : {}", t.response().getStatus(), t.response().getStatusMessage()); StatusMessage statusMessage = new StatusMessage.Builder() .status(new StatusMessage.Status(t.response().getStatus(), t.response().getStatusMessage())) .identity(swaggerSocketRequest.getUuid()).build(); try { byte[] b = mapper.writeValueAsBytes(statusMessage); webSocket.write(t.response(), b, 0, b.length); } catch (IOException e) { throw new RuntimeException(e); } } }
sc = Integer.toString(response.getStatus());
.status(res.getStatus(), res.getStatusMessage());
sc = Integer.toString(response.getStatus());
@Override public AsyncIOWriter write(final AtmosphereResponse r, byte[] data, int offset, int length) throws IOException { logger.trace("Writing {} with transport {}", r.resource().uuid(), r.resource().transport()); boolean transform = filters.size() > 0 && r.getStatus() < 400; if (transform) { data = transform(r, data, offset, length); offset = 0; length = data.length; } pendingWrite.incrementAndGet(); if (!headerWritten) { out.setChunked(true); constructStatusAndHeaders(r, out); headerWritten = true; } String sdata = new String(data, offset, length, r.getCharacterEncoding()); out.write(sdata); lastWrite = System.currentTimeMillis(); AtmosphereResourceImpl impl = AtmosphereResourceImpl.class.cast(r.resource()); if (sdata.trim().length() > 0 && impl.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) { close(r); } return this; }
@Override public AsyncIOWriter write(final AtmosphereResponse r, byte[] data, int offset, int length) throws IOException { logger.trace("Writing {} with transport {}", r.resource().uuid(), r.resource().transport()); boolean transform = filters.size() > 0 && r.getStatus() < 400; if (transform) { data = transform(r, data, offset, length); offset = 0; length = data.length; } pendingWrite.incrementAndGet(); out.write(new String(data, offset, length, r.getCharacterEncoding())); byteWritten = true; lastWrite = System.currentTimeMillis(); if (resumeOnBroadcast) { out.close(); _close(r.request()); } return this; }