diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-08-03 09:26:29 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-08-03 09:26:29 +0300 |
commit | 922ad3220909b7314ca629949b44d7d3aa0336b2 (patch) | |
tree | 7e049981dd15e896d10d44b443228f00425b1a6f /src/gmrequest.c | |
parent | e4681eca785d1b090da2d26dc2a0e32abf0217b9 (diff) |
Working on server certificates
Diffstat (limited to 'src/gmrequest.c')
-rw-r--r-- | src/gmrequest.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gmrequest.c b/src/gmrequest.c index f43e4220..32b386b2 100644 --- a/src/gmrequest.c +++ b/src/gmrequest.c | |||
@@ -20,6 +20,7 @@ struct Impl_GmRequest { | |||
20 | iObject object; | 20 | iObject object; |
21 | iMutex mutex; | 21 | iMutex mutex; |
22 | enum iGmRequestState state; | 22 | enum iGmRequestState state; |
23 | enum iGmRequestCertification certState; | ||
23 | iString url; | 24 | iString url; |
24 | iTlsRequest *req; | 25 | iTlsRequest *req; |
25 | enum iGmStatusCode code; | 26 | enum iGmStatusCode code; |
@@ -37,6 +38,7 @@ iDefineAudienceGetter(GmRequest, finished) | |||
37 | void init_GmRequest(iGmRequest *d) { | 38 | void init_GmRequest(iGmRequest *d) { |
38 | init_Mutex(&d->mutex); | 39 | init_Mutex(&d->mutex); |
39 | d->state = initialized_GmRequestState; | 40 | d->state = initialized_GmRequestState; |
41 | d->certState = notApplicable_GmRequestCertification; | ||
40 | init_String(&d->url); | 42 | init_String(&d->url); |
41 | d->req = NULL; | 43 | d->req = NULL; |
42 | d->code = none_GmStatusCode; | 44 | d->code = none_GmStatusCode; |
@@ -166,6 +168,7 @@ static void requestFinished_GmRequest_(iAnyObject *obj) { | |||
166 | d->state = finished_GmRequestState; | 168 | d->state = finished_GmRequestState; |
167 | #if 1 | 169 | #if 1 |
168 | /* Check the server certificate. */ { | 170 | /* Check the server certificate. */ { |
171 | d->certState = invalid_GmRequestCertification; /* check trust */ | ||
169 | const iTlsCertificate *cert = serverCertificate_TlsRequest(d->req); | 172 | const iTlsCertificate *cert = serverCertificate_TlsRequest(d->req); |
170 | printf("Server certificate:\n%s\n", cstrLocal_String(pem_TlsCertificate(cert))); | 173 | printf("Server certificate:\n%s\n", cstrLocal_String(pem_TlsCertificate(cert))); |
171 | iBlock *sha = fingerprint_TlsCertificate(cert); | 174 | iBlock *sha = fingerprint_TlsCertificate(cert); |
@@ -208,6 +211,7 @@ void submit_GmRequest(iGmRequest *d) { | |||
208 | /* TODO: Check supported file types: images, audio */ | 211 | /* TODO: Check supported file types: images, audio */ |
209 | /* TODO: Detect text files based on contents? E.g., is the content valid UTF-8. */ | 212 | /* TODO: Detect text files based on contents? E.g., is the content valid UTF-8. */ |
210 | d->code = success_GmStatusCode; | 213 | d->code = success_GmStatusCode; |
214 | d->certState = notApplicable_GmRequestCertification; | ||
211 | if (endsWithCase_String(path, ".gmi")) { | 215 | if (endsWithCase_String(path, ".gmi")) { |
212 | setCStr_String(&d->header, "text/gemini; charset=utf-8"); | 216 | setCStr_String(&d->header, "text/gemini; charset=utf-8"); |
213 | } | 217 | } |
@@ -235,11 +239,13 @@ void submit_GmRequest(iGmRequest *d) { | |||
235 | } | 239 | } |
236 | iRelease(f); | 240 | iRelease(f); |
237 | d->state = finished_GmRequestState; | 241 | d->state = finished_GmRequestState; |
242 | d->certState = notApplicable_GmRequestCertification; | ||
238 | iNotifyAudience(d, finished, GmRequestFinished); | 243 | iNotifyAudience(d, finished, GmRequestFinished); |
239 | return; | 244 | return; |
240 | } | 245 | } |
241 | else if (equalCase_Rangecc(&url.protocol, "data")) { | 246 | else if (equalCase_Rangecc(&url.protocol, "data")) { |
242 | d->code = success_GmStatusCode; | 247 | d->code = success_GmStatusCode; |
248 | d->certState = notApplicable_GmRequestCertification; | ||
243 | iString *src = collectNewCStr_String(url.protocol.start + 5); | 249 | iString *src = collectNewCStr_String(url.protocol.start + 5); |
244 | iRangecc header = { constBegin_String(src), constBegin_String(src) }; | 250 | iRangecc header = { constBegin_String(src), constBegin_String(src) }; |
245 | while (header.end < constEnd_String(src) && *header.end != ',') { | 251 | while (header.end < constEnd_String(src) && *header.end != ',') { |