users@grizzly.java.net

Re: [Q] Testing ProtocolFilter

From: Erik Svensson <erik_at_phlogiston.se>
Date: Fri, 7 Mar 2008 19:34:44 +0100

On Mar 7, 2008, at 17:03 , Simon Trudeau wrote:

> Have you filled up a ticket about the compacting issue?

That I haven't.

> Have you posted the code for your protocol parser? Here's mine, maybe
> you can give me some tips! :.)

I haven't done that either. We're looking at using grizzly inhouse
and it was in that context I wrote
the protocol parser. I had thoughts about writing a tutorial/blog
post about it but there aren't all that much time right now.
At work I have more pressing concerns. I

I attach my protocol parser to this mail so you can look at it. It's
not tested with 1.7.2, though.

Basically it uses a class XFlowMessage that contains the parser to
parse the byte buffer into xflow messages.

> I will add your buffer compacting tip!

I'll look at your code and see if I can come up with something. Just
the thing the wife wants me to do on a friday evening :-)

cheers

/Erik



>
> Simon
>
> -----Original Message-----
> From: Erik Svensson [mailto:erik.svensson_at_six.se]
> Sent: March-07-08 10:56 AM
> To: users_at_grizzly.dev.java.net
> Subject: Re: [Q] Testing ProtocolFilter
>
> On 3/7/08 4:40 PM, "Simon Trudeau" <strudeau_at_bluetreewireless.com>
> wrote:
>
>> I would like to know, how can I test my protocol filter. I would like
> to
>> simulate, using unit tests, a truncated message.
>>
>>
>>
>> I try invoking the connectorHandler's send() method twice (part1 and
>> part2 of my message) with a Thread.sleep in between but the protocol
>> parsers doesn't think tokens are missing, it sees the two different
>> operations as two different message. Does this has something with
> TCP/IP
>> where the stack is configured to "know" the packet received has been
>> truncated or do I need to investigate my ProtocolFilter further. How
>> should I test this?
>>
>>
>>
>> client.connect(new
>> InetSocketAddress(InetAddress.getLocalHost(), serverPort));
>>
>> ByteBuffer outputByteBuffer1 = ByteBuffer.wrap(new
>> String("\r\nPA").getBytes());
>>
>> ByteBuffer outputByteBuffer2 = ByteBuffer.wrap(new
>> String("SS\r\n\0").getBytes());
>>
>> client.send(outputByteBuffer1);
>>
>> Thread.sleep(25);
>>
>> client.send(outputByteBuffer2);
>>
>
> I haven't looked at your previously posted code but I've written a
> ProtocolParser. tcp knows nothing about messages nor does it know
> anything
> about the semantics of your message.
> Your ProtocolParser needs to be able to determine if it has received a
> complete message and then return true when the 'I need more data'-
> method
> is
> called.
>
> I also found that I had to do a compact() on my incoming bytebuffer
> when
> the
> ReleaseBuffer() is called.
> Otherwise, if you can't read a complete message the bytebuffer will
> just
> fill up until there's no more space and you don't get any more
> messages.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>
> <MyProtocolParser.java>-----------------------------------------------
> ----------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net