@@ -235,55 +235,57 @@ private Opcode toOpcode(byte opcode) throws InvalidFrameException {
235
235
236
236
@ Override
237
237
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 ;
253
270
}
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 );
269
271
}
270
- }
271
272
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
+ }
284
286
}
287
+ return frames ;
285
288
}
286
- return frames ;
287
289
}
288
290
289
291
public Framedata translateSingleFrame (ByteBuffer buffer ) throws IncompleteException , InvalidDataException {
0 commit comments