@@ -10,7 +10,7 @@ use tokio_stream::wrappers::ReceiverStream;
10
10
use super :: session:: SessionManager ;
11
11
use crate :: {
12
12
RoleServer ,
13
- model:: { ClientJsonRpcMessage , GetExtensions } ,
13
+ model:: { ClientJsonRpcMessage , ClientRequest , GetExtensions } ,
14
14
serve_server,
15
15
service:: serve_directly,
16
16
transport:: {
@@ -21,7 +21,7 @@ use crate::{
21
21
} ,
22
22
server_side_http:: {
23
23
BoxResponse , ServerSseMessage , accepted_response, expect_json,
24
- internal_error_response, sse_stream_response,
24
+ internal_error_response, sse_stream_response, unexpected_message_response ,
25
25
} ,
26
26
} ,
27
27
} ,
@@ -318,6 +318,15 @@ where
318
318
. create_session ( )
319
319
. await
320
320
. map_err ( internal_error_response ( "create session" ) ) ?;
321
+ if let ClientJsonRpcMessage :: Request ( req) = & mut message {
322
+ if !matches ! ( req. request, ClientRequest :: InitializeRequest ( _) ) {
323
+ return Err ( unexpected_message_response ( "initialize request" ) ) ;
324
+ }
325
+ // inject request part to extensions
326
+ req. request . extensions_mut ( ) . insert ( part) ;
327
+ } else {
328
+ return Err ( unexpected_message_response ( "initialize request" ) ) ;
329
+ }
321
330
let service = self
322
331
. get_service ( )
323
332
. map_err ( internal_error_response ( "get service" ) ) ?;
@@ -378,7 +387,8 @@ where
378
387
. get_service ( )
379
388
. map_err ( internal_error_response ( "get service" ) ) ?;
380
389
match message {
381
- ClientJsonRpcMessage :: Request ( request) => {
390
+ ClientJsonRpcMessage :: Request ( mut request) => {
391
+ request. request . extensions_mut ( ) . insert ( part) ;
382
392
let ( transport, receiver) =
383
393
OneshotTransport :: < RoleServer > :: new ( ClientJsonRpcMessage :: Request ( request) ) ;
384
394
let service = serve_directly ( service, transport, None ) ;
0 commit comments