I see.  Thank you for the detailed explanation!

Trustin

On 1/22/07, Steven E. Harris <[EMAIL PROTECTED]> wrote:

Trustin Lee <[EMAIL PROTECTED]> writes:

> Could you let me know where did you find such a problem so I can fix
> it?

I think it was the httpserver example, in the HttpRequestDecoder.¹ The
code doesn't look exactly as I remember it, but note the
messageComplete() method, called by decodable(). It does a lot of
parsing to make sure that the entire POST entity has been
received. It's not necessary for the whole message to have been
received for decodable() to arrive at its answer, the answer to the
question, "Can you handle this kind of message?" Also, all this
parsing will be repeated on each subsequent call to decodable(), as no
state is maintained to keep track of what was already parsed
successfully.

The decode() function can also do incremental consumption, returning
NEED_DATA when not enough data is present to finish its job. It looks
like decodable()/messsageComplete() was written at one time, and
decode()/decodeBody() at some other time, maybe by someone else, in
that they don't wind up sharing much between them.

I'm being picky because I've been writing my own HTTP client, and was
initially confused by the decodable()/decode() split, until I realized
that that was specific to /Messages/ rather than the more general
Protocol codec interfaces.


Footnotes:
¹
http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/codec/HttpRequestDecoder.java?view=markup

--
Steven E. Harris




--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP key fingerprints:
* E167 E6AF E73A CBCE EE41  4A29 544D DE48 FE95 4E7E
* B693 628E 6047 4F8F CFA4  455E 1C62 A7DC 0255 ECA6

Reply via email to