(CommandList children: [ (FuncDef name: "http::parse_request" body: (BraceGroup children: [ (C {(http) (Lit_Other ":") (Lit_Other ":") (read)} {(req_line)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:req_line) op: Equal rhs: {(ArrayLiteralPart words:[{($ VSub_Name "$req_line")}])} spids: [23] ) ] spids: [23] ) (C {(export)} {(Lit_VarLike "REQUEST_METHOD=") (BracedVarSub token: <VSub_Name req_line> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)})) spids: [32 37] ) } ) (C {(export)} {(Lit_VarLike "REQUEST_URI=") (BracedVarSub token: <VSub_Name req_line> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)})) spids: [44 49] ) } ) (C {(export)} {(Lit_VarLike "REQUEST_PATH=") (BracedVarSub token: <VSub_Name REQUEST_URI> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar "\\?">) ("*")} ) spids: [55 60] ) } ) (C {(export)} {(Lit_VarLike "QUERY_STRING=") (BracedVarSub token: <VSub_Name REQUEST_URI> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {("*") (EscapedLiteralPart token:<Lit_EscapedChar "\\?">)} ) spids: [66 71] ) } ) (C {(export)} {(Lit_VarLike "HTTP_VERSION=") (BracedVarSub token: <VSub_Name req_line> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)})) spids: [78 83] ) } ) (C {(export)} {(Lit_VarLike "SERVER_SOFTWARE=") (DQ (balls/0.0))}) (Assignment keyword: Assign_Declare flags: ["'-A'"] pairs: [(assign_pair lhs:(LhsName name:HEADERS) op:Equal spids:[100])] spids: [96] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:key) op:Equal spids:[106])] spids: [104] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:val) op:Equal spids:[111])] spids: [109] ) (While cond: [ (Sentence child: (C {(http) (Lit_Other ":") (Lit_Other ":") (read)} {(HEADER_LINE)}) terminator: <Op_Semi ";"> ) ] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:key) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name HEADER_LINE> suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{("*( ):*")}) spids: [129 133] ) ) } spids: [127] ) ] spids: [127] ) (C {(trim)} {(key)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:val) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name HEADER_LINE> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{("*:*( )")}) spids: [144 148] ) ) } spids: [142] ) ] spids: [142] ) (C {(trim)} {(val)}) (C {(HEADERS) (Lit_Other "[") (DQ ($ VSub_Name "$key")) (Lit_Other "]") (Lit_Other "=") (DQ ($ VSub_Name "$val")) } ) ] spids: [124 170] ) ) ] spids: [11] ) spids: [4 10] ) (FuncDef name: "http::read" body: (BraceGroup children: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:__var) op: Equal rhs: {($ VSub_Number "$1")} spids: [187] ) ] spids: [185] ) terminator: <Op_Semi ";"> ) (C {(shift)}) (C {(read)} {(__in)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:RETVAL) op: Equal rhs: {($ VSub_QMark "$?")} spids: [201] ) ] spids: [199] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:__in) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$__in"))}) (C {(tr)} {(-d)} {(SQ <"\\r">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [211 227] ) } spids: [210] ) ] spids: [210] ) (C {(export)} {(DQ ($ VSub_Name "$__var")) (Lit_Other "=") (DQ ($ VSub_Name "$__in"))}) (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$RETVAL"))} {(Lit_Other "=")} {(0)} {(Lit_Other "]")} ) (C {(Lit_Other "[")} {(-n)} {(DQ (BracedVarSub token:<VSub_Name __var> prefix_op:VSub_Bang spids:[267270]))} {(Lit_Other "]")} ) ] op_id: Op_DAmp ) ] spids: [182] ) spids: [175 181] ) (Assignment keyword: Assign_Declare flags: ["'-a'"] pairs: [(assign_pair lhs:(LhsName name:HTTP_STATUSES) op:Equal spids:[282])] spids: [278] ) (C {(HTTP_STATUSES) (Lit_Other "[") (200) (Lit_Other "]") (Lit_Other "=") (SQ <OK>)}) (C {(HTTP_STATUSES) (Lit_Other "[") (404) (Lit_Other "]") (Lit_Other "=") (SQ <"Not Found">)}) (C {(HTTP_STATUSES) (Lit_Other "[") (500) (Lit_Other "]") (Lit_Other "=") (SQ <"Internal Server Error">) } ) (FuncDef name: "http::status" body: (BraceGroup children: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:code) op: Equal rhs: {($ VSub_Number "$1")} spids: [327] ) ] spids: [325] ) terminator: <Op_Semi ";"> ) (C {(shift)}) (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:message) op: Equal rhs: {($ VSub_Number "$1")} spids: [336] ) ] spids: [334] ) terminator: <Op_Semi ";"> ) (C {(shift)}) (AndOr children: [ (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$message"))} {(Lit_Other "]")}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:message) op: Equal rhs: { (BracedVarSub token: <VSub_Name HTTP_STATUSES> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$code")})) spids: [356 361] ) } spids: [355] ) ] spids: [355] ) ] op_id: Op_DAmp ) (C {(http) (Lit_Other ":") (Lit_Other ":") (header_echo)} { (DQ ($ VSub_Name "$HTTP_VERSION") (" ") ($ VSub_Name "$code") (" ") ($ VSub_Name "$message") ) } ) ] spids: [322] ) spids: [315 321] ) (FuncDef name: "http::header" body: (BraceGroup children: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:header_name) op: Equal rhs: {($ VSub_Number "$1")} spids: [393] ) ] spids: [391] ) terminator: <Op_Semi ";"> ) (C {(shift)}) (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:header_val) op: Equal rhs: {($ VSub_Number "$1")} spids: [401] ) ] spids: [399] ) terminator: <Op_Semi ";"> ) (C {(shift)}) (C {(http) (Lit_Other ":") (Lit_Other ":") (header_echo)} {(DQ ($ VSub_Name "$header_name") (": ") ($ VSub_Name "$header_val"))} ) ] spids: [388] ) spids: [381 387] ) (FuncDef name: "http::header_echo" body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At "$@"))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[437])] ) ] spids: [428] ) spids: [421 427] ) (FuncDef name: "http::content_type" body: (BraceGroup children: [ (C {(http) (Lit_Other ":") (Lit_Other ":") (header)} {(SQ <Content-Type>)} {(DQ ($ VSub_At "$@"))} ) ] spids: [450] ) spids: [443 449] ) ] )