Skip to content

Commit ff49b71

Browse files
committed
Fix setting custom headers
1 parent 0a3ddbc commit ff49b71

File tree

2 files changed

+62
-21
lines changed

2 files changed

+62
-21
lines changed

eventstream_rpc/include/aws/eventstreamrpc/EventStreamClient.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ namespace Aws
101101
MessageAmendment(const MessageAmendment &lhs);
102102
MessageAmendment(MessageAmendment &&rhs);
103103
MessageAmendment &operator=(const MessageAmendment &lhs);
104+
MessageAmendment &operator=(const MessageAmendment &&rhs);
104105
~MessageAmendment() noexcept;
105106
explicit MessageAmendment(Crt::Allocator *allocator = Crt::g_allocator) noexcept;
106107
MessageAmendment(
@@ -114,10 +115,23 @@ namespace Aws
114115
Crt::List<EventStreamHeader> &&headers,
115116
Crt::Allocator *allocator = Crt::g_allocator) noexcept;
116117
MessageAmendment(const Crt::ByteBuf &payload, Crt::Allocator *allocator = Crt::g_allocator) noexcept;
118+
119+
/**
120+
* Add a given header to the end of the header list.
121+
* @param header
122+
*/
117123
void AddHeader(EventStreamHeader &&header) noexcept;
124+
125+
/**
126+
* Add given headers to the beginning of the header list.
127+
* @param headers Headers to add.
128+
*/
129+
void PrependHeaders(Crt::List<EventStreamHeader> &&headers);
118130
void SetPayload(const Crt::Optional<Crt::ByteBuf> &payload) noexcept;
119-
const Crt::List<EventStreamHeader> &GetHeaders() const noexcept;
120-
const Crt::Optional<Crt::ByteBuf> &GetPayload() const noexcept;
131+
const Crt::List<EventStreamHeader> &GetHeaders() const & noexcept;
132+
Crt::List<EventStreamHeader> &&GetHeaders() &&;
133+
const Crt::Optional<Crt::ByteBuf> &GetPayload() const & noexcept;
134+
Crt::Optional<Crt::ByteBuf> &&GetPayload() &&;
121135

122136
private:
123137
Crt::List<EventStreamHeader> m_headers;

eventstream_rpc/source/EventStreamClient.cpp

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ namespace Aws
5151
}
5252

5353
MessageAmendment::MessageAmendment(Crt::List<EventStreamHeader> &&headers, Crt::Allocator *allocator) noexcept
54-
: m_headers(headers), m_payload(), m_allocator(allocator)
54+
: m_headers(std::move(headers)), m_payload(), m_allocator(allocator)
5555
{
5656
}
5757

@@ -79,14 +79,16 @@ namespace Aws
7979

8080
MessageAmendment &MessageAmendment::operator=(const MessageAmendment &lhs)
8181
{
82-
m_headers = lhs.m_headers;
83-
if (lhs.m_payload.has_value())
82+
if (this != &lhs)
8483
{
85-
m_payload =
86-
Crt::ByteBufNewCopy(lhs.m_allocator, lhs.m_payload.value().buffer, lhs.m_payload.value().len);
84+
m_headers = lhs.m_headers;
85+
if (lhs.m_payload.has_value())
86+
{
87+
m_payload =
88+
Crt::ByteBufNewCopy(lhs.m_allocator, lhs.m_payload.value().buffer, lhs.m_payload.value().len);
89+
}
90+
m_allocator = lhs.m_allocator;
8791
}
88-
m_allocator = lhs.m_allocator;
89-
9092
return *this;
9193
}
9294

@@ -97,9 +99,37 @@ namespace Aws
9799
rhs.m_payload = Crt::Optional<Crt::ByteBuf>();
98100
}
99101

100-
const Crt::List<EventStreamHeader> &MessageAmendment::GetHeaders() const noexcept { return m_headers; }
102+
MessageAmendment &MessageAmendment::operator=(MessageAmendment &&rhs)
103+
{
104+
if (this != &rhs)
105+
{
106+
m_headers = std::move(rhs.m_headers);
107+
m_payload = rhs.m_payload;
108+
m_allocator = rhs.m_allocator;
109+
110+
rhs.m_allocator = nullptr;
111+
rhs.m_payload = Crt::Optional<Crt::ByteBuf>();
112+
}
113+
return *this;
114+
}
115+
116+
const Crt::List<EventStreamHeader> &MessageAmendment::GetHeaders() const & noexcept { return m_headers; }
101117

102-
const Crt::Optional<Crt::ByteBuf> &MessageAmendment::GetPayload() const noexcept { return m_payload; }
118+
Crt::List<EventStreamHeader> &&MessageAmendment::GetHeaders() && { return std::move(m_headers); }
119+
120+
const Crt::Optional<Crt::ByteBuf> &MessageAmendment::GetPayload() const & noexcept { return m_payload; }
121+
122+
Crt::Optional<Crt::ByteBuf> &&MessageAmendment::GetPayload() && { return std::move(m_payload); }
123+
124+
void MessageAmendment::AddHeader(EventStreamHeader &&header) noexcept
125+
{
126+
m_headers.emplace_back(std::move(header));
127+
}
128+
129+
void MessageAmendment::PrependHeaders(Crt::List<EventStreamHeader> &&headers)
130+
{
131+
m_headers.splice(m_headers.begin(), std::move(headers));
132+
}
103133

104134
void MessageAmendment::SetPayload(const Crt::Optional<Crt::ByteBuf> &payload) noexcept
105135
{
@@ -109,6 +139,11 @@ namespace Aws
109139
}
110140
}
111141

142+
void MessageAmendment::SetPayload(Crt::Optional<Crt::ByteBuf> &&payload) noexcept
143+
{
144+
m_payload = std::move(payload);
145+
}
146+
112147
MessageAmendment::~MessageAmendment() noexcept
113148
{
114149
if (m_payload.has_value())
@@ -663,23 +698,17 @@ namespace Aws
663698
thisConnection->m_clientState = WAITING_FOR_CONNECT_ACK;
664699
thisConnection->m_underlyingConnection = connection;
665700
MessageAmendment messageAmendment;
666-
Crt::List<EventStreamHeader> messageAmendmentHeaders = messageAmendment.GetHeaders();
667701

668702
if (thisConnection->m_connectMessageAmender)
669703
{
670704
MessageAmendment connectAmendment(thisConnection->m_connectMessageAmender());
671-
Crt::List<EventStreamHeader> amenderHeaderList = connectAmendment.GetHeaders();
672705
/* The version header is necessary for establishing the connection. */
673706
messageAmendment.AddHeader(EventStreamHeader(
674707
Crt::String(EVENTSTREAM_VERSION_HEADER),
675708
Crt::String(EVENTSTREAM_VERSION_STRING),
676709
thisConnection->m_allocator));
677-
/* Note that we are prepending headers from the user-provided amender. */
678-
if (amenderHeaderList.size() > 0)
679-
{
680-
messageAmendmentHeaders.splice(messageAmendmentHeaders.end(), amenderHeaderList);
681-
}
682-
messageAmendment.SetPayload(connectAmendment.GetPayload());
710+
messageAmendment.PrependHeaders(std::move(connectAmendment).GetHeaders());
711+
messageAmendment.SetPayload(std::move(connectAmendment).GetPayload());
683712
}
684713

685714
/* Send a CONNECT packet to the server. */
@@ -695,8 +724,6 @@ namespace Aws
695724
thisConnection->m_connectionSetupPromise.set_value();
696725
}
697726

698-
void MessageAmendment::AddHeader(EventStreamHeader &&header) noexcept { m_headers.emplace_back(header); }
699-
700727
void ClientConnection::s_onConnectionShutdown(
701728
struct aws_event_stream_rpc_client_connection *connection,
702729
int errorCode,

0 commit comments

Comments
 (0)