// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdio.h>
#include <string.h>
#include <xdc-server-utils/packet.h>

zx_status_t xdc_update_packet_state(xdc_packet_state_t* packet_state,
                                    void* data, size_t data_len, bool* out_new_packet) {
    // If we've received all the bytes for a packet, this data buffer must be the start
    // of a new xdc packet, and contain the xdc packet header.
    bool new_packet = packet_state->bytes_received >= packet_state->header.total_length;
    if (new_packet) {
        if (data_len < sizeof(xdc_packet_header_t)) {
            fprintf(stderr, "malformed header, only received %zu bytes\n", data_len);
            return ZX_ERR_BAD_STATE;
        }
        memcpy(&packet_state->header, data, sizeof(xdc_packet_header_t));
        packet_state->bytes_received = 0;
    }
    packet_state->bytes_received += data_len;
    if (out_new_packet) {
        *out_new_packet = new_packet;
    }
    return ZX_OK;
}
