List of usage examples for io.netty.buffer ByteBuf writeBytes
public abstract ByteBuf writeBytes(ByteBuffer src);
From source file:com.book.netty5.codec.NettyMessageEncoder.java
License:Apache License
@Override protected void encode(ChannelHandlerContext ctx, NettyMessage msg, ByteBuf sendBuf) throws Exception { if (msg == null || msg.getHeader() == null) throw new Exception("The encode message is null"); sendBuf.writeInt((msg.getHeader().getCrcCode())); sendBuf.writeInt((msg.getHeader().getLength())); sendBuf.writeLong((msg.getHeader().getSessionID())); sendBuf.writeByte((msg.getHeader().getType())); sendBuf.writeByte((msg.getHeader().getPriority())); sendBuf.writeInt((msg.getHeader().getAttachment().size())); String key = null;/*from w w w.jav a 2s . c om*/ byte[] keyArray = null; Object value = null; for (Map.Entry<String, Object> param : msg.getHeader().getAttachment().entrySet()) { key = param.getKey(); keyArray = key.getBytes("UTF-8"); sendBuf.writeInt(keyArray.length); sendBuf.writeBytes(keyArray); value = param.getValue(); marshallingEncoder.encode(value, sendBuf); } key = null; keyArray = null; value = null; if (msg.getBody() != null) { marshallingEncoder.encode(msg.getBody(), sendBuf); } else { sendBuf.writeInt(0); } sendBuf.setInt(4, sendBuf.readableBytes() - 8); }
From source file:com.bosscs.spark.commons.extractor.client.codecs.ActionEncoder.java
License:Apache License
protected void encode(ChannelHandlerContext ctx, Action action, ByteBuf out) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput outObj = null;/*from w w w. j a v a 2 s . co m*/ try { outObj = new ObjectOutputStream(bos); outObj.writeObject(action); } catch (IOException e) { LOG.error(e.getMessage()); } finally { try { if (outObj != null) { outObj.close(); } } catch (IOException ex) { // ignore close exception } try { bos.close(); } catch (IOException ex) { // ignore close exception } } byte[] encodedObj = bos.toByteArray(); int dataLength = encodedObj.length; out.writeInt(dataLength); out.writeBytes(encodedObj); }
From source file:com.bosscs.spark.commons.extractor.client.codecs.ResponseEncoder.java
License:Apache License
protected void encode(ChannelHandlerContext ctx, Response response, ByteBuf out) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput outObj = null;//from w w w. ja v a 2 s .c om try { outObj = new ObjectOutputStream(bos); outObj.writeObject(response); } catch (IOException e) { LOG.error(e.getMessage()); } finally { try { if (outObj != null) { outObj.close(); } } catch (IOException ex) { // ignore close exception } try { bos.close(); } catch (IOException ex) { // ignore close exception } } byte[] encodedObj = bos.toByteArray(); int dataLength = encodedObj.length; out.writeInt(dataLength); out.writeBytes(encodedObj); }
From source file:com.buildria.mocking.builder.action.RawBodyAction.java
License:Open Source License
@Nonnull @Override// www. j a va 2 s . c o m public HttpResponse apply(@Nonnull HttpRequest req, @Nonnull HttpResponse res) { Objects.requireNonNull(req); Objects.requireNonNull(res); ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(content.length); buffer.writeBytes(content); HttpResponse r = new DefaultFullHttpResponse(res.getProtocolVersion(), res.getStatus(), buffer); for (Map.Entry<String, String> entry : res.headers()) { r.headers().add(entry.getKey(), entry.getValue()); } r.headers().remove(CONTENT_LENGTH); r.headers().add(CONTENT_LENGTH, content.length); return r; }
From source file:com.chenyang.proxy.EchoServerHandler.java
License:Apache License
@Override public void channelActive(ChannelHandlerContext ctx) throws Exception { byte[] bytes = WebUtil.bulidResponse("OK").toString().getBytes(); ByteBuf firstMessage = Unpooled.buffer(bytes.length); firstMessage.writeBytes(bytes); ctx.writeAndFlush(firstMessage);/* w w w .j a v a 2s. com*/ }
From source file:com.chiorichan.factory.EvalFactory.java
License:Mozilla Public License
public EvalFactoryResult eval(String code, EvalMetaData meta, Site site) throws EvalFactoryException { EvalFactoryResult result = new EvalFactoryResult(meta, site); if (code == null || code.isEmpty()) return result.setReason("Code Block was null or empty!"); if (meta.contentType == null) if (meta.fileName == null) meta.contentType = meta.shell; else/* w ww. ja va 2 s . c o m*/ meta.contentType = ContentTypes.getContentType(meta.fileName); meta.source = code; meta.site = site; try { if (site != null) code = runParsers(code, site); } catch (Exception e) { result.addException(new IgnorableEvalException("Exception caught while running parsers", e)); } for (PreProcessor p : preProcessors) { Set<String> handledTypes = new HashSet<String>(Arrays.asList(p.getHandledTypes())); for (String t : handledTypes) if (t.equalsIgnoreCase(meta.shell) || meta.contentType.toLowerCase().contains(t.toLowerCase()) || t.equalsIgnoreCase("all")) { try { String evaled = p.process(meta, code); if (evaled != null) { code = evaled; break; } } catch (Exception e) { result.addException( new IgnorableEvalException("Exception caught while running PreProcessor `" + p.getClass().getSimpleName() + "`", e)); } } } GroovyShellTracker tracker = getUnusedShellTracker(); GroovyShell shell = tracker.getShell(); shell.setVariable("__FILE__", meta.fileName); ByteBuf output = Unpooled.buffer(); boolean success = false; Loader.getLogger().fine("Locking GroovyShell '" + shell.toString() + "' for execution of '" + meta.fileName + "', length '" + code.length() + "'"); tracker.setInUse(true); byte[] saved = bs.toByteArray(); bs.reset(); for (Interpreter s : interpreters) { Set<String> handledTypes = new HashSet<String>(Arrays.asList(s.getHandledTypes())); for (String she : handledTypes) { if (she.equalsIgnoreCase(meta.shell) || she.equalsIgnoreCase("all")) { try { result.obj = s.eval(meta, code, shellFactory.setShell(shell), bs); } catch (EvalFactoryException e) { throw e; } catch (CompilationFailedException e) // This is usually a parsing exception { throw new EvalFactoryException(e, shellFactory, meta); } catch (SecurityException e) { throw new EvalFactoryException(e, shellFactory, meta); } catch (GroovyRuntimeException e) { throw new EvalFactoryException(e, shellFactory); } catch (Exception e) { throw new EvalFactoryException(e, shellFactory); } success = true; break; } } } try { output.writeBytes((success) ? bs.toByteArray() : code.getBytes(encoding)); bs.reset(); bs.write(saved); } catch (IOException e) { e.printStackTrace(); } Loader.getLogger().fine("Unlocking GroovyShell '" + shell.toString() + "' for execution of '" + meta.fileName + "', length '" + code.length() + "'"); tracker.setInUse(false); for (PostProcessor p : postProcessors) { Set<String> handledTypes = new HashSet<String>(Arrays.asList(p.getHandledTypes())); for (String t : handledTypes) if (t.equalsIgnoreCase(meta.shell) || meta.contentType.toLowerCase().contains(t.toLowerCase()) || t.equalsIgnoreCase("all")) { try { ByteBuf finished = p.process(meta, output); if (finished != null) { output = finished; break; } } catch (Exception e) { result.addException( new IgnorableEvalException("Exception caught while running PostProcessor `" + p.getClass().getSimpleName() + "`", e)); } } } return result.setResult(output, true); }
From source file:com.chiorichan.http.HttpHandler.java
License:Mozilla Public License
/** * Handles the HTTP request. Each HTTP subsystem will be explicitly activated until a resolve is determined. * * @throws IOException// w ww. java 2 s . co m * Universal exception for all Input/Output errors * @throws HttpError * for HTTP Errors * @throws PermissionException * for permission problems, like access denied * @throws MultipleException * for multiple Scripting Factory Evaluation Exceptions * @throws ScriptingException * for Scripting Factory Evaluation Exception * @throws SessionException * for problems initializing a new or used session */ private void handleHttp() throws Exception // IOException, HttpError, SiteException, PermissionException, MultipleException, ScriptingException, SessionException { log.log(Level.INFO, request.methodString() + " " + request.getFullUrl()); Session sess = request.startSession(); log.log(Level.FINE, "Session {id=%s,timeout=%s,new=%s}", sess.getSessId(), sess.getTimeout(), sess.isNew()); if (response.getStage() == HttpResponseStage.CLOSED) throw new IOException("Connection reset by peer"); // This is not the only place 'Connection reset by peer' is thrown RequestEvent requestEvent = new RequestEvent(request); try { EventBus.instance().callEventWithException(requestEvent); } catch (EventException ex) { throw new IOException( "Exception encountered during request event call, most likely the fault of a plugin.", ex); } response.setStatus(requestEvent.getStatus()); if (requestEvent.isCancelled()) { int status = requestEvent.getStatus(); String reason = requestEvent.getReason(); if (status == 200) { status = 502; reason = "Navigation Cancelled by Plugin Event"; } NetworkManager.getLogger().warning("Navigation was cancelled by a Plugin Event"); throw new HttpError(status, reason); } if (response.isCommitted()) return; // Throws IOException and HttpError fi = new WebInterpreter(request); response.annotations.putAll(fi.getAnnotations()); currentSite = request.getLocation(); sess.setSite(currentSite); if (request.getSubdomain().length() > 0 && !currentSite.getSubdomain(request.getSubdomain()).isMaped(request.getDomain())) { if ("www".equalsIgnoreCase(request.getSubdomain()) || AppConfig.get().getBoolean("sites.redirectMissingSubDomains")) { log.log(Level.SEVERE, "Redirecting non-existent subdomain '%s' to root domain '%s'", request.getSubdomain(), request.getFullUrl("")); response.sendRedirect(request.getFullUrl("")); } else { log.log(Level.SEVERE, "The requested subdomain '%s' is non-existent.", request.getSubdomain(), request.getFullDomain("")); response.sendError(HttpResponseStatus.NOT_FOUND, "Subdomain not found"); } return; } File docRoot = currentSite.getSubdomain(request.getSubdomain()).directory(); Validate.notNull(docRoot); if (sess.isLoginPresent()) log.log(Level.FINE, "Account {id=%s,displayName=%s}", sess.getId(), sess.getDisplayName()); /* * Start: SSL enforcer * * Acts on the value of annotation 'SSL'. * REQUIRED means a forbidden error will be thrown is it can not be accomplished * * Options include: * Preferred: If SSL is available, we preferred to be switched to it * PostOnly: SSL is REQUIRED is this is a POST request * GetOnly: SSL is REQUIRED if this is a GET request * Required: SSL is REQUIRED, no exceptions! * Deny: SSL is DENIED, no exceptions! * Ignore: We don't care one way or other, do nothing! DEFAULT */ SslLevel sslLevel = SslLevel.parse(fi.get("ssl")); boolean required = false; switch (sslLevel) { case Preferred: if (NetworkManager.isHttpsRunning()) required = true; break; case PostOnly: if (request.method() == HttpMethod.POST) required = true; break; case GetOnly: if (request.method() == HttpMethod.GET) required = true; break; case Required: required = true; break; case Deny: if (ssl) { if (!response.switchToUnsecure()) response.sendError(HttpCode.HTTP_FORBIDDEN, "This page requires an unsecure connection."); return; } break; case Ignore: break; } if (required && !ssl) { if (!response.switchToSecure()) response.sendError(HttpCode.HTTP_FORBIDDEN, "This page requires a secure connection."); return; } /* * End: SSL enforcer */ if (fi.getStatus() != HttpResponseStatus.OK) throw new HttpError(fi.getStatus()); /* * Start: Apache Configuration Section * * Loads a Apache configuration and .htaccess files into a common handler, then parsed for directives like access restrictions and basic auth * TODO Load server-wide Apache Configuration then merge with Site Configuration */ ApacheHandler htaccess = new ApacheHandler(); response.setApacheParser(htaccess); try { boolean result = htaccess.handleDirectives(currentSite.getApacheConfig(), this); if (htaccess.overrideNone() || htaccess.overrideListNone()) // Ignore .htaccess files { if (fi.hasFile()) if (!htaccess.handleDirectives(new ApacheConfiguration(fi.getFile().getParentFile()), this)) result = false; if (!htaccess.handleDirectives(new ApacheConfiguration(docRoot), this)) result = false; } if (!result) { if (!response.isCommitted()) response.sendError(500, "Your request was blocked by an internal configuration directive, exact details are unknown."); return; } } catch (ApacheDirectiveException e) { log.log(Level.SEVERE, "Caught Apache directive exception: " + e.getMessage()); // TODO Throw 500 unless told not to } /* * End: Apache Configuration Section */ if (!fi.hasFile() && !fi.hasHTML()) response.setStatus(HttpResponseStatus.NO_CONTENT); sess.setGlobal("__FILE__", fi.getFile()); request.putRewriteParams(fi.getRewriteParams()); response.setContentType(fi.getContentType()); response.setEncoding(fi.getEncoding()); request.getServer().put(ServerVars.DOCUMENT_ROOT, docRoot); request.setGlobal("_SERVER", request.getServer()); request.setGlobal("_POST", request.getPostMap()); request.setGlobal("_GET", request.getGetMap()); request.setGlobal("_REWRITE", request.getRewriteMap()); request.setGlobal("_FILES", request.getUploadedFiles()); // TODO Implement NONCE requirement for login page NonceLevel level = NonceLevel.parse(fi.get("nonce")); boolean nonceProvided = sess.nonce() == null ? false : request.getRequestMap().get(sess.nonce().key()) != null; boolean processNonce = false; switch (level) { case Required: processNonce = true; break; case GetOnly: processNonce = request.method() == HttpMethod.GET || nonceProvided; break; case PostOnly: processNonce = request.method() == HttpMethod.POST || nonceProvided; break; case Flexible: processNonce = nonceProvided; break; case Disabled: default: // Do Nothing } Map<String, String> nonceMap = Maps.newHashMap(); if (processNonce) { if (!nonceProvided) { log.log(Level.SEVERE, "The request has failed NONCE validation, because the nonce key was not present!"); response.sendError(HttpResponseStatus.FORBIDDEN, "Your request has failed NONCE validation!"); return; } Nonce nonce = sess.nonce(); if (level == NonceLevel.Required) // Required NonceLevels are of the highest protected state sess.destroyNonce(); try { if (!(request.getRequestMap().get(nonce.key()) instanceof String)) throw new NonceException("Nonce token is not a string"); nonce.validateWithException((String) request.getRequestMap().get(nonce.key())); } catch (NonceException e) { log.log(Level.SEVERE, "The request has failed NONCE validation, because " + e.getMessage().toLowerCase() + "!"); response.sendError(HttpResponseStatus.FORBIDDEN, "Your request has failed NONCE validation!"); sess.destroyNonce(); return; } finally { log.log(Level.INFO, "The request has passed the NONCE validation!"); request.nonceProcessed(true); nonceMap = nonce.mapValues(); } } if (request.validateLogins()) return; if (level != NonceLevel.Disabled) request.setGlobal("_NONCE", nonceMap); try { if (request.getUploadedFiles().size() > 0) log.log(Level.INFO, "Uploads {" + StringFunc.limitLength( Joiner.on(",").skipNulls().join(request.getUploadedFiles().values()), 255) + "}"); if (request.getGetMap().size() > 0) log.log(Level.INFO, "Params GET {" + StringFunc.limitLength( Joiner.on(",").withKeyValueSeparator("=").useForNull("null").join(request.getGetMap()), 255) + "}"); if (request.getPostMap().size() > 0) log.log(Level.INFO, "Params POST {" + StringFunc.limitLength( Joiner.on(",").withKeyValueSeparator("=").useForNull("null").join(request.getPostMap()), 255) + "}"); if (request.getRewriteMap().size() > 0) log.log(Level.INFO, "Params REWRITE {" + StringFunc.limitLength( Joiner.on(",").withKeyValueSeparator("=").useForNull("null").join(request.getRewriteMap()), 255) + "}"); if (fi.getAnnotations().size() > 0) log.log(Level.INFO, "Params ANNOTATIONS {" + StringFunc.limitLength( Joiner.on(",").withKeyValueSeparator("=").useForNull("null").join(fi.getAnnotations()), 255) + "}"); } catch (Throwable t) { t.printStackTrace(); } if (AppConfig.get().getBoolean("advanced.security.requestMapEnabled", true)) request.setGlobal("_REQUEST", request.getRequestMap()); ByteBuf rendered = Unpooled.buffer(); ScriptingFactory factory = request.getEvalFactory(); factory.setEncoding(fi.getEncoding()); NetworkSecurity.isForbidden(htaccess, currentSite, fi); String req = fi.get("reqperm"); if (req == null) req = "-1"; sess.requirePermission(req, currentSite.getId()); // Enhancement: Allow HTML to be ran under different shells. Default is embedded. if (fi.hasHTML()) { ScriptingResult result = factory.eval( ScriptingContext.fromSource(fi.getHTML(), "<embedded>").request(request).site(currentSite)); if (result.hasExceptions()) // TODO Print notices to output like PHP does for (ScriptingException e : result.getExceptions()) { ExceptionReport.throwExceptions(e); log.exceptions(e); if (e.reportingLevel().isEnabled()) rendered.writeBytes(e.getMessage().getBytes()); } if (result.isSuccessful()) { rendered.writeBytes(result.content()); if (result.getObject() != null && !(result.getObject() instanceof NullObject)) try { rendered.writeBytes(ObjectFunc.castToStringWithException(result.getObject()).getBytes()); } catch (Exception e) { log.log(Level.SEVERE, "Exception Excountered: %s", e.getMessage()); if (Versioning.isDevelopment()) log.log(Level.SEVERE, e.getStackTrace()[0].toString()); } } log.log(Level.INFO, "EvalHtml {timing=%sms,success=%s}", Timings.mark(this), result.isSuccessful()); } if (fi.hasFile()) { if (fi.isDirectoryRequest()) { processDirectoryListing(); return; } ScriptingResult result = factory.eval(ScriptingContext.fromFile(fi).request(request).site(currentSite)); if (result.hasExceptions()) // TODO Print notices to output like PHP does for (ScriptingException e : result.getExceptions()) { ExceptionReport.throwExceptions(e); log.exceptions(e); if (e.reportingLevel().isEnabled() && e.getMessage() != null) rendered.writeBytes(e.getMessage().getBytes()); } if (result.isSuccessful()) { rendered.writeBytes(result.content()); if (result.getObject() != null && !(result.getObject() instanceof NullObject)) try { rendered.writeBytes(ObjectFunc.castToStringWithException(result.getObject()).getBytes()); } catch (Exception e) { rendered.writeBytes(result.getObject().toString().getBytes()); log.log(Level.SEVERE, "Exception encountered while writing returned object to output. %s", e.getMessage()); if (Versioning.isDevelopment()) log.log(Level.SEVERE, e.getStackTrace()[0].toString()); } } log.log(Level.INFO, "EvalFile {file=%s,timing=%sms,success=%s}", fi.getFilePath(), Timings.mark(this), result.isSuccessful()); } // if the connection was in a MultiPart mode, wait for the mode to change then return gracefully. if (response.stage == HttpResponseStage.MULTIPART) { while (response.stage == HttpResponseStage.MULTIPART) // I wonder if there is a better way to handle multipart responses. try { Thread.sleep(100); } catch (InterruptedException e) { throw new HttpError(500, "Internal Server Error encountered during multipart execution."); } return; } // If the connection was closed from page redirect, return gracefully. else if (response.stage == HttpResponseStage.CLOSED || response.stage == HttpResponseStage.WRITTEN) return; // Allows scripts to directly override interpreter values. For example: Themes, Views, Titles for (Entry<String, String> kv : response.annotations.entrySet()) fi.put(kv.getKey(), kv.getValue()); RenderEvent renderEvent = new RenderEvent(this, rendered, fi.getEncoding(), fi.getAnnotations()); try { EventBus.instance().callEventWithException(renderEvent); if (renderEvent.getSource() != null) rendered = renderEvent.getSource(); } catch (EventException ex) { throw new ScriptingException(ReportingLevel.E_ERROR, "Caught EventException while trying to fire the RenderEvent", ex.getCause()); } log.log(Level.INFO, "Written {bytes=%s,total_timing=%sms}", rendered.readableBytes(), Timings.finish(this)); try { response.write(rendered); } catch (IllegalReferenceCountException e) { log.log(Level.SEVERE, "Exception encountered while writting script object to output, %s", e.getMessage()); } }
From source file:com.cloudera.livy.client.local.rpc.KryoMessageCodec.java
License:Apache License
@Override protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf buf) throws Exception { ByteBuffer msgData = maybeEncrypt(serializer.serialize(msg)); LOG.debug("Encoded message of type {} ({} bytes)", msg.getClass().getName(), msgData.remaining()); checkSize(msgData.remaining());//from www.ja v a 2 s .co m buf.ensureWritable(msgData.remaining() + 4); buf.writeInt(msgData.remaining()); buf.writeBytes(msgData); }
From source file:com.cloudhopper.smpp.pdu.BaseSm.java
License:Apache License
@Override public void writeBody(ByteBuf buffer) throws UnrecoverablePduException, RecoverablePduException { ChannelBufferUtil.writeNullTerminatedString(buffer, this.serviceType); ChannelBufferUtil.writeAddress(buffer, this.sourceAddress); ChannelBufferUtil.writeAddress(buffer, this.destAddress); buffer.writeByte(this.esmClass); buffer.writeByte(this.protocolId); buffer.writeByte(this.priority); ChannelBufferUtil.writeNullTerminatedString(buffer, this.scheduleDeliveryTime); ChannelBufferUtil.writeNullTerminatedString(buffer, this.validityPeriod); buffer.writeByte(this.registeredDelivery); buffer.writeByte(this.replaceIfPresent); buffer.writeByte(this.dataCoding); buffer.writeByte(this.defaultMsgId); buffer.writeByte((byte) getShortMessageLength()); if (this.shortMessage != null) { buffer.writeBytes(this.shortMessage); }//from w ww.j a v a 2 s .com }
From source file:com.cloudhopper.smpp.util.ChannelBufferUtil.java
License:Apache License
static public void writeTlv(ByteBuf buffer, Tlv tlv) throws NotEnoughDataInBufferException { // a null is a noop if (tlv == null) { return;/* w w w . j a v a2s .c o m*/ } buffer.writeShort(tlv.getTag()); buffer.writeShort(tlv.getLength()); if (tlv.getValue() != null) { buffer.writeBytes(tlv.getValue()); } }