HTTP
HTTP
#Overview
name: HTTP
This variable is created as a Console Variable (cvar).
- type:
Exec
- help:
Sorry: Exec commands have no help
It is referenced in 28
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of the HTTP variable in Unreal Engine 5 is to configure and manage HTTP-related settings and functionality. Here are the key points about this variable:
-
The HTTP variable is primarily used in the HTTP module of Unreal Engine, which handles network communications using the HTTP protocol.
-
It is referenced in various subsystems and plugins, including ElectraPlayer, NetcodeUnitTest, CrashReportClient, and IoStoreOnDemand.
-
The value of this variable is typically set in the engine configuration files, particularly in GEngineIni (Engine.ini).
-
It interacts with several other variables and settings, such as HttpTimeout, HttpTotalTimeout, HttpConnectionTimeout, etc.
-
Developers should be aware that this variable affects various aspects of HTTP communication, including timeouts, connection limits, and enabled/disabled states.
-
Best practices when using this variable include:
- Carefully configuring timeout values to balance between responsiveness and allowing sufficient time for operations to complete.
- Considering the impact on performance and resource usage when adjusting settings like HttpMaxConnectionsPerServer.
- Regularly reviewing and updating these settings based on the specific needs of your project.
-
Special considerations:
- The HTTP variable can significantly impact network performance and behavior of your application.
- Changes to these settings may require testing across different network conditions to ensure optimal performance.
- Some settings, like HttpNoProxy, can affect how your application interacts with network infrastructure.
-
The HTTP module initializes these settings during startup and can reload them during runtime, allowing for dynamic configuration adjustments.
-
The HTTP variable and its related settings are crucial for features like content streaming, online services, and crash reporting in Unreal Engine projects.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/DASH/StreamReaderDASH.cpp:1098
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderDASH::FStreamHandler::HandleRequestMP4
Source code excerpt:
ProgressListener->ProgressDelegate = IElectraHttpManager::FProgressListener::FProgressDelegate::CreateRaw(this, &FStreamHandler::HTTPProgressCallback);
ProgressListener->CompletionDelegate = IElectraHttpManager::FProgressListener::FCompletionDelegate::CreateRaw(this, &FStreamHandler::HTTPCompletionCallback);
TSharedPtrTS<IElectraHttpManager::FRequest> HTTP(new IElectraHttpManager::FRequest);
HTTP->Parameters.URL = RequestURL;
HTTP->Parameters.StreamType = Request->StreamType;
HTTP->Parameters.QualityIndex = Request->QualityIndex;
HTTP->Parameters.MaxQualityIndex = Request->MaxQualityIndex;
HTTP->ReceiveBuffer = ReadBuffer.ReceiveBuffer;
HTTP->ProgressListener = ProgressListener;
HTTP->ResponseCache = PlayerSessionService->GetHTTPResponseCache();
HTTP->ExternalDataReader = PlayerSessionService->GetExternalDataReader();
HTTP->Parameters.Range.Set(Request->Segment.MediaURL.Range);
HTTP->Parameters.AcceptEncoding.Set(TEXT("identity"));
if (Request->Segment.MediaURL.CustomHeader.Len())
{
HTTP->Parameters.RequestHeaders.Emplace(HTTP::FHTTPHeader({DASH::HTTPHeaderOptionName, Request->Segment.MediaURL.CustomHeader}));
}
HTTP->Parameters.bCollectTimingTraces = Request->Segment.bLowLatencyChunkedEncodingExpected;
// Set timeouts for media segment retrieval
HTTP->Parameters.ConnectTimeout = PlayerSessionService->GetOptionValue(DASH::OptionKeyMediaSegmentConnectTimeout).SafeGetTimeValue(FTimeValue().SetFromMilliseconds(1000 * 4));
HTTP->Parameters.NoDataTimeout = PlayerSessionService->GetOptionValue(DASH::OptionKeyMediaSegmentNoDataTimeout).SafeGetTimeValue(FTimeValue().SetFromMilliseconds(1000 * 4));
ProgressReportCount = 0;
DownloadCompleteSignal.Reset();
PlayerSessionService->GetHTTPManager()->AddRequest(HTTP, false);
MP4Parser = IParserISO14496_12::CreateParser();
NumMOOFBoxesFound = 0;
int64 LastSuccessfulFilePos = 0;
uint32 TrackTimescale = 0;
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/DASH/StreamReaderDASH.cpp:1552
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderDASH::FStreamHandler::HandleRequestMP4
Source code excerpt:
ProgressListener.Reset();
// Note: It is only safe to access the connection info when the HTTP request has completed or the request been removed.
PlayerSessionService->GetHTTPManager()->RemoveRequest(HTTP, false);
CurrentRequest->ConnectionInfo = HTTP->ConnectionInfo;
HTTP.Reset();
}
}
else
{
// Init segment error.
if (!HasReadBeenAborted())
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/DASH/StreamReaderDASH.cpp:1940
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderDASH::FStreamHandler::HandleRequestMKV
Source code excerpt:
ProgressListener->ProgressDelegate = IElectraHttpManager::FProgressListener::FProgressDelegate::CreateRaw(this, &FStreamHandler::HTTPProgressCallback);
ProgressListener->CompletionDelegate = IElectraHttpManager::FProgressListener::FCompletionDelegate::CreateRaw(this, &FStreamHandler::HTTPCompletionCallback);
TSharedPtrTS<IElectraHttpManager::FRequest> HTTP(new IElectraHttpManager::FRequest);
HTTP->Parameters.URL = RequestURL;
HTTP->Parameters.StreamType = Request->StreamType;
HTTP->Parameters.QualityIndex = Request->QualityIndex;
HTTP->Parameters.MaxQualityIndex = Request->MaxQualityIndex;
HTTP->ReceiveBuffer = ReadBuffer.ReceiveBuffer;
HTTP->ProgressListener = ProgressListener;
HTTP->ResponseCache = PlayerSessionService->GetHTTPResponseCache();
HTTP->ExternalDataReader = PlayerSessionService->GetExternalDataReader();
HTTP->Parameters.Range.Set(Request->Segment.MediaURL.Range);
HTTP->Parameters.AcceptEncoding.Set(TEXT("identity"));
if (Request->Segment.MediaURL.CustomHeader.Len())
{
HTTP->Parameters.RequestHeaders.Emplace(HTTP::FHTTPHeader({DASH::HTTPHeaderOptionName, Request->Segment.MediaURL.CustomHeader}));
}
HTTP->Parameters.bCollectTimingTraces = Request->Segment.bLowLatencyChunkedEncodingExpected;
// Set timeouts for media segment retrieval
HTTP->Parameters.ConnectTimeout = PlayerSessionService->GetOptionValue(DASH::OptionKeyMediaSegmentConnectTimeout).SafeGetTimeValue(FTimeValue().SetFromMilliseconds(1000 * 4));
HTTP->Parameters.NoDataTimeout = PlayerSessionService->GetOptionValue(DASH::OptionKeyMediaSegmentNoDataTimeout).SafeGetTimeValue(FTimeValue().SetFromMilliseconds(1000 * 4));
ProgressReportCount = 0;
DownloadCompleteSignal.Reset();
PlayerSessionService->GetHTTPManager()->AddRequest(HTTP, false);
bool bDone = false;
// Encrypted?
TSharedPtr<ElectraCDM::IMediaCDMDecrypter, ESPMode::ThreadSafe> Decrypter;
if (Request->DrmClient.IsValid())
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/DASH/StreamReaderDASH.cpp:2188
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderDASH::FStreamHandler::HandleRequestMKV
Source code excerpt:
ProgressListener.Reset();
// Note: It is only safe to access the connection info when the HTTP request has completed or the request been removed.
PlayerSessionService->GetHTTPManager()->RemoveRequest(HTTP, false);
CurrentRequest->ConnectionInfo = HTTP->ConnectionInfo;
HTTP.Reset();
}
}
else
{
// Init segment error.
if (!HasReadBeenAborted())
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:401
Scope (from outer to inner):
file
namespace Electra
function FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult FStreamReaderHLSfmp4::FStreamHandler::GetLicenseKey
Source code excerpt:
else
{
TSharedPtrTS<IElectraHttpManager::FRequest> HTTP(new IElectraHttpManager::FRequest);
ReadBuffer.Reset();
ReadBuffer.ReceiveBuffer = MakeSharedTS<IElectraHttpManager::FReceiveBuffer>();
Metrics::FSegmentDownloadStats& ds = InRequest->DownloadStats;
ds.URL = LicenseKeyInfo->URI;
HTTP->Parameters.URL = LicenseKeyInfo->URI;
HTTP->ReceiveBuffer = ReadBuffer.ReceiveBuffer;
ProgressReportCount = 0;
DownloadCompleteSignal.Reset();
// Is there a static resource provider that we can try?
bool bHaveStaticResponse = false;
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:445
Scope (from outer to inner):
file
namespace Electra
function FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult FStreamReaderHLSfmp4::FStreamHandler::GetLicenseKey
Source code excerpt:
ProgressListener->ProgressDelegate = IElectraHttpManager::FProgressListener::FProgressDelegate::CreateRaw(this, &FStreamHandler::HTTPProgressCallback);
ProgressListener->CompletionDelegate = IElectraHttpManager::FProgressListener::FCompletionDelegate::CreateRaw(this, &FStreamHandler::HTTPCompletionCallback);
HTTP->ProgressListener = ProgressListener;
HTTP->ExternalDataReader = PlayerSessionService->GetExternalDataReader();
PlayerSessionService->GetHTTPManager()->AddRequest(HTTP, false);
while(!HasReadBeenAborted())
{
if (DownloadCompleteSignal.WaitTimeout(1000 * 100))
{
break;
}
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:457
Scope (from outer to inner):
file
namespace Electra
function FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult FStreamReaderHLSfmp4::FStreamHandler::GetLicenseKey
Source code excerpt:
ProgressListener.Reset();
// Note: It is only safe to access the connection info when the HTTP request has completed or the request been removed.
PlayerSessionService->GetHTTPManager()->RemoveRequest(HTTP, false);
}
InRequest->ConnectionInfo = HTTP->ConnectionInfo;
if (!HTTP->ConnectionInfo.StatusInfo.ErrorDetail.IsError())
{
// Notify license key download ok.
PlayerSessionService->SendMessageToPlayer(FLicenseKeyMessage::Create(FLicenseKeyMessage::EReason::LicenseKeyDownload, FErrorDetail(), &HTTP->ConnectionInfo));
// There is not much we can validate here. The key is the direct key data without any wrapping.
if (ReadBuffer.ReceiveBuffer->Buffer.Num() == 16)
{
LicenseKeyData = MakeShared<TArray<uint8>, ESPMode::ThreadSafe>();
LicenseKeyData->AddUninitialized(ReadBuffer.ReceiveBuffer->Buffer.Num());
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:484
Scope (from outer to inner):
file
function FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult FStreamReaderHLSfmp4::FStreamHandler::GetLicenseKey
Source code excerpt:
PlayerSessionService->SendMessageToPlayer(FLicenseKeyMessage::Create(FLicenseKeyMessage::EReason::LicenseKeyData,
FErrorDetail().SetError(UEMEDIA_ERROR_FORMAT_ERROR).SetFacility(Facility::EFacility::LicenseKey).SetCode((uint16)FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult::FormatError).SetMessage("Invalid license key length"),
&HTTP->ConnectionInfo));
return FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult::FormatError;
}
}
else
{
// Notify license key download failure.
PlayerSessionService->SendMessageToPlayer(FLicenseKeyMessage::Create(FLicenseKeyMessage::EReason::LicenseKeyDownload,
FErrorDetail().SetError(UEMEDIA_ERROR_READ_ERROR).SetFacility(Facility::EFacility::LicenseKey).SetCode((uint16)FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult::DownloadError).SetMessage("License key download failure"),
&HTTP->ConnectionInfo));
return FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult::DownloadError;
}
}
}
return FStreamReaderHLSfmp4::FStreamHandler::ELicenseKeyResult::DownloadError;
}
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:526
Scope (from outer to inner):
file
namespace Electra
function FStreamReaderHLSfmp4::FStreamHandler::EInitSegmentResult FStreamReaderHLSfmp4::FStreamHandler::GetInitSegment
Source code excerpt:
}
TSharedPtrTS<IElectraHttpManager::FRequest> HTTP(new IElectraHttpManager::FRequest);
TSharedPtrTS<IElectraHttpManager::FProgressListener> ProgressListener(new IElectraHttpManager::FProgressListener);
ProgressListener->ProgressDelegate = IElectraHttpManager::FProgressListener::FProgressDelegate::CreateRaw(this, &FStreamHandler::HTTPProgressCallback);
ProgressListener->CompletionDelegate = IElectraHttpManager::FProgressListener::FCompletionDelegate::CreateRaw(this, &FStreamHandler::HTTPCompletionCallback);
ReadBuffer.Reset();
ReadBuffer.ReceiveBuffer = MakeSharedTS<IElectraHttpManager::FReceiveBuffer>();
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:539
Scope (from outer to inner):
file
namespace Electra
function FStreamReaderHLSfmp4::FStreamHandler::EInitSegmentResult FStreamReaderHLSfmp4::FStreamHandler::GetInitSegment
Source code excerpt:
ds.SegmentType = Metrics::ESegmentType::Init;
HTTP->Parameters.URL = RequestURL;
HTTP->Parameters.StreamType = Request->StreamType;
HTTP->Parameters.QualityIndex = Request->QualityIndex;
HTTP->Parameters.MaxQualityIndex = Request->MaxQualityIndex;
HTTP->ReceiveBuffer = ReadBuffer.ReceiveBuffer;
HTTP->ProgressListener = ProgressListener;
if (Request->InitSegmentInfo->ByteRange.IsSet())
{
HTTP->Parameters.Range.Start = Request->InitSegmentInfo->ByteRange.GetStart();
HTTP->Parameters.Range.EndIncluding = Request->InitSegmentInfo->ByteRange.GetEnd();
}
// Set timeouts for init segment retrieval
HTTP->Parameters.ConnectTimeout = FTimeValue().SetFromMilliseconds(1000 * 4);
HTTP->Parameters.NoDataTimeout = FTimeValue().SetFromMilliseconds(1000 * 2);
HTTP->ResponseCache = PlayerSessionService->GetHTTPResponseCache();
HTTP->ExternalDataReader = PlayerSessionService->GetExternalDataReader();
ProgressReportCount = 0;
DownloadCompleteSignal.Reset();
PlayerSessionService->GetHTTPManager()->AddRequest(HTTP, false);
while(!HasReadBeenAborted())
{
if (DownloadCompleteSignal.WaitTimeout(1000 * 100))
{
break;
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:570
Scope (from outer to inner):
file
namespace Electra
function FStreamReaderHLSfmp4::FStreamHandler::EInitSegmentResult FStreamReaderHLSfmp4::FStreamHandler::GetInitSegment
Source code excerpt:
ProgressListener.Reset();
// Note: It is only safe to access the connection info when the HTTP request has completed or the request been removed.
PlayerSessionService->GetHTTPManager()->RemoveRequest(HTTP, false);
Request->ConnectionInfo = HTTP->ConnectionInfo;
SCOPE_CYCLE_COUNTER(STAT_ElectraPlayer_HLS_StreamReader);
CSV_SCOPED_TIMING_STAT(ElectraPlayer, HLS_StreamReader);
if (!HTTP->ConnectionInfo.StatusInfo.ErrorDetail.IsError())
{
// TODO: If encrypted we must now decrypt it!!
// The question is how to do this if there is no explicit IV and the media sequence number is to be used
// with the init segment being static and not having one.
// Presently the assumption is that the init segment is not encrypted.
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:832
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderHLSfmp4::FStreamHandler::HandleRequest
Source code excerpt:
ProgressListener->ProgressDelegate = IElectraHttpManager::FProgressListener::FProgressDelegate::CreateRaw(this, &FStreamHandler::HTTPProgressCallback);
ProgressListener->CompletionDelegate = IElectraHttpManager::FProgressListener::FCompletionDelegate::CreateRaw(this, &FStreamHandler::HTTPCompletionCallback);
TSharedPtrTS<IElectraHttpManager::FRequest> HTTP(new IElectraHttpManager::FRequest);
HTTP->Parameters.URL = RequestURL;
HTTP->Parameters.StreamType = Request->StreamType;
HTTP->Parameters.QualityIndex = Request->QualityIndex;
HTTP->Parameters.MaxQualityIndex = Request->MaxQualityIndex;
HTTP->ReceiveBuffer = ReadBuffer.ReceiveBuffer;
HTTP->ProgressListener = ProgressListener;
if (Request->Range.IsSet())
{
HTTP->Parameters.Range = Request->Range;
}
HTTP->ResponseCache = PlayerSessionService->GetHTTPResponseCache();
// Set timeouts for media segment retrieval
HTTP->Parameters.ConnectTimeout = FTimeValue().SetFromMilliseconds(1000 * 4);
HTTP->Parameters.NoDataTimeout = FTimeValue().SetFromMilliseconds(1000 * 2);
HTTP->ExternalDataReader = PlayerSessionService->GetExternalDataReader();
ProgressReportCount = 0;
DownloadCompleteSignal.Reset();
PlayerSessionService->GetHTTPManager()->AddRequest(HTTP, false);
MP4Parser = IParserISO14496_12::CreateParser();
NumMOOFBoxesFound = 0;
FTimeValue BaseMediaDecodeTime;
FTimeValue TimeMappingOffset;
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/HLS/StreamReaderHLSfmp4.cpp:1100
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderHLSfmp4::FStreamHandler::HandleRequest
Source code excerpt:
ProgressListener.Reset();
// Note: It is only safe to access the connection info when the HTTP request has completed or the request been removed.
PlayerSessionService->GetHTTPManager()->RemoveRequest(HTTP, false);
CurrentRequest->ConnectionInfo = HTTP->ConnectionInfo;
HTTP.Reset();
}
}
else
{
if (!HasReadBeenAborted())
{
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/mp4/StreamReaderMP4.cpp:362
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderMP4::HandleRequest
Source code excerpt:
ReadBuffer.SetCurrentPos(Request->FileStartOffset);
TSharedPtrTS<IElectraHttpManager::FRequest> HTTP(new IElectraHttpManager::FRequest);
HTTP->Parameters.URL = TimelineAsset->GetMediaURL();
HTTP->Parameters.Range.Start = Request->FileStartOffset;
HTTP->Parameters.Range.EndIncluding = Request->FileEndOffset;
// No compression as this would not yield much with already compressed video/audio data.
HTTP->Parameters.AcceptEncoding.Set(TEXT("identity"));
// Timeouts
HTTP->Parameters.ConnectTimeout = PlayerSessionServices->GetOptionValue(MP4::OptionKeyMP4LoadConnectTimeout).SafeGetTimeValue(FTimeValue().SetFromMilliseconds(1000 * 8));
HTTP->Parameters.NoDataTimeout = PlayerSessionServices->GetOptionValue(MP4::OptionKeyMP4LoadNoDataTimeout).SafeGetTimeValue(FTimeValue().SetFromMilliseconds(1000 * 6));
// Explicit range?
int64 NumRequestedBytes = HTTP->Parameters.Range.GetNumberOfBytes();
HTTP->ReceiveBuffer = ReadBuffer.ReceiveBuffer;
HTTP->ProgressListener = ProgressListener;
HTTP->ResponseCache = PlayerSessionServices->GetHTTPResponseCache();
HTTP->ExternalDataReader = PlayerSessionServices->GetExternalDataReader();
PlayerSessionServices->GetHTTPManager()->AddRequest(HTTP, false);
FTimeValue DurationSuccessfullyDelivered(FTimeValue::GetZero());
FTimeValue DurationSuccessfullyRead(FTimeValue::GetZero());
bool bDone = false;
TSharedPtrTS<IParserISO14496_12::IAllTrackIterator> AllTrackIterator;
#Loc: <Workspace>/Engine/Plugins/Media/ElectraPlayer/Source/ElectraPlayerRuntime/Private/Runtime/Player/mp4/StreamReaderMP4.cpp:670
Scope (from outer to inner):
file
namespace Electra
function void FStreamReaderMP4::HandleRequest
Source code excerpt:
// Remove the download request.
ProgressListener.Reset();
PlayerSessionServices->GetHTTPManager()->RemoveRequest(HTTP, false);
Request->ConnectionInfo = HTTP->ConnectionInfo;
HTTP.Reset();
// Set downloaded and delivered duration from the primary track.
FSelectedTrackData& PrimaryTrack = ActiveTrackMap.FindOrAdd(PrimaryTrackID);
DurationSuccessfullyRead = PrimaryTrack.DurationSuccessfullyRead;
DurationSuccessfullyDelivered = PrimaryTrack.DurationSuccessfullyDelivered;
#Loc: <Workspace>/Engine/Plugins/NetcodeUnitTest/NetcodeUnitTest/Source/NetcodeUnitTest/Private/UnitTestCommandlet.cpp:77
Scope (from outer to inner):
file
function int32 UUnitTestCommandlet::Main
Source code excerpt:
}
FModuleManager::Get().LoadModule(TEXT("HTTP"));
FModuleManager::Get().LoadModule(TEXT("OnlineSubsystem"));
FModuleManager::Get().LoadModule(TEXT("OnlineSubsystemUtils"));
if (!IsEngineExitRequested())
{
GIsRunning = true;
#Loc: <Workspace>/Engine/Source/Programs/CrashReportClient/Private/CrashReportClientApp.cpp:1079
Scope (from outer to inner):
file
function void RunCrashReportClient
Source code excerpt:
// Increase the HttpSendTimeout to 5 minutes
GConfig->SetFloat(TEXT("HTTP"), TEXT("HttpSendTimeout"), 5 * 60.0f, GEngineIni);
// Make sure all UObject classes are registered and default properties have been initialized
ProcessNewlyLoadedUObjects();
// Tell the module manager is may now process newly-loaded UObjects when new C++ modules are loaded
FModuleManager::Get().StartProcessingNewlyLoadedObjects();
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/IoStoreOnDemand/Private/OnDemandHttpClient.cpp:125
Scope (from outer to inner):
file
namespace UE::IO::IAS
function void FHttpClient::IssueRequest
Source code excerpt:
void FHttpClient::IssueRequest(FRequestParams&& Params)
{
using namespace UE::IO::IAS::HTTP;
//TODO: Remove string conversion
const auto Url = StringCast<ANSICHAR>(*Params.Url, Params.Url.Len());
auto Sink = [
this,
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpManager.cpp:143
Scope (from outer to inner):
file
function void FHttpManager::ReloadFlushTimeLimits
Source code excerpt:
{
case EHttpFlushReason::Default:
GConfig->GetDouble(TEXT("HTTP"), TEXT("FlushSoftTimeLimitDefault"), SoftLimitSeconds, GEngineIni);
GConfig->GetDouble(TEXT("HTTP"), TEXT("FlushHardTimeLimitDefault"), HardLimitSeconds, GEngineIni);
break;
case EHttpFlushReason::Shutdown:
GConfig->GetDouble(TEXT("HTTP"), TEXT("FlushSoftTimeLimitShutdown"), SoftLimitSeconds, GEngineIni);
GConfig->GetDouble(TEXT("HTTP"), TEXT("FlushHardTimeLimitShutdown"), HardLimitSeconds, GEngineIni);
if ((HardLimitSeconds >= 0) && ((SoftLimitSeconds < 0) || (SoftLimitSeconds >= HardLimitSeconds)))
{
UE_CLOG(!IsRunningCommandlet(), LogHttp, Warning, TEXT("Soft limit[%.02f] is higher than the hard limit set[%.02f] in file [%s]. Please change the soft limit to a value lower than the hard limit for Flush to work correctly. - 1 is unlimited and therefore the highest possible value."), static_cast<float>(SoftLimitSeconds), static_cast<float>(HardLimitSeconds), *GEngineIni);
// we need to be absolutely sure that SoftLimitSeconds is always strictly less than HardLimitSeconds so remaining requests (if any) can be canceled before exiting
if (HardLimitSeconds > 0.0)
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpManager.cpp:170
Scope (from outer to inner):
file
function void FHttpManager::ReloadFlushTimeLimits
Source code excerpt:
SoftLimitSeconds = -1.0;
HardLimitSeconds = -1.0;
GConfig->GetDouble(TEXT("HTTP"), TEXT("FlushSoftTimeLimitFullFlush"), SoftLimitSeconds, GEngineIni);
GConfig->GetDouble(TEXT("HTTP"), TEXT("FlushHardTimeLimitFullFlush"), HardLimitSeconds, GEngineIni);
break;
}
FHttpFlushTimeLimit TimeLimit(SoftLimitSeconds, HardLimitSeconds);
FlushTimeLimitsMap.Add(Reason, TimeLimit);
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpManager.cpp:313
Scope (from outer to inner):
file
function void FHttpManager::Flush
Source code excerpt:
// The smaller the value, the more quickly we may find out that all requests have completed, but the more work may be done in the meantime.
float SecondsToSleepForOutstandingThreadedRequests = 0.5f;
GConfig->GetFloat(TEXT("HTTP"), TEXT("RequestCleanupDelaySec"), SecondsToSleepForOutstandingThreadedRequests, GEngineIni);
UE_CLOG(!IsRunningCommandlet(), LogHttp, Verbose, TEXT("[FHttpManager::Flush] FlushReason [%s] FlushTimeSoftLimitSeconds [%.3fs] FlushTimeHardLimitSeconds [%.3fs] SecondsToSleepForOutstandingThreadedRequests [%.3fs]"), LexToString(FlushReason), FlushTimeSoftLimitSeconds, FlushTimeHardLimitSeconds, SecondsToSleepForOutstandingThreadedRequests);
uint32 RequestsNum = 0;
{
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpModule.cpp:33
Scope: file
Source code excerpt:
// FHttpModule
IMPLEMENT_MODULE(FHttpModule, HTTP);
FHttpModule* FHttpModule::Singleton = NULL;
static bool ShouldLaunchUrl(const TCHAR* Url)
{
FString SchemeName;
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpModule.cpp:51
Scope (from outer to inner):
file
function void FHttpModule::UpdateConfigs
Source code excerpt:
void FHttpModule::UpdateConfigs()
{
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpTimeout"), HttpActivityTimeout, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpTotalTimeout"), HttpTotalTimeout, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpConnectionTimeout"), HttpConnectionTimeout, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpActivityTimeout"), HttpActivityTimeout, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpReceiveTimeout"), HttpReceiveTimeout, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpSendTimeout"), HttpSendTimeout, GEngineIni);
GConfig->GetInt(TEXT("HTTP"), TEXT("HttpMaxConnectionsPerServer"), HttpMaxConnectionsPerServer, GEngineIni);
GConfig->GetBool(TEXT("HTTP"), TEXT("bEnableHttp"), bEnableHttp, GEngineIni);
GConfig->GetBool(TEXT("HTTP"), TEXT("bUseNullHttp"), bUseNullHttp, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpDelayTime"), HttpDelayTime, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpThreadActiveFrameTimeInSeconds"), HttpThreadActiveFrameTimeInSeconds, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpThreadActiveMinimumSleepTimeInSeconds"), HttpThreadActiveMinimumSleepTimeInSeconds, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpThreadIdleFrameTimeInSeconds"), HttpThreadIdleFrameTimeInSeconds, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpThreadIdleMinimumSleepTimeInSeconds"), HttpThreadIdleMinimumSleepTimeInSeconds, GEngineIni);
GConfig->GetFloat(TEXT("HTTP"), TEXT("HttpEventLoopThreadTickIntervalInSeconds"), HttpEventLoopThreadTickIntervalInSeconds, GEngineIni);
if (!FParse::Value(FCommandLine::Get(), TEXT("HttpNoProxy="), HttpNoProxy))
{
GConfig->GetString(TEXT("HTTP"), TEXT("HttpNoProxy"), HttpNoProxy, GEngineIni);
}
AllowedDomains.Empty();
GConfig->GetArray(TEXT("HTTP"), TEXT("AllowedDomains"), AllowedDomains, GEngineIni);
if (HttpManager != nullptr)
{
HttpManager->UpdateConfigs();
}
}
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpModule.cpp:118
Scope (from outer to inner):
file
function void FHttpModule::StartupModule
Source code excerpt:
// Load from a configurable array of modules at this point, so things that need to bind to the SDK Manager init hooks can do so.
TArray<FString> ModulesToLoad;
GConfig->GetArray(TEXT("HTTP"), TEXT("ModulesToLoad"), ModulesToLoad, GEngineIni);
for (const FString& ModuleToLoad : ModulesToLoad)
{
if (FModuleManager::Get().ModuleExists(*ModuleToLoad))
{
FModuleManager::Get().LoadModule(*ModuleToLoad);
}
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpModule.cpp:278
Scope (from outer to inner):
file
function bool FHttpModule::Exec_Runtime
Source code excerpt:
{
// Ignore any execs that don't start with HTTP
if (FParse::Command(&Cmd, TEXT("HTTP")))
{
return HandleHTTPCommand( Cmd, Ar );
}
return false;
}
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpRetrySystem.cpp:21
Scope: file
Source code excerpt:
);
LLM_DEFINE_TAG(HTTP);
namespace FHttpRetrySystem
{
TOptional<double> ReadThrottledTimeFromResponseInSeconds(FHttpResponsePtr Response)
{
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpRetrySystem.cpp:287
Scope (from outer to inner):
file
function void FHttpRetrySystem::FRequest::HttpOnProcessRequestComplete
Source code excerpt:
}
LLM_SCOPE_BYTAG(HTTP);
OnProcessRequestComplete().ExecuteIfBound(SelfPtr, ResultResponse, bResultSucceeded);
ClearTimeout();
}
void FHttpRetrySystem::FRequest::HttpOnStatusCodeReceived(FHttpRequestPtr Request, int32 StatusCode)
#Loc: <Workspace>/Engine/Source/Runtime/Online/HTTP/Private/HttpRetrySystem.cpp:570
Scope (from outer to inner):
file
function bool FHttpRetrySystem::FManager::Update
Source code excerpt:
QUICK_SCOPE_CYCLE_COUNTER(STAT_FHttpRetrySystem_FManager_Update);
LLM_SCOPE_BYTAG(HTTP);
FScopeLock ScopeLock(&RequestListLock);
bool bIsGreen = true;
if (FileCount != nullptr)