#include <tee_internal_api.h>
#include <protocol.h>
#include <socket_utils.h>
#include <stdio.h>
#include <unistd.h>

extern ProtocolCmd g_cmd_buffer;
extern PersObjectCmd g_po_cmd_buffer;
// should get all information from current command buffer
bool GetCancellationFlag(void) {
  uint8_t res = 0;
  SocketStatus status = SocketStatusOk;

  TEE_MemFill(&g_po_cmd_buffer, 0x00, sizeof(g_po_cmd_buffer));
  g_po_cmd_buffer.cmd_id = PROTOCOL_COMMAND_GETCANCELFLAG;
  g_po_cmd_buffer.data_len = 1;
  g_po_cmd_buffer.teec_oper = g_cmd_buffer.teec_oper;

  struct sockaddr_un addr = { 0 };
  int sock_ = -1;

  addr.sun_family = AF_UNIX;
  snprintf(addr.sun_path, sizeof(addr.sun_path) - 1, "%u",
           g_cmd_buffer.service_data);

  status = OpenSocket(&addr, &sock_);

  if (SocketStatusOk != status) {
    goto exit;
  }

  status = WriteCancelData(sock_, &g_po_cmd_buffer);
  if (SocketStatusOk != status) {
    goto exit;
  }

  status = ReadCancelData(sock_, &g_po_cmd_buffer);
  if (SocketStatusOk == status) {
    TEE_MemMove(&res, g_po_cmd_buffer.data, 1);
  }

exit:

  if (sock_ >= 0) {
    close(sock_);
  }
  return res;
}
