104 lines
3.4 KiB
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;
|
|
} |