}
@Override
- public boolean process(@NotNull String path, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context, @Nullable Map<String, Object> handlers) throws IOException {
+ public boolean process(@NotNull String path, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context, @Nullable Map<String, Object> handlers) {
if (!(path.isEmpty() || (path.length() == 1 && path.charAt(0) == '/') || path.equalsIgnoreCase("/rpc2"))) {
return false;
}
- if (request.method() == HttpMethod.POST) {
- ByteBuf result;
- ByteBuf content = request.content();
- if (content.readableBytes() == 0) {
- Responses.send(HttpResponseStatus.BAD_REQUEST, context.channel(), request);
- return true;
- }
+ if (request.method() != HttpMethod.POST) {
+ return false;
+ }
- ByteBufInputStream in = new ByteBufInputStream(content);
- try {
- XmlRpcServerRequest xmlRpcServerRequest = new XmlRpcRequestProcessor().decodeRequest(in);
- if (StringUtil.isEmpty(xmlRpcServerRequest.getMethodName())) {
- LOG.warn("method name empty");
- return false;
- }
+ ByteBuf content = request.content();
+ if (content.readableBytes() == 0) {
+ Responses.send(HttpResponseStatus.BAD_REQUEST, context.channel(), request);
+ return true;
+ }
- Object response = invokeHandler(getHandler(xmlRpcServerRequest.getMethodName(), handlers == null ? handlerMapping : handlers), xmlRpcServerRequest);
- result = Unpooled.wrappedBuffer(new XmlRpcResponseProcessor().encodeResponse(response, CharsetToolkit.UTF8));
- }
- catch (SAXParseException e) {
- LOG.warn(e);
- Responses.send(HttpResponseStatus.BAD_REQUEST, context.channel(), request);
- return true;
- }
- catch (Throwable e) {
- context.channel().close();
- LOG.error(e);
- return true;
- }
- finally {
- in.close();
+ ByteBuf result;
+ try (ByteBufInputStream in = new ByteBufInputStream(content)) {
+ XmlRpcServerRequest xmlRpcServerRequest = new XmlRpcRequestProcessor().decodeRequest(in);
+ if (StringUtil.isEmpty(xmlRpcServerRequest.getMethodName())) {
+ LOG.warn("method name empty");
+ return false;
}
- Responses.send(Responses.response("text/xml", result), context.channel(), request);
+ Object response = invokeHandler(getHandler(xmlRpcServerRequest.getMethodName(), handlers == null ? handlerMapping : handlers), xmlRpcServerRequest);
+ result = Unpooled.wrappedBuffer(new XmlRpcResponseProcessor().encodeResponse(response, CharsetToolkit.UTF8));
+ }
+ catch (SAXParseException e) {
+ LOG.warn(e);
+ Responses.send(HttpResponseStatus.BAD_REQUEST, context.channel(), request);
return true;
}
- return false;
+ catch (Throwable e) {
+ context.channel().close();
+ LOG.error(e);
+ return true;
+ }
+
+ Responses.send(Responses.response("text/xml", result), context.channel(), request);
+ return true;
}
private static Object getHandler(@NotNull String methodName, @NotNull Map<String, Object> handlers) {
import org.jetbrains.annotations.NotNull;
import org.jetbrains.ide.CustomPortServerManager;
-import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Map;
}
@Override
- protected boolean process(@NotNull ChannelHandlerContext context, @NotNull FullHttpRequest request, @NotNull QueryStringDecoder urlDecoder) throws IOException {
+ protected boolean process(@NotNull ChannelHandlerContext context, @NotNull FullHttpRequest request, @NotNull QueryStringDecoder urlDecoder) {
if (handlers.isEmpty()) {
// not yet initialized, for example, P2PTransport could add handlers after we bound.
return false;
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.io.IOException;
import java.util.Map;
public interface XmlRpcServer {
void removeHandler(String name);
- boolean process(@NotNull String path, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context, @Nullable Map<String, Object> handlers) throws IOException;
+ boolean process(@NotNull String path, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context, @Nullable Map<String, Object> handlers);
final class SERVICE {
private SERVICE() {
package org.jetbrains.io
import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.diagnostic.debug
import io.netty.channel.ChannelHandlerContext
import io.netty.handler.codec.http.FullHttpRequest
import io.netty.handler.codec.http.HttpResponseStatus
internal abstract class DelegatingHttpRequestHandlerBase : SimpleChannelInboundHandlerAdapter<FullHttpRequest>() {
override fun messageReceived(context: ChannelHandlerContext, message: FullHttpRequest) {
- if (Logger.getInstance(BuiltInServer::class.java).isDebugEnabled) {
- Logger.getInstance(BuiltInServer::class.java).debug("IN HTTP: " + message.uri())
- }
+ Logger.getInstance(BuiltInServer::class.java).debug { "IN HTTP: $message" }
if (!process(context, message, QueryStringDecoder(message.uri()))) {
HttpResponseStatus.NOT_FOUND.send(context.channel(), message)
}
}
- @Throws(Exception::class)
protected abstract fun process(context: ChannelHandlerContext,
request: FullHttpRequest,
urlDecoder: QueryStringDecoder): Boolean
/*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.security.Security;
import java.util.UUID;
-import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
-
@ChannelHandler.Sharable
class PortUnificationServerHandler extends Decoder {
// keytool -genkey -keyalg RSA -alias selfsigned -keystore cert.jks -storepass jetbrains -validity 10000 -keysize 2048
public void write(ChannelHandlerContext context, Object message, ChannelPromise promise) throws Exception {
if (message instanceof HttpResponse) {
HttpResponse response = (HttpResponse)message;
- logger.debug("OUT HTTP: " + response.status().code() + " " + response.headers().getAsString(CONTENT_TYPE));
+ logger.debug("OUT HTTP: " + response.toString());
}
super.write(context, message, promise);
}