@@ -654,7 +654,7 @@ pub fn dispatch_http_call(
654
654
extern "C" {
655
655
fn proxy_grpc_call (
656
656
upstream_data : * const u8 ,
657
- upstream_size : usize , // TODO(shikugawa): remove grpc_service after next ABI released.
657
+ upstream_size : usize ,
658
658
service_name_data : * const u8 ,
659
659
service_name_size : usize ,
660
660
method_name_data : * const u8 ,
@@ -663,7 +663,7 @@ extern "C" {
663
663
initial_metadata_size : usize ,
664
664
message_data_data : * const u8 ,
665
665
message_data_size : usize ,
666
- timeout_milliseconds : u32 ,
666
+ timeout : u32 ,
667
667
return_callout_id : * mut u32 ,
668
668
) -> Status ;
669
669
}
@@ -672,12 +672,12 @@ pub fn dispatch_grpc_call(
672
672
upstream_name : & str ,
673
673
service_name : & str ,
674
674
method_name : & str ,
675
- initial_metadata : Vec < ( & str , & str ) > ,
675
+ initial_metadata : Vec < ( & str , & [ u8 ] ) > ,
676
676
message : Option < & [ u8 ] > ,
677
677
timeout : Duration ,
678
678
) -> Result < u32 , Status > {
679
679
let mut return_callout_id = 0 ;
680
- let serialized_initial_metadata = utils:: serialize_map ( initial_metadata) ;
680
+ let serialized_initial_metadata = utils:: serialize_bytes_value_map ( initial_metadata) ;
681
681
unsafe {
682
682
match proxy_grpc_call (
683
683
upstream_name. as_ptr ( ) ,
@@ -836,6 +836,26 @@ mod utils {
836
836
bytes
837
837
}
838
838
839
+ pub ( super ) fn serialize_bytes_value_map ( map : Vec < ( & str , & [ u8 ] ) > ) -> Bytes {
840
+ let mut size: usize = 4 ;
841
+ for ( name, value) in & map {
842
+ size += name. len ( ) + value. len ( ) + 10 ;
843
+ }
844
+ let mut bytes: Bytes = Vec :: with_capacity ( size) ;
845
+ bytes. extend_from_slice ( & map. len ( ) . to_le_bytes ( ) ) ;
846
+ for ( name, value) in & map {
847
+ bytes. extend_from_slice ( & name. len ( ) . to_le_bytes ( ) ) ;
848
+ bytes. extend_from_slice ( & value. len ( ) . to_le_bytes ( ) ) ;
849
+ }
850
+ for ( name, value) in & map {
851
+ bytes. extend_from_slice ( & name. as_bytes ( ) ) ;
852
+ bytes. push ( 0 ) ;
853
+ bytes. extend_from_slice ( & value) ;
854
+ bytes. push ( 0 ) ;
855
+ }
856
+ bytes
857
+ }
858
+
839
859
pub ( super ) fn deserialize_map ( bytes : & [ u8 ] ) -> Vec < ( String , String ) > {
840
860
let mut map = Vec :: new ( ) ;
841
861
if bytes. is_empty ( ) {
0 commit comments