ComIntCmd_Certs/CertsGet.c

104 lines
3.4 KiB
C

//
// Created by cfif on 03.06.2024.
//
#include "Certs.h"
#include "string.h"
uint8_t
XfcProtMethod_CertsGetVar(tXfcArray *request, tXfcArray *response, tCerts *certs, char *paramValueID_text, uint8_t paramValueID_len) {
// Текстовый вид ID
XFC_CMD_TX_ADD_RAW(paramValueID_len);
XFC_CMD_TX_ADD_ARR(paramValueID_text, paramValueID_len);
if (memcmp(paramValueID_text, "CACERT", sizeof("CACERT") - 1) == 0) {
uint16_t len = certs->cacert.length;
// Размер данных
XFC_CMD_TX_ADD_RAW(len);
// Данные
XFC_CMD_TX_ADD_ARR(certs->cacert.data, len);
return true;
}
if (memcmp(paramValueID_text, "CLIENTCERT", sizeof("CLIENTCERT") - 1) == 0) {
uint16_t len = certs->clientcert.length;
// Размер данных
XFC_CMD_TX_ADD_RAW(len);
// Данные
XFC_CMD_TX_ADD_ARR(certs->clientcert.data, len);
return true;
}
if (memcmp(paramValueID_text, "CLIENTKEY", sizeof("CLIENTKEY") - 1) == 0) {
uint16_t len = certs->clientkey.length;
// Размер данных
XFC_CMD_TX_ADD_RAW(len);
// Данные
XFC_CMD_TX_ADD_ARR(certs->clientkey.data, len);
return true;
}
return false;
}
uint8_t XfcProtMethod_CertsGet(tXfcArray *request, tXfcArray *response, tCerts *certs) {
// Чтение всех параметров
if (XfcArrayGetDataSize(request) == 0) {
uint16_t paramCount = 3;
// Количество параметров
XFC_CMD_TX_ADD_RAW(paramCount);
uint8_t paramValueID_len;
char paramValueID_text[20];
paramValueID_len = sizeof("CACERT") - 1;
paramValueID_text[0] = '\0';
strcat(paramValueID_text, "CACERT");
if (!XfcProtMethod_CertsGetVar(request, response, certs, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
paramValueID_len = sizeof("CLIENTCERT") - 1;
paramValueID_text[0] = '\0';
strcat(paramValueID_text, "CLIENTCERT");
if (!XfcProtMethod_CertsGetVar(request, response, certs, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
paramValueID_len = sizeof("CLIENTKEY") - 1;
paramValueID_text[0] = '\0';
strcat(paramValueID_text, "CLIENTKEY");
if (!XfcProtMethod_CertsGetVar(request, response, certs, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}
// Чтение избранных параметров
uint16_t paramCount;
XFC_CMD_RX_GET_RAW(paramCount);
// Количество параметров
XFC_CMD_TX_ADD_RAW(paramCount);
for (uint16_t count = 0; count < paramCount; ++count) {
// Получение текстового id параметра
uint8_t paramValueID_len;
XFC_CMD_RX_GET_RAW(paramValueID_len);
char paramValueID_text[paramValueID_len];
XFC_CMD_RX_GET_ARR(paramValueID_text, paramValueID_len);
if (!XfcProtMethod_CertsGetVar(request, response, certs, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}