Skip to content

Commit 077fefe

Browse files
committed
[2.101417.143] 10/14/17 at 05:44 PM | by DashBot
1 parent b404c99 commit 077fefe

File tree

1 file changed

+90
-71
lines changed

1 file changed

+90
-71
lines changed

cluster/utils/packet.tcl

Lines changed: 90 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -26,78 +26,97 @@ proc ::cluster::packet::encode { payload } {
2626
return $encoded
2727
}
2828

29-
# validate a given field once it is parsed. allows us to cancel
30-
# decoding a packet if needed.
31-
proc ::cluster::packet::validate {field} {
29+
proc ::cluster::packet::decode { packet {cluster {}} } {
3230

33-
}
31+
set decoded [io decode $packet \
32+
-validate [::apply {
33+
{cluster field} {
34+
# break - stop parsing, return packet as is
35+
# continue - do not include field
36+
# return false - stop parsing, return empty packet
37+
# error - throw given error
38+
# else - add field to packet by name and id
39+
# notes:
40+
# - modify field with upvar field if needed
41+
# - modify results with upvar results if needed
42+
switch -- [dict get $field id] {
43+
14 {
44+
# check the filter and only continue if we match
45+
if {$cluster ne {} && ! [$cluster check_filter $data]} {
46+
return false
47+
}
48+
}
49+
}
50+
}
51+
} $cluster]
52+
]
3453

35-
proc ::cluster::packet::decode { packet {cluster {}} } {
36-
set decoded [io decode $packet -while ::cluster::bpacket::validate]
3754

38-
# try {
39-
# # ~! "Decode Packet" "Decoding a Packet [string bytelength $packet]"
40-
# set reader [::bpacket::reader new $packet]
41-
# set result [dict create]
42-
# set results [list]
43-
# set active 1
44-
# while {$active} {
45-
# lassign [$reader next] active id type data
46-
# switch -- $active {
47-
# 0 {
48-
# # We are done parsing the packet!
49-
# lappend results $result
50-
# break
51-
# }
52-
# 1 {
53-
# # We have more to parse!
54-
# switch -- $id {
55-
# 1 {
56-
# lassign $data type channel
57-
# dict set result type $type
58-
# dict set result channel $channel
59-
# }
60-
# 2 { dict set result hid $data }
61-
# 3 { dict set result sid $data }
62-
# 4 { dict set result flags $data }
63-
# 5 { dict set result timestamp $data }
64-
# 6 { dict set result protocols $data }
65-
# 7 { dict set result ruid $data }
66-
# 8 { dict set result op $data }
67-
# 9 { dict set result data $data }
68-
# 10 { dict set result raw $data }
69-
# 11 { dict set result tags $data }
70-
# 12 { dict set result keepalive $data }
71-
# 13 {
72-
# # When we receive a filter we will immediately try to check with the
73-
# # cluster if our service matches and quit decoding immediately if we
74-
# # dont.
75-
# if { $cluster ne {} && ! [$cluster check_filter $data] } {
76-
# break
77-
# }
78-
# dict set result filter $data
79-
# }
80-
# 14 {
81-
# dict set result error $data
82-
# }
83-
# }
84-
# }
85-
# 2 {
86-
# # We are done with a packet -- but another might still be
87-
# # available!
88-
# lappend results $result
89-
# set result [dict create]
90-
# }
91-
# }
92-
# }
93-
# $reader destroy
94-
# } on error {result options} {
95-
# puts stderr "Malformed Packet! $result"
96-
# catch { ::onError $result $options "Malformed Packet!" }
97-
# catch { $reader destroy }
98-
# }
99-
# if { $active } {
100-
# set result {}
101-
# }
102-
return $results
55+
return $decoded
10356
}
57+
58+
# TODO: trash this once we confirm the above rewrite is working
59+
# try {
60+
# # ~! "Decode Packet" "Decoding a Packet [string bytelength $packet]"
61+
# set reader [::bpacket::reader new $packet]
62+
# set result [dict create]
63+
# set results [list]
64+
# set active 1
65+
# while {$active} {
66+
# lassign [$reader next] active id type data
67+
# switch -- $active {
68+
# 0 {
69+
# # We are done parsing the packet!
70+
# lappend results $result
71+
# break
72+
# }
73+
# 1 {
74+
# # We have more to parse!
75+
# switch -- $id {
76+
# 1 {
77+
# lassign $data type channel
78+
# dict set result type $type
79+
# dict set result channel $channel
80+
# }
81+
# 2 { dict set result hid $data }
82+
# 3 { dict set result sid $data }
83+
# 4 { dict set result flags $data }
84+
# 5 { dict set result timestamp $data }
85+
# 6 { dict set result protocols $data }
86+
# 7 { dict set result ruid $data }
87+
# 8 { dict set result op $data }
88+
# 9 { dict set result data $data }
89+
# 10 { dict set result raw $data }
90+
# 11 { dict set result tags $data }
91+
# 12 { dict set result keepalive $data }
92+
# 13 {
93+
# # When we receive a filter we will immediately try to check with the
94+
# # cluster if our service matches and quit decoding immediately if we
95+
# # dont.
96+
# if { $cluster ne {} && ! [$cluster check_filter $data] } {
97+
# break
98+
# }
99+
# dict set result filter $data
100+
# }
101+
# 14 {
102+
# dict set result error $data
103+
# }
104+
# }
105+
# }
106+
# 2 {
107+
# # We are done with a packet -- but another might still be
108+
# # available!
109+
# lappend results $result
110+
# set result [dict create]
111+
# }
112+
# }
113+
# }
114+
# $reader destroy
115+
# } on error {result options} {
116+
# puts stderr "Malformed Packet! $result"
117+
# catch { ::onError $result $options "Malformed Packet!" }
118+
# catch { $reader destroy }
119+
# }
120+
# if { $active } {
121+
# set result {}
122+
# }

0 commit comments

Comments
 (0)