@@ -74,7 +74,7 @@ public WebSocketFrame setPayload(byte[] payload) {
7474 return this ;
7575 }
7676
77- public void write (OutputStream stream ) throws IOException {
77+ public synchronized void write (OutputStream stream ) throws IOException {
7878 stream .write (flags | opcode );
7979 int lengthByte = payload .length > 125 ? (payload .length > 0xFFFF ? 127 : 126 ) : payload .length ;
8080 stream .write ((maskKey != null ? 0b1000_0000 : 0 ) | lengthByte );
@@ -97,37 +97,39 @@ public void write(OutputStream stream) throws IOException {
9797 }
9898
9999 public static WebSocketFrame read (InputStream stream ) throws IOException {
100- WebSocketFrame frame = new WebSocketFrame ();
101- byte b = safeRead (stream );
102- frame .flags = (byte ) (b & 0xF0 );
103- frame .opcode = (byte ) (b & 0x0F );
104- b = safeRead (stream );
105- frame .maskKey = ((b & 0xFF ) >> 7 ) == 1 ? new byte [4 ] : null ;
106- int len = b & 0b0111_1111;
107- if (len == 126 ) {
108- len = safeRead (stream ) << 8 ;
109- len |= safeRead (stream );
110- } else if (len == 127 ) {
111- len = safeRead (stream ) << 24 ;
112- len |= safeRead (stream ) << 16 ;
113- len |= safeRead (stream ) << 8 ;
114- len |= safeRead (stream );
100+ synchronized (stream ) {
101+ WebSocketFrame frame = new WebSocketFrame ();
102+ byte b = safeRead (stream );
103+ frame .flags = (byte ) (b & 0xF0 );
104+ frame .opcode = (byte ) (b & 0x0F );
105+ b = safeRead (stream );
106+ frame .maskKey = ((b & 0xFF ) >> 7 ) == 1 ? new byte [4 ] : null ;
107+ int len = b & 0b0111_1111;
108+ if (len == 126 ) {
109+ len = safeRead (stream ) << 8 ;
110+ len |= safeRead (stream );
111+ } else if (len == 127 ) {
112+ len = safeRead (stream ) << 24 ;
113+ len |= safeRead (stream ) << 16 ;
114+ len |= safeRead (stream ) << 8 ;
115+ len |= safeRead (stream );
116+ }
117+ if (frame .maskKey != null ) {
118+ frame .maskKey [0 ] = safeRead (stream );
119+ frame .maskKey [1 ] = safeRead (stream );
120+ frame .maskKey [2 ] = safeRead (stream );
121+ frame .maskKey [3 ] = safeRead (stream );
122+ }
123+ frame .payload = new byte [len ];
124+ if (frame .maskKey != null ) {
125+ for (int i =0 ; i <len ; i ++)
126+ frame .payload [i ] = (byte ) (safeRead (stream ) ^ frame .maskKey [i % 4 ]);
127+ } else {
128+ for (int i =0 ; i <len ; i ++)
129+ frame .payload [i ] = safeRead (stream );
130+ }
131+ return frame ;
115132 }
116- if (frame .maskKey != null ) {
117- frame .maskKey [0 ] = safeRead (stream );
118- frame .maskKey [1 ] = safeRead (stream );
119- frame .maskKey [2 ] = safeRead (stream );
120- frame .maskKey [3 ] = safeRead (stream );
121- }
122- frame .payload = new byte [len ];
123- if (frame .maskKey != null ) {
124- for (int i =0 ; i <len ; i ++)
125- frame .payload [i ] = (byte ) (safeRead (stream ) ^ frame .maskKey [i % 4 ]);
126- } else {
127- for (int i =0 ; i <len ; i ++)
128- frame .payload [i ] = safeRead (stream );
129- }
130- return frame ;
131133 }
132134
133135 private static byte safeRead (InputStream stream ) throws IOException {
0 commit comments