public class org.apache.activemq.transport.http.HttpTunnelServlet extends javax.servlet.http.HttpServlet
{
private static final long serialVersionUID;
private static final org.slf4j.Logger LOG;
private org.apache.activemq.transport.TransportAcceptListener listener;
private org.apache.activemq.transport.http.HttpTransportFactory transportFactory;
private org.apache.activemq.transport.util.TextWireFormat wireFormat;
private java.util.concurrent.ConcurrentMap clients;
private final long requestTimeout;
private java.util.HashMap transportOptions;
private java.util.HashMap wireFormatOptions;
public void <init>()
{
java.util.concurrent.ConcurrentHashMap v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
specialinvoke v.<javax.servlet.http.HttpServlet: void <init>()>();
v = new java.util.concurrent.ConcurrentHashMap;
specialinvoke v.<java.util.concurrent.ConcurrentHashMap: void <init>()>();
v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.concurrent.ConcurrentMap clients> = v;
v.<org.apache.activemq.transport.http.HttpTunnelServlet: long requestTimeout> = 30000L;
return;
}
public void init() throws javax.servlet.ServletException
{
javax.servlet.ServletException v, v;
org.apache.activemq.transport.util.TextWireFormat v, v;
org.apache.activemq.transport.http.HttpTransportFactory v;
org.apache.activemq.transport.TransportAcceptListener v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
java.lang.Object v, v, v, v, v;
javax.servlet.ServletContext v, v, v, v, v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
specialinvoke v.<javax.servlet.http.HttpServlet: void init()>();
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: javax.servlet.ServletContext getServletContext()>();
v = interfaceinvoke v.<javax.servlet.ServletContext: java.lang.Object getAttribute(java.lang.String)>("acceptListener");
v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.TransportAcceptListener listener> = v;
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.TransportAcceptListener listener>;
if v != null goto label;
v = new javax.servlet.ServletException;
specialinvoke v.<javax.servlet.ServletException: void <init>(java.lang.String)>("No such attribute \'acceptListener\' available in the ServletContext");
throw v;
label:
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: javax.servlet.ServletContext getServletContext()>();
v = interfaceinvoke v.<javax.servlet.ServletContext: java.lang.Object getAttribute(java.lang.String)>("transportFactory");
v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.HttpTransportFactory transportFactory> = v;
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.HttpTransportFactory transportFactory>;
if v != null goto label;
v = new javax.servlet.ServletException;
specialinvoke v.<javax.servlet.ServletException: void <init>(java.lang.String)>("No such attribute \'transportFactory\' available in the ServletContext");
throw v;
label:
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: javax.servlet.ServletContext getServletContext()>();
v = interfaceinvoke v.<javax.servlet.ServletContext: java.lang.Object getAttribute(java.lang.String)>("transportOptions");
v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.HashMap transportOptions> = v;
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: javax.servlet.ServletContext getServletContext()>();
v = interfaceinvoke v.<javax.servlet.ServletContext: java.lang.Object getAttribute(java.lang.String)>("wireFormatOptions");
v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.HashMap wireFormatOptions> = v;
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: javax.servlet.ServletContext getServletContext()>();
v = interfaceinvoke v.<javax.servlet.ServletContext: java.lang.Object getAttribute(java.lang.String)>("wireFormat");
v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.util.TextWireFormat wireFormat> = v;
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.util.TextWireFormat wireFormat>;
if v != null goto label;
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.util.TextWireFormat createWireFormat()>();
v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.util.TextWireFormat wireFormat> = v;
label:
return;
}
protected void doOptions(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException, java.io.IOException
{
javax.servlet.http.HttpServletResponse v;
javax.servlet.http.HttpServletRequest v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: javax.servlet.http.HttpServletRequest;
v := @parameter: javax.servlet.http.HttpServletResponse;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void addHeader(java.lang.String,java.lang.String)>("Accepts-Encoding", "gzip");
specialinvoke v.<javax.servlet.http.HttpServlet: void doOptions(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)>(v, v);
return;
}
protected void doHead(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException, java.io.IOException
{
javax.servlet.http.HttpServletResponse v;
javax.servlet.http.HttpServletRequest v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: javax.servlet.http.HttpServletRequest;
v := @parameter: javax.servlet.http.HttpServletResponse;
virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.BlockingQueueTransport createTransportChannel(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)>(v, v);
return;
}
protected void doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException, java.io.IOException
{
org.apache.activemq.transport.http.BlockingQueueTransport v;
org.apache.activemq.transport.util.TextWireFormat v;
javax.servlet.http.HttpServletResponse v;
java.util.concurrent.BlockingQueue v;
java.util.concurrent.TimeUnit v;
javax.servlet.http.HttpServletRequest v;
java.io.DataOutputStream v;
java.lang.InterruptedException v;
javax.servlet.ServletOutputStream v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
int v;
java.lang.Object v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: javax.servlet.http.HttpServletRequest;
v := @parameter: javax.servlet.http.HttpServletResponse;
v = 0;
label:
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.BlockingQueueTransport getTransportChannel(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)>(v, v);
if v != null goto label;
label:
return;
label:
v = virtualinvoke v.<org.apache.activemq.transport.http.BlockingQueueTransport: java.util.concurrent.BlockingQueue getQueue()>();
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit MILLISECONDS>;
v = interfaceinvoke v.<java.util.concurrent.BlockingQueue: java.lang.Object poll(long,java.util.concurrent.TimeUnit)>(30000L, v);
v = new java.io.DataOutputStream;
v = interfaceinvoke v.<javax.servlet.http.HttpServletResponse: javax.servlet.ServletOutputStream getOutputStream()>();
specialinvoke v.<java.io.DataOutputStream: void <init>(java.io.OutputStream)>(v);
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.util.TextWireFormat wireFormat>;
virtualinvoke v.<org.apache.activemq.transport.util.TextWireFormat: void marshal(java.lang.Object,java.io.DataOutput)>(v, v);
v = 1;
label:
goto label;
label:
v := @caughtexception;
label:
if v != 0 goto label;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void setStatus(int)>(408);
label:
return;
catch java.lang.InterruptedException from label to label with label;
catch java.lang.InterruptedException from label to label with label;
}
protected void doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException, java.io.IOException
{
java.util.zip.GZIPInputStream v;
org.apache.activemq.transport.util.TextWireFormat v;
java.util.HashMap v, v;
javax.servlet.http.HttpServletRequest v;
int v, v, v, v;
java.lang.String v, v, v;
boolean v, v, v, v;
java.io.PrintWriter v;
org.apache.activemq.command.Command v;
org.apache.activemq.transport.http.BlockingQueueTransport v;
javax.servlet.http.HttpServletResponse v;
java.io.InputStreamReader v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
java.lang.Object v, v, v, v, v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: javax.servlet.http.HttpServletRequest;
v := @parameter: javax.servlet.http.HttpServletResponse;
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.HashMap wireFormatOptions>;
v = virtualinvoke v.<java.util.HashMap: java.lang.Object get(java.lang.Object)>("maxFrameSize");
if v == null goto label;
v = interfaceinvoke v.<javax.servlet.http.HttpServletRequest: int getContentLength()>();
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.HashMap wireFormatOptions>;
v = virtualinvoke v.<java.util.HashMap: java.lang.Object get(java.lang.Object)>("maxFrameSize");
v = virtualinvoke v.<java.lang.Object: java.lang.String toString()>();
v = staticinvoke <java.lang.Integer: int parseInt(java.lang.String)>(v);
if v <= v goto label;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void setStatus(int)>(405);
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void setContentType(java.lang.String)>("plain/text");
v = interfaceinvoke v.<javax.servlet.http.HttpServletResponse: java.io.PrintWriter getWriter()>();
virtualinvoke v.<java.io.PrintWriter: void println(java.lang.String)>("maxFrameSize exceeded");
virtualinvoke v.<java.io.PrintWriter: void flush()>();
virtualinvoke v.<java.io.PrintWriter: void close()>();
return;
label:
v = interfaceinvoke v.<javax.servlet.http.HttpServletRequest: javax.servlet.ServletInputStream getInputStream()>();
v = interfaceinvoke v.<javax.servlet.http.HttpServletRequest: java.lang.String getContentType()>();
if v == null goto label;
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("application/x-gzip");
if v == 0 goto label;
v = new java.util.zip.GZIPInputStream;
specialinvoke v.<java.util.zip.GZIPInputStream: void <init>(java.io.InputStream)>(v);
v = v;
label:
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.util.TextWireFormat wireFormat>;
v = new java.io.InputStreamReader;
specialinvoke v.<java.io.InputStreamReader: void <init>(java.io.InputStream,java.lang.String)>(v, "UTF-8");
v = virtualinvoke v.<org.apache.activemq.transport.util.TextWireFormat: java.lang.Object unmarshalText(java.io.Reader)>(v);
v = v instanceof org.apache.activemq.command.WireFormatInfo;
if v == 0 goto label;
v = virtualinvoke v.<org.apache.activemq.command.WireFormatInfo: int getVersion()>();
v = specialinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: boolean canProcessWireFormatVersion(int)>(v);
if v != 0 goto label;
v = virtualinvoke v.<org.apache.activemq.command.WireFormatInfo: int getVersion()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Cannot process wire format of version: \u0001");
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void sendError(int,java.lang.String)>(404, v);
goto label;
label:
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.BlockingQueueTransport getTransportChannel(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)>(v, v);
if v != null goto label;
return;
label:
v = v instanceof org.apache.activemq.command.ConnectionInfo;
if v == 0 goto label;
v = interfaceinvoke v.<javax.servlet.http.HttpServletRequest: java.lang.Object getAttribute(java.lang.String)>("javax.servlet.request.X509Certificate");
virtualinvoke v.<org.apache.activemq.command.ConnectionInfo: void setTransportContext(java.lang.Object)>(v);
label:
virtualinvoke v.<org.apache.activemq.transport.http.BlockingQueueTransport: void doConsume(java.lang.Object)>(v);
label:
return;
}
private boolean canProcessWireFormatVersion(int)
{
int v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: int;
return 1;
}
protected org.apache.activemq.transport.http.BlockingQueueTransport getTransportChannel(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) throws java.io.IOException
{
org.slf4j.Logger v, v;
javax.servlet.http.HttpServletResponse v;
java.util.concurrent.ConcurrentMap v;
javax.servlet.http.HttpServletRequest v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
java.lang.Object v;
java.lang.String v, v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: javax.servlet.http.HttpServletRequest;
v := @parameter: javax.servlet.http.HttpServletResponse;
v = interfaceinvoke v.<javax.servlet.http.HttpServletRequest: java.lang.String getHeader(java.lang.String)>("clientID");
if v != null goto label;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void sendError(int,java.lang.String)>(400, "No clientID header specified");
v = <org.apache.activemq.transport.http.HttpTunnelServlet: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String)>("No clientID header specified");
return null;
label:
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.concurrent.ConcurrentMap clients>;
v = interfaceinvoke v.<java.util.concurrent.ConcurrentMap: java.lang.Object get(java.lang.Object)>(v);
if v != null goto label;
v = <org.apache.activemq.transport.http.HttpTunnelServlet: org.slf4j.Logger LOG>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("The clientID header specified is invalid. Client sesion has not yet been established for it: \u0001");
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String)>(v);
return null;
label:
return v;
}
protected org.apache.activemq.transport.http.BlockingQueueTransport createTransportChannel(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) throws java.io.IOException
{
org.apache.activemq.transport.http.HttpTransportFactory v;
java.util.HashMap v, v;
java.util.concurrent.ConcurrentMap v;
org.apache.activemq.transport.http.HttpTunnelServlet$1 v;
javax.servlet.http.HttpServletRequest v;
org.apache.activemq.transport.TransportAcceptListener v;
java.lang.String v, v, v;
boolean v, v, v;
org.slf4j.Logger v, v, v;
org.apache.activemq.transport.http.BlockingQueueTransport v;
javax.servlet.http.HttpServletResponse v;
java.io.IOException v;
org.apache.activemq.transport.Transport v;
java.lang.Exception v;
java.lang.InterruptedException v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
java.lang.Object v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v := @parameter: javax.servlet.http.HttpServletRequest;
v := @parameter: javax.servlet.http.HttpServletResponse;
v = interfaceinvoke v.<javax.servlet.http.HttpServletRequest: java.lang.String getHeader(java.lang.String)>("clientID");
if v != null goto label;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void sendError(int,java.lang.String)>(400, "No clientID header specified");
v = <org.apache.activemq.transport.http.HttpTunnelServlet: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String)>("No clientID header specified");
return null;
label:
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.BlockingQueueTransport createTransportChannel()>();
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.concurrent.ConcurrentMap clients>;
v = interfaceinvoke v.<java.util.concurrent.ConcurrentMap: java.lang.Object putIfAbsent(java.lang.Object,java.lang.Object)>(v, v);
if v == null goto label;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void sendError(int,java.lang.String)>(400, "A session for the given clientID has already been established");
v = <org.apache.activemq.transport.http.HttpTunnelServlet: org.slf4j.Logger LOG>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("A session for clientID \'\u0001\' has already been established");
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String)>(v);
return null;
label:
v = new org.apache.activemq.transport.http.HttpTunnelServlet$1;
specialinvoke v.<org.apache.activemq.transport.http.HttpTunnelServlet$1: void <init>(org.apache.activemq.transport.http.HttpTunnelServlet,java.lang.String)>(v, v);
virtualinvoke v.<org.apache.activemq.transport.http.BlockingQueueTransport: void addServiceListener(org.apache.activemq.util.ServiceListener)>(v);
label:
v = new java.util.HashMap;
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: java.util.HashMap transportOptions>;
specialinvoke v.<java.util.HashMap: void <init>(java.util.Map)>(v);
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.http.HttpTransportFactory transportFactory>;
v = virtualinvoke v.<org.apache.activemq.transport.http.HttpTransportFactory: org.apache.activemq.transport.Transport serverConfigure(org.apache.activemq.transport.Transport,org.apache.activemq.wireformat.WireFormat,java.util.HashMap)>(v, null, v);
label:
goto label;
label:
v := @caughtexception;
v = staticinvoke <org.apache.activemq.util.IOExceptionSupport: java.io.IOException create(java.lang.Exception)>(v);
throw v;
label:
v = v.<org.apache.activemq.transport.http.HttpTunnelServlet: org.apache.activemq.transport.TransportAcceptListener listener>;
interfaceinvoke v.<org.apache.activemq.transport.TransportAcceptListener: void onAccept(org.apache.activemq.transport.Transport)>(v);
label:
v = interfaceinvoke v.<org.apache.activemq.transport.Transport: boolean isConnected()>();
if v != 0 goto label;
v = interfaceinvoke v.<org.apache.activemq.transport.Transport: boolean isDisposed()>();
if v != 0 goto label;
label:
staticinvoke <java.lang.Thread: void sleep(long)>(100L);
label:
goto label;
label:
v := @caughtexception;
goto label;
label:
v = interfaceinvoke v.<org.apache.activemq.transport.Transport: boolean isDisposed()>();
if v == 0 goto label;
interfaceinvoke v.<javax.servlet.http.HttpServletResponse: void sendError(int,java.lang.String)>(400, "The session for the given clientID was prematurely disposed");
v = <org.apache.activemq.transport.http.HttpTunnelServlet: org.slf4j.Logger LOG>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("The session for clientID \'\u0001\' was prematurely disposed");
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String)>(v);
return null;
label:
return v;
catch java.lang.Exception from label to label with label;
catch java.lang.InterruptedException from label to label with label;
}
protected org.apache.activemq.transport.http.BlockingQueueTransport createTransportChannel()
{
java.util.concurrent.LinkedBlockingQueue v;
org.apache.activemq.transport.http.BlockingQueueTransport v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v = new org.apache.activemq.transport.http.BlockingQueueTransport;
v = new java.util.concurrent.LinkedBlockingQueue;
specialinvoke v.<java.util.concurrent.LinkedBlockingQueue: void <init>()>();
specialinvoke v.<org.apache.activemq.transport.http.BlockingQueueTransport: void <init>(java.util.concurrent.BlockingQueue)>(v);
return v;
}
protected org.apache.activemq.transport.util.TextWireFormat createWireFormat()
{
org.apache.activemq.transport.xstream.XStreamWireFormat v;
org.apache.activemq.transport.http.HttpTunnelServlet v;
v := @this: org.apache.activemq.transport.http.HttpTunnelServlet;
v = new org.apache.activemq.transport.xstream.XStreamWireFormat;
specialinvoke v.<org.apache.activemq.transport.xstream.XStreamWireFormat: void <init>()>();
return v;
}
static void <clinit>()
{
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/activemq/transport/http/HttpTunnelServlet;");
<org.apache.activemq.transport.http.HttpTunnelServlet: org.slf4j.Logger LOG> = v;
return;
}
}