@@ -21,6 +21,9 @@ import scala.concurrent.duration.*
21
21
22
22
object ConnectRouteBuilder {
23
23
24
+ private val DefaultIncomingHeadersFilter : String => Boolean = name =>
25
+ ! name.toLowerCase.startsWith(" connection" )
26
+
24
27
def forService [F [_] : Async ](service : ServerServiceDefinition ): ConnectRouteBuilder [F ] =
25
28
forServices(Seq (service))
26
29
@@ -33,6 +36,7 @@ object ConnectRouteBuilder {
33
36
serverConfigurator = identity,
34
37
channelConfigurator = identity,
35
38
customJsonCodec = None ,
39
+ incomingHeadersFilter = DefaultIncomingHeadersFilter ,
36
40
pathPrefix = Uri .Path .Root ,
37
41
executor = ExecutionContext .global,
38
42
waitForShutdown = 5 .seconds,
@@ -46,6 +50,7 @@ final class ConnectRouteBuilder[F[_] : Async] private(
46
50
serverConfigurator : Endo [ServerBuilder [_]],
47
51
channelConfigurator : Endo [ManagedChannelBuilder [_]],
48
52
customJsonCodec : Option [JsonMessageCodec [F ]],
53
+ incomingHeadersFilter : String => Boolean ,
49
54
pathPrefix : Uri .Path ,
50
55
executor : Executor ,
51
56
waitForShutdown : Duration ,
@@ -57,6 +62,7 @@ final class ConnectRouteBuilder[F[_] : Async] private(
57
62
serverConfigurator : Endo [ServerBuilder [_]] = serverConfigurator,
58
63
channelConfigurator : Endo [ManagedChannelBuilder [_]] = channelConfigurator,
59
64
customJsonCodec : Option [JsonMessageCodec [F ]] = customJsonCodec,
65
+ incomingHeadersFilter : String => Boolean = incomingHeadersFilter,
60
66
pathPrefix : Uri .Path = pathPrefix,
61
67
executor : Executor = executor,
62
68
waitForShutdown : Duration = waitForShutdown,
@@ -67,6 +73,7 @@ final class ConnectRouteBuilder[F[_] : Async] private(
67
73
serverConfigurator,
68
74
channelConfigurator,
69
75
customJsonCodec,
76
+ incomingHeadersFilter,
70
77
pathPrefix,
71
78
executor,
72
79
waitForShutdown,
@@ -82,6 +89,9 @@ final class ConnectRouteBuilder[F[_] : Async] private(
82
89
def withJsonCodecConfigurator (method : Endo [JsonMessageCodecBuilder [F ]]): ConnectRouteBuilder [F ] =
83
90
copy(customJsonCodec = Some (method(JsonMessageCodecBuilder [F ]()).build))
84
91
92
+ def withIncomingHeadersFilter (filter : String => Boolean ): ConnectRouteBuilder [F ] =
93
+ copy(incomingHeadersFilter = filter)
94
+
85
95
def withPathPrefix (path : Uri .Path ): ConnectRouteBuilder [F ] =
86
96
copy(pathPrefix = path)
87
97
@@ -136,6 +146,7 @@ final class ConnectRouteBuilder[F[_] : Async] private(
136
146
channel,
137
147
errorHandler,
138
148
treatTrailersAsHeaders,
149
+ incomingHeadersFilter,
139
150
)
140
151
141
152
val connectRoutes = HttpRoutes [F ] {
@@ -172,6 +183,7 @@ final class ConnectRouteBuilder[F[_] : Async] private(
172
183
val transcodingHandler = new TranscodingHandler (
173
184
channel,
174
185
errorHandler,
186
+ incomingHeadersFilter,
175
187
)
176
188
177
189
val transcodingRoutes = HttpRoutes [F ] { req =>
0 commit comments