@@ -23,7 +23,6 @@ import (
23
23
"strings"
24
24
"time"
25
25
26
- configPb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
27
26
extProcPb "github.com/envoyproxy/go-control-plane/envoy/service/ext_proc/v3"
28
27
envoyTypePb "github.com/envoyproxy/go-control-plane/envoy/type/v3"
29
28
"github.com/go-logr/logr"
@@ -49,6 +48,7 @@ func NewStreamingServer(destinationEndpointHintMetadataNamespace, destinationEnd
49
48
50
49
type Director interface {
51
50
HandleRequest (ctx context.Context , reqCtx * RequestContext ) (* RequestContext , error )
51
+ HandleResponse (ctx context.Context , reqCtx * RequestContext ) (* RequestContext , error )
52
52
GetRandomPod () * backend.Pod
53
53
}
54
54
@@ -91,6 +91,8 @@ type RequestContext struct {
91
91
RequestState StreamRequestState
92
92
modelServerStreaming bool
93
93
94
+ Response * Response
95
+
94
96
reqHeaderResp * extProcPb.ProcessingResponse
95
97
reqBodyResp * extProcPb.ProcessingResponse
96
98
reqTrailerResp * extProcPb.ProcessingResponse
@@ -104,6 +106,9 @@ type Request struct {
104
106
Headers map [string ]string
105
107
Body map [string ]interface {}
106
108
}
109
+ type Response struct {
110
+ Headers map [string ]string
111
+ }
107
112
type StreamRequestState int
108
113
109
114
const (
@@ -131,6 +136,9 @@ func (s *StreamingServer) Process(srv extProcPb.ExternalProcessor_ProcessServer)
131
136
Headers : make (map [string ]string ),
132
137
Body : make (map [string ]interface {}),
133
138
},
139
+ Response : & Response {
140
+ Headers : make (map [string ]string ),
141
+ },
134
142
}
135
143
136
144
var body []byte
@@ -229,25 +237,13 @@ func (s *StreamingServer) Process(srv extProcPb.ExternalProcessor_ProcessServer)
229
237
}
230
238
}
231
239
reqCtx .RequestState = ResponseRecieved
232
- reqCtx .respHeaderResp = & extProcPb.ProcessingResponse {
233
- Response : & extProcPb.ProcessingResponse_ResponseHeaders {
234
- ResponseHeaders : & extProcPb.HeadersResponse {
235
- Response : & extProcPb.CommonResponse {
236
- HeaderMutation : & extProcPb.HeaderMutation {
237
- SetHeaders : []* configPb.HeaderValueOption {
238
- {
239
- Header : & configPb.HeaderValue {
240
- // This is for debugging purpose only.
241
- Key : "x-went-into-resp-headers" ,
242
- RawValue : []byte ("true" ),
243
- },
244
- },
245
- },
246
- },
247
- },
248
- },
249
- },
240
+
241
+ var responseErr error
242
+ reqCtx , responseErr = s .HandleResponseHeaders (ctx , reqCtx , v )
243
+ if responseErr != nil {
244
+ logger .V (logutil .DEFAULT ).Error (responseErr , "Failed to process response headers" , "request" , req )
250
245
}
246
+ reqCtx .respHeaderResp = s .generateResponseHeaderResponse (reqCtx )
251
247
252
248
case * extProcPb.ProcessingRequest_ResponseBody :
253
249
if reqCtx .modelServerStreaming {
0 commit comments