UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BuiltInHttpClientPlatformSocket.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "BuiltInHttpClient.h"
10
11#if !UE_BUILD_SHIPPING
12
14{
15public:
17 : CapacityMask(FMath::RoundUpToPowerOfTwo(InCapacity) - 1)
18 {
19 Allocation = new uint8[GetCapacity()];
20 }
21
23 {
24 delete[] Allocation;
25 }
26
28 {
29 return const_cast<FConnectionCircularBuffer*>(this)->operator[](Index);
30 }
31
33 {
34 check(Index < GetSize());
35 uint64 DataOffset = (Index + Tail) & (CapacityMask);
36 return Allocation[DataOffset];
37 }
38
40 {
41 return Size;
42 }
43
45 {
46 return CapacityMask + 1;
47 }
48
49 bool IsEmpty() const
50 {
51 return Size == 0;
52 }
53
54 void Clear()
55 {
56 Tail = 0;
57 Head = 0;
58 Size = 0;
59 }
60
62 {
63 return GetCapacity() - Size;
64 }
65
66 void Peek(uint8* Data, const uint64 DataSize, uint64& OutSize)
67 {
68 OutSize = FMath::Min(DataSize, Size);
69
70 if (OutSize + Tail > GetCapacity())
71 {
72 uint64 LenToEnd = GetCapacity() - Tail;
74 FMemory::Memcpy(Data, Allocation + Tail, LenToEnd);
75 FMemory::Memcpy(Data + LenToEnd, Allocation, LenFromBegin);
76 }
77 else
78 {
79 FMemory::Memcpy(Data, Allocation + Tail, OutSize);
80 }
81 }
82
84 {
85 Peek(Data, DataSize, OutSize);
86 Tail = (Tail + OutSize) & CapacityMask;
87
88 Size -= OutSize;
89
90 if (Size == 0)
91 {
92 Head = 0;
93 Tail = 0;
94 }
95 }
96
97 bool Put(uint8* Data, uint64 DataSize)
98 {
99 if (DataSize > SpaceLeft())
100 {
101 return false;
102 }
103
104 if (DataSize + Head > GetCapacity())
105 {
106 uint64 LenToEnd = GetCapacity() - Head;
108 FMemory::Memcpy(Allocation + Head, Data, LenToEnd);
109 FMemory::Memcpy(Allocation, Data + LenToEnd, LenFromBegin);
110 }
111 else
112 {
113 FMemory::Memcpy(Allocation + Head, Data, DataSize);
114 }
115
116 Head = (Head + DataSize) & (CapacityMask);
117
118 Size += DataSize;
119
120 return true;
121 }
122
123private:
124 uint8* Allocation{ nullptr };
125 uint64 CapacityMask{ 0 };
126 uint64 Size{ 0 };
127 uint64 Head{ 0 };
128 uint64 Tail{ 0 };
129};
130
132{
133public:
135 virtual ~FBuiltInHttpClientPlatformSocket() override;
136
137 virtual bool Send(const uint8* Data, const uint64 DataSize) override;
138 virtual bool Recv(uint8* Data, const uint64 DataSize, uint64& BytesRead, ESocketReceiveFlags::Type ReceiveFlags) override;
139 virtual bool HasPendingData(uint64& PendingDataSize) const override;
140 virtual void Close() override;
141
142 int32 GetProtocolNumber() const { return ProtocolNumber; }
143
144private:
145 IPlatformHostCommunication* Communication;
147 FConnectionCircularBuffer ConnectionBuffer;
148 const int32 ProtocolNumber;
149};
150
152{
153public:
155 virtual ~FBuiltInHttpClientPlatformSocketPool() override;
156
157 virtual IBuiltInHttpClientSocket* AcquireSocket(float TimeoutSeconds = -1.f) override;
158 virtual void ReleaseSocket(IBuiltInHttpClientSocket* Socket, bool bKeepAlive) override;
159
160private:
161 const FString Address;
162 IPlatformHostCommunication* Communication = nullptr;
163
165
166 FCriticalSection UsedSocketsCS;
167 UE::FConditionVariable UsedSocketsCV;
168 TBitArray<> UsedSockets; // bitset to keep track of used sockets in the pool
169};
170
171#endif
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition BuiltInHttpClientPlatformSocket.h:152
virtual IBuiltInHttpClientSocket * AcquireSocket(float TimeoutSeconds=-1.f) override
Definition BuiltInHttpClientPlatformSocket.cpp:124
virtual ~FBuiltInHttpClientPlatformSocketPool() override
Definition BuiltInHttpClientPlatformSocket.cpp:115
virtual void ReleaseSocket(IBuiltInHttpClientSocket *Socket, bool bKeepAlive) override
Definition BuiltInHttpClientPlatformSocket.cpp:190
Definition BuiltInHttpClientPlatformSocket.h:132
int32 GetProtocolNumber() const
Definition BuiltInHttpClientPlatformSocket.h:142
virtual ~FBuiltInHttpClientPlatformSocket() override
Definition BuiltInHttpClientPlatformSocket.cpp:18
virtual void Close() override
Definition BuiltInHttpClientPlatformSocket.cpp:102
virtual bool HasPendingData(uint64 &PendingDataSize) const override
Definition BuiltInHttpClientPlatformSocket.cpp:96
virtual bool Recv(uint8 *Data, const uint64 DataSize, uint64 &BytesRead, ESocketReceiveFlags::Type ReceiveFlags) override
Definition BuiltInHttpClientPlatformSocket.cpp:34
Definition BuiltInHttpClientPlatformSocket.h:14
uint64 GetSize() const
Definition BuiltInHttpClientPlatformSocket.h:39
void Clear()
Definition BuiltInHttpClientPlatformSocket.h:54
uint8 operator[](uint64 Index) const
Definition BuiltInHttpClientPlatformSocket.h:27
~FConnectionCircularBuffer()
Definition BuiltInHttpClientPlatformSocket.h:22
uint64 SpaceLeft() const
Definition BuiltInHttpClientPlatformSocket.h:61
void Peek(uint8 *Data, const uint64 DataSize, uint64 &OutSize)
Definition BuiltInHttpClientPlatformSocket.h:66
void Consume(uint8 *Data, const uint64 DataSize, uint64 &OutSize)
Definition BuiltInHttpClientPlatformSocket.h:83
uint64 GetCapacity() const
Definition BuiltInHttpClientPlatformSocket.h:44
bool IsEmpty() const
Definition BuiltInHttpClientPlatformSocket.h:49
uint8 & operator[](uint64 Index)
Definition BuiltInHttpClientPlatformSocket.h:32
bool Put(uint8 *Data, uint64 DataSize)
Definition BuiltInHttpClientPlatformSocket.h:97
FConnectionCircularBuffer(uint64 InCapacity)
Definition BuiltInHttpClientPlatformSocket.h:16
Definition BuiltInHttpClient.h:22
Definition BuiltInHttpClient.h:11
Definition GenericPlatformHostCommunication.h:32
Definition LockFreeList.h:904
Definition ConditionVariable.h:14
Type
Definition SocketTypes.h:58
U16 Index
Definition radfft.cpp:71
Definition UnrealMathUtility.h:270
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160