some serializers

This commit is contained in:
Milo 2020-01-31 23:30:38 -05:00
parent 8ac12c2a10
commit 901cd5beee
1 changed files with 45 additions and 10 deletions

55
msg.rkt
View File

@ -43,16 +43,6 @@
;; networks : [Listof [List Subnet IP]] ;; networks : [Listof [List Subnet IP]]
#:transparent) #:transparent)
;; Msg -> String
(define (msg-type m)
(cond
[(msg:update? m) "update"]
[(msg:revoke? m) "revoke"]
[(msg:data? m) "data"]
[(msg:no-route? m) "no route"]
[(msg:dump? m) "dump"]
[(msg:table? m) "table"]))
;; Any -> Msg ;; Any -> Msg
(define (jsexpr->msg j) (define (jsexpr->msg j)
(define src (string->ip (hash-ref j 'src))) (define src (string->ip (hash-ref j 'src)))
@ -93,7 +83,52 @@
(define (bytes->msg bs) (define (bytes->msg bs)
(jsexpr->msg (bytes->jsexpr bs))) (jsexpr->msg (bytes->jsexpr bs)))
;; Msg -> String
(define (msg-type m)
(cond
[(msg:update? m) "update"]
[(msg:revoke? m) "revoke"]
[(msg:data? m) "data"]
[(msg:no-route? m) "no route"]
[(msg:dump? m) "dump"]
[(msg:table? m) "table"]))
;; Msg -> Any
(define (msg->jsexpr msg)
(hash 'src (ip->string (msg-src msg))
'dst (ip->string (msg-dst msg))
'type (msg-type msg)
'msg (match msg
[(msg:data _ _ data) data]
[(msg:no-route _ _) (hash)]
[_ (error 'msg->jsexpr
(format "unimplemented ~a" (msg-type msg)))])))
;; Msg -> Bytes
(define (msg->bytes msg)
(jsexpr->bytes (msg->jsexpr msg)))
(module+ test (module+ test
#;
(check-equal? (msg->jsexpr
(msg:update
(string->ip "1.2.3.4")
(string->ip "1.2.3.7")
(route (subnet (string->ip "1.2.3.5") 7)
100
#t
'(1 2)
'UNK)))
(hash 'src "1.2.3.4"
'dst "1.2.3.7"
'type "update"
'msg (hash 'network "1.2.3.5"
'netmask "255.255.255.128"
'localpref 100
'selfOrigin #t
'ASPath '(1 2)
'origin "UNK")))
(check-equal? (jsexpr->msg (check-equal? (jsexpr->msg
(hash 'src "1.2.3.4" (hash 'src "1.2.3.4"
'dst "1.2.3.7" 'dst "1.2.3.7"