Skip to content

Commit fe10a64

Browse files
committed
fixed rare framing bug
1 parent 7b0fd66 commit fe10a64

3 files changed

Lines changed: 7 additions & 8 deletions

File tree

example/ChatServer.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,7 @@ public void onClose( WebSocket conn, int code, String reason, boolean remote ) {
3737
@Override
3838
public void onMessage( WebSocket conn, String message ) {
3939
this.sendToAll( message );
40-
41-
this.sendToAll( message );
42-
43-
// System.out.println( conn + ": " + message );
40+
System.out.println( conn + ": " + message );
4441
}
4542

4643
public static void main( String[] args ) throws InterruptedException , IOException {

src/org/java_websocket/drafts/Draft_75.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ protected List<Framedata> translateRegularFrame( ByteBuffer buffer ) throws Inva
158158
}
159159
if( readingState ) {
160160
FramedataImpl1 curframe = new FramedataImpl1();
161+
currentFrame.flip();
161162
curframe.setPayload( currentFrame );
162163
curframe.setFin( false );
163164
curframe.setOptcode( inframe ? Opcode.CONTINIOUS : Opcode.TEXT );

src/org/java_websocket/framing/FramedataImpl1.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,16 @@ public void append( Framedata nextframe ) throws InvalidFrameException {
8585
b.mark();
8686
unmaskedpayload.position( unmaskedpayload.limit() );
8787
unmaskedpayload.limit( unmaskedpayload.capacity() );
88-
if( unmaskedpayload.hasRemaining() )
89-
unmaskedpayload.put( b );
90-
if( b.hasRemaining() ) {
88+
89+
if( b.remaining() > unmaskedpayload.remaining() ) {
9190
ByteBuffer tmp = ByteBuffer.allocate( b.remaining() + unmaskedpayload.capacity() );
9291
unmaskedpayload.flip();
9392
tmp.put( unmaskedpayload );
9493
tmp.put( b );
9594
unmaskedpayload = tmp;
9695

96+
} else {
97+
unmaskedpayload.put( b );
9798
}
9899
unmaskedpayload.rewind();
99100
b.reset();
@@ -103,7 +104,7 @@ public void append( Framedata nextframe ) throws InvalidFrameException {
103104

104105
@Override
105106
public String toString() {
106-
return "Framedata{ optcode:" + getOpcode() + ", fin:" + isFin() + ", payloadlength:" + unmaskedpayload.limit() + ", payload:" + Arrays.toString(Charsetfunctions.utf8Bytes( new String( unmaskedpayload.array() ) ) ) + "}";
107+
return "Framedata{ optcode:" + getOpcode() + ", fin:" + isFin() + ", payloadlength:" + unmaskedpayload.limit() + ", payload:" + Arrays.toString( Charsetfunctions.utf8Bytes( new String( unmaskedpayload.array() ) ) ) + "}";
107108
}
108109

109110
}

0 commit comments

Comments
 (0)