5#if !defined(NO_UE_INCLUDES)
13#if !(UE_BUILD_SHIPPING|UE_BUILD_TEST)
45 check(ParseMessage(
"HTTP/1.1 100 Message of some sort " CRLF,
MsgOut) > 0);
46 check(ParseMessage(
"HTTP/1.1 100 _Message with a \r in it" CRLF,
MsgOut) == -1);
106 "http://zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
107 "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
108 "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
109 "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
110 "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.com",
116 check(ParseUrl(
"https://abc.com:999",
UrlOut) > 0);
117 check(ParseUrl(
"https://abc.com:999/",
UrlOut) > 0);
118 check(ParseUrl(
"https://foo:bar@abc.com:999",
UrlOut) > 0);
119 check(ParseUrl(
"https://foo:bar@abc.com:999/",
UrlOut) > 0);
120 check(ParseUrl(
"https://foo_bar@abc.com:999",
UrlOut) > 0);
121 check(ParseUrl(
"https://foo_bar@abc.com:999/",
UrlOut) > 0);
123 for (
int32 i : { 0x10, 0x20, 0x40, 0x7f, 0xff })
125 char Url[] =
"http://sweden.denmark.finland.norway.iceland:123";
128 std::memcpy(
Buffer, Url,
sizeof(Url) - 1);
173 enum {
TheMax = 0x7fff'fffful };
192 FRequest Request =
Loop.Request(
"GET", Url).Accept(
"*/*");
197 Status.GetResponse().SetDestination(&
RecvData);
220#if IAS_HTTP_HAS_OPENSSL
225#if !defined(NO_UE_INCLUDES)
248 for (;
Loop.Tick(-1); FPlatformProcess::SleepNoStats(0.02f));
251 auto OkSink = [Dest=
FIoBuffer()] (
const FTicketStatus& Status)
mutable {
255 FResponse&
Response = Status.GetResponse();
263 static const ANSICHAR* Url =
"http://epicgames.com";
266 FEventLoop::FRequestParams
RequestParams = { .bAutoRedirect =
true };
286 for (;
Loop.Tick(-1); FPlatformProcess::SleepNoStats(0.02f));
290 .bAutoRedirect =
true,
294 enum { RecvDataSize = 48 };
301 Builder << ((
bTls) ?
"https://" :
"http://");
303 Builder <<
":" << (
bTls ? 4939 : 9493);
304 Builder <<
"/redirect";
305 Builder << ((
Typ <=
ReAbsTls) ?
"/abs/" :
"/rel/");
307 Builder <<
"/data/" <<
uint32(RecvDataSize);
311 UPTRINT SinkParam = 0xaa'493'493'493'493'bbull;
315 check(Status.GetParam() == SinkParam);
319 FResponse&
Response = Status.GetResponse();
332#if !IAS_HTTP_HAS_OPENSSL
346 Request.Header(
"TestCodeHeader",
"Header-Of-Test-Codes");
359#if !IAS_HTTP_HAS_OPENSSL
366 FConnectionPool::FParams
Params;
369 Params.ConnectionCount = 4;
370 FConnectionPool Pool(Params);
378 Path <<
"/redirect/abs/307/data/";
402 Url <<
"http://" <<
TestHost <<
":9493/port";
407 Status.GetResponse().SetDestination(&Dest);
429 int32 ExpectedSize = -1;
435 FResponse&
Response = Status.GetResponse();
473 for (
uint32 Mixer : { 1, 2, 3, 17, 71, 4931, 0xa9e })
475 for (
uint32 SizeToGet : { 4,8,32,64,1,2,3,5,7,11,13,17,19,41,43,47,59,67,71,83,89,103,109 })
491 FResponse&
Response = Status.GetResponse();
507 BuildUrl(16 << 10,
"/trailer");
515 BuildUrl(493,
"/ext");
524 FEventLoop::FRequestParams
RequestParams = { .bAllowChunked =
false };
525 BuildUrl(16 << 10,
"");
538 FRequest
Request =
Loop.Request(
"GET", Url,
nullptr);
539 Loop.Send(
MoveTemp(Request), [] (
const FTicketStatus&) {});
540 for (;
Loop.Tick(-1); FPlatformProcess::SleepNoStats(0.02f));
546 const uint32 DefaultPort = (VerifyCert != 0) ? 4939 : 9493;
551 Port = Port ? Port : DefaultPort;
553 Ret << ((Port == 4939) ?
"https://" :
"http://");
556 return (Suffix !=
nullptr) ? (Ret <<
Suffix) : Ret;
573 FResponse&
Response = Status.GetResponse();
576 check(
Response.GetContentLength() == Status.GetContentLength());
587 uint32 ReceivedHash = 0x493;
590 for (
uint32 i = 0; i < Status.GetContentLength(); ++i)
593 ReceivedHash = (ReceivedHash + c) * 0x493;
601 auto NullSink = [] (
const FTicketStatus&) {};
603 auto NoErrorSink = [&] (
const FTicketStatus& Status)
613 FResponse&
Response = Status.GetResponse();
637 FPlatformProcess::SleepNoStats(0.005f);
643 FPlatformProcess::SleepNoStats(0.25f);
644 while (!
Loop.IsIdle())
646 FPlatformProcess::SleepNoStats(0.03f);
650 FEventLoop::FRequestParams
ReqParamObj = { .VerifyCert = VerifyCert };
651 const FEventLoop::FRequestParams*
ReqParams =
nullptr;
659 FRequest
Request =
Loop.Request(
"GET", BuildUrl(
"/data"));
689 for (
uint16 i = 1; i < 64; ++i)
691 FConnectionPool::FParams
Params;
692 Params.SetHostFromUrl(BuildUrl());
693 Params.VerifyCert = VerifyCert;
694 Params.ConnectionCount = (i % 2) + 1;
695 FConnectionPool Pool(Params);
696 for (
int32 j = 0; j < i; ++j)
699 Path <<
"/data?pool=" << i <<
"x" << j;
708 FConnectionPool::FParams
Params;
709 Params.SetHostFromUrl(BuildUrl());
710 Params.VerifyCert = VerifyCert;
711 Params.ConnectionCount = 1;
712 FConnectionPool Pool(Params);
713 for (
int32 i = 0; i < 61; ++i)
716 Path <<
"/data?head";
717 FRequest
Request =
Loop.Request(
"HEAD", Path, Pool);
724 for (
int32 i = 0; i < 14; ++i)
731 FResponse&
Response = Status.GetResponse();
738 const char* Reason = Status.GetError().Reason;
743 auto ErrorSink = [] (
const FTicketStatus& Status)
748 FConnectionPool::FParams
Params;
749 Params.SetHostFromUrl(BuildUrl());
750 Params.VerifyCert = VerifyCert;
751 FConnectionPool Pool(Params);
754 Loop2.Send(Loop2.Get(
"/data?stall=1", Pool), Sink);
758 Loop2.Send(Loop2.Get(
"/data", Pool),
ErrorSink);
759 Loop2.Send(Loop2.Get(
"/data", Pool),
HashSink);
760 Loop2.Send(Loop2.Get(
"/data", Pool),
HashSink);
762 int32 PollTimeoutMs = -1;
765 Loop2.SetFailTimeout(1000);
769 PollTimeoutMs = 1000;
772 while (Loop2.Tick(PollTimeoutMs));
774 Loop2.Send(Loop2.Get(
"/data/23", Pool),
NoErrorSink);
775 while (Loop2.Tick(PollTimeoutMs));
780 FRequest Requests[] = {
781 Loop.Request(
"GET", BuildUrl(
nullptr, 10930)),
782 Loop.Request(
"GET",
"http://thisdoesnotexistihope/"),
796 c = 0x41 + (
MixTh() % 26);
797 c += (
MixTh() & 2) ? 0x20 : 0;
800 for (
int32 i = 0; (i += 69493) < 2 << 20;)
803 for (
int32 j = i; j > 0;)
812 Loop.Send(
MoveTemp(Request), [] (
const FTicketStatus& Status) {
815 FResponse& Response = Status.GetResponse();
816 check(Response.GetStatusCode() == 431);
832 {
"/data?slowly=1",
false },
833 {
"/data?disconnect=1",
true },
837 auto ErrorSink = [&] (
const FTicketStatus& Status)
844 Errors |= 1ull <<
Index;
850 FResponse&
Response = Status.GetResponse();
895 FPlatformProcess::SleepNoStats(0.01f);
915 for (
int32 i = 1; i <= 100; ++i)
921 for (
int j = 0; j < 13; ++j)
938 ThrottleTest(BuildUrl(
"/data/"));
970#if IAS_HTTP_HAS_OPENSSL
980 Request.Header(
"X-TestServer-M",
"Girders");
981 Request.Header(
"X-TestServer-R",
"RedRigs");
983 check(Status.
GetId() != FTicketStatus::EId::Error);
985 if (Status.
GetId() == FTicketStatus::EId::Response)
991 for (;
Loop.Tick(-1); FPlatformProcess::SleepNoStats(0.02f));
1001 HttpTest(
TestHost, FCertRoots::NoTls());
1005#if IAS_HTTP_HAS_OPENSSL
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
auto Response
Definition ExternalRpcRegistry.cpp:598
TMemoryView< const void > FMemoryView
Definition MemoryFwd.h:11
#define ON_SCOPE_EXIT
Definition ScopeExit.h:73
TStringView< ANSICHAR > FAnsiStringView
Definition StringFwd.h:46
#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 Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
virtual int64 TotalSize()
Definition Archive.h:155
static CORE_API FString EngineDir()
Definition Paths.cpp:199
Definition FileManager.h:57
static CORE_API IFileManager & Get()
Definition FileManagerGeneric.cpp:1072
constexpr DataType * GetData() const
Definition MemoryView.h:68
constexpr uint64 GetSize() const
Definition MemoryView.h:74
void Reset()
Definition StringBuilder.h:190
Definition StringBuilder.h:509
bool Contains(ViewType Search, ESearchCase::Type SearchCase=ESearchCase::CaseSensitive) const
Definition StringView.h:394
static UE_API void SetDefault(FCertRoots &&CertRoots)
Definition Peer.inl:393
UE_API void Throttle(uint32 KiBPerSec)
Definition Loop.inl:1181
static FOutcome Ok(int32 Result=0)
Definition Misc.inl:113
static FOutcome WaitStream(int32 Result=0)
Definition Misc.inl:141
static FOutcome Error(const char *Message, int32 Code=-1)
Definition Misc.inl:151
static FOutcome WaitBuffer(int32 Result=0)
Definition Misc.inl:131
static FOutcome Waiting(int32 Result=0)
Definition Misc.inl:122
UE_API void SetDestination(FIoBuffer *Buffer)
Definition Api.inl:149
UE_API FResponse & GetResponse() const
Definition Api.inl:196
UE_API EId GetId() const
Definition Api.inl:160
bool Wait(FTimespan Timeout) const
Definition Task.h:76
bool IsOk(int32 StatusCode)
Definition IHttpResponse.h:38
@ Suffix
Definition MirrorDataTable.h:34
@ CaseSensitive
Definition CString.h:23
const FColor Path(255, 255, 255)
const TCHAR * Name
Definition OodleDataCompression.cpp:30
FUniformParams Params
Definition MeshPaintVirtualTexture.cpp:162
const SIZE_T PayloadSize
Definition UDPPing.cpp:1293
State
Definition PacketHandler.h:88
IOSTOREHTTPCLIENT_API void IasHttpTest(const ANSICHAR *TestHost="localhost", uint32 Seed=493)
Definition Test.inl:959
UPTRINT FCertRootsRef
Definition Client.h:56
uint64 FTicket
Definition Client.h:57
TFunction< void(const FTicketStatus &)> FTicketSink
Definition Client.h:223
TTask< TInvokeResult_T< TaskBodyType > > Launch(const TCHAR *DebugName, TaskBodyType &&TaskBody, ETaskPriority Priority=ETaskPriority::Normal, EExtendedTaskPriority ExtendedPriority=EExtendedTaskPriority::None, ETaskFlags Flags=ETaskFlags::None)
Definition Task.h:266
U16 Index
Definition radfft.cpp:71
static uint64 Cycles64()
Definition AndroidPlatformTime.h:34
CORE_API FString ToString() const
Definition Color.cpp:584
static UE_FORCEINLINE_HINT const CharType * Strstr(const CharType *String, const CharType *Find)
Definition CString.h:1066