11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipackage org.chromium.components.devtools_bridge; 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport java.nio.ByteBuffer; 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Decodes data packets of SocketTunnelClient and SocketTunnelServer for tests. 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic final class PacketDecoder extends SocketTunnelBase.PacketDecoderBase { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private boolean mControlPacket = false; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private boolean mDataPacket; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private int mOpCode; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private int mConnectionId; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private byte[] mData; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected void onReceivedDataPacket(int connectionId, byte[] data) { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDataPacket = true; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mConnectionId = connectionId; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mData = data; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected void onReceivedControlPacket(int connectionId, byte opCode) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mControlPacket = true; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mOpCode = opCode; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mConnectionId = connectionId; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static PacketDecoder tryDecode(ByteBuffer packet) throws SocketTunnelBase.ProtocolError { 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PacketDecoder decoder = new PacketDecoder(); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci decoder.decodePacket(packet); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return decoder; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static PacketDecoder decode(ByteBuffer packet) { 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci try { 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return tryDecode(packet); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } catch (SocketTunnelBase.ProtocolError e) { 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci throw new RuntimeException(e); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public boolean isControlPacket() { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return mControlPacket; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public boolean isDataPacket() { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return mDataPacket; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public int opCode() { 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert isControlPacket(); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return mOpCode; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public int connectionId() { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return mConnectionId; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public byte[] data() { 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert isDataPacket(); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return mData.clone(); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 68