AtGsmSimCom7600_CA/AtGsmSimComA7600_SSL_LOAD_CA.c

157 lines
4.6 KiB
C

//
// Created by cfif on 23.05.2024.
//
#include "AtGsmSimComA7600_SSL_LOAD_CA.h"
#include "SystemDelayInterface.h"
#include "string.h"
tIsFind AtGsmSimComA7600_SSL_CHECK_CA(tAtCmd *env,
const char *fileName1, uint16_t FileNameLen1,
const char *fileName2, uint16_t FileNameLen2,
const char *fileName3, uint16_t FileNameLen3,
uint32_t timeout) {
tIsFind isFind;
isFind.isFind1 = false;
isFind.isFind2 = false;
isFind.isFind3 = false;
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+CCERTLIST\r\n");
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "+CCERTLIST: ")) {
if (!isFind.isFind1) {
if (memcmp(fileName1, env->rxBuffer.data + sizeof("+CCERTLIST: "), FileNameLen1) == 0) {
isFind.isFind1 = true;
}
}
if (!isFind.isFind2) {
if (memcmp(fileName2, env->rxBuffer.data + sizeof("+CCERTLIST: "), FileNameLen2) == 0) {
isFind.isFind2 = true;
}
}
if (!isFind.isFind3) {
if (memcmp(fileName3, env->rxBuffer.data + sizeof("+CCERTLIST: "), FileNameLen3) == 0) {
isFind.isFind3 = true;
}
}
if ((isFind.isFind1) && (isFind.isFind2) && (isFind.isFind3))
return isFind;
}
}
return isFind;
}
void AtGsmSimComA7600_SSL_DEL_ONE_CA(tAtCmd *env,
const char *fileName1, uint16_t FileNameLen1) {
AtCmdPrepare(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCERTDELE=");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, (char *) fileName1, FileNameLen1);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
void AtGsmSimComA7600_SSL_DEL_CA(tAtCmd *env,
const char *fileName1, uint16_t FileNameLen1,
const char *fileName2, uint16_t FileNameLen2,
const char *fileName3, uint16_t FileNameLen3) {
AtCmdPrepare(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCERTDELE=");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, (char *) fileName1, FileNameLen1);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
AtCmdOkErrAnswer(env, env->stdRxTimeout);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCERTDELE=");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, (char *) fileName2, FileNameLen2);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
AtCmdOkErrAnswer(env, env->stdRxTimeout);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCERTDELE=");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, (char *) fileName3, FileNameLen3);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
AtCommandResult
AtGsmSimComA7600_SSL_LOAD_CA(tAtCmd *env, const char *fileName, uint16_t FileNameLen, unsigned char *data,
uint16_t dataLen, uint32_t timeout) {
AtCmdPrepare(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCERTDOWN=");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, (char *) fileName, FileNameLen);
AtCmdTxAddChar(env, '"');
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, dataLen, 5);
AtCmdTxSendLn(env);
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextChar(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxIsCompleteLine(env)) {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
} else {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
}
}
}
return AT_TIMEOUT;
}