Android Open Source - SimplePushDemoApp Close Frame Builder






From Project

Back to project page SimplePushDemoApp.

License

The source code is released under:

GNU General Public License

If you think the Android project SimplePushDemoApp listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.java_websocket.framing;
/* ww  w  .  ja  va  2 s .com*/
import java.nio.ByteBuffer;

import org.java_websocket.exceptions.InvalidDataException;
import org.java_websocket.exceptions.InvalidFrameException;
import org.java_websocket.util.Charsetfunctions;

public class CloseFrameBuilder extends FramedataImpl1 implements CloseFrame {

  static final ByteBuffer emptybytebuffer = ByteBuffer.allocate( 0 );

  private int code;
  private String reason;

  public CloseFrameBuilder() {
    super( Opcode.CLOSING );
    setFin( true );
  }

  public CloseFrameBuilder( int code ) throws InvalidDataException {
    super( Opcode.CLOSING );
    setFin( true );
    setCodeAndMessage( code, "" );
  }

  public CloseFrameBuilder( int code , String m ) throws InvalidDataException {
    super( Opcode.CLOSING );
    setFin( true );
    setCodeAndMessage( code, m );
  }

  private void setCodeAndMessage( int code, String m ) throws InvalidDataException {
    if( m == null ) {
      m = "";
    }
    // CloseFrame.TLS_ERROR is not allowed to be transfered over the wire
    if( code == CloseFrame.TLS_ERROR ) {
      code = CloseFrame.NOCODE;
      m = "";
    }
    if( code == CloseFrame.NOCODE ) {
      if( 0 < m.length() ) {
        throw new InvalidDataException( PROTOCOL_ERROR, "A close frame must have a closecode if it has a reason" );
      }
      return;// empty payload
    }

    byte[] by = Charsetfunctions.utf8Bytes( m );
    ByteBuffer buf = ByteBuffer.allocate( 4 );
    buf.putInt( code );
    buf.position( 2 );
    ByteBuffer pay = ByteBuffer.allocate( 2 + by.length );
    pay.put( buf );
    pay.put( by );
    pay.rewind();
    setPayload( pay );
  }

  private void initCloseCode() throws InvalidFrameException {
    code = CloseFrame.NOCODE;
    ByteBuffer payload = super.getPayloadData();
    payload.mark();
    if( payload.remaining() >= 2 ) {
      ByteBuffer bb = ByteBuffer.allocate( 4 );
      bb.position( 2 );
      bb.putShort( payload.getShort() );
      bb.position( 0 );
      code = bb.getInt();

      if( code == CloseFrame.ABNORMAL_CLOSE || code == CloseFrame.TLS_ERROR || code == CloseFrame.NOCODE || code > 4999 || code < 1000 || code == 1004 ) {
        throw new InvalidFrameException( "closecode must not be sent over the wire: " + code );
      }
    }
    payload.reset();
  }

  @Override
  public int getCloseCode() {
    return code;
  }

  private void initMessage() throws InvalidDataException {
    if( code == CloseFrame.NOCODE ) {
      reason = Charsetfunctions.stringUtf8( super.getPayloadData() );
    } else {
      ByteBuffer b = super.getPayloadData();
      int mark = b.position();// because stringUtf8 also creates a mark
      try {
        b.position( b.position() + 2 );
        reason = Charsetfunctions.stringUtf8( b );
      } catch ( IllegalArgumentException e ) {
        throw new InvalidFrameException( e );
      } finally {
        b.position( mark );
      }
    }
  }

  @Override
  public String getMessage() {
    return reason;
  }

  @Override
  public String toString() {
    return super.toString() + "code: " + code;
  }

  @Override
  public void setPayload( ByteBuffer payload ) throws InvalidDataException {
    super.setPayload( payload );
    initCloseCode();
    initMessage();
  }
  @Override
  public ByteBuffer getPayloadData() {
    if( code == NOCODE )
      return emptybytebuffer;
    return super.getPayloadData();
  }

}




Java Source Code List

com.mozilla.simplepush.simplepushdemoapp.ApplicationTest.java
com.mozilla.simplepush.simplepushdemoapp.GcmBroadcastReceiver.java
com.mozilla.simplepush.simplepushdemoapp.GcmIntentService.java
com.mozilla.simplepush.simplepushdemoapp.MainActivity.java
org.java_websocket.AbstractWrappedByteChannel.java
org.java_websocket.SSLSocketChannel2.java
org.java_websocket.SocketChannelIOHelper.java
org.java_websocket.WebSocketAdapter.java
org.java_websocket.WebSocketFactory.java
org.java_websocket.WebSocketImpl.java
org.java_websocket.WebSocketListener.java
org.java_websocket.WebSocket.java
org.java_websocket.WrappedByteChannel.java
org.java_websocket.client.AbstractClientProxyChannel.java
org.java_websocket.client.WebSocketClient.java
org.java_websocket.drafts.Draft_10.java
org.java_websocket.drafts.Draft_17.java
org.java_websocket.drafts.Draft_75.java
org.java_websocket.drafts.Draft_76.java
org.java_websocket.drafts.Draft.java
org.java_websocket.exceptions.IncompleteHandshakeException.java
org.java_websocket.exceptions.InvalidDataException.java
org.java_websocket.exceptions.InvalidFrameException.java
org.java_websocket.exceptions.InvalidHandshakeException.java
org.java_websocket.exceptions.LimitExedeedException.java
org.java_websocket.exceptions.NotSendableException.java
org.java_websocket.exceptions.WebsocketNotConnectedException.java
org.java_websocket.framing.CloseFrameBuilder.java
org.java_websocket.framing.CloseFrame.java
org.java_websocket.framing.FrameBuilder.java
org.java_websocket.framing.FramedataImpl1.java
org.java_websocket.framing.Framedata.java
org.java_websocket.handshake.ClientHandshakeBuilder.java
org.java_websocket.handshake.ClientHandshake.java
org.java_websocket.handshake.HandshakeBuilder.java
org.java_websocket.handshake.HandshakeImpl1Client.java
org.java_websocket.handshake.HandshakeImpl1Server.java
org.java_websocket.handshake.HandshakedataImpl1.java
org.java_websocket.handshake.Handshakedata.java
org.java_websocket.handshake.ServerHandshakeBuilder.java
org.java_websocket.handshake.ServerHandshake.java
org.java_websocket.server.DefaultSSLWebSocketServerFactory.java
org.java_websocket.server.DefaultWebSocketServerFactory.java
org.java_websocket.server.WebSocketServer.java
org.java_websocket.util.Base64.java
org.java_websocket.util.Charsetfunctions.java