@@ -235,55 +235,57 @@ private Opcode toOpcode(byte opcode) throws InvalidFrameException {
235235
236236 @ Override
237237 public List <Framedata > translateFrame (ByteBuffer buffer ) throws LimitExedeedException , InvalidDataException {
238- List <Framedata > frames = new LinkedList <Framedata >();
239- Framedata cur ;
240-
241- if (incompleteframe != null ) {
242- // complete an incomplete frame
243- try {
244- buffer .mark ();
245- int available_next_byte_count = buffer .remaining ();// The number of bytes received
246- int expected_next_byte_count = incompleteframe .remaining ();// The number of bytes to complete the incomplete frame
247-
248- if (expected_next_byte_count > available_next_byte_count ) {
249- // did not receive enough bytes to complete the frame
250- incompleteframe .put (buffer .array (), buffer .position (), available_next_byte_count );
251- buffer .position (buffer .position () + available_next_byte_count );
252- return Collections .emptyList ();
238+ while (true ) {
239+ List <Framedata > frames = new LinkedList <Framedata >();
240+ Framedata cur ;
241+
242+ if (incompleteframe != null ) {
243+ // complete an incomplete frame
244+ try {
245+ buffer .mark ();
246+ int available_next_byte_count = buffer .remaining ();// The number of bytes received
247+ int expected_next_byte_count = incompleteframe .remaining ();// The number of bytes to complete the incomplete frame
248+
249+ if (expected_next_byte_count > available_next_byte_count ) {
250+ // did not receive enough bytes to complete the frame
251+ incompleteframe .put (buffer .array (), buffer .position (), available_next_byte_count );
252+ buffer .position (buffer .position () + available_next_byte_count );
253+ return Collections .emptyList ();
254+ }
255+ incompleteframe .put (buffer .array (), buffer .position (), expected_next_byte_count );
256+ buffer .position (buffer .position () + expected_next_byte_count );
257+
258+ cur = translateSingleFrame ((ByteBuffer ) incompleteframe .duplicate ().position (0 ));
259+ frames .add (cur );
260+ incompleteframe = null ;
261+ } catch (IncompleteException e ) {
262+ // extending as much as suggested
263+ int oldsize = incompleteframe .limit ();
264+ ByteBuffer extendedframe = ByteBuffer .allocate (checkAlloc (e .getPreferedSize ()));
265+ assert (extendedframe .limit () > incompleteframe .limit ());
266+ incompleteframe .rewind ();
267+ extendedframe .put (incompleteframe );
268+ incompleteframe = extendedframe ;
269+ continue ;
253270 }
254- incompleteframe .put (buffer .array (), buffer .position (), expected_next_byte_count );
255- buffer .position (buffer .position () + expected_next_byte_count );
256-
257- cur = translateSingleFrame ((ByteBuffer ) incompleteframe .duplicate ().position (0 ));
258- frames .add (cur );
259- incompleteframe = null ;
260- } catch (IncompleteException e ) {
261- // extending as much as suggested
262- int oldsize = incompleteframe .limit ();
263- ByteBuffer extendedframe = ByteBuffer .allocate (checkAlloc (e .getPreferedSize ()));
264- assert (extendedframe .limit () > incompleteframe .limit ());
265- incompleteframe .rewind ();
266- extendedframe .put (incompleteframe );
267- incompleteframe = extendedframe ;
268- return translateFrame (buffer );
269271 }
270- }
271272
272- while (buffer .hasRemaining ()) {// Read as much as possible full frames
273- buffer .mark ();
274- try {
275- cur = translateSingleFrame (buffer );
276- frames .add (cur );
277- } catch (IncompleteException e ) {
278- // remember the incomplete data
279- buffer .reset ();
280- int pref = e .getPreferedSize ();
281- incompleteframe = ByteBuffer .allocate (checkAlloc (pref ));
282- incompleteframe .put (buffer );
283- break ;
273+ while (buffer .hasRemaining ()) {// Read as much as possible full frames
274+ buffer .mark ();
275+ try {
276+ cur = translateSingleFrame (buffer );
277+ frames .add (cur );
278+ } catch (IncompleteException e ) {
279+ // remember the incomplete data
280+ buffer .reset ();
281+ int pref = e .getPreferedSize ();
282+ incompleteframe = ByteBuffer .allocate (checkAlloc (pref ));
283+ incompleteframe .put (buffer );
284+ break ;
285+ }
284286 }
287+ return frames ;
285288 }
286- return frames ;
287289 }
288290
289291 public Framedata translateSingleFrame (ByteBuffer buffer ) throws IncompleteException , InvalidDataException {
0 commit comments