cyfs_lib/router_handler/
filter.rs

1use super::category::*;
2use super::request::*;
3use crate::acl::*;
4use crate::base::*;
5use crate::crypto::*;
6use crate::ndn::*;
7use crate::non::*;
8use crate::SelectFilter;
9use cyfs_base::*;
10
11struct ExpReservedTokenTranslatorHelper;
12
13impl ExpReservedTokenTranslatorHelper {
14    /*
15    fn trans_router(
16        token: &str,
17        router: &RouterHandlerRequestRouterInfo,
18    ) -> Option<ExpTokenEvalValue> {
19        let ret = match token {
20            "router.source" => ExpTokenEvalValue::from_string(&router.source),
21            "router.target" => ExpTokenEvalValue::from_opt_string(&router.target),
22            "router.direction" => ExpTokenEvalValue::from_opt_string(&router.direction),
23
24            "router.next_hop" => ExpTokenEvalValue::from_opt_string(&router.next_hop),
25            "router.next_direction" => ExpTokenEvalValue::from_opt_string(&router.next_direction),
26
27            _ => {
28                return None;
29            }
30        };
31
32        Some(ret)
33    }
34    */
35
36    // response的token都以resp.开头
37    fn is_response_token(token: &str) -> bool {
38        token.starts_with("resp.")
39    }
40
41    fn to_response_token(token: &str) -> String {
42        format!("resp.{}", token)
43    }
44
45    fn from_response_token(token: &str) -> &str {
46        token.trim_start_matches("resp.")
47    }
48
49    fn trans_request_source(token: &str, source: &RequestSourceInfo) -> Option<ExpTokenEvalValue> {
50        let ret = match token {
51            "source.protocol" => ExpTokenEvalValue::from_string(&source.protocol),
52            "source.dec_id" => ExpTokenEvalValue::from_string(&source.dec),
53            "source.zone" => ExpTokenEvalValue::from_opt_string(&source.zone.zone),
54            "source.device" => ExpTokenEvalValue::from_opt_string(&source.zone.device),
55            "source.zone_category" => ExpTokenEvalValue::from_string(&source.zone.zone_category),
56            _ => {
57                return None;
58            }
59        };
60
61        Some(ret)
62    }
63
64    fn trans_non_input_request_common(
65        token: &str,
66        common: &NONInputRequestCommon,
67    ) -> Option<ExpTokenEvalValue> {
68        if let Some(v) =
69            ExpReservedTokenTranslatorHelper::trans_request_source(token, &common.source)
70        {
71            return Some(v);
72        }
73
74
75        let ret = match token {
76            "req_path" => ExpTokenEvalValue::from_opt_glob(&common.req_path),
77            "level" => ExpTokenEvalValue::from_string(&common.level),
78            "target" => ExpTokenEvalValue::from_opt_string(&common.target),
79            "flags" => ExpTokenEvalValue::U32(common.flags),
80            _ => {
81                return None;
82            }
83        };
84
85        Some(ret)
86    }
87
88    fn trans_bdt_interest_referer(
89        token: &str,
90        referer: &BdtDataRefererInfo
91    ) -> Option<ExpTokenEvalValue> {
92        let ret = match token {
93            "target" => ExpTokenEvalValue::from_opt_string(&referer.target),
94            "object_id" => ExpTokenEvalValue::from_string(&referer.object_id),
95            "inner_path" => ExpTokenEvalValue::from_opt_glob(&referer.inner_path),
96            "dec_id" => ExpTokenEvalValue::from_string(&referer.object_id),
97            "req_path" => ExpTokenEvalValue::from_opt_glob(&referer.inner_path),
98            "referer_object" => {
99                if referer.referer_object.len() > 0 {
100                    ExpTokenEvalValue::from_glob_list(&referer.referer_object)
101                } else {
102                    ExpTokenEvalValue::None
103                }
104            }, 
105            "flags" => ExpTokenEvalValue::U32(referer.flags),
106            _ => {
107                return None;
108            }
109        };
110
111        Some(ret)
112    }
113
114    fn trans_ndn_input_request_common(
115        token: &str,
116        common: &NDNInputRequestCommon,
117    ) -> Option<ExpTokenEvalValue> {
118        if let Some(v) =
119            ExpReservedTokenTranslatorHelper::trans_request_source(token, &common.source)
120        {
121            return Some(v);
122        }
123
124        let ret = match token {
125            "req_path" => ExpTokenEvalValue::from_opt_glob(&common.req_path),
126            "level" => ExpTokenEvalValue::from_string(&common.level),
127            "referer_object" => {
128                if common.referer_object.len() > 0 {
129                    ExpTokenEvalValue::from_glob_list(&common.referer_object)
130                } else {
131                    ExpTokenEvalValue::None
132                }
133            }
134            "target" => ExpTokenEvalValue::from_opt_string(&common.target),
135            "flags" => ExpTokenEvalValue::U32(common.flags),
136            _ => {
137                return None;
138            }
139        };
140
141        Some(ret)
142    }
143
144    fn trans_crypto_input_request_common(
145        token: &str,
146        common: &CryptoInputRequestCommon,
147    ) -> Option<ExpTokenEvalValue> {
148        if let Some(v) =
149            ExpReservedTokenTranslatorHelper::trans_request_source(token, &common.source)
150        {
151            return Some(v);
152        }
153
154        let ret = match token {
155            "req_path" => ExpTokenEvalValue::from_opt_glob(&common.req_path),
156            "target" => ExpTokenEvalValue::from_opt_string(&common.target),
157            "flags" => ExpTokenEvalValue::U32(common.flags),
158            _ => {
159                return None;
160            }
161        };
162
163        Some(ret)
164    }
165
166    fn trans_object(token: &str, object: Option<&AnyNamedObject>) -> Option<ExpTokenEvalValue> {
167        let ret = match token {
168            "obj_type" => match object {
169                Some(v) => ExpTokenEvalValue::U16(v.obj_type()),
170                None => ExpTokenEvalValue::None,
171            },
172            "object.dec_id" => match object {
173                Some(v) => ExpTokenEvalValue::from_opt_string(v.dec_id()),
174                None => ExpTokenEvalValue::None,
175            },
176            "object.author" => match object {
177                Some(v) => ExpTokenEvalValue::from_opt_string(&v.author()),
178                None => ExpTokenEvalValue::None,
179            },
180            "object.owner" => match object {
181                Some(v) => ExpTokenEvalValue::from_opt_string(&v.owner()),
182                None => ExpTokenEvalValue::None,
183            },
184
185            _ => return None,
186        };
187
188        Some(ret)
189    }
190
191    fn trans_object_info(token: &str, info: Option<&NONObjectInfo>) -> Option<ExpTokenEvalValue> {
192        let object_id = match info {
193            Some(info) => Some(&info.object_id),
194            None => None,
195        };
196        if let Some(v) = Self::trans_object_id(token, object_id) {
197            return Some(v);
198        }
199
200        let object = match info {
201            Some(info) => info.object.as_deref(),
202            None => None,
203        };
204        if let Some(v) = Self::trans_object(token, object) {
205            return Some(v);
206        }
207
208        None
209    }
210
211    fn trans_select_filter(token: &str, filter: &SelectFilter) -> Option<ExpTokenEvalValue> {
212        let ret = match token {
213            "filter.obj_type" => match filter.obj_type.to_owned() {
214                Some(v) => ExpTokenEvalValue::U16(v),
215                None => ExpTokenEvalValue::None,
216            },
217            "filter.obj_type_code" => match filter.obj_type_code.as_ref() {
218                Some(code) => ExpTokenEvalValue::U16(code.into()),
219                None => ExpTokenEvalValue::None,
220            },
221
222            "filter.dec_id" => ExpTokenEvalValue::from_opt_string(&filter.dec_id),
223            "filter.owner_id" => ExpTokenEvalValue::from_opt_string(&filter.owner_id),
224            "filter.author_id" => ExpTokenEvalValue::from_opt_string(&filter.author_id),
225            "filter.flags" => match filter.flags.to_owned() {
226                Some(v) => ExpTokenEvalValue::U32(v),
227                None => ExpTokenEvalValue::None,
228            },
229            _ => {
230                return None;
231            }
232        };
233
234        Some(ret)
235    }
236
237    fn trans_area(token: &str, area: Option<&Area>) -> Option<ExpTokenEvalValue> {
238        let ret = match token {
239            "area.country" => match area {
240                Some(area) => ExpTokenEvalValue::U16(area.country),
241                None => ExpTokenEvalValue::None,
242            },
243            "area.carrier" => match area {
244                Some(area) => ExpTokenEvalValue::U8(area.carrier),
245                None => ExpTokenEvalValue::None,
246            },
247            "area.city" => match area {
248                Some(area) => ExpTokenEvalValue::U16(area.city),
249                None => ExpTokenEvalValue::None,
250            },
251            "area.inner" => match area {
252                Some(area) => ExpTokenEvalValue::U8(area.inner),
253                None => ExpTokenEvalValue::None,
254            },
255            _ => {
256                return None;
257            }
258        };
259
260        Some(ret)
261    }
262
263    fn trans_object_id(token: &str, object_id: Option<&ObjectId>) -> Option<ExpTokenEvalValue> {
264        let ret = match token {
265            "object_id" => match object_id {
266                Some(object_id) => ExpTokenEvalValue::from_string(object_id),
267                None => ExpTokenEvalValue::None,
268            },
269            "obj_type_code" => match object_id {
270                Some(object_id) => ExpTokenEvalValue::U16(object_id.obj_type_code().into()),
271                None => ExpTokenEvalValue::None,
272            },
273            "obj_category" => match object_id {
274                Some(object_id) => ExpTokenEvalValue::from_string(&object_id.object_category()),
275                None => ExpTokenEvalValue::None,
276            },
277            _ => {
278                if token.starts_with("area.") {
279                    let area = if let Some(object_id) = object_id {
280                        let info: ObjectIdInfo = object_id.info();
281                        if let Some(area) = info.into_area() {
282                            Some(area)
283                        } else {
284                            None
285                        }
286                    } else {
287                        None
288                    };
289
290                    if let Some(v) = Self::trans_area(token, area.as_ref()) {
291                        return Some(v);
292                    }
293
294                    unreachable!();
295                }
296
297                return None;
298            }
299        };
300
301        Some(ret)
302    }
303
304    fn trans_bucky_error(token: &str, error: &BuckyError) -> Option<ExpTokenEvalValue> {
305        let ret = match token {
306            "error.code" => ExpTokenEvalValue::U32(error.code().into()),
307            "error.msg" => ExpTokenEvalValue::String(error.msg().to_owned()),
308            _ => return None,
309        };
310
311        Some(ret)
312    }
313}
314
315impl ExpReservedTokenTranslator for NONPutObjectInputRequest {
316    fn trans(&self, token: &str) -> ExpTokenEvalValue {
317        if let Some(v) =
318            ExpReservedTokenTranslatorHelper::trans_non_input_request_common(token, &self.common)
319        {
320            return v;
321        }
322
323        if let Some(v) =
324            ExpReservedTokenTranslatorHelper::trans_object_info(token, Some(&self.object))
325        {
326            return v;
327        }
328
329        unreachable!("unknown router put_object reserved token: {}", token);
330    }
331}
332
333impl ExpReservedTokenTranslator for NONPutObjectInputResponse {
334    fn trans(&self, token: &str) -> ExpTokenEvalValue {
335        match token {
336            "result" => ExpTokenEvalValue::from_string(&self.result),
337            "object_update_time" => {
338                ExpTokenEvalValue::U64(self.object_update_time.to_owned().unwrap_or(0))
339            }
340            "object_expires_time" => {
341                ExpTokenEvalValue::U64(self.object_expires_time.to_owned().unwrap_or(0))
342            }
343
344            _ => ExpTokenEvalValue::None,
345        }
346    }
347}
348
349impl ExpReservedTokenTranslator for NONGetObjectInputRequest {
350    fn trans(&self, token: &str) -> ExpTokenEvalValue {
351        match token {
352            "inner_path" => ExpTokenEvalValue::from_opt_glob(&self.inner_path),
353
354            _ => {
355                if let Some(v) =
356                    ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
357                {
358                    return v;
359                }
360
361                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_non_input_request_common(
362                    token,
363                    &self.common,
364                ) {
365                    return v;
366                }
367
368                unreachable!(
369                    "unknown router get_object request reserved token: {}",
370                    token
371                );
372            }
373        }
374    }
375}
376
377impl ExpReservedTokenTranslator for NONGetObjectInputResponse {
378    fn trans(&self, token: &str) -> ExpTokenEvalValue {
379        if let Some(v) =
380            ExpReservedTokenTranslatorHelper::trans_object_info(token, Some(&self.object))
381        {
382            return v;
383        }
384
385        ExpTokenEvalValue::None
386    }
387}
388
389impl ExpReservedTokenTranslator for NONPostObjectInputRequest {
390    fn trans(&self, token: &str) -> ExpTokenEvalValue {
391        if let Some(v) =
392            ExpReservedTokenTranslatorHelper::trans_non_input_request_common(token, &self.common)
393        {
394            return v;
395        }
396
397        if let Some(v) =
398            ExpReservedTokenTranslatorHelper::trans_object_info(token, Some(&self.object))
399        {
400            return v;
401        }
402        unreachable!(
403            "unknown router post_object request reserved token: {}",
404            token
405        );
406    }
407}
408
409impl ExpReservedTokenTranslator for NONPostObjectInputResponse {
410    fn trans(&self, token: &str) -> ExpTokenEvalValue {
411        if let Some(v) =
412            ExpReservedTokenTranslatorHelper::trans_object_info(token, self.object.as_ref())
413        {
414            return v;
415        }
416
417        ExpTokenEvalValue::None
418    }
419}
420
421impl ExpReservedTokenTranslator for NONSelectObjectInputRequest {
422    fn trans(&self, token: &str) -> ExpTokenEvalValue {
423        if let Some(v) =
424            ExpReservedTokenTranslatorHelper::trans_non_input_request_common(token, &self.common)
425        {
426            return v;
427        }
428
429        if let Some(v) = ExpReservedTokenTranslatorHelper::trans_select_filter(token, &self.filter)
430        {
431            return v;
432        }
433
434        unreachable!(
435            "unknown router select_object request reserved token: {}",
436            token
437        );
438    }
439}
440
441impl ExpReservedTokenTranslator for NONSelectObjectInputResponse {
442    fn trans(&self, token: &str) -> ExpTokenEvalValue {
443        if self.objects.is_empty() {
444            return ExpTokenEvalValue::None;
445        }
446
447        // TODO 支持多表达式
448
449        let first = &self.objects[0];
450        if let Some(ret) =
451            ExpReservedTokenTranslatorHelper::trans_object_info(token, first.object.as_ref())
452        {
453            return ret;
454        }
455
456        ExpTokenEvalValue::None
457    }
458}
459
460impl ExpReservedTokenTranslator for NONDeleteObjectInputRequest {
461    fn trans(&self, token: &str) -> ExpTokenEvalValue {
462        if token == "inner_path" {
463            return ExpTokenEvalValue::from_opt_glob(&self.inner_path);
464        }
465        if let Some(v) =
466            ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
467        {
468            return v;
469        }
470        if let Some(v) =
471            ExpReservedTokenTranslatorHelper::trans_non_input_request_common(token, &self.common)
472        {
473            return v;
474        }
475
476        unreachable!("unknown router delete_object reserved token: {}", token);
477    }
478}
479
480impl ExpReservedTokenTranslator for NONDeleteObjectInputResponse {
481    fn trans(&self, token: &str) -> ExpTokenEvalValue {
482        if let Some(v) =
483            ExpReservedTokenTranslatorHelper::trans_object_info(token, self.object.as_ref())
484        {
485            return v;
486        }
487
488        ExpTokenEvalValue::None
489    }
490}
491
492// put_data
493impl ExpReservedTokenTranslator for NDNPutDataInputRequest {
494    fn trans(&self, token: &str) -> ExpTokenEvalValue {
495        if let Some(v) =
496            ExpReservedTokenTranslatorHelper::trans_ndn_input_request_common(token, &self.common)
497        {
498            return v;
499        }
500
501        if let Some(v) =
502            ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
503        {
504            return v;
505        }
506
507        unreachable!("unknown ndn put_data reserved token: {}", token);
508    }
509}
510
511impl ExpReservedTokenTranslator for NDNPutDataInputResponse {
512    fn trans(&self, token: &str) -> ExpTokenEvalValue {
513        match token {
514            "result" => ExpTokenEvalValue::from_string(&self.result),
515            _ => ExpTokenEvalValue::None,
516        }
517    }
518}
519
520// get_data
521impl ExpReservedTokenTranslator for NDNGetDataInputRequest {
522    fn trans(&self, token: &str) -> ExpTokenEvalValue {
523        match token {
524            "inner_path" => ExpTokenEvalValue::from_opt_glob(&self.inner_path),
525            _ => {
526                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_ndn_input_request_common(
527                    token,
528                    &self.common,
529                ) {
530                    return v;
531                }
532                if let Some(v) =
533                    ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
534                {
535                    return v;
536                }
537
538                unreachable!("unknown ndn get_data reserved token: {}", token);
539            }
540        }
541    }
542}
543
544impl ExpReservedTokenTranslator for NDNGetDataInputResponse {
545    fn trans(&self, token: &str) -> ExpTokenEvalValue {
546        match token {
547            "attr" => match &self.attr {
548                Some(v) => ExpTokenEvalValue::U32(v.flags()),
549                None => ExpTokenEvalValue::None,
550            },
551            "length" => ExpTokenEvalValue::U64(self.length),
552            _ => {
553                if let Some(v) =
554                    ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
555                {
556                    return v;
557                }
558
559                ExpTokenEvalValue::None
560            }
561        }
562    }
563}
564
565// delete_data
566impl ExpReservedTokenTranslator for NDNDeleteDataInputRequest {
567    fn trans(&self, token: &str) -> ExpTokenEvalValue {
568        match token {
569            "inner_path" => ExpTokenEvalValue::from_opt_glob(&self.inner_path),
570            _ => {
571                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_ndn_input_request_common(
572                    token,
573                    &self.common,
574                ) {
575                    return v;
576                }
577                if let Some(v) =
578                    ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
579                {
580                    return v;
581                }
582
583                unreachable!("unknown ndn delete_data reserved token: {}", token);
584            }
585        }
586    }
587}
588
589impl ExpReservedTokenTranslator for NDNDeleteDataInputResponse {
590    fn trans(&self, token: &str) -> ExpTokenEvalValue {
591        match token {
592            _ => {
593                if let Some(v) =
594                    ExpReservedTokenTranslatorHelper::trans_object_id(token, Some(&self.object_id))
595                {
596                    return v;
597                }
598
599                ExpTokenEvalValue::None
600            }
601        }
602    }
603}
604
605// sign_object
606impl ExpReservedTokenTranslator for CryptoSignObjectInputRequest {
607    fn trans(&self, token: &str) -> ExpTokenEvalValue {
608        match token {
609            "crypto_flags" => ExpTokenEvalValue::U32(self.flags),
610            _ => {
611                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_crypto_input_request_common(
612                    token,
613                    &self.common,
614                ) {
615                    return v;
616                }
617                if let Some(v) =
618                    ExpReservedTokenTranslatorHelper::trans_object_info(token, Some(&self.object))
619                {
620                    return v;
621                }
622
623                unreachable!("unknown crypto sign_object reserved token: {}", token);
624            }
625        }
626    }
627}
628
629impl ExpReservedTokenTranslator for CryptoSignObjectInputResponse {
630    fn trans(&self, token: &str) -> ExpTokenEvalValue {
631        match token {
632            "result" => ExpTokenEvalValue::from_string(&self.result),
633            _ => {
634                if let Some(v) =
635                    ExpReservedTokenTranslatorHelper::trans_object_info(token, self.object.as_ref())
636                {
637                    return v;
638                }
639
640                ExpTokenEvalValue::None
641            }
642        }
643    }
644}
645
646// verify_object
647impl ExpReservedTokenTranslator for CryptoVerifyObjectInputRequest {
648    fn trans(&self, token: &str) -> ExpTokenEvalValue {
649        match token {
650            "sign_type" => ExpTokenEvalValue::from_string(&self.sign_type),
651            "sign_object_type" => ExpTokenEvalValue::from_string(&self.sign_object),
652            _ => {
653                if token.starts_with("sign_object") {
654                    let sub_token = token.trim_start_matches("sign_object.");
655
656                    match &self.sign_object {
657                        VerifyObjectType::Object(sign_object) => {
658                            if let Some(v) = ExpReservedTokenTranslatorHelper::trans_object_id(
659                                sub_token,
660                                Some(&sign_object.object_id),
661                            ) {
662                                return v;
663                            }
664
665                            let sign_object = sign_object.object.as_ref().map(|v| v.as_ref());
666                            if let Some(v) = ExpReservedTokenTranslatorHelper::trans_object(
667                                sub_token,
668                                sign_object,
669                            ) {
670                                return v;
671                            }
672
673                            unreachable!("unknown crypto verify_object reserved token: {}", token);
674                        }
675                        _ => {
676                            return ExpTokenEvalValue::None;
677                        }
678                    }
679                }
680
681                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_crypto_input_request_common(
682                    token,
683                    &self.common,
684                ) {
685                    return v;
686                }
687                if let Some(v) =
688                    ExpReservedTokenTranslatorHelper::trans_object_info(token, Some(&self.object))
689                {
690                    return v;
691                }
692
693                unreachable!("unknown crypto verify_object reserved token: {}", token);
694            }
695        }
696    }
697}
698
699impl ExpReservedTokenTranslator for CryptoVerifyObjectInputResponse {
700    fn trans(&self, token: &str) -> ExpTokenEvalValue {
701        match token {
702            "valid" => ExpTokenEvalValue::Bool(self.result.valid),
703            _ => ExpTokenEvalValue::None,
704        }
705    }
706}
707
708// encrypt_data
709impl ExpReservedTokenTranslator for CryptoEncryptDataInputRequest {
710    fn trans(&self, token: &str) -> ExpTokenEvalValue {
711        match token {
712            "encrypt_type" => ExpTokenEvalValue::String(self.encrypt_type.to_string()),
713            "crypto_flags" => ExpTokenEvalValue::U32(self.flags),
714            _ => {
715                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_crypto_input_request_common(
716                    token,
717                    &self.common,
718                ) {
719                    return v;
720                }
721
722                unreachable!("unknown crypto encrypt_data reserved token: {}", token);
723            }
724        }
725    }
726}
727
728impl ExpReservedTokenTranslator for CryptoEncryptDataInputResponse {
729    fn trans(&self, _token: &str) -> ExpTokenEvalValue {
730        ExpTokenEvalValue::None
731    }
732}
733
734// decrypt_data
735impl ExpReservedTokenTranslator for CryptoDecryptDataInputRequest {
736    fn trans(&self, token: &str) -> ExpTokenEvalValue {
737        match token {
738            "decrypt_type" => ExpTokenEvalValue::String(self.decrypt_type.to_string()),
739            "crypto_flags" => ExpTokenEvalValue::U32(self.flags),
740            _ => {
741                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_crypto_input_request_common(
742                    token,
743                    &self.common,
744                ) {
745                    return v;
746                }
747
748                unreachable!("unknown crypto decrypt_data reserved token: {}", token);
749            }
750        }
751    }
752}
753
754impl ExpReservedTokenTranslator for CryptoDecryptDataInputResponse {
755    fn trans(&self, token: &str) -> ExpTokenEvalValue {
756        match token {
757            "result" => ExpTokenEvalValue::from_string(&self.result),
758            _ => {
759                ExpTokenEvalValue::None
760            }
761        }
762    }
763}
764
765// acl
766impl ExpReservedTokenTranslator for AclHandlerRequest {
767    fn trans(&self, token: &str) -> ExpTokenEvalValue {
768        match token {
769            "protocol" => ExpTokenEvalValue::from_string(&self.protocol),
770            "direction" => ExpTokenEvalValue::from_string(&self.action.direction),
771            "operation" => ExpTokenEvalValue::from_string(&self.action.operation),
772
773            "device" | "source" | "target" | "your" => {
774                ExpTokenEvalValue::from_string(&self.device_id)
775            }
776
777            "inner_path" => ExpTokenEvalValue::from_opt_glob(&self.inner_path),
778            "dec_id" => ExpTokenEvalValue::from_string(&self.dec_id),
779            "req_path" => ExpTokenEvalValue::from_opt_glob(&self.req_path),
780            "referer_object" => {
781                if let Some(referer_object) = &self.referer_object {
782                    if referer_object.len() > 0 {
783                        ExpTokenEvalValue::from_glob_list(referer_object)
784                    } else {
785                        ExpTokenEvalValue::None
786                    }
787                } else {
788                    ExpTokenEvalValue::None
789                }
790            }
791
792            _ => {
793                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_object_id(
794                    token,
795                    self.object.as_ref().map(|item| &item.object_id),
796                ) {
797                    return v;
798                }
799
800                let object = self
801                    .object
802                    .as_ref()
803                    .map(|item| item.object.as_deref())
804                    .flatten();
805                if let Some(v) = ExpReservedTokenTranslatorHelper::trans_object(token, object) {
806                    return v;
807                }
808
809                unreachable!("unknown router acl request reserved token: {}", token);
810            }
811        }
812    }
813}
814
815impl ExpReservedTokenTranslator for AclHandlerResponse {
816    fn trans(&self, token: &str) -> ExpTokenEvalValue {
817        match token {
818            "access" => ExpTokenEvalValue::from_string(&self.access),
819            _ => ExpTokenEvalValue::None,
820        }
821    }
822}
823
824
825// interest
826impl ExpReservedTokenTranslator for InterestHandlerRequest {
827    fn trans(&self, token: &str) -> ExpTokenEvalValue {
828        match token {
829            "chunk" => ExpTokenEvalValue::from_string(&self.chunk), 
830            "from" => ExpTokenEvalValue::from_opt_string(&self.from), 
831            "from_channel" => ExpTokenEvalValue::from_string(&self.from_channel), 
832            "group_path" => ExpTokenEvalValue::from_opt_glob(&self.group_path),
833            _ => {
834                if let Some(referer) = &self.referer {
835                    if let Some(v) = ExpReservedTokenTranslatorHelper::trans_bdt_interest_referer(token, referer) {
836                        return v;
837                    }
838                }
839                unreachable!("unknown router interest request reserved token: {}", token);
840            }
841        }
842    }
843}
844
845impl ExpReservedTokenTranslator for InterestHandlerResponse {
846    fn trans(&self, token: &str) -> ExpTokenEvalValue {
847        match token {
848            "type" => ExpTokenEvalValue::String(self.type_str().to_owned()), 
849            "upload.groups" => match self {
850                Self::Upload { groups, .. } => ExpTokenEvalValue::from_glob_list(&groups), 
851                _ => ExpTokenEvalValue::from_glob_list(&Vec::<String>::new()), 
852            }, 
853            "upload.file_path" => match self {
854                Self::Upload { source, .. } => match source {
855                    InterestUploadSource::ChunkStore => ExpTokenEvalValue::None, 
856                    InterestUploadSource::File { path, .. } => ExpTokenEvalValue::from_opt_glob(&path.to_str())
857                }, 
858                _ => ExpTokenEvalValue::None, 
859            }, 
860            "upload.file_offset" => match self {
861                Self::Upload { source, .. } => match source {
862                    InterestUploadSource::ChunkStore => ExpTokenEvalValue::None, 
863                    InterestUploadSource::File { offset, .. } => ExpTokenEvalValue::U64(*offset), 
864                }, 
865                _ => ExpTokenEvalValue::None, 
866            }, 
867            "transmit_to" => ExpTokenEvalValue::from_opt_string(&self.transmit_to().clone()), 
868            "err" => {
869                if let Some(err) = self.resp_interest().map(|r| r.err.as_u16()) {
870                    ExpTokenEvalValue::U32(err as u32)
871                } else {
872                    ExpTokenEvalValue::None
873                }
874            }, 
875            "redirect" => ExpTokenEvalValue::from_opt_string(&self.resp_interest().and_then(|r| r.redirect.clone())), 
876            "redirect_referer_target" => ExpTokenEvalValue::from_opt_string(&self.resp_interest().and_then(|r| r.redirect_referer_target.clone())), 
877            _ => {
878                unreachable!("unknown router interest response reserved token: {}", token);
879            }, 
880        }
881    }
882}
883
884impl<REQ, RESP> ExpReservedTokenTranslator for RouterHandlerRequest<REQ, RESP>
885where
886    REQ: Send + Sync + 'static + ExpReservedTokenTranslator + JsonCodec<REQ> + std::fmt::Display,
887    RESP: Send + Sync + 'static + ExpReservedTokenTranslator + JsonCodec<RESP> + std::fmt::Display,
888{
889    fn trans(&self, token: &str) -> ExpTokenEvalValue {
890        if ExpReservedTokenTranslatorHelper::is_response_token(token) {
891            let token = ExpReservedTokenTranslatorHelper::from_response_token(token);
892            if let Some(resp) = &self.response {
893                match resp {
894                    Ok(resp) => resp.trans(token),
895                    Err(e) => {
896                        if let Some(ret) =
897                            ExpReservedTokenTranslatorHelper::trans_bucky_error(token, e)
898                        {
899                            return ret;
900                        }
901
902                        ExpTokenEvalValue::None
903                    }
904                }
905            } else {
906                ExpTokenEvalValue::None
907            }
908        } else {
909            self.request.trans(token)
910        }
911    }
912}
913
914pub struct RouterHandlerReservedTokenList {
915    pub put_object: ExpReservedTokenList,
916    pub get_object: ExpReservedTokenList,
917    pub post_object: ExpReservedTokenList,
918    pub select_object: ExpReservedTokenList,
919    pub delete_object: ExpReservedTokenList,
920
921    pub get_data: ExpReservedTokenList,
922    pub put_data: ExpReservedTokenList,
923    pub delete_data: ExpReservedTokenList,
924
925    pub sign_object: ExpReservedTokenList,
926    pub verify_object: ExpReservedTokenList,
927    pub encrypt_data: ExpReservedTokenList,
928    pub decrypt_data: ExpReservedTokenList,
929
930    pub acl: ExpReservedTokenList,
931    pub interest: ExpReservedTokenList, 
932}
933
934impl RouterHandlerReservedTokenList {
935    fn new() -> Self {
936        Self {
937            put_object: Self::gen_put_object(),
938            get_object: Self::gen_get_object(),
939            post_object: Self::gen_post_object(),
940            select_object: Self::gen_select_object(),
941            delete_object: Self::gen_delete_object(),
942
943            get_data: Self::gen_get_data(),
944            put_data: Self::gen_put_data(),
945            delete_data: Self::gen_delete_data(),
946
947            sign_object: Self::gen_sign_object(),
948            verify_object: Self::gen_verify_object(),
949            encrypt_data: Self::gen_encrypt_object(),
950            decrypt_data: Self::gen_decrypt_object(),
951
952            acl: Self::gen_acl(),
953            interest: Self::gen_interest(), 
954        }
955    }
956
957    fn add_bdt_interest_referer_tokens(token_list: &mut ExpReservedTokenList) {
958        token_list.add_string("target");
959        token_list.add_string("object_id");
960        token_list.add_glob("inner_path");
961        token_list.add_string("dec_id");
962        token_list.add_glob("req_path");
963        token_list.add_glob("referer_object");
964        token_list.add_u32("flags");
965    }
966
967    fn add_non_input_request_common_tokens(token_list: &mut ExpReservedTokenList) {
968        token_list.add_glob("req_path");
969
970        token_list.add_string("source.dec_id");
971        token_list.add_string("source.device");
972        token_list.add_string("source.zone_category");
973        token_list.add_string("source.zone");
974        token_list.add_string("source.protocol");
975
976        token_list.add_string("level");
977        token_list.add_string("target");
978        token_list.add_u32("flags");
979    }
980
981    fn add_ndn_input_request_common_tokens(token_list: &mut ExpReservedTokenList) {
982        token_list.add_glob("req_path");
983        
984        token_list.add_string("source.dec_id");
985        token_list.add_string("source.device");
986        token_list.add_string("source.zone_category");
987        token_list.add_string("source.zone");
988        token_list.add_string("source.protocol");
989
990        token_list.add_string("level");
991        token_list.add_glob("referer_object");
992        token_list.add_string("target");
993        token_list.add_u32("flags");
994    }
995
996    fn add_crypto_input_request_common_tokens(token_list: &mut ExpReservedTokenList) {
997        token_list.add_glob("req_path");
998        
999        token_list.add_string("source.dec_id");
1000        token_list.add_string("source.device");
1001        token_list.add_string("source.zone_category");
1002        token_list.add_string("source.zone");
1003        token_list.add_string("source.protocol");
1004        
1005        token_list.add_string("target");
1006        token_list.add_u32("flags");
1007    }
1008
1009    fn add_area_tokens(token_list: &mut ExpReservedTokenList) {
1010        token_list.add_u16("area.country");
1011        token_list.add_u8("area.carrier");
1012        token_list.add_u16("area.city");
1013        token_list.add_u8("area.inner");
1014    }
1015
1016    fn add_object_id_tokens(token_list: &mut ExpReservedTokenList) {
1017        token_list.add_string("object_id");
1018        token_list.add_u16("obj_type_code");
1019        token_list.add_string("obj_category");
1020
1021        Self::add_area_tokens(token_list);
1022    }
1023
1024    fn add_object_tokens(token_list: &mut ExpReservedTokenList) {
1025        token_list.add_u16("obj_type");
1026        token_list.add_string("object.dec_id");
1027        token_list.add_string("object.author");
1028        token_list.add_string("object.owner");
1029    }
1030
1031    fn add_object_info_tokens(token_list: &mut ExpReservedTokenList) {
1032        Self::add_object_tokens(token_list);
1033        Self::add_object_id_tokens(token_list);
1034    }
1035
1036    fn add_error_tokens(token_list: &mut ExpReservedTokenList) {
1037        token_list.add_u32("error.code");
1038        token_list.add_string("error.msg");
1039    }
1040
1041    fn add_filter_tokens(token_list: &mut ExpReservedTokenList) {
1042        token_list.add_u16("filter.obj_type");
1043        token_list.add_u16("filter.obj_type_code");
1044        token_list.add_string("filter.dec_id");
1045        token_list.add_string("filter.owner_id");
1046        token_list.add_string("filter.author_id");
1047        token_list.add_u32("filter.flags");
1048    }
1049
1050    // put_object
1051    fn gen_put_object_request() -> ExpReservedTokenList {
1052        let mut token_list = ExpReservedTokenList::new();
1053
1054        Self::add_non_input_request_common_tokens(&mut token_list);
1055        Self::add_object_info_tokens(&mut token_list);
1056
1057        token_list
1058    }
1059
1060    fn gen_put_object_response() -> ExpReservedTokenList {
1061        let mut token_list = ExpReservedTokenList::new();
1062
1063        token_list.add_string("result");
1064        token_list.add_u64("object_update_time");
1065        token_list.add_u64("object_expires_time");
1066
1067        Self::add_error_tokens(&mut token_list);
1068
1069        token_list.translate_resp();
1070
1071        token_list
1072    }
1073
1074    fn gen_put_object() -> ExpReservedTokenList {
1075        let mut list = Self::gen_put_object_request();
1076        list.append(Self::gen_put_object_response());
1077
1078        list
1079    }
1080
1081    // get_object
1082    fn gen_get_object_request() -> ExpReservedTokenList {
1083        let mut token_list = ExpReservedTokenList::new();
1084
1085        token_list.add_glob("inner_path");
1086        Self::add_non_input_request_common_tokens(&mut token_list);
1087        Self::add_object_id_tokens(&mut token_list);
1088
1089        token_list
1090    }
1091
1092    fn gen_get_object_response() -> ExpReservedTokenList {
1093        let mut token_list = ExpReservedTokenList::new();
1094
1095        Self::add_object_info_tokens(&mut token_list);
1096        Self::add_error_tokens(&mut token_list);
1097
1098        token_list.translate_resp();
1099
1100        token_list
1101    }
1102
1103    fn gen_get_object() -> ExpReservedTokenList {
1104        let mut list = Self::gen_get_object_request();
1105        list.append(Self::gen_get_object_response());
1106
1107        list
1108    }
1109
1110    // post_object
1111    fn gen_post_object_request() -> ExpReservedTokenList {
1112        let mut token_list = ExpReservedTokenList::new();
1113
1114        Self::add_non_input_request_common_tokens(&mut token_list);
1115        Self::add_object_info_tokens(&mut token_list);
1116
1117        token_list
1118    }
1119
1120    fn gen_post_object_response() -> ExpReservedTokenList {
1121        let mut token_list = ExpReservedTokenList::new();
1122
1123        Self::add_object_info_tokens(&mut token_list);
1124        Self::add_error_tokens(&mut token_list);
1125
1126        token_list.translate_resp();
1127
1128        token_list
1129    }
1130
1131    fn gen_post_object() -> ExpReservedTokenList {
1132        let mut list = Self::gen_post_object_request();
1133        list.append(Self::gen_post_object_response());
1134
1135        list
1136    }
1137
1138    // select
1139    fn gen_select_object_request() -> ExpReservedTokenList {
1140        let mut token_list = ExpReservedTokenList::new();
1141
1142        Self::add_filter_tokens(&mut token_list);
1143        Self::add_non_input_request_common_tokens(&mut token_list);
1144
1145        token_list
1146    }
1147
1148    fn gen_select_object_response() -> ExpReservedTokenList {
1149        let mut token_list = ExpReservedTokenList::new();
1150
1151        Self::add_object_info_tokens(&mut token_list);
1152        Self::add_error_tokens(&mut token_list);
1153
1154        token_list.translate_resp();
1155
1156        token_list
1157    }
1158
1159    fn gen_select_object() -> ExpReservedTokenList {
1160        let mut list = Self::gen_select_object_request();
1161        list.append(Self::gen_select_object_response());
1162
1163        list
1164    }
1165
1166    // delete_object
1167    fn gen_delete_object_request() -> ExpReservedTokenList {
1168        let mut token_list = ExpReservedTokenList::new();
1169
1170        token_list.add_glob("inner_path");
1171        Self::add_object_id_tokens(&mut token_list);
1172        Self::add_non_input_request_common_tokens(&mut token_list);
1173
1174        token_list
1175    }
1176
1177    fn gen_delete_object_response() -> ExpReservedTokenList {
1178        let mut token_list = ExpReservedTokenList::new();
1179
1180        Self::add_object_info_tokens(&mut token_list);
1181        Self::add_error_tokens(&mut token_list);
1182        token_list.translate_resp();
1183
1184        token_list
1185    }
1186
1187    fn gen_delete_object() -> ExpReservedTokenList {
1188        let mut list = Self::gen_delete_object_request();
1189        list.append(Self::gen_delete_object_response());
1190
1191        list
1192    }
1193
1194    // get_data
1195    fn gen_get_data_request() -> ExpReservedTokenList {
1196        let mut token_list = ExpReservedTokenList::new();
1197
1198        token_list.add_glob("inner_path");
1199        Self::add_ndn_input_request_common_tokens(&mut token_list);
1200        Self::add_object_id_tokens(&mut token_list);
1201
1202        token_list
1203    }
1204
1205    fn gen_get_data_response() -> ExpReservedTokenList {
1206        let mut token_list = ExpReservedTokenList::new();
1207
1208        Self::add_object_id_tokens(&mut token_list);
1209        token_list.add_u32("attr");
1210        token_list.add_u32("length");
1211        Self::add_error_tokens(&mut token_list);
1212
1213        token_list.translate_resp();
1214
1215        token_list
1216    }
1217
1218    fn gen_get_data() -> ExpReservedTokenList {
1219        let mut list = Self::gen_get_data_request();
1220        list.append(Self::gen_get_data_response());
1221
1222        list
1223    }
1224
1225    // put_data
1226    fn gen_put_data_request() -> ExpReservedTokenList {
1227        let mut token_list = ExpReservedTokenList::new();
1228
1229        Self::add_ndn_input_request_common_tokens(&mut token_list);
1230        Self::add_object_id_tokens(&mut token_list);
1231        token_list.add_u32("length");
1232
1233        token_list
1234    }
1235
1236    fn gen_put_data_response() -> ExpReservedTokenList {
1237        let mut token_list = ExpReservedTokenList::new();
1238
1239        token_list.add_string("result");
1240        Self::add_error_tokens(&mut token_list);
1241
1242        token_list.translate_resp();
1243
1244        token_list
1245    }
1246
1247    fn gen_put_data() -> ExpReservedTokenList {
1248        let mut list = Self::gen_put_data_request();
1249        list.append(Self::gen_put_data_response());
1250
1251        list
1252    }
1253
1254    // delete_data
1255    fn gen_delete_data_request() -> ExpReservedTokenList {
1256        let mut token_list = ExpReservedTokenList::new();
1257
1258        token_list.add_glob("inner_path");
1259        Self::add_ndn_input_request_common_tokens(&mut token_list);
1260        Self::add_object_id_tokens(&mut token_list);
1261
1262        token_list
1263    }
1264
1265    fn gen_delete_data_response() -> ExpReservedTokenList {
1266        let mut token_list = ExpReservedTokenList::new();
1267
1268        Self::add_object_id_tokens(&mut token_list);
1269        Self::add_error_tokens(&mut token_list);
1270
1271        token_list.translate_resp();
1272
1273        token_list
1274    }
1275
1276    fn gen_delete_data() -> ExpReservedTokenList {
1277        let mut list = Self::gen_delete_data_request();
1278        list.append(Self::gen_delete_data_response());
1279
1280        list
1281    }
1282
1283    // sign_object
1284    fn gen_sign_object_request() -> ExpReservedTokenList {
1285        let mut token_list = ExpReservedTokenList::new();
1286
1287        Self::add_crypto_input_request_common_tokens(&mut token_list);
1288        Self::add_object_info_tokens(&mut token_list);
1289
1290        token_list.add_u32("crypto_flags");
1291
1292        token_list
1293    }
1294
1295    fn gen_sign_object_response() -> ExpReservedTokenList {
1296        let mut token_list = ExpReservedTokenList::new();
1297
1298        token_list.add_string("result");
1299        Self::add_object_info_tokens(&mut token_list);
1300
1301        Self::add_error_tokens(&mut token_list);
1302
1303        token_list.translate_resp();
1304
1305        token_list
1306    }
1307
1308    fn gen_sign_object() -> ExpReservedTokenList {
1309        let mut list = Self::gen_sign_object_request();
1310        list.append(Self::gen_sign_object_response());
1311
1312        list
1313    }
1314
1315    // verify_object
1316    fn gen_verify_object_request() -> ExpReservedTokenList {
1317        let mut token_list = ExpReservedTokenList::new();
1318
1319        Self::add_crypto_input_request_common_tokens(&mut token_list);
1320        Self::add_object_info_tokens(&mut token_list);
1321
1322        token_list.add_string("sign_type");
1323
1324        //// 对枚举类型sign_object的关键字支持
1325
1326        token_list.add_string("sign_object_type");
1327
1328        let mut sign_object_token_list = ExpReservedTokenList::new();
1329        Self::add_object_info_tokens(&mut sign_object_token_list);
1330        sign_object_token_list.translate("sign_object");
1331
1332        token_list.append(sign_object_token_list);
1333
1334        // TODO 对VerifyObjectType::Sign的支持
1335
1336        token_list
1337    }
1338
1339    fn gen_verify_object_response() -> ExpReservedTokenList {
1340        let mut token_list = ExpReservedTokenList::new();
1341
1342        token_list.add_bool("valid");
1343        Self::add_error_tokens(&mut token_list);
1344
1345        token_list.translate_resp();
1346
1347        token_list
1348    }
1349
1350    fn gen_verify_object() -> ExpReservedTokenList {
1351        let mut list = Self::gen_verify_object_request();
1352        list.append(Self::gen_verify_object_response());
1353
1354        list
1355    }
1356
1357    // encrypt_data
1358    fn gen_encrypt_data_request() -> ExpReservedTokenList {
1359        let mut token_list = ExpReservedTokenList::new();
1360
1361        Self::add_crypto_input_request_common_tokens(&mut token_list);
1362    
1363        token_list.add_u32("crypto_flags");
1364        token_list.add_string("encrypt_type");
1365
1366        token_list
1367    }
1368
1369    fn gen_encrypt_data_response() -> ExpReservedTokenList {
1370        let mut token_list = ExpReservedTokenList::new();
1371        token_list.translate_resp();
1372
1373        token_list
1374    }
1375
1376    fn gen_encrypt_object() -> ExpReservedTokenList {
1377        let mut list = Self::gen_encrypt_data_request();
1378        list.append(Self::gen_encrypt_data_response());
1379
1380        list
1381    }
1382
1383    // decrypt data
1384    fn gen_decrypt_data_request() -> ExpReservedTokenList {
1385        let mut token_list = ExpReservedTokenList::new();
1386
1387        Self::add_crypto_input_request_common_tokens(&mut token_list);
1388    
1389        token_list.add_u32("crypto_flags");
1390        token_list.add_string("decrypt_type");
1391
1392        token_list
1393    }
1394
1395    fn gen_decrypt_data_response() -> ExpReservedTokenList {
1396        let mut token_list = ExpReservedTokenList::new();
1397        token_list.add_string("result");
1398        token_list.translate_resp();
1399
1400        token_list
1401    }
1402
1403    fn gen_decrypt_object() -> ExpReservedTokenList {
1404        let mut list = Self::gen_decrypt_data_request();
1405        list.append(Self::gen_decrypt_data_response());
1406
1407        list
1408    }
1409
1410    // acl
1411    fn gen_acl_request() -> ExpReservedTokenList {
1412        let mut token_list = ExpReservedTokenList::new();
1413
1414        token_list.add_string("protocol");
1415        token_list.add_string("direction");
1416        token_list.add_string("operation");
1417
1418        // 下面四个都对应device
1419        token_list.add_string("device");
1420        token_list.add_string("source");
1421        token_list.add_string("target");
1422        token_list.add_string("your");
1423
1424        Self::add_object_info_tokens(&mut token_list);
1425        token_list.add_glob("inner_path");
1426
1427        token_list.add_string("dec_id");
1428        token_list.add_glob("req_path");
1429
1430        token_list.add_glob("referer_object");
1431
1432        token_list
1433    }
1434
1435    fn gen_acl_response() -> ExpReservedTokenList {
1436        let mut token_list = ExpReservedTokenList::new();
1437
1438        token_list.add_bool("access");
1439        Self::add_error_tokens(&mut token_list);
1440
1441        token_list.translate_resp();
1442
1443        token_list
1444    }
1445
1446    fn gen_acl() -> ExpReservedTokenList {
1447        let mut list = Self::gen_acl_request();
1448        list.append(Self::gen_acl_response());
1449
1450        list
1451    }
1452
1453    // interest
1454    fn gen_interest_request() -> ExpReservedTokenList {
1455        let mut token_list = ExpReservedTokenList::new();
1456        
1457        token_list.add_string("chunk");
1458        token_list.add_string("from");
1459        Self::add_bdt_interest_referer_tokens(&mut token_list);
1460        token_list.add_string("from_channel");
1461        token_list.add_glob("group_path");
1462        token_list
1463    }
1464
1465    fn gen_interest_response() -> ExpReservedTokenList {
1466        let mut token_list = ExpReservedTokenList::new();
1467
1468        token_list.add_string("type");
1469        token_list.add_string("transmit_to");
1470        token_list.add_u32("err");
1471        token_list.add_glob("redirect");
1472        token_list.add_string("redirect_referer_target");
1473        token_list.add_glob("upload.groups");
1474        token_list.add_glob("upload.file_path");
1475        token_list.add_glob("upload.file_offset");
1476        token_list.translate_resp();
1477
1478        token_list
1479    }
1480
1481    fn gen_interest() -> ExpReservedTokenList {
1482        let mut list = Self::gen_interest_request();
1483        list.append(Self::gen_interest_response());
1484
1485        list
1486    }
1487
1488
1489    pub fn select<REQ, RESP>(&self) -> &ExpReservedTokenList
1490    where
1491        REQ: Send + Sync + 'static + JsonCodec<REQ> + std::fmt::Display,
1492        RESP: Send + Sync + 'static + JsonCodec<RESP> + std::fmt::Display,
1493        RouterHandlerRequest<REQ, RESP>: super::category::RouterHandlerCategoryInfo,
1494    {
1495        let category = extract_router_handler_category::<RouterHandlerRequest<REQ, RESP>>();
1496        match category {
1497            RouterHandlerCategory::GetObject => &self.get_object,
1498            RouterHandlerCategory::PutObject => &self.put_object,
1499            RouterHandlerCategory::PostObject => &self.post_object,
1500            RouterHandlerCategory::SelectObject => &self.select_object,
1501            RouterHandlerCategory::DeleteObject => &self.delete_object,
1502
1503            RouterHandlerCategory::PutData => &self.put_data,
1504            RouterHandlerCategory::GetData => &self.get_data,
1505            RouterHandlerCategory::DeleteData => &self.delete_data,
1506
1507            RouterHandlerCategory::SignObject => &self.sign_object,
1508            RouterHandlerCategory::VerifyObject => &self.verify_object,
1509            RouterHandlerCategory::EncryptData => &self.encrypt_data,
1510            RouterHandlerCategory::DecryptData => &self.decrypt_data,
1511
1512            RouterHandlerCategory::Acl => &self.acl, 
1513            RouterHandlerCategory::Interest => &self.interest,
1514        }
1515    }
1516}
1517
1518lazy_static::lazy_static! {
1519    pub static ref ROUTER_HANDLER_RESERVED_TOKEN_LIST: RouterHandlerReservedTokenList = RouterHandlerReservedTokenList::new();
1520}