14
14
*/
15
15
#include " src/envoy/transcoding/filter.h"
16
16
17
+ #include " common/http/utility.h"
17
18
#include " google/protobuf/descriptor.h"
18
19
#include " google/protobuf/descriptor.pb.h"
19
20
#include " google/protobuf/message.h"
@@ -59,6 +60,17 @@ Http::FilterHeadersStatus Instance::decodeHeaders(Http::HeaderMap& headers,
59
60
60
61
request_in_.Finish ();
61
62
63
+ const auto & request_status = transcoder_->RequestStatus ();
64
+ if (!request_status.ok ()) {
65
+ log ().debug (" Transcoding request error " + request_status.ToString ());
66
+ error_ = true ;
67
+ Http::Utility::sendLocalReply (
68
+ *decoder_callbacks_, Http::Code::BadRequest,
69
+ request_status.error_message ().ToString ());
70
+
71
+ return Http::FilterHeadersStatus::StopIteration;
72
+ }
73
+
62
74
Buffer::OwnedImpl data;
63
75
ReadToBuffer (transcoder_->RequestOutput (), data);
64
76
@@ -67,7 +79,7 @@ Http::FilterHeadersStatus Instance::decodeHeaders(Http::HeaderMap& headers,
67
79
}
68
80
}
69
81
} else {
70
- log ().debug (" No transcoding" + status.ToString ());
82
+ log ().debug (" No transcoding: " + status.ToString ());
71
83
}
72
84
73
85
return Http::FilterHeadersStatus::Continue;
@@ -76,12 +88,30 @@ Http::FilterHeadersStatus Instance::decodeHeaders(Http::HeaderMap& headers,
76
88
Http::FilterDataStatus Instance::decodeData (Buffer::Instance& data,
77
89
bool end_stream) {
78
90
log ().debug (" Transcoding::Instance::decodeData" );
91
+
92
+ if (error_) {
93
+ return Http::FilterDataStatus::StopIterationNoBuffer;
94
+ }
95
+
79
96
if (transcoder_) {
80
97
request_in_.Move (data);
81
98
99
+ if (end_stream) {
100
+ request_in_.Finish ();
101
+ }
102
+
82
103
ReadToBuffer (transcoder_->RequestOutput (), data);
83
104
84
- // TODO: Check RequesStatus
105
+ const auto & request_status = transcoder_->RequestStatus ();
106
+
107
+ if (!request_status.ok ()) {
108
+ log ().debug (" Transcoding request error " + request_status.ToString ());
109
+ error_ = true ;
110
+ Http::Utility::sendLocalReply (*decoder_callbacks_, Http::Code::BadRequest,
111
+ request_status.error_message ().ToString ());
112
+
113
+ return Http::FilterDataStatus::StopIterationNoBuffer;
114
+ }
85
115
}
86
116
87
117
return Http::FilterDataStatus::Continue;
@@ -111,6 +141,10 @@ void Instance::setDecoderFilterCallbacks(
111
141
Http::FilterHeadersStatus Instance::encodeHeaders (Http::HeaderMap& headers,
112
142
bool end_stream) {
113
143
log ().debug (" Transcoding::Instance::encodeHeaders" );
144
+ if (error_) {
145
+ return Http::FilterHeadersStatus::Continue;
146
+ }
147
+
114
148
if (transcoder_) {
115
149
headers.insertContentType ().value (kJsonContentType );
116
150
}
@@ -120,6 +154,10 @@ Http::FilterHeadersStatus Instance::encodeHeaders(Http::HeaderMap& headers,
120
154
Http::FilterDataStatus Instance::encodeData (Buffer::Instance& data,
121
155
bool end_stream) {
122
156
log ().debug (" Transcoding::Instance::encodeData" );
157
+ if (error_) {
158
+ return Http::FilterDataStatus::Continue;
159
+ }
160
+
123
161
if (transcoder_) {
124
162
response_in_.Move (data);
125
163
0 commit comments