5#if !defined(IAS_HTTP_HAS_OPENSSL)
6# define IAS_HTTP_HAS_OPENSSL 0
9#if IAS_HTTP_HAS_OPENSSL
10# if defined(IAS_HTTP_EXPLICIT_VERIFY_TIME)
11# if !IAS_HTTP_EXPLICIT_VERIFY_TIME
12# error Either define this to >=1 or not at all
17# include <openssl/engine.h>
18# include <openssl/err.h>
19# include <openssl/ssl.h>
26static FCertRoots GDefaultCertRoots;
59#if IAS_HTTP_HAS_OPENSSL
87 const void* Data =
PemData.GetData();
115#if defined(IAS_HTTP_EXPLICIT_VERIFY_TIME)
120 FPlatformTime::UtcTime(
167 *BytesWritten =
Outcome.GetResult();
232 if (HostName !=
nullptr)
241static void Ssl_Destroy(
SSL* Ssl)
247static void Ssl_AssociatePeer(
SSL* Ssl, FPeer* Peer)
260 case 1:
AlpnProtos =
"\x08" "http/1.1";
break;
270static int32 Ssl_GetProtocolVersion(
SSL* Ssl)
319static FOutcome Ssl_Handshake(
SSL* Ssl)
323 if (Result != 1)
return Ssl_GetOutcome(Ssl, Result,
"tls handshake error");
334static FOutcome Ssl_Write(
SSL* Ssl,
const char* Data,
int32 Size)
350static void Ssl_ContextDestroy(...) {}
351static UPTRINT Ssl_ContextCreate(...) {
return 0; }
352static int32 Ssl_ContextCertNum(...) {
return 0; }
353static SSL* Ssl_Create(...) {
return nullptr; }
354static void Ssl_Destroy(...) {}
355static void Ssl_AssociatePeer(...) {}
356static void Ssl_SetupAlpn(...) {}
357static int32 Ssl_GetProtocolVersion(...) {
return 1; }
371 Ssl_ContextDestroy(
Handle);
389 return Ssl_ContextCertNum(
Handle);
449 Ssl = Ssl_Create(Certs, HostName);
450 Ssl_AssociatePeer(
Ssl,
this);
465 return (
Ssl !=
nullptr);
472 if (
Ssl !=
nullptr) Ssl_AssociatePeer(
Ssl,
this);
473 if (Rhs.Ssl !=
nullptr) Ssl_AssociatePeer(Rhs.Ssl, &Rhs);
488 return Ssl_Handshake(
Ssl);
499 return Ssl_Write(
Ssl, Data,
Size);
550 void* PeerData =
nullptr;
561 Ssl_SetupAlpn(
Ssl, Proto);
570 case 1:
GoAwayOne(*
this, PeerData);
break;
571 case 2:
GoAwayTwo(*
this, PeerData);
break;
579 Swap(PeerData, Rhs.PeerData);
580 Swap(Proto, Rhs.Proto);
645 case 1:
return TickOne(*
this, PeerData);
646 case 2:
return TickTwo(*
this, PeerData);
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
struct ssl_ctx_st SSL_CTX
Definition ISslCertificateManager.h:11
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
Definition SSL.Build.cs:6
bool IsValid() const
Definition Client.h:69
UE_API int32 Num() const
Definition Peer.inl:382
UE_API ~FCertRoots()
Definition Peer.inl:367
static UE_API FCertRootsRef Explicit(const FCertRoots &CertRoots)
Definition Peer.inl:412
static UE_API FCertRootsRef NoTls()
Definition Peer.inl:400
static UE_API FCertRootsRef Default()
Definition Peer.inl:406
static UE_API void SetDefault(FCertRoots &&CertRoots)
Definition Peer.inl:393
~FHttpPeer()
Definition Peer.inl:566
FTransactRef Transact()
Definition Peer.inl:630
FOutcome GetPendingTransactId()
Definition Peer.inl:641
uint32 GetVersion() const
Definition Peer.inl:588
FHttpPeer(FHttpPeer &&Rhs)=delete
FOutcome Handshake()
Definition Peer.inl:594
FHttpPeer & operator=(FHttpPeer &&Rhs)
Definition Peer.inl:577
FHttpPeer(const FHttpPeer &Rhs)=delete
static FOutcome Ok(int32 Result=0)
Definition Misc.inl:113
bool IsOk() const
Definition Misc.inl:86
static FOutcome Error(const char *Message, int32 Code=-1)
Definition Misc.inl:151
static FOutcome None()
Definition Misc.inl:80
static FOutcome Waiting(int32 Result=0)
Definition Misc.inl:122
bool IsValid() const
Definition Peer.inl:45
FWaitable GetWaitable() const
Definition Peer.inl:42
FOutcome Send(const char *Data, int32 Size)
Definition Peer.inl:43
FOutcome Recv(char *Out, int32 MaxSize)
Definition Peer.inl:44
Definition Socket.inl:367
FOutcome Recv(char *Dest, uint32 Size)
Definition Socket.inl:506
FOutcome Send(const char *Data, uint32 Size)
Definition Socket.inl:473
FWaitable GetWaitable() const
Definition Socket.inl:374
bool IsValid() const
Definition Socket.inl:373
bool IsUsingTls() const
Definition Peer.inl:463
SSL * Ssl
Definition Peer.inl:437
FOutcome Send(const char *Data, int32 Size)
Definition Peer.inl:492
FOutcome Recv(char *Out, int32 MaxSize)
Definition Peer.inl:503
~FTlsPeer()
Definition Peer.inl:454
FTlsPeer & operator=(FTlsPeer &&Rhs)
Definition Peer.inl:428
FOutcome Handshake()
Definition Peer.inl:481
FTlsPeer(FTlsPeer &&Rhs)
Definition Peer.inl:427
FTlsPeer & Move(FTlsPeer &&Rhs)
Definition Peer.inl:469
Definition TransactionOne.inl:945
Definition Socket.inl:130
Definition HttpServerHttpVersion.h:7
FORCEINLINE void Store(const volatile T *Element, T Value)
Definition Atomic.h:89
FOutcome HandshakeOne(FTlsPeer &, void *)
Definition TransactionOne.inl:880
EHttpVersion
Definition Client.h:24
UPTRINT FCertRootsRef
Definition Client.h:56
FTransactRef CreateTransactOne(void *&)
Definition TransactionOne.inl:1021
FOutcome TickOne(FTlsPeer &, void *)
Definition TransactionOne.inl:886
FOutcome TickTwo(FTlsPeer &, void *)
Definition TransactionTwo.inl:914
void GoAwayOne(FTlsPeer &, void *)
Definition TransactionOne.inl:892
void GoAwayTwo(FTlsPeer &, void *)
Definition TransactionTwo.inl:915
FTransactRef CreateTransactTwo(void *PeerData)
Definition TransactionOne.inl:1029
FOutcome HandshakeTwo(FTlsPeer &, void *&)
Definition TransactionTwo.inl:913
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
static const FCertRootsRef Default
Definition Peer.inl:31
static const FCertRootsRef None
Definition Peer.inl:30
FSocket Socket
Definition Peer.inl:531
FCertRootsRef Certs
Definition Peer.inl:532
const char * HostName
Definition Peer.inl:533