MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / addAuthorization

Method addAuthorization

Libraries/HttpClient/HttpClientSession.cpp:661–692  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

659}
660
661SC::Result SC::HttpClientSession::addAuthorization(StringSpan origin, StringSpan authorizationHeader)
662{
663 SC_TRY_MSG(initialized, "HttpClientSession: not initialized");
664 SC_TRY_MSG(not origin.isEmpty(), "HttpClientSession: auth origin missing");
665 SC_TRY_MSG(not authorizationHeader.isEmpty(), "HttpClientSession: authorization header missing");
666 SC_TRY_MSG(not sessionHasHttpHeaderUnsafeBytes(authorizationHeader),
667 "HttpClientSession: authorization header contains invalid bytes");
668 ParsedUrl parsedOrigin;
669 SC_TRY_MSG(parseUrl(origin, parsedOrigin), "HttpClientSession: auth origin is invalid");
670 SC_TRY_MSG(parsedOrigin.origin.sizeInBytes() == origin.sizeInBytes(),
671 "HttpClientSession: auth origin must not include path, query, or fragment");
672
673 HttpClientSessionAuthCacheEntry* target = nullptr;
674 for (size_t idx = 0; idx < sessionMemory.authEntries.sizeInElements(); ++idx)
675 {
676 HttpClientSessionAuthCacheEntry& entry = sessionMemory.authEntries[idx];
677 if (entry.isInUse() and sessionAsciiEqualsIgnoreCase(entry.origin, origin))
678 {
679 target = &entry;
680 break;
681 }
682 if (target == nullptr and not entry.isInUse())
683 {
684 target = &entry;
685 }
686 }
687
688 SC_TRY_MSG(target != nullptr, "HttpClientSession: auth cache capacity exhausted");
689 SC_TRY(copyStateString(origin, target->origin));
690 SC_TRY(copyStateString(authorizationHeader, target->authorizationHeader));
691 return Result(true);
692}
693
694bool SC::HttpClientSession::findAuthorization(StringSpan origin, StringSpan& authorizationHeader) const
695{

Callers 1

sessionLayerMethod · 0.80

Calls 6

parseUrlFunction · 0.85
ResultClass · 0.50
isEmptyMethod · 0.45
sizeInBytesMethod · 0.45

Tested by 1

sessionLayerMethod · 0.64