Search in sources :

Example 46 with HttpChunk

use of org.jboss.netty.handler.codec.http.HttpChunk in project databus by linkedin.

the class MockServerChannelHandler method printMessage.

//auxiliary method to print messages
private void printMessage(String prefix, MessageEvent e) {
    Object msgO = e.getMessage();
    String resp;
    if (msgO instanceof HttpRequest) {
        HttpRequest msgReq = (HttpRequest) msgO;
        //Matcher result = pattern.matcher(msgReq.getUri());
        resp = msgReq.getUri();
    } else if (msgO instanceof HttpResponse) {
        HttpResponse msgReq = (HttpResponse) msgO;
        resp = msgReq.toString();
    } else if (msgO instanceof HttpChunk) {
        HttpChunk msgReq = (HttpChunk) msgO;
        resp = msgReq.toString();
    } else {
        ChannelBuffer msg = (ChannelBuffer) msgO;
        byte[] bytes = new byte[msg.capacity()];
        msg.readBytes(bytes);
        msg.setIndex(0, bytes.length);
        StringBuilder out = new StringBuilder("MSG: ").append(e.getChannel().getRemoteAddress());
        out.append("\nMESSAGE length=").append(bytes.length).append("\n").append(new String(bytes));
        resp = out.toString();
    }
    LOG.debug(prefix + resp);
}
Also used : HttpRequest(org.jboss.netty.handler.codec.http.HttpRequest) HttpResponse(org.jboss.netty.handler.codec.http.HttpResponse) HttpChunk(org.jboss.netty.handler.codec.http.HttpChunk) ChannelBuffer(org.jboss.netty.buffer.ChannelBuffer)

Example 47 with HttpChunk

use of org.jboss.netty.handler.codec.http.HttpChunk in project databus by linkedin.

the class HttpRequestHandler method messageReceived.

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    /*NettyStats nettyStats = _configManager.getNettyStats();
      CallCompletion callCompletion = nettyStats.isEnabled() ?
          nettyStats.getRequestHandler_messageRecieved().startCall() :
          null;*/
    try {
        if (!readingChunks) {
            request = (HttpRequest) e.getMessage();
            ctx.sendUpstream(e);
            QueryStringDecoder queryStringDecoder = new QueryStringDecoder(request.getUri());
            String queryPath = queryStringDecoder.getPath();
            int slashPos = queryPath.indexOf('/', 1);
            if (slashPos < 0) {
                slashPos = queryPath.length();
            }
            String cmdName = queryPath.substring(1, slashPos);
            ServerContainer.RuntimeConfig config = _serverContainer.getContainerRuntimeConfigMgr().getReadOnlyConfig();
            if (LOG.isDebugEnabled()) {
                LOG.debug("Got command: " + cmdName);
            }
            dbusRequest = new DatabusRequest(cmdName, request.getMethod(), e.getRemoteAddress(), config);
            if (LOG.isDebugEnabled()) {
                LOG.debug("Starting processing command [" + dbusRequest.getId() + "] " + dbusRequest.getName());
            }
            Properties requestProps = dbusRequest.getParams();
            if (slashPos < queryPath.length()) {
                requestProps.put(DatabusRequest.PATH_PARAM_NAME, queryPath.substring(slashPos + 1));
            }
            for (Map.Entry<String, String> h : request.getHeaders()) {
                handleHttpHeader(h);
            }
            Map<String, List<String>> params = queryStringDecoder.getParameters();
            if (!params.isEmpty()) {
                for (Entry<String, List<String>> p : params.entrySet()) {
                    String key = p.getKey();
                    List<String> vals = p.getValue();
                    if (vals.size() == 1) {
                        requestProps.put(key, vals.get(0));
                    } else {
                        requestProps.put(key, vals);
                    }
                    for (String val : vals) {
                        LOG.trace("PARAM: " + key + " = " + val);
                    }
                }
            }
            if (request.isChunked()) {
                if (null != _readTimeoutHandler) {
                    readingChunks = true;
                    _readTimeoutHandler.start(ctx.getPipeline().getContext(_readTimeoutHandler));
                }
            } else {
                ChannelBuffer content = request.getContent();
                handleRequestContentChunk(content);
                writeResponse(ctx, e);
            }
        } else if (e.getMessage() instanceof HttpChunk) {
            HttpChunk chunk = (HttpChunk) e.getMessage();
            if (chunk.isLast()) {
                readingChunks = false;
                LOG.trace("END OF CONTENT");
                HttpChunkTrailer trailer = (HttpChunkTrailer) chunk;
                for (Map.Entry<String, String> h : trailer.getHeaders()) {
                    handleHttpHeader(h);
                }
                writeResponse(ctx, e);
            } else {
                ChannelBuffer content = chunk.getContent();
                handleRequestContentChunk(content);
            }
        }
        ctx.sendUpstream(e);
    //FIXME   DDS-305: Rework the netty stats collector to use event-based stats aggregation
    /*if (null != callCompletion)
        {
          callCompletion.endCall();
        }*/
    } catch (Exception ex) {
        LOG.error("HttpRequestHandler.messageReceived error", ex);
    //FIXME   DDS-305: Rework the netty stats collector to use event-based stats aggregation
    /*if (null != callCompletion)
        {
          callCompletion.endCallWithError(ex);
        }*/
    }
}
Also used : Properties(java.util.Properties) ClosedChannelException(java.nio.channels.ClosedChannelException) IOException(java.io.IOException) ChannelBuffer(org.jboss.netty.buffer.ChannelBuffer) QueryStringDecoder(org.jboss.netty.handler.codec.http.QueryStringDecoder) DatabusRequest(com.linkedin.databus2.core.container.request.DatabusRequest) Entry(java.util.Map.Entry) HttpChunkTrailer(org.jboss.netty.handler.codec.http.HttpChunkTrailer) ArrayList(java.util.ArrayList) List(java.util.List) Map(java.util.Map) HttpChunk(org.jboss.netty.handler.codec.http.HttpChunk)

Example 48 with HttpChunk

use of org.jboss.netty.handler.codec.http.HttpChunk in project databus by linkedin.

the class DummyRemoteExceptionHandler method runHappyPathSources.

private HttpResponse runHappyPathSources(final Logger log, TestingConnectionCallback callback, DummyRemoteExceptionHandler remoteExceptionHandler, SocketAddress clientAddr, SimpleObjectCaptureHandler objCapture) {
    Assert.assertTrue(objCapture.waitForMessage(1000, 0));
    Object msgObj = objCapture.getMessages().get(0);
    Assert.assertTrue(msgObj instanceof HttpRequest);
    HttpRequest msgReq = (HttpRequest) msgObj;
    // now has "?protocolVersion=X" appended
    Assert.assertTrue(msgReq.getUri().startsWith("/sources"));
    callback.clearLastMsg();
    objCapture.clear();
    //send back some response
    HttpResponse sourcesResp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    sourcesResp.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
    sourcesResp.setHeader(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED);
    HttpChunk body = new DefaultHttpChunk(ChannelBuffers.wrappedBuffer("[{\"id\":1,\"name\":\"test.source1\"}]".getBytes(Charset.defaultCharset())));
    NettyTestUtils.sendServerResponses(_dummyServer, clientAddr, sourcesResp, body);
    waitForCallback(callback, TestResponseProcessors.TestConnectionStateMessage.State.SOURCES_SUCCESS, log);
    Assert.assertNull(remoteExceptionHandler.getLastException());
    callback.clearLastMsg();
    objCapture.clear();
    return sourcesResp;
}
Also used : HttpRequest(org.jboss.netty.handler.codec.http.HttpRequest) DefaultHttpChunk(org.jboss.netty.handler.codec.http.DefaultHttpChunk) DefaultHttpResponse(org.jboss.netty.handler.codec.http.DefaultHttpResponse) DefaultHttpResponse(org.jboss.netty.handler.codec.http.DefaultHttpResponse) HttpResponse(org.jboss.netty.handler.codec.http.HttpResponse) DefaultHttpChunk(org.jboss.netty.handler.codec.http.DefaultHttpChunk) HttpChunk(org.jboss.netty.handler.codec.http.HttpChunk)

Example 49 with HttpChunk

use of org.jboss.netty.handler.codec.http.HttpChunk in project databus by linkedin.

the class DummyRemoteExceptionHandler method runHappyPathRegister.

private void runHappyPathRegister(final Logger log, TestingConnectionCallback callback, DummyRemoteExceptionHandler remoteExceptionHandler, final NettyHttpDatabusRelayConnection conn, TestResponseProcessors.TestConnectionStateMessage msg, SocketAddress clientAddr, SimpleObjectCaptureHandler objCapture, HttpResponse sourcesResp) throws JsonGenerationException, JsonMappingException, IOException {
    HttpRequest msgReq;
    HttpChunk body;
    objCapture.clear();
    conn.requestRegister("1", msg);
    //verify server gets the /register request
    msgReq = captureRequest(objCapture);
    Assert.assertTrue(msgReq.getUri().startsWith("/register"));
    //send back some response
    RegisterResponseEntry entry = new RegisterResponseEntry(1L, (short) 1, SOURCE1_SCHEMA_STR);
    String responseStr = NettyTestUtils.generateRegisterResponse(entry);
    body = new DefaultHttpChunk(ChannelBuffers.wrappedBuffer(responseStr.getBytes(Charset.defaultCharset())));
    NettyTestUtils.sendServerResponses(_dummyServer, clientAddr, sourcesResp, body);
    waitForCallback(callback, TestResponseProcessors.TestConnectionStateMessage.State.REGISTER_SUCCESS, log);
    Assert.assertNull(remoteExceptionHandler.getLastException());
}
Also used : HttpRequest(org.jboss.netty.handler.codec.http.HttpRequest) DefaultHttpChunk(org.jboss.netty.handler.codec.http.DefaultHttpChunk) RegisterResponseEntry(com.linkedin.databus2.core.container.request.RegisterResponseEntry) DefaultHttpChunk(org.jboss.netty.handler.codec.http.DefaultHttpChunk) HttpChunk(org.jboss.netty.handler.codec.http.HttpChunk)

Example 50 with HttpChunk

use of org.jboss.netty.handler.codec.http.HttpChunk in project databus by linkedin.

the class TestResponseProcessors method testStreamHappyPathChunked.

@Test
public void testStreamHappyPathChunked() throws Exception {
    TestAbstractQueue queue = new TestAbstractQueue();
    TestConnectionStateMessage stateMsg = new TestConnectionStateMessage();
    HttpResponse httpResponse = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
    StreamHttpResponseProcessor processor = new StreamHttpResponseProcessor(null, queue, stateMsg, null);
    ChannelBuffer buf = HeapChannelBufferFactory.getInstance().getBuffer(100);
    HttpChunk httpChunk = new DefaultHttpChunk(buf);
    HttpChunkTrailer httpChunkTrailer = new DefaultHttpChunkTrailer();
    processor.startResponse(httpResponse);
    processor.addChunk(httpChunk);
    processor.addTrailer(httpChunkTrailer);
    processor.finishResponse();
    Assert.assertEquals("Error Handled", false, processor._errorHandled);
    Assert.assertEquals("Processor Response State", AbstractHttpResponseProcessorDecorator.ResponseStatus.CHUNKS_FINISHED, processor._responseStatus);
    Assert.assertEquals("Actor Queue Size", 1, queue.getMessages().size());
    Assert.assertEquals("Expected ConnectionStateMessage", "TestConnectionStateMessage", queue.getMessages().get(0).getClass().getSimpleName());
    TestConnectionStateMessage gotMsg = (TestConnectionStateMessage) (queue.getMessages().get(0));
    Assert.assertEquals("Expected ConnectionStateMessage State", TestConnectionStateMessage.State.STREAM_RESPONSE_SUCCESS, gotMsg._state);
    Assert.assertEquals("No More CHunks", true, stateMsg._channel.hasNoMoreChunks());
}
Also used : DefaultHttpChunkTrailer(org.jboss.netty.handler.codec.http.DefaultHttpChunkTrailer) HttpChunkTrailer(org.jboss.netty.handler.codec.http.HttpChunkTrailer) DefaultHttpChunk(org.jboss.netty.handler.codec.http.DefaultHttpChunk) DefaultHttpResponse(org.jboss.netty.handler.codec.http.DefaultHttpResponse) DefaultHttpResponse(org.jboss.netty.handler.codec.http.DefaultHttpResponse) HttpResponse(org.jboss.netty.handler.codec.http.HttpResponse) DefaultHttpChunkTrailer(org.jboss.netty.handler.codec.http.DefaultHttpChunkTrailer) ChannelBuffer(org.jboss.netty.buffer.ChannelBuffer) DefaultHttpChunk(org.jboss.netty.handler.codec.http.DefaultHttpChunk) HttpChunk(org.jboss.netty.handler.codec.http.HttpChunk) Test(org.testng.annotations.Test)

Aggregations

HttpChunk (org.jboss.netty.handler.codec.http.HttpChunk)70 DefaultHttpChunk (org.jboss.netty.handler.codec.http.DefaultHttpChunk)56 DefaultHttpResponse (org.jboss.netty.handler.codec.http.DefaultHttpResponse)52 HttpResponse (org.jboss.netty.handler.codec.http.HttpResponse)52 ChannelBuffer (org.jboss.netty.buffer.ChannelBuffer)48 Test (org.testng.annotations.Test)46 DefaultHttpChunkTrailer (org.jboss.netty.handler.codec.http.DefaultHttpChunkTrailer)38 HttpChunkTrailer (org.jboss.netty.handler.codec.http.HttpChunkTrailer)38 BootstrapDatabaseTooOldException (com.linkedin.databus2.core.container.request.BootstrapDatabaseTooOldException)25 Checkpoint (com.linkedin.databus.core.Checkpoint)22 InetSocketAddress (java.net.InetSocketAddress)16 Channel (org.jboss.netty.channel.Channel)16 ConditionCheck (com.linkedin.databus2.test.ConditionCheck)15 SocketAddress (java.net.SocketAddress)13 Logger (org.apache.log4j.Logger)12 HttpRequest (org.jboss.netty.handler.codec.http.HttpRequest)12 ChannelPipeline (org.jboss.netty.channel.ChannelPipeline)9 RegisterResponseEntry (com.linkedin.databus2.core.container.request.RegisterResponseEntry)8 SimpleObjectCaptureHandler (com.linkedin.databus2.test.container.SimpleObjectCaptureHandler)7 DatabusRelayConnectionStateMessage (com.linkedin.databus.client.DatabusRelayConnectionStateMessage)6