+define udp-port 50 remailck {mtu style} {
+ get-for remailck
+ if {"$style" == "request"} {
+ get what choice-mult \
+ req-baduser 0.15 \
+ req-auth 0.15 \
+ resp-ok 0.15 \
+ resp-auth 0.15 \
+ req-user
+ } else {
+ get what choice-mult \
+ req-baduser 0.15 \
+ req-auth 0.15 \
+ resp-auth 0.15 \
+ req-user 0.15 \
+ resp-ok
+ }
+ switch -exact $what {
+ req-user {
+ set auth 0
+ get user string 1 8 \
+ abcdefghijklmnopqrustuvwxyz \
+ abcdefghijklmnopqrustuvwxyz-0123456789_
+ }
+ req-baduser {
+ set auth 0
+ get user rand 0 [expr {$mtu - 4}]
+ }
+ req-auth {
+ get auth enum 0 31
+ set user [depending-on auth {$mtu - 4}]
+ }
+ resp-auth {
+ get auth number 0 0xffff
+ set modified 0
+ set read 0
+ }
+ resp-ok {
+ get mail choice-mult \
+ newmail 0.15 \
+ oldmail 0.15 \
+ nomail 0.20 \
+ times
+ set auth 0
+ switch -exact $mail {
+ newmail {
+ set modified 0
+ set read 1
+ }
+ oldmail {
+ set modified 1
+ set read 0
+ }
+ nomail {
+ set modified 0
+ set read 0
+ }
+ times {
+ get modified number 1 600
+ get read number 1 600
+ }
+ default { error "mail? $mail" }
+ }
+ }
+ default { error "what? $what" }
+ }
+ switch -glob $what {
+ req-* {
+ assemble packet {
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Auth |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ }
+ append packet $user
+ }
+ resp-* {
+ assemble packet {
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Auth |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Modified |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Read |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ }
+ }
+ default { error "what?? $what" }
+ }
+ return $packet
+}