help required chaining httphandler and proxyhandler
rzo
rzo at gmx.de
Wed Sep 30 14:44:08 EDT 2009
Hello Trustin,
concerning
request.getContentLength()
well this is just "defensive programming".
I was not sure when the http request is sent upstream, so i made sure
that it is complete.
- Ron
Trustin Lee (이희승) wrote:
> Hello Ron,
>
> Glad that you figured out the solution finally. I am perhaps too late!
>
> Just one question. As far as I know, (request.getContentLength() ==
> request.getContent().writerIndex()) is always true. Out of curiosity,
> have you ever encountered the case where the condition is false?
>
> — Trustin Lee, http://gleamynode.net/
>
>
>
> On Fri, Sep 25, 2009 at 3:18 AM, rzo <rzo at gmx.de> wrote:
>
>> hello,
>>
>> I got this working.
>> for those interested here the changes:
>>
>> stophandler:
>>
>> public void messageReceived(ChannelHandlerContext ctx,
>> MessageEvent evt) {
>> if (evt.getMessage() != null)
>> {
>> HttpRequest request = (HttpRequest) evt.getMessage();
>> --> if (request.getContentLength() == 0 ||
>> request.getContentLength() == request.getContent().writerIndex())
>> {
>> ChannelBuffer buf = (ChannelBuffer)
>> ctx.getPipeline().getContext("interceptStart").getAttachment();
>> if (buf == null)
>> {
>> System.out.println("no buff found");
>> }
>> else if (buf.writerIndex() != 0)
>> {
>> -->
>> ctx.getPipeline().getContext("interceptStart").setAttachment(null);
>> ctx.sendUpstream(new
>> UpstreamMessageEvent(evt.getChannel(), buf, evt.getRemoteAddress()));
>> }
>> }
>>
>> }
>> }
>>
>> - Ron
>>
>>
>> rzorzorzo wrote:
>>
>>> hello,
>>>
>>> i am trying to implement a proxy which checks the http requests before
>>> forwarding these to another server.
>>> i tried implementing this with the following pipeline
>>>
>>> starthandler -> HttpRequestDecoder-> stophandler ->
>>> HexDumpProxyInboundHandler
>>>
>>> starthandler:
>>>
>>> remembers the incoming bytes in a dynamic buffer until the httprequest has
>>> been completely parsed
>>>
>>> @Override
>>> public void messageReceived(ChannelHandlerContext ctx, MessageEvent evt)
>>> throws Exception
>>> {
>>> ChannelBuffer m = (ChannelBuffer) evt.getMessage();
>>> ChannelBuffer buf = (ChannelBuffer) ctx.getAttachment();
>>> if (buf == null)
>>> {
>>> buf = dynamicBuffer();
>>> ctx.setAttachment(buf);
>>> }
>>> m.markReaderIndex();
>>> buf.writeBytes(m);
>>> m.resetReaderIndex();
>>> super.messageReceived(ctx, evt);
>>> }
>>>
>>> stophandler
>>>
>>>
>>> @Override
>>> public void messageReceived(ChannelHandlerContext ctx, MessageEvent evt)
>>> {
>>> if (isOk((HttpRequest)evt.getMessage()))
>>> {
>>> ChannelBuffer buf = (ChannelBuffer)
>>> ctx.getPipeline().getContext("interceptStart").getAttachment();
>>> ctx.sendUpstream(new UpstreamMessageEvent(evt.getChannel(), buf,
>>> evt.getRemoteAddress()));
>>>
>>> }
>>> }
>>>
>>> both extend simple channel upstream handler and
>>> @ChannelPipelineCoverage("one")
>>>
>>> for the first page this seems to work well, but for subsequent http requests
>>> not.
>>>
>>> any hints or help or other ideas how to implement this with netty ?
>>>
>>> - Ron
>>>
>>>
>>>
>> _______________________________________________
>> netty-users mailing list
>> netty-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/netty-users
>>
>>
>
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
>
>
>
More information about the netty-users
mailing list