mirror of https://github.com/qt/qtgrpc.git
Http2Handler: Re-order ctor args and rename m_operation
Re-order the argument to the Http2Handler ctor. The parent should come first. Furthermore rename the m_operation to m_context as I think context is a more fitting name for this important member. This improves the readability and makes it easier to follow the code. Pick-to: 6.10 6.9 6.8 Change-Id: I396e205ec345d80a8cf2cfebe43625f72d39ac6e Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
parent
5bc854e901
commit
1ac37b787a
|
|
@ -278,7 +278,7 @@ public:
|
|||
};
|
||||
Q_ENUM(State);
|
||||
|
||||
explicit Http2Handler(QGrpcOperationContext *operation, QGrpcHttp2ChannelPrivate *parent,
|
||||
explicit Http2Handler(QGrpcHttp2ChannelPrivate *parent, QGrpcOperationContext *context,
|
||||
bool endStream);
|
||||
~Http2Handler() override;
|
||||
|
||||
|
|
@ -290,7 +290,7 @@ public:
|
|||
void asyncFinish(const QGrpcStatus &status);
|
||||
void cancelWithStatus(const QGrpcStatus &status);
|
||||
|
||||
[[nodiscard]] bool expired() const { return !m_operation; }
|
||||
[[nodiscard]] bool expired() const { return !m_context; }
|
||||
|
||||
[[nodiscard]] bool isStreamClosedForSending() const
|
||||
{
|
||||
|
|
@ -319,7 +319,7 @@ private:
|
|||
[[nodiscard]] QGrpcHttp2Channel *channel() const;
|
||||
[[nodiscard]] bool handleContextExpired();
|
||||
|
||||
QPointer<QGrpcOperationContext> m_operation;
|
||||
QPointer<QGrpcOperationContext> m_context;
|
||||
HPack::HttpHeader m_initialHeaders;
|
||||
QQueue<QByteArray> m_queue;
|
||||
QPointer<QHttp2Stream> m_stream;
|
||||
|
|
@ -435,29 +435,29 @@ private:
|
|||
/// ## Http2Handler Implementations
|
||||
///
|
||||
|
||||
Http2Handler::Http2Handler(QGrpcOperationContext *operation, QGrpcHttp2ChannelPrivate *parent,
|
||||
Http2Handler::Http2Handler(QGrpcHttp2ChannelPrivate *parent, QGrpcOperationContext *context,
|
||||
bool endStream)
|
||||
: QObject(parent), m_operation(operation), m_initialHeaders(constructInitialHeaders()),
|
||||
: QObject(parent), m_context(context), m_initialHeaders(constructInitialHeaders()),
|
||||
m_endStreamAtFirstData(endStream), m_filterServerMetadata(constructFilterServerMetadata())
|
||||
{
|
||||
// If the context (lifetime bound to the user) is destroyed, this handler
|
||||
// can no longer perform any meaningful work. We allow it to be deleted;
|
||||
// QHttp2Stream will handle any outstanding cancellations appropriately.
|
||||
QObject::connect(operation, &QGrpcOperationContext::destroyed, this,
|
||||
QObject::connect(context, &QGrpcOperationContext::destroyed, this,
|
||||
&Http2Handler::deleteLater);
|
||||
QObject::connect(operation, &QGrpcOperationContext::cancelRequested, this,
|
||||
QObject::connect(context, &QGrpcOperationContext::cancelRequested, this,
|
||||
&Http2Handler::cancel);
|
||||
QObject::connect(operation, &QGrpcOperationContext::writesDoneRequested, this,
|
||||
QObject::connect(context, &QGrpcOperationContext::writesDoneRequested, this,
|
||||
&Http2Handler::writesDone);
|
||||
if (!m_endStreamAtFirstData) {
|
||||
QObject::connect(operation, &QGrpcOperationContext::writeMessageRequested, this,
|
||||
QObject::connect(context, &QGrpcOperationContext::writeMessageRequested, this,
|
||||
&Http2Handler::writeMessage);
|
||||
}
|
||||
|
||||
QObject::connect(operation, &QGrpcOperationContext::finished, &m_deadlineTimer, &QTimer::stop);
|
||||
QObject::connect(context, &QGrpcOperationContext::finished, &m_deadlineTimer, &QTimer::stop);
|
||||
m_deadlineTimer.setSingleShot(true);
|
||||
|
||||
writeMessage(operation->argument());
|
||||
writeMessage(context->argument());
|
||||
}
|
||||
|
||||
Http2Handler::~Http2Handler()
|
||||
|
|
@ -515,7 +515,7 @@ void Http2Handler::attachStream(QHttp2Stream *stream_)
|
|||
},
|
||||
Qt::SingleShotConnection);
|
||||
|
||||
QObject::connect(m_stream.get(), &QHttp2Stream::dataReceived, m_operation.get(),
|
||||
QObject::connect(m_stream.get(), &QHttp2Stream::dataReceived, m_context.get(),
|
||||
[this](const QByteArray &data, bool endStream) {
|
||||
if (m_state != State::Cancelled) {
|
||||
m_expectedData.container.append(data);
|
||||
|
|
@ -528,7 +528,7 @@ void Http2Handler::attachStream(QHttp2Stream *stream_)
|
|||
qGrpcDebug() << "Full data received:" << data.size()
|
||||
<< "dataContainer:" << m_expectedData.container.size()
|
||||
<< "capacity:" << m_expectedData.expectedSize;
|
||||
emit m_operation
|
||||
emit m_context
|
||||
->messageReceived(m_expectedData.container
|
||||
.mid(GrpcMessageSizeHeaderSize,
|
||||
m_expectedData.expectedSize
|
||||
|
|
@ -571,8 +571,8 @@ HPack::HttpHeader Http2Handler::constructInitialHeaders() const
|
|||
const auto &channelOptions = channel()->channelOptions();
|
||||
const auto *channel = channelPriv();
|
||||
|
||||
QByteArray service{ m_operation->service() };
|
||||
QByteArray method{ m_operation->method() };
|
||||
QByteArray service{ m_context->service() };
|
||||
QByteArray method{ m_context->method() };
|
||||
auto headers = HPack::HttpHeader{
|
||||
{ AuthorityHeader, channel->authorityHeader() },
|
||||
{ MethodHeader, MethodValue },
|
||||
|
|
@ -597,14 +597,14 @@ HPack::HttpHeader Http2Handler::constructInitialHeaders() const
|
|||
};
|
||||
|
||||
iterateMetadata(channelOptions.metadata(QtGrpc::MultiValue));
|
||||
iterateMetadata(m_operation->callOptions().metadata(QtGrpc::MultiValue));
|
||||
iterateMetadata(m_context->callOptions().metadata(QtGrpc::MultiValue));
|
||||
|
||||
return headers;
|
||||
}
|
||||
|
||||
bool Http2Handler::constructFilterServerMetadata() const
|
||||
{
|
||||
return m_operation->callOptions()
|
||||
return m_context->callOptions()
|
||||
.filterServerMetadata()
|
||||
.value_or(channel()->channelOptions().filterServerMetadata().value_or(true));
|
||||
}
|
||||
|
|
@ -620,7 +620,7 @@ QGrpcHttp2Channel *Http2Handler::channel() const
|
|||
|
||||
bool Http2Handler::handleContextExpired()
|
||||
{
|
||||
if (m_operation)
|
||||
if (m_context)
|
||||
return false;
|
||||
m_state = State::Cancelled;
|
||||
deleteLater(); // m_stream will sendRST_STREAM on destruction
|
||||
|
|
@ -668,8 +668,7 @@ void Http2Handler::sendInitialRequest()
|
|||
m_initialHeaders.clear();
|
||||
processQueue();
|
||||
|
||||
std::optional<std::chrono::milliseconds> deadline = m_operation->callOptions()
|
||||
.deadlineTimeout();
|
||||
std::optional<std::chrono::milliseconds> deadline = m_context->callOptions().deadlineTimeout();
|
||||
if (!deadline)
|
||||
deadline = channel()->channelOptions().deadlineTimeout();
|
||||
if (deadline) {
|
||||
|
|
@ -707,14 +706,14 @@ void Http2Handler::finish(const QGrpcStatus &status)
|
|||
return;
|
||||
if (m_state != State::Cancelled) // don't overwrite the Cancelled state
|
||||
m_state = State::Finished;
|
||||
emit m_operation->finished(status);
|
||||
emit m_context->finished(status);
|
||||
deleteLater();
|
||||
}
|
||||
void Http2Handler::asyncFinish(const QGrpcStatus &status)
|
||||
{
|
||||
if (handleContextExpired())
|
||||
return;
|
||||
QTimer::singleShot(0, m_operation.get(), [this, status]() { finish(status); });
|
||||
QTimer::singleShot(0, m_context.get(), [this, status]() { finish(status); });
|
||||
}
|
||||
|
||||
void Http2Handler::cancelWithStatus(const QGrpcStatus &status)
|
||||
|
|
@ -852,12 +851,12 @@ void Http2Handler::handleHeaders(const HPack::HttpHeader &headers, HeaderPhase p
|
|||
|
||||
switch (phase) {
|
||||
case HeaderPhase::Initial:
|
||||
m_operation->setServerInitialMetadata(std::move(metadata));
|
||||
m_context->setServerInitialMetadata(std::move(metadata));
|
||||
break;
|
||||
case HeaderPhase::TrailersOnly:
|
||||
[[fallthrough]];
|
||||
case HeaderPhase::Trailers:
|
||||
m_operation->setServerTrailingMetadata(std::move(metadata));
|
||||
m_context->setServerTrailingMetadata(std::move(metadata));
|
||||
finish({ *statusCode, statusMessage });
|
||||
break;
|
||||
default:
|
||||
|
|
@ -1031,7 +1030,7 @@ void QGrpcHttp2ChannelPrivate::processOperation(QGrpcOperationContext *operation
|
|||
return;
|
||||
}
|
||||
|
||||
auto *handler = new Http2Handler(operationContext, this, endStream);
|
||||
auto *handler = new Http2Handler(this, operationContext, endStream);
|
||||
|
||||
#if QT_CONFIG(localserver)
|
||||
if (m_isLocalSocket) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue