32 #define TRACE_LEVEL ACME_TRACE_LEVEL
42 #if (ACME_CLIENT_SUPPORT == ENABLED)
66 TRACE_DEBUG(
"###############################################################################\r\n");
67 TRACE_DEBUG(
"## GET DIRECTORY ##############################################################\r\n");
68 TRACE_DEBUG(
"###############################################################################\r\n");
72 if(context->directory.newNonce[0] !=
'\0' &&
73 context->directory.newAccount[0] !=
'\0' &&
74 context->directory.newOrder[0] !=
'\0' &&
75 context->directory.revokeCert[0] !=
'\0' &&
76 context->directory.keyChange[0] !=
'\0')
93 context->directoryUri);
148 json_t *newAccountObj;
150 json_t *revokeCertObj;
151 json_t *keyChangeObj;
158 if(
osStrcasecmp(context->contentType,
"application/json"))
172 rootObj = json_loads(context->buffer, 0, NULL);
175 if(json_is_object(rootObj))
179 newNonceObj = json_object_get(rootObj,
"newNonce");
180 newAccountObj = json_object_get(rootObj,
"newAccount");
181 newOrderObj = json_object_get(rootObj,
"newOrder");
182 revokeCertObj = json_object_get(rootObj,
"revokeCert");
183 keyChangeObj = json_object_get(rootObj,
"keyChange");
186 if(json_is_string(newNonceObj) &&
187 json_is_string(newAccountObj) &&
188 json_is_string(newOrderObj) &&
189 json_is_string(revokeCertObj) &&
190 json_is_string(keyChangeObj))
193 newNonce = json_string_value(newNonceObj);
194 newAccount = json_string_value(newAccountObj);
195 newOrder = json_string_value(newOrderObj);
196 revokeCert = json_string_value(revokeCertObj);
197 keyChange = json_string_value(keyChangeObj);
207 osStrcpy(context->directory.newNonce, newNonce);
208 osStrcpy(context->directory.newAccount, newAccount);
209 osStrcpy(context->directory.newOrder, newOrder);
210 osStrcpy(context->directory.revokeCert, revokeCert);
211 osStrcpy(context->directory.keyChange, keyChange);
220 json_decref(rootObj);
ACME client (Automatic Certificate Management Environment)
#define ACME_CLIENT_BUFFER_SIZE
@ ACME_REQ_STATE_PARSE_BODY
@ ACME_REQ_STATE_RECEIVE_BODY
@ ACME_REQ_STATE_CLOSE_BODY
@ ACME_REQ_STATE_RECEIVE_HEADER
@ ACME_REQ_STATE_SEND_HEADER
@ ACME_REQ_STATE_FORMAT_HEADER
@ ACME_REQ_STATE_PARSE_HEADER
#define ACME_CLIENT_MAX_URL_LEN
#define AcmeClientContext
error_t acmeClientSendDirectoryRequest(AcmeClientContext *context)
Send HTTP request (directory URL)
error_t acmeClientParseDirectoryResponse(AcmeClientContext *context)
Parse HTTP response (directory URL)
Directory object management.
error_t acmeClientSendRequest(AcmeClientContext *context)
Send HTTP request.
error_t acmeClientFormatRequestHeader(AcmeClientContext *context, const char_t *method, const char_t *url)
Format HTTP request header.
Helper functions for ACME client.
@ ERROR_RESPONSE_TOO_LARGE
@ ERROR_UNEXPECTED_STATUS
#define HTTP_STATUS_CODE_2YZ(code)
#define osMemset(p, value, length)
#define osStrcasecmp(s1, s2)