(List (Com {[LIT_CHARS set]} {[LIT_CHARS -o]} {[LIT_CHARS nounset]}) (FunctionDef log [] (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) ) (FunctionDef tnetEncodeFile [] (List (= scope= flags=0 words=[] bindings=[('path', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('hostname', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('size', {[DQ [VarSub 3]]})]) (= scope= flags=0 words=[] bindings=[('filename', {[ComSub (Com {[LIT_CHARS basename]} {[VarSub path]})]})]) (= scope= flags=0 words=[] bindings=[('k1', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('v1', {[DQ [VarSub filename transform_ops=[(#len)]][LIT_CHARS ":"][VarSub filename][LIT_CHARS ","]]})]) (= scope= flags=0 words=[] bindings=[('meta', {[DQ [VarSub k1][VarSub v1]]})]) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [VarSub meta transform_ops=[(#len)]][LIT_CHARS ":"][VarSub meta][LIT_CHARS "}"]]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [VarSub size][LIT_CHARS ":"]]}) (Com {[LIT_CHARS cat]} {[VarSub path]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[LIT_COMMA ","]}) ) ) (FunctionDef sendHeader [] (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[SQ ]}) ) (FunctionDef send [] (List (= scope= flags=0 words=[] bindings=[('base_dir', {[VarSub 1]})]) (Com {[LIT_CHARS cd]} {[VarSub base_dir]}) (Com {[LIT_CHARS log]} {[DQ [LIT_CHARS "send: changed working directory to "][VarSub base_dir]]}) (= scope= flags=0 words=[{[LIT_CHARS hostname]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('hostname', {[ComSub (Com {[LIT_CHARS hostname]})]})]) (Com {[LIT_CHARS sendHeader]}) (While (Com {[LIT_CHARS read]} {[LIT_CHARS path]}) (List (= scope= flags=0 words=[{[LIT_CHARS size]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('size', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS --printf]} {[SQ ]} {[VarSub path]})]})]) (= scope= flags=0 words=[] bindings=[('exit_code', {[VarSub ?]})]) (If (Com {[LIT_CHARS test]} {[VarSub exit_code]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS tnetEncodeFile]} {[DQ [VarSub path]]} {[DQ [VarSub hostname]]} {[DQ [VarSub size]]}) (ElseTrue) (Com {[LIT_CHARS log]} {[DQ [LIT_CHARS "stat error, ignoring "][VarSub path]]}) ) ) ) ) ) (FunctionDef sendfile [] (List (= scope= flags=0 words=[] bindings=[('path', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('size', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS --printf]} {[SQ ]} {[VarSub path]})]})]) (= scope= flags=0 words=[] bindings=[('hostname', {[ComSub (Com {[LIT_CHARS hostname]})]})]) (= scope= flags=0 words=[] bindings=[('filename', {[LIT_OTHER "$"]})]) (Com {[LIT_CHARS tnetEncodeFile]} {[DQ [VarSub path]]} {[DQ [VarSub hostname]]} {[DQ [VarSub size]]}) ) ) (FunctionDef show [] (List (= scope= flags=0 words=[] bindings=[('path', {[VarSub 1]})]) (Pipeline (Com {[LIT_CHARS sendfile]} {[DQ [VarSub path]]}) (Com {[LIT_CHARS nc]} {[LIT_CHARS localhost]} {[LIT_CHARS 8987]}) ) ) ) (FunctionDef sink [] (List (= scope= flags=0 words=[] bindings=[('ext', {[VarSub 1 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS txt]}]})]) (= scope= flags=0 words=[] bindings=[('basename', {[VarSub $]})]) (= scope= flags=0 words=[{[LIT_CHARS tempfile]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('tempfile', {[TildeSub ''] [LIT_CHARS /webpipe/input/] [VarSub basename] [LIT_CHARS .] [VarSub ext]})]) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub tempfile]} "> 1), > ) (Pipeline (Com {[LIT_CHARS sendfile]} {[VarSub tempfile]}) (Com {[LIT_CHARS nc]} {[LIT_CHARS localhost]} {[LIT_CHARS 8987]}) ) ) ) (Com {[DQ [VarSub @]]}) )