File tree Expand file tree Collapse file tree 2 files changed +22
-1
lines changed
Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -142,7 +142,7 @@ impl CosmosBuilder {
142142 grpc_url : & Arc < String > ,
143143 is_fallback : bool ,
144144 ) -> Result < Node , BuilderError > {
145- let ( url, headers) =
145+ let ( url, mut headers) =
146146 parse_cosmos_grpc ( grpc_url. as_str ( ) ) . map_err ( |e| BuilderError :: InvalidGrpcHeaders {
147147 grpc_url : grpc_url. clone ( ) ,
148148 source : e,
@@ -197,6 +197,22 @@ impl CosmosBuilder {
197197
198198 let grpc_channel = grpc_endpoint. connect_lazy ( ) ;
199199
200+ if !headers. iter ( ) . any ( |( k, _) | k. as_str ( ) == "referer" ) {
201+ if let Some ( referer) = self . referer_header ( ) {
202+ let mut vec = headers. as_ref ( ) . to_vec ( ) ;
203+ vec. push ( (
204+ MetadataKey :: from_bytes ( b"referer" ) . unwrap ( ) ,
205+ MetadataValue :: from_str ( referer) . map_err ( |_| {
206+ BuilderError :: InvalidRefererHeader {
207+ referer : Arc :: new ( referer. to_string ( ) ) ,
208+ source : Status :: invalid_argument ( "Invalid referer header value" ) ,
209+ }
210+ } ) ?,
211+ ) ) ;
212+ headers = Arc :: from ( vec. into_boxed_slice ( ) ) ;
213+ }
214+ }
215+
200216 let interceptor = CosmosInterceptor ( headers) ;
201217 let channel = InterceptedService :: new ( grpc_channel, interceptor) ;
202218 let max_decoding_message_size = self . get_max_decoding_message_size ( ) ;
Original file line number Diff line number Diff line change @@ -107,6 +107,11 @@ pub enum BuilderError {
107107 grpc_url : Arc < String > ,
108108 source : tonic:: Status ,
109109 } ,
110+ #[ error( "Invalid referer header in {referer}: {source}" ) ]
111+ InvalidRefererHeader {
112+ referer : Arc < String > ,
113+ source : tonic:: Status ,
114+ } ,
110115}
111116
112117/// Parse errors while interacting with chain data.
You can’t perform that action at this time.
0 commit comments