@@ -96,7 +96,7 @@ impl<'a> Case<'a> {
96
96
) -> Result < ( ) , Error > {
97
97
rx. check_proto_opcode ( OpCode :: CASESigma3 as _ ) ?;
98
98
99
- let status = {
99
+ let result = {
100
100
let fabric_mgr = self . fabric_mgr . borrow ( ) ;
101
101
102
102
let fabric = fabric_mgr. get_fabric ( case_session. local_fabric_idx ) ?;
@@ -133,7 +133,7 @@ impl<'a> Case<'a> {
133
133
134
134
if let Err ( e) = Case :: validate_certs ( fabric, & initiator_noc, initiator_icac_mut) {
135
135
error ! ( "Certificate Chain doesn't match: {}" , e) ;
136
- SCStatusCodes :: InvalidParameter
136
+ Err ( SCStatusCodes :: InvalidParameter )
137
137
} else if let Err ( e) = Case :: validate_sigma3_sign (
138
138
d. initiator_noc . 0 ,
139
139
d. initiator_icac . map ( |a| a. 0 ) ,
@@ -142,30 +142,33 @@ impl<'a> Case<'a> {
142
142
case_session,
143
143
) {
144
144
error ! ( "Sigma3 Signature doesn't match: {}" , e) ;
145
- SCStatusCodes :: InvalidParameter
145
+ Err ( SCStatusCodes :: InvalidParameter )
146
146
} else {
147
147
// Only now do we add this message to the TT Hash
148
148
let mut peer_catids: NocCatIds = Default :: default ( ) ;
149
149
initiator_noc. get_cat_ids ( & mut peer_catids) ;
150
150
case_session. tt_hash . update ( rx. as_slice ( ) ) ?;
151
- let clone_data = Case :: get_session_clone_data (
151
+
152
+ Ok ( Case :: get_session_clone_data (
152
153
fabric. ipk . op_key ( ) ,
153
154
fabric. get_node_id ( ) ,
154
155
initiator_noc. get_node_id ( ) ?,
155
156
exchange. with_session ( |sess| Ok ( sess. get_peer_addr ( ) ) ) ?,
156
157
case_session,
157
158
& peer_catids,
158
- ) ?;
159
-
160
- // TODO: Handle NoSpace
161
- exchange
162
- . with_session_mgr_mut ( |sess_mgr| sess_mgr. clone_session ( & clone_data) ) ?;
163
-
164
- SCStatusCodes :: SessionEstablishmentSuccess
159
+ ) ?)
165
160
}
166
161
} else {
167
- SCStatusCodes :: NoSharedTrustRoots
162
+ Err ( SCStatusCodes :: NoSharedTrustRoots )
163
+ }
164
+ } ;
165
+
166
+ let status = match result {
167
+ Ok ( clone_data) => {
168
+ exchange. clone_session ( tx, & clone_data) . await ?;
169
+ SCStatusCodes :: SessionEstablishmentSuccess
168
170
}
171
+ Err ( status) => status,
169
172
} ;
170
173
171
174
complete_with_status ( exchange, tx, status, None ) . await
@@ -201,7 +204,7 @@ impl<'a> Case<'a> {
201
204
return Ok ( ( ) ) ;
202
205
}
203
206
204
- let local_sessid = exchange. with_session_mgr_mut ( |mgr| Ok ( mgr . get_next_sess_id ( ) ) ) ? ;
207
+ let local_sessid = exchange. get_next_sess_id ( ) ;
205
208
case_session. peer_sessid = r. initiator_sessid ;
206
209
case_session. local_sessid = local_sessid;
207
210
case_session. tt_hash . update ( rx_buf) ?;
0 commit comments