1414
1515import static com .tencent .trpc .core .common .Constants .DEFAULT_CLIENT_REQUEST_TIMEOUT_MS ;
1616import static com .tencent .trpc .proto .http .common .HttpConstants .CONNECTION_REQUEST_TIMEOUT ;
17+ import static com .tencent .trpc .proto .http .common .HttpConstants .HTTP_HEADER_TRPC_CALLEE ;
18+ import static com .tencent .trpc .proto .http .common .HttpConstants .HTTP_HEADER_TRPC_CALLER ;
19+ import static com .tencent .trpc .proto .http .common .HttpConstants .HTTP_HEADER_TRPC_MESSAGE_TYPE ;
20+ import static com .tencent .trpc .proto .http .common .HttpConstants .HTTP_HEADER_TRPC_REQUEST_ID ;
21+ import static com .tencent .trpc .proto .http .common .HttpConstants .HTTP_HEADER_TRPC_TIMEOUT ;
22+ import static com .tencent .trpc .proto .http .common .HttpConstants .HTTP_HEADER_TRPC_TRANS_INFO ;
1723
1824import autovalue .shaded .com .google .common .common .base .Objects ;
25+ import com .fasterxml .jackson .core .Base64Variants ;
1926import com .tencent .trpc .core .common .config .BackendConfig ;
2027import com .tencent .trpc .core .common .config .ConsumerConfig ;
2128import com .tencent .trpc .core .common .config .ProtocolConfig ;
2229import com .tencent .trpc .core .exception .TRpcException ;
2330import com .tencent .trpc .core .logger .Logger ;
2431import com .tencent .trpc .core .logger .LoggerFactory ;
32+ import com .tencent .trpc .core .rpc .CallInfo ;
2533import com .tencent .trpc .core .rpc .Request ;
2634import com .tencent .trpc .core .rpc .Response ;
35+ import com .tencent .trpc .core .utils .JsonUtils ;
2736import com .tencent .trpc .core .utils .RpcUtils ;
2837import com .tencent .trpc .proto .http .common .HttpConstants ;
2938import java .nio .charset .StandardCharsets ;
3039import java .util .HashMap ;
40+ import java .util .LinkedHashMap ;
3141import java .util .Map ;
3242import java .util .concurrent .Future ;
3343import java .util .concurrent .TimeUnit ;
@@ -199,12 +209,7 @@ private SimpleHttpRequest buildRequest(Request request, int requestTimeout) thro
199209 SimpleHttpRequest simpleHttpRequest = SimpleHttpRequests .post (getUri (request ));
200210 simpleHttpRequest .setConfig (requestConfig );
201211 simpleHttpRequest .setHeader (HttpHeaders .CONTENT_TYPE , HttpConstants .CONTENT_TYPE_JSON );
202- // encode request
203- String jsonString = encodeToJson (request );
204- if (jsonString != null ) {
205- simpleHttpRequest .setBody (jsonString , ContentType .APPLICATION_JSON );
206- }
207- // Set custom business headers, consistent with the TRPC protocol, only process String and byte[]
212+ // set custom business headers, consistent with the TRPC protocol, only process String and byte[]
208213 request .getAttachments ().forEach ((k , v ) -> {
209214 if (Objects .equal (k , HttpHeaders .TRANSFER_ENCODING ) || Objects .equal (k , HttpHeaders .CONTENT_LENGTH )) {
210215 return ;
@@ -215,6 +220,43 @@ private SimpleHttpRequest buildRequest(Request request, int requestTimeout) thro
215220 simpleHttpRequest .setHeader (k , new String ((byte []) v ));
216221 }
217222 });
223+ // set caller and callee information
224+ CallInfo callInfo = request .getMeta ().getCallInfo ();
225+ simpleHttpRequest .setHeader (HTTP_HEADER_TRPC_CALLER , callInfo .getCaller ());
226+ simpleHttpRequest .setHeader (HTTP_HEADER_TRPC_CALLEE , callInfo .getCallee ());
227+
228+ // set request id
229+ simpleHttpRequest .setHeader (HTTP_HEADER_TRPC_REQUEST_ID , String .valueOf (request .getRequestId ()));
230+ // set timeout
231+ simpleHttpRequest .setHeader (HTTP_HEADER_TRPC_TIMEOUT , String .valueOf (requestTimeout ));
232+ // set message type
233+ int messageType = request .getMeta ().getMessageType ();
234+ if (messageType != 0 ) {
235+ simpleHttpRequest .setHeader (HTTP_HEADER_TRPC_MESSAGE_TYPE , String .valueOf (messageType ));
236+ }
237+ // set trans info: encode attachments as JSON with base64-encoded values,
238+ // consistent with the server-side decoding logic in AbstractHttpExecutor.setAttachments
239+ Map <String , Object > attachments = request .getAttachments ();
240+ if (attachments != null && !attachments .isEmpty ()) {
241+ Map <String , String > transInfoMap = new LinkedHashMap <>();
242+ attachments .forEach ((k , v ) -> {
243+ if (v instanceof byte []) {
244+ transInfoMap .put (k , Base64Variants .getDefaultVariant ().encode ((byte []) v ));
245+ } else if (v instanceof String ) {
246+ transInfoMap .put (k , Base64Variants .getDefaultVariant ()
247+ .encode (((String ) v ).getBytes (StandardCharsets .UTF_8 )));
248+ }
249+ });
250+ if (!transInfoMap .isEmpty ()) {
251+ simpleHttpRequest .setHeader (HTTP_HEADER_TRPC_TRANS_INFO , JsonUtils .toJson (transInfoMap ));
252+ }
253+ }
254+
255+ // encode request body
256+ String jsonString = encodeToJson (request );
257+ if (jsonString != null ) {
258+ simpleHttpRequest .setBody (jsonString , ContentType .APPLICATION_JSON );
259+ }
218260 return simpleHttpRequest ;
219261 }
220262
0 commit comments