1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.car.trust; 18 19 import android.annotation.NonNull; 20 21 import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage; 22 23 import java.io.ByteArrayOutputStream; 24 import java.io.IOException; 25 26 /** 27 * Manage a stream in which the {@code payload} field of 28 * {@link com.android.car.trust.BLEStream.BLEMessage} is written to. 29 */ 30 class BLEMessagePayloadStream { 31 private ByteArrayOutputStream mPendingData = new ByteArrayOutputStream(); 32 private boolean mIsComplete; 33 34 /** 35 * Clears this data stream. 36 */ reset()37 public void reset() { 38 mPendingData.reset(); 39 mIsComplete = false; 40 } 41 42 /** 43 * Extracts the payload from the given {@code BLEMessage} and writes it to the stream. 44 * 45 * @param message The {@link com.android.car.trust.BLEStream.BLEMessage} to parse. 46 */ write(BLEMessage message)47 public void write(BLEMessage message) throws IOException { 48 mPendingData.write(message.getPayload().toByteArray()); 49 mIsComplete = message.getPacketNumber() == message.getTotalPackets(); 50 } 51 52 /** 53 * Returns {@code true} if a complete payload has been formed. 54 */ isComplete()55 public boolean isComplete() { 56 return mIsComplete; 57 } 58 59 /** 60 * Returns the current contents of a stream as a byte array. 61 */ 62 @NonNull toByteArray()63 public byte[] toByteArray() { 64 return mPendingData.toByteArray(); 65 } 66 } 67