summaryrefslogtreecommitdiff
path: root/.localrepo/elnode-20190702.1509.tar
blob: 908ffec8e056d51c2e9ae5776da96a5ba08f6dd3 (plain)
ofshex dumpascii
0000 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 00 00 00 00 00 00 00 00 00 00 00 elnode-20190702.1509/...........
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0060 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000755.0000000.0000000.0000
0080 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 32 32 36 32 00 20 35 00 00 00 0000000.00000000000.012262..5...
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0120 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 64 65 66 61 75 6c 74 2d 77 65 62 elnode-20190702.1509/default-web
0220 73 65 72 76 65 72 2d 69 6d 61 67 65 2e 70 6e 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 server-image.png................
0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
0280 30 30 31 37 37 30 35 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 37 35 31 30 00 20 30 00 00 00 0017705.00000000000.017510..0...
02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0300 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0320 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0400 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 2c 00 00 00 b4 08 03 00 00 00 19 e1 e1 .PNG........IHDR...,............
0420 dd 00 00 03 00 50 4c 54 45 00 00 00 60 a0 bf 00 66 99 cc e0 eb 43 43 43 ca c8 c7 a3 a3 a3 31 7c .....PLTE...`...f....CCC......1|
0440 a3 fe fe fe 1c 1c 1c d9 d5 d5 c0 be be 85 85 85 15 6f 9c a5 c9 db 8a a1 ae d8 e8 ef 64 64 64 a4 .................o..........ddd.
0460 c4 d5 68 92 a7 5e 90 a9 8d b5 ca e9 f1 f6 d0 cd cd e3 e0 df b9 b8 b7 2b 2b 2b c8 c6 c6 82 a0 b0 ..h..^.................+++......
0480 a6 b0 b7 e1 dd dd b7 cc da 73 73 73 21 74 9e 0c 6d 9d 0a 0a 0a 4b 86 a4 e9 e8 e7 b6 ba bd b2 c1 .........sss!t..m....K..........
04a0 ca 93 93 93 c1 c0 bf bc ba ba b9 bd c0 54 54 54 b8 b6 b6 c2 d2 dc 3c 3c 3c d3 d0 cf 04 68 9a db .............TTT......<<<....h..
04c0 d8 d7 96 c0 d5 ed f4 f8 72 aa c7 b5 b4 b4 3c 8a b1 55 99 bb c4 c1 c2 e9 e5 e5 c2 c5 c8 19 74 a3 ........r.....<..U............t.
04e0 f5 f0 ef f1 ed ed 89 b1 c6 b1 b5 b8 85 ad c2 cc c9 ca 2b 7c a5 7a 9a aa 33 33 33 a5 ac af 99 99 ..................+|.z..333.....
0500 99 f3 f1 f2 49 92 b6 ab bc c5 6b 6b 6b 9c a7 ad 33 85 ad d5 d1 d1 90 b7 cb 13 13 13 24 24 24 dd ....I.....kkk...3...........$$$.
0520 d9 d9 e3 df e0 4b 4b 4b 52 89 a5 6a a6 c3 be d1 db 5b 5b 5b e5 e1 e1 6f 98 ac c1 d9 e6 e1 ed f3 .....KKKR..j.....[[[...o........
0540 79 79 79 db d7 d8 8a 8a 8a ed e9 ea 51 91 b3 82 b4 cd d2 cf d0 2b 7f a9 99 c2 d6 a2 b3 bd 78 ae yyy.........Q........+........x.
0560 c9 ab cc dd ea e6 e8 8d ac bd ca c7 c8 3a 7f a2 44 8b af 74 a4 bd a5 ad b0 d2 e4 ed 93 bd d2 f4 .............:..D..t............
0580 f8 fa c1 bf c0 cd dc e5 22 7a a6 8b ba d0 f3 ef f0 1e 78 a5 b9 b7 b8 b4 d2 e1 5d 8d a6 92 a5 af ........"z........x.......].....
05a0 9c af b9 65 a2 c1 9f c5 d9 13 72 a0 51 97 b8 5a 9c bd 69 9a b3 ab ab ab 6c 95 aa b0 af af 70 97 ...e......r.Q..Z..i.....l.....p.
05c0 ac 84 9d ab 4a 8e b1 bb d6 e3 80 a7 bc 27 7d a9 4e 95 b8 7b b0 ca db e9 f1 c6 dd e8 6f a9 c5 74 ....J........'}.N..{........o..t
05e0 9c b0 ac b6 bd 42 83 a4 99 ab b4 34 80 a7 ad b1 b4 aa ae b1 94 a9 b3 cc d8 df 7c 9e b0 54 8c a9 .....B.....4..............|..T..
0600 ac be c8 c9 df e9 2d 80 aa 8f a8 b5 f0 f6 f9 bc c5 cb 4c 88 a6 59 95 b4 a5 b7 c1 71 99 ad 43 8e ......-...........L..Y.....q..C.
0620 b4 3b 80 a3 91 b9 ce 75 ac c8 c8 d1 d8 a2 c7 da 7c a4 b9 ae c0 ca 60 8f a7 16 70 9c 82 aa bf 64 .;.....u........|.....`...p....d
0640 92 aa 8d a4 b0 93 a6 b0 9e b0 bb 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0720 00 00 00 00 00 00 00 00 00 38 7a 78 34 00 00 00 09 70 48 59 73 00 00 0e c3 00 00 0e c3 01 c7 6f .........8zx4....pHYs..........o
0740 a8 64 00 00 1c 6b 49 44 41 54 78 da e4 9a 21 8f 24 37 10 85 57 39 52 f2 e3 29 50 92 99 49 4b 25 .d...kIDATx...!.$7..W9R..)P..IK%
0760 59 8a 54 d2 80 69 10 14 34 e0 1a 44 21 56 a3 25 66 5d ec 34 7f 63 c0 80 05 01 a1 61 fb ff 02 ba Y.T..i..4..D!V.%f].4.c.....a....
0780 7b 66 f7 12 70 89 4e 1e af e2 5f 50 fa fc de ab 72 75 3f 51 5f 67 a1 8e cf d3 3f d4 9b 62 4c cb {f..p.N..._P....ru?Q_g....?..bL.
07a0 c3 48 15 11 ce 39 7e 08 58 8b 40 4d bd e6 d4 ba 94 b8 5e 10 c3 85 b9 86 e9 03 c0 12 0c 40 89 81 .H...9~.X.@M......^..........@..
07c0 dd e3 43 2c 08 85 48 15 91 f0 11 60 a1 16 9a 58 dc fd d8 b2 92 92 c6 91 88 22 14 2e e2 ee 92 3a ..C,..H....`...X.........".....:
07e0 87 15 05 5e 27 5a b2 00 f0 da 14 d6 38 8e 44 54 a1 70 07 00 e1 a5 6f 58 01 ce 44 f4 59 80 41 d1 ...^'Z......8.DT.p....oX..D.Y.A.
0800 52 5a d3 3c a7 48 29 ba 1a 00 a8 02 b5 f4 0d 4b 24 8f 44 94 a1 66 a6 68 59 ed 1c 63 19 89 55 cd RZ.<.H)........K$.D..f.hY..c..U.
0820 14 50 b3 c1 39 76 0d 8b 69 24 5a 58 d4 cc cc 90 9b 76 c3 18 16 12 98 99 01 50 1b ba 33 e2 7b 58 .P..9v..i$ZX.....v.......P..3.{X
0840 f3 48 23 51 10 6c b0 b8 65 29 73 29 0b 31 56 65 c1 4c 15 5c 3a 86 15 88 8e 14 e5 06 ab 69 c2 53 .H#Q.l..e)s).1Ve.L.\:........i.S
0860 29 31 09 6c b5 a1 42 4d 85 3b 86 15 69 24 62 71 98 99 99 79 db 5a 53 a0 88 3b 2c 33 43 9d fa 85 )1.l..BM.;..i$bq...y.ZS..;,3C...
0880 95 68 a4 f0 b3 00 6b cd ad 2f b6 d0 b8 6a 5a 37 69 ab e7 7e 61 d1 42 bf c5 2a 00 a0 66 90 b6 36 .h....k../...jZ7i..~a.B..*..f..6
08a0 a4 99 02 a0 a6 66 1b 2c f3 ae 22 fe 3d ac 29 05 ae 22 8e 6d 74 90 c6 d5 fc 12 d7 6e a8 ba c1 b2 .....f.,..".=.)..".mt......n....
08c0 ae c6 f8 a7 f7 fb 86 a9 70 95 dd 86 d6 1c 16 11 8b aa 99 0e bb b4 70 ea 77 74 88 bb b2 1e 05 ab ........p.............p.wt......
08e0 b0 9a 19 b0 4b ab 71 43 fe 57 01 bf c2 92 35 b3 1e 01 6b ca aa 6a b8 29 cb 7c e9 1c 96 af b0 14 ....K.qC.W....5...k..j.).|......
0900 32 b6 ae 67 ce 03 06 b3 4d da 66 8a d8 2b ac e9 6b 1b 36 af f4 c8 18 74 d8 94 dd 9b 0f bf 0a f8 2..g....M.f..+..k.6....t........
0920 77 ca 32 3c 60 01 97 d6 6b 1a 36 56 a6 de 29 ac e3 14 03 cb 1b 65 1d da 3f 37 8e 02 35 db 5d 68 w.2<`...k.6V..)......e..?7..5.]h
0940 66 e8 14 56 9c ee 01 bf da b0 bd 07 46 56 dd 76 34 1b ac a5 4f 58 21 96 cc 7c b7 e1 e0 ed db 21 f..V........FV.v4...OX!..|.....!
0960 85 75 e1 70 83 a5 bd c2 5a 95 e5 fb 50 aa 38 34 6f 87 c7 e8 fa 41 60 dd 95 b5 c2 6a 9f f0 73 14 .u.p....Z...P.84o....A`....j..s.
0980 33 60 4d 78 b8 f6 6b c3 a9 84 cc 22 87 7d cc 81 37 4f f8 29 0a 0c f0 b5 1b 57 74 0b 2b c7 18 de 3`Mx..k....".}..7O.).....Wt.+...
09a0 66 96 69 fb 29 27 c5 aa 06 88 aa a9 30 43 87 3e 61 cd 1c 63 e1 5a c5 6f 6f b3 c1 5b fb 70 4a 02 f.i.)'......0C.>a..c.Z.oo..[.pJ.
09c0 33 38 00 e7 9c bb 55 56 e1 10 43 de b6 0e fb 43 56 96 d6 b0 5c 15 07 87 c2 39 67 d5 4e e7 2c a9 38....UV..C....CV...\....9g.N.,.
09e0 5c 42 d8 32 6b 5b 55 a2 f1 47 fc 65 0a a2 06 30 4c 25 9f b2 f6 3a 94 ba d7 50 c2 b6 d0 da 95 d5 \B.2k[U..G.e...0L%...:...P......
0a00 58 5a 73 5c 04 06 88 1a 6a 0e 8c 5e 95 05 97 1c 02 f3 7d fb 67 a6 8d 1b 62 4a f3 1a 59 a6 c2 a1 XZs\....j..^......}.g...bJ..Y...
0a20 67 58 10 de 61 ed 33 a1 02 9e 9a 46 56 80 02 02 03 87 90 45 d1 6b 66 c1 f9 14 4e 5c df 26 bc 36 gX..a.3....FV......E.kf...N\.&.6
0a40 35 e2 98 e6 cf 30 83 00 ce 9c 19 8f 58 40 7e 13 ac e5 80 ca 21 e4 95 d6 70 4b 2d 97 d2 cc 84 69 5....0......X@~.....!...pK-....i
0a60 64 00 02 a8 40 2b 6b b7 b0 88 21 9c c3 1e f1 db 5c 3a 00 22 3c b7 d1 d5 b4 44 60 fb e5 08 60 51 d...@+k...!.....\:."<....D`...`Q
0a80 ed 77 f9 27 ce 21 84 cc ef 47 2d 40 84 a7 16 ba 3a 8e 73 05 e0 50 35 05 33 00 74 f4 05 ff e9 f7 .w.'.!...G-@....:.s..P5.3.t.....
0aa0 4f 6f ce cb eb f3 cb cb 9f 2f 7f 3c bf 5e 2e d7 eb f5 7c 3e 9f cf e7 eb f5 72 b9 bc 3e ff fa e9 Oo......./.<.^....|>.....r..>...
0ac0 6f e7 c7 ef 5a 4a 49 cb 94 a2 e8 f6 39 5c 9d d7 5f 36 3b 82 f5 e5 87 ff 7e 7e fa 9e d3 68 5a e8 o...ZJI.....9\.._6;.....~~...hZ.
0ae0 44 54 01 11 a8 c1 01 81 2a 10 e6 ff 0f ac 6f eb a4 71 9a c7 48 44 59 5c 2a fe e2 de ec 55 2c 39 DT......*.....o..q..HDY\*....U,9
0b00 62 28 1c 8e 90 62 a3 e0 80 02 43 25 03 05 8a 1a 26 a8 82 9d 9b 38 99 1b 4c 45 4e 44 c7 56 56 f5 b(...b....C%....&....8..LEND.VV.
0b20 2e fb 0e 0e 1c f8 0d 1d 74 df bb eb bf 68 58 18 ae 82 7e 80 8f d3 55 47 a5 23 d9 2a a4 8a 88 3c ........t....hX...~...UG.#.*...<
0b40 8b e0 f3 1c f1 3f 18 d6 30 53 75 67 8d d2 fe 17 5b 1f a5 11 11 13 61 41 01 d9 aa ac 5a 37 a9 b5 .....?..0Sug....[.....aA....Z7..
0b60 8a c8 e7 71 5a 3f 0c 56 1b 83 23 82 83 99 fd 56 d7 ab bb aa ba ba 47 30 87 71 70 98 f5 d1 fa 3e ...qZ?.V..#....V......G0.qp....>
0b80 13 d0 60 5d 22 15 ab 1e b2 92 5a a5 da 43 c0 fa a9 44 44 b8 bb bb be ff 43 2d 7b 6f 7d 8c 61 ce ..`]".....Z..C...DD.....C-{o}.a.
0ba0 ec 7a 2b 57 57 77 f7 2b 33 07 9b 31 47 c4 7b 29 b4 93 69 66 f4 c2 90 2a 70 95 23 a3 25 5b fd 44 .z+WWw.+3..1G.{)..if...*p.#.%[.D
0bc0 0d cf 87 60 7d 31 0b 76 77 66 bf 3a c7 77 ff 59 eb 6d 36 6a d4 87 31 bb de 71 e5 a9 2b 67 0e 66 ...`}1.vwf.:.w.Y.m6j..1..q..+g.f
0be0 36 b6 18 16 fb 9c fc f2 c2 9d ba 29 6a 15 36 96 b3 6a dd 1e 05 d6 b0 08 66 77 57 55 75 bf ab 6b 6..........)j.6..j......fwWUu..k
0c00 b6 46 d4 a9 11 05 bb ab ea ab 26 52 35 d5 0f 69 79 58 8c 88 08 0b b3 d9 79 09 f4 17 ea 85 b1 a4 .F........&R5..iyX......y.......
0c20 22 c2 51 bf b1 7a 0c 58 bf f7 61 c6 ee aa a9 99 a9 7e 5b f8 e9 7d 4e da e7 6c e5 98 80 bc 00 58 ".Q..z.X..a......~[..}N..l.....X
0c40 79 10 75 f7 ab 33 6b 09 e6 60 77 f7 eb 92 34 eb 44 85 13 22 e2 a1 f8 5e 58 eb 41 0e f8 32 c6 55 y.u..3k..`w...4.D.."...^X.A..2.U
0c60 55 33 33 33 91 aa 3e 89 a8 f7 46 44 b3 f7 11 ae c7 64 0d 90 85 cc 11 11 16 c1 0a 40 44 0f 8f 2e U333..>...FD.....d.........@D...
0c80 41 dc 89 fa af ef fa 22 22 b2 52 ea b3 c8 d1 9f 7e a6 ee f0 63 b0 7a 29 c6 9a 09 00 48 64 a6 3b A......"".R.....~...c.z)....Hd.;
0ca0 b7 d9 db 24 a2 b9 5b f8 39 85 4c 4f 68 58 29 76 4c db e4 34 51 22 75 31 95 ae 9d 0a bf 26 ce dd ...$..[.9.LOhX)vL..4Q"u1.....&..
0cc0 8a c3 64 9d 81 8b cf d3 f0 7c ec 36 a4 52 4c 33 13 0b 40 76 a4 3a 9b cd 39 8f 56 cf 4e 2a 60 b2 ..d......|.6.RL3..@v.:..9.V.N*`.
0ce0 d7 d4 b6 9b e7 b1 14 74 1b cd c3 d5 9a 8d c1 a3 f0 c2 92 6f b5 d6 92 4d b6 ad 6e f2 18 d6 e1 cb .......t...........o...M..n.....
0d00 1c 66 ac c0 02 80 54 a4 3a b3 51 27 22 2a ad 1c ac 36 dd f7 dd 38 38 6f 01 fb 7b 9c 68 a1 37 a2 .f....T.:.Q'"*...6...88o..{.h.7.
0d20 08 56 ce 25 7f 63 05 c8 73 ad 75 ab 55 c6 43 c0 fa b3 84 19 ab 26 16 32 01 78 b0 fb ec 73 12 51 .V.%.c..s.u.U.C......&.2.x...s.Q
0d40 bf eb aa 0f a2 38 48 dc b3 31 5b 15 91 a5 d4 fa 2c ac 8a bc 51 c2 29 ab 25 52 6b dd b6 5a 6b 7f .....8H..1[.....,...Q.).%Rk..Zk.
0d60 0c 58 66 c1 9a aa 40 2a d6 7a b5 62 a3 74 da b9 d0 e4 93 95 66 a3 82 73 1b a7 6e 5b dd 6a dd 44 .Xf...@*.z.b.t......f..s..n[.j.D
0d80 54 33 75 70 b4 11 e7 58 57 a4 8a 00 22 b2 e4 64 75 64 a6 e7 43 c0 fa 83 99 35 55 15 9a 09 59 d9 T3up...XW..."..dud..C....5U...Y.
0da0 7b e9 7b 9b 44 b4 b3 62 89 ac 05 a1 a1 0a a9 b5 42 21 99 00 32 01 56 40 d5 79 e7 5c 77 9f 70 bc {.{.D..b........B!..2.V@.y.\w.p.
0dc0 fb ad b5 d6 92 7b 38 e4 f3 3c c2 ff 37 ac 9f df de 2e ff ae a7 e3 fb f4 f5 ed 72 79 7b ba 5c 2e .....{8..<..7.............ry{.\.
0de0 bf 29 fb 6b 9e de 1c 58 ba ef 8d 26 d1 ec e5 5d f5 b0 0c 8b 08 c7 59 85 70 28 44 e4 e5 b8 3b b1 .).k...X...&...]......Y.p(D...;.
0e00 f0 17 35 e7 ca 23 3b 12 43 61 6a b9 7e 80 81 a5 c3 42 46 8a 54 a8 a5 01 1d d0 e8 a2 80 18 0d b1 ..5..#;.Caj.~....BF.T...........
0e20 b2 d8 ac ad fd ff 0b 5c e9 c9 dc d5 d5 b6 b4 a4 bb 40 50 d0 27 3f 8e 4f 3d 54 64 38 fe e5 8f 66 .......\.........@P.'?.O=Td8...f
0e40 6b 2d 35 b3 55 5c 15 2c 79 71 58 7f 13 dd f9 26 cc 0e 67 76 77 77 07 e0 80 bb 03 ce 98 3a 33 0b k-5.U\.,yqX....&..gvww.......:3.
0e60 8b 68 dc 0a 56 68 ca 86 61 79 da d0 95 1a 4c e5 7d b6 8c ae 19 1a d9 52 b5 a5 a6 36 d5 08 39 7a .h..Vh..ay....L.}......R...6..9z
0e80 60 f6 52 20 9a 05 eb 68 03 af 33 47 ff 19 16 d1 95 a5 33 97 8a 74 77 2b 52 ec 70 de b0 76 77 96 `.R....h..3G......3..tw+R.p..vw.
0ea0 b8 45 68 45 d6 2d 54 83 41 44 0b 0c 9b eb a7 aa ea 8d 77 8d d6 72 08 31 ad 63 85 a9 a9 11 d9 5a .EhE.-T.AD........w..r.1.c.....Z
0ec0 66 9d 16 d0 cc 0c 88 0e 5a 95 93 03 d6 2b 1d 0c f9 33 2c a2 45 44 3a 3b 36 60 db 60 06 c0 b9 d8 f.......Z....+...3,.ED:;6`.`....
0ee0 6d 80 f7 5b 88 68 c4 98 90 43 05 4c 44 04 00 3d 33 53 a3 2f 3d 2b b3 52 73 48 8c fa 8a 68 16 d0 m..[.h...C.LD..=3S./=+.RsH...h..
0f00 63 95 eb d0 6f 9a 65 36 1c 17 52 e8 3d 60 d1 5d 4a 66 02 ee 30 83 bb b3 03 ee 66 80 77 11 09 0d c...o.e6..R.=`.]Jf..0.....f.w...
0f20 a9 39 5a 42 44 bc c4 28 bc eb 67 a6 76 d6 9c 3f aa 62 9f b9 94 d4 48 55 8d 08 1d e9 17 be ef 66 .9ZBD..(..g.v..?.b....HU.......f
0f40 eb e7 b8 45 77 c0 c2 bb c0 2a 5a ee 27 58 d8 18 ee 3b 00 77 ee 22 21 0f 03 a6 77 01 2d 77 32 b8 ...Ew....*Z.'X...;.w."!...w.-w2.
0f60 77 cd 96 da 3d 3f 6a 72 d1 54 cd cf 1c 09 a9 0f 78 63 52 8a 50 15 df 44 22 46 5b 9c 5f ef 64 f7 w...=?jr.T......xcR.P..D"F[._.d.
0f80 7f c1 22 82 44 67 18 00 33 8c b8 c2 06 0c 5a 7d 98 7a c3 51 b8 11 d1 d7 97 1f b0 18 6d be cc 73 ..".Dg..3.....Z}.z.Q........m..s
0fa0 cb 96 2d 33 5b b6 d4 76 54 a5 12 9f a7 2c 14 51 3d b6 0c 0f f9 da ec 9d 60 d1 95 6f dd 1d 00 cc ..-3[..vT....,.Q=.......`..o....
0fc0 36 87 c3 1d 28 5c db 56 66 d6 ca 6b 67 66 e6 e8 84 3b c1 b9 8b b6 d4 60 0c 1b fd 3c c9 1c ab 62 6...(\.Vf..kgf...;.....`...<...b
0fe0 ee 94 9e 8f 36 78 82 f5 42 15 eb 19 58 44 72 5b dd 2b b4 6a 39 7c 73 54 b9 77 5e d7 be 31 33 33 ....6x..B...XDr[.+.j9|sT.w^..133
1000 7b 77 22 72 70 97 50 d5 10 8f 7a a5 61 38 53 97 cb fc f1 71 76 15 da a1 ba 1e d1 36 0e c1 1f ac {w"rp.P...z.a8S....qv......6....
1020 5e 67 d4 79 16 d6 bd 57 dd 32 00 06 03 b0 6d df b8 98 7b 67 66 76 66 38 13 5d c1 bd f7 50 8d 60 ^g.y...W.2....m...{gfvf8.]...P.`
1040 cb b9 8c 98 63 80 9e 2f 23 70 5a 9b e7 8f 33 b3 f3 75 9d 6f 56 af f5 1e cd 33 b0 88 20 9d 2b 13 ....c../#pZ...3..u.oV....3....+.
1060 a7 12 10 8e a1 4f 81 b1 4d c3 d3 04 d8 fd 17 19 0f 41 2f 0c b4 da fe ff 3e d5 7e 99 8f fd ad f6 .....O..M........A/.....>.~.....
1080 9d 9e f9 f3 d4 ce e3 1a eb fc 5a 97 ef 9f 84 45 c6 9d dd 1d 56 eb 28 f7 b0 51 e9 1d 13 d8 be 96 ..........Z....E....V.(..Q......
10a0 2b dd f7 2d 44 6f 2c c2 58 06 ac 6f 54 0f c3 a1 cd f3 6f 25 ec f2 78 fd e2 11 57 7a 7f 4b 58 64 +..-Do,.X..oT.....o%..x...Wz.KXd
10c0 6b 67 66 37 1c b4 0a 19 cc 0c 0e 00 10 c0 96 2b 5d 77 88 c8 ea 2a 8c 65 6d 97 cb 7c 32 66 2a 66 kgf7...........+]w...*.em..|2f*f
10e0 4e 35 fe f2 1b 33 6d ed f1 ff 47 7b b9 87 7b 9e 84 45 53 67 3e 72 d1 cc 6c 9a 0c f0 62 56 91 b6 N5...3m...G{..{..ESg>r..l...bV..
1100 f0 b2 ef 74 9f 26 5f d7 55 82 37 bb 4a fb 71 67 a9 b2 f0 1c 4c 3f 58 0d dd 30 1f 31 76 a5 77 85 ...t.&_.U.7.J.qg....L?X..0.1v.w.
1120 45 e0 dd 3b 8f b6 68 36 4d d3 54 01 56 35 1f 13 f6 6a 07 fb e4 2c bd b3 ed d4 2e b3 8a 9e 3d bf E..;..h6M.T.V5...j...,........=.
1140 47 1a 1e 8d ef 1b d5 21 b2 0e 56 0b bd 07 ac 67 d6 5f fb 3e 8d 12 36 4d 30 40 88 a8 0c 1a b7 0d G......!..V....g._.>..6M0@......
1160 cc 0b a1 5d 12 6b fc 0b d6 dc 7e af 5a 99 aa 63 6f 63 1e 89 fa 82 4f 25 fe 0f 58 d3 b4 ef fb d7 ...].k....~.Z..coc....O%..X.....
1180 d7 be 9b ed cb b4 10 11 2d 44 b4 2f d7 e5 ba 18 78 a1 f9 1f 5e ce a0 b5 71 23 0a c0 44 3a f8 21 ........-D./....x...^...q#..D:.!
11a0 81 30 ed da 3e 68 77 42 44 b4 0b 01 15 19 c3 e4 62 a9 87 c2 52 c3 6a 2f 22 81 80 31 8a 0f 1b d3 .0..>hwBD.......b...R.j/"..1....
11c0 b4 85 55 aa 1c bc 60 6d dc 4d 48 dd 60 7b dd 6e 43 9b 96 d4 a5 e0 6c 7a e8 76 97 fe bf 1e 64 3b ..U...`m.MH.`{.nC.....lz.v....d;
11e0 f6 68 24 8d 6a 27 73 f0 c1 7e cf 6f f4 e9 cd 9b 37 4f 33 c2 e2 a3 8f be 1f 0c 4e 9f 60 8c f1 c9 .h$.j's..~.o....7O3.......N.`...
1200 fc 58 1c 0f c8 37 f7 07 83 c1 ef cf e4 e0 94 e3 24 57 d5 c8 73 e4 79 9e 5f f5 c7 2d ed c6 30 9e .X...7..........$W..s.y._..-..0.
1220 9f e8 31 08 bb 3c 2f f9 be ef fb 52 58 7c 01 58 3b b6 6a 18 3b a6 e3 38 b6 e3 18 00 00 06 00 98 ..1..</....RX|.X;.j.;..8........
1240 60 18 00 aa 8d 54 f8 e3 5e 66 22 5c cc 7c fc 60 d6 b5 f0 86 86 b1 f6 e0 fd 54 40 b9 1a 3c 9c 94 `....T..^f"\.|.`.........T@..<..
1260 96 45 71 66 1e ec ad e6 5a 23 2b 64 fd ec a8 db 4c f6 bd 61 b3 5b f1 e6 e2 4b a5 de 89 94 ce 37 .Eqf....Z#+d....L..a.[...K.....7
1280 ae 37 cb 73 56 5e 5a 2d 9f 5f 0a 2c db de 71 1c e3 73 e7 2d f9 80 cc 04 40 b6 fd c9 57 44 f5 75 .7.sV^Z-._.,..q..s.-....@...WD.u
12a0 eb f1 ab 93 c0 c1 34 51 13 37 b4 0f 57 84 c0 3d 3c ce 4d c7 f9 55 4f da de 54 e2 ba 30 2a c5 b9 ......4Q.7..W..=<.M..UO..T..0*..
12c0 58 be 34 a2 6a bd 3c 6a 0c 29 d2 87 9b 11 56 94 4a ae b7 04 58 b6 03 86 09 cf 43 4f 13 c1 44 7f X.4.j.<j.)....V.J...X.....CO..D.
12e0 7d 47 b1 7a 31 71 2d 19 e3 37 19 8a c0 cf 41 80 0f f2 f6 2a 43 27 94 56 2f 02 55 bf 5d 8c 53 23 }G.z1q-..7....A....*C'.V/.U.].S#
1300 86 58 b6 1d 7b 57 38 af 5b 5d 10 16 42 b6 0b ae 41 7a d6 5b c3 55 bf a6 db fe 7b 42 eb 7c 8b 7a .X..{W8.[]..B...Az.[.U....{B.|.z
1320 29 c5 0b 51 d4 26 15 ac 2a 53 37 94 2e 0d 55 6f 37 49 cf ca ce 8c d6 16 83 a1 e1 62 01 de 56 55 )..Q.&..*S7...Uo7I.........b..VU
1340 07 1c 20 61 7d ea 7c f3 59 94 d2 0b 8c 31 3e 39 39 7d 17 f1 7b f1 be 36 7d f1 46 95 b1 23 9b e1 ...a}.|.Y....1>99}..{..6}.F..#..
1360 b1 d8 2d 26 ab 35 a7 d2 cd 32 77 db b0 da e0 9a b6 0a 86 43 0e c3 7f 72 31 2e 7d 71 82 f1 ab ad ..-&.5...2w........C...r1.}q....
1380 18 47 f9 65 7a 0d ac b0 b8 33 82 56 d5 62 d1 9a c2 aa b3 59 59 10 16 00 80 61 18 24 ac d8 fb a4 .G.ez....3.V.b.....YY....a.$....
13a0 3c c6 4f d6 e2 04 2a e9 61 71 d6 7c fc 61 72 94 29 ac 6d ee ae 60 19 8e 01 a5 54 6a eb a7 f1 a1 <.O...*.aq.|.ar.).m..`....Tj....
13c0 94 eb a7 87 c5 cd c6 ad be c2 a5 81 55 e7 ee 0c 96 6b 42 4a 58 c5 a4 70 52 f9 1f b0 94 9b 81 d8 ............U....kBJX..pR.......
13e0 2b 73 69 60 b1 5f fe a2 b0 82 17 a1 97 b8 a5 b6 62 3e 3d 2c ee 7a 9a 80 9f 71 69 60 b9 e5 3b 83 +si`._..........b>=,.z...qi`..;.
1400 65 dc 06 2c ce a7 c0 f2 2a ad 92 ef fb 87 ad b6 45 1d 65 e5 09 ac d7 91 ce 47 85 75 48 c9 74 bb e..,....*.......E.e......G.uH.t.
1420 3e cf f3 3c 2f 95 5a 97 4b 1d 86 e6 6d c0 6a 13 b0 bc d7 cd b9 8c 3b 5b bf 8c 8c 74 7d 6a a2 7f >..</.Z.K...m.j.......;[...t}j..
1440 18 fc 9a 6f ce 6a 36 01 00 bc 50 d6 36 37 b3 0e 1b 2b ca b2 60 05 8b 33 2a 2c e5 ea d7 9c 9f fb ...o.j6...P.67...+..`..3*,......
1460 33 32 e1 e2 d6 d6 8f 8f 8f b7 be 54 a2 eb 43 55 8e e3 b8 cb 7a 96 92 73 4a e5 f0 26 44 00 00 a0 32.........T..CU....z..sJ..&D...
1480 24 0d 95 b9 3f c8 b6 94 19 58 24 5b a5 1f 5e 58 4b 9b 4b 4b 1d 00 1c 0a ac cc 05 16 65 15 0c d3 $...?....X$[..^XK.KK........e...
14a0 f8 2d 43 45 f9 62 ba ac 3e 0e e1 2a ba 13 58 5e 3d 6a 31 93 55 a8 bd 69 84 23 60 e8 14 48 b5 7d .-CE.b..>..*..X^=j1.U..i.#`..H.}
14c0 03 8b 1c 85 2d fa ca 69 14 0b cb 63 a9 65 8c 3f 8c 10 ac 51 47 d4 c4 03 21 d8 55 5a f8 29 8c ea ....-..i...c.e.?...QG...!.UZ.)..
14e0 fd f9 4c 75 eb 43 68 7a cc 32 58 cf 91 36 01 00 20 b4 16 2e 36 28 ba 9d f2 04 d6 0a 21 5e 8f b0 ..Lu.Chz.2X..6......6(......!^..
1500 d6 39 5b 10 d6 b4 3d 0f 25 3d b2 a6 89 fb 36 b8 3b b6 20 08 8f 42 ac ce e7 6b 81 3f 92 02 1d 06 .9[...=.%=....6.;....B...k.?....
1520 a3 79 02 f1 25 00 40 36 74 21 f4 ab 1f 8e c6 b0 76 23 33 e2 d0 cd 69 b9 0b c0 72 a7 a7 e3 4a a1 .y..%.@6t!......v#3...i...r...J.
1540 0d df 1a d6 e4 a7 2a b8 36 aa 21 a1 40 0e c4 77 73 55 53 8c 3f 90 d6 57 59 6e 91 47 e9 f1 5e 7c ......*.6.!.@..wsUS.?..WYn.G..^|
1560 6a 3f d3 b6 03 58 15 52 a1 b1 a4 1a 7c 64 0b c1 92 b1 26 ee 23 47 75 ed 1a 42 7a e1 db 38 58 18 j?...X.R....|d....&.#Gu..Bz..8X.
1580 63 4c c6 1f 89 c5 aa 45 e9 b1 95 d6 47 57 c2 91 b8 73 5b b0 1c 30 68 b0 44 8c 45 dd 31 65 84 40 cL.....E....GW...s[..0h.D.E.1e.@
15a0 40 ba fe 45 12 ac 35 56 58 2e df f1 bb ad b6 65 95 a9 3d 1e 16 59 1d 6b d2 ae a9 b5 c1 c3 fe 92 @..E..5VX......e..=..Y.k........
15c0 61 05 bb b7 a9 49 69 49 c3 da 81 ee 02 a0 1d 54 43 7a e1 df 24 58 99 64 58 55 69 ef 28 b6 96 e0 a....IiI.......TCz..$X.dXUi.(...
15e0 01 40 87 fc 32 f1 f0 a8 14 59 c8 68 d7 1b f9 a5 c1 72 6e 66 44 12 d6 00 63 ed 40 00 00 54 40 36 .@..2....Y.h.....rnfD...c.@..T@6
1600 d2 0b cf 48 58 37 ef d5 a4 47 78 02 56 5e da 4d 5e 94 78 b4 84 af 97 38 4d c4 fe 67 b9 52 9f af ...HX7...Gx.V^.M^.x....8M..g.R..
1620 f3 2f 02 cb 70 a8 31 eb 18 63 51 76 55 15 3d d5 55 5b d7 f7 7f 20 61 69 1b f3 21 3e 16 56 a3 c2 ./..p.1..cQvU.=.U[....ai..!>.V..
1640 94 f5 79 94 62 4b 39 75 e4 a3 15 e0 7d 77 61 58 c1 b2 d0 89 82 25 20 dd b4 91 ad d6 0a 05 f9 61 ..y.bK9u....}waX.....%.........a
1660 c8 b3 66 9e e7 63 0d e3 f5 68 58 be c7 98 22 7b 94 b9 6d 94 0c 4b 62 29 69 ec e5 17 85 65 80 0b ..f..c...hX..."{..m..Kb)i....e..
1680 8e 49 87 25 ca 85 9a 03 08 21 41 97 65 19 87 3c 8b d8 29 12 09 2b 6b 71 5c 0a 58 64 4a ba c2 30 .I.%.....!A.e..<..)..+kq\.XdJ..0
16a0 47 31 15 29 14 7f 41 58 00 26 04 c7 bf 28 b0 f6 05 64 0b 35 41 10 0a b2 2c 9e 27 c5 ac 28 58 92 G1.)..AX.&...(...d.5A...,.'..(X.
16c0 c2 a5 82 65 45 d5 6d 62 5a 96 cd c6 7f ec 9d c1 6b e3 56 10 87 77 e5 cb e0 47 45 42 b1 75 10 d8 ...eE.mbZ.......k.V..w...GEB.u..
16e0 20 50 0f 82 57 6c 0c 5a 16 2c 41 0f 25 eb 83 4b db 94 d0 83 bb 28 b9 24 e0 93 9f f0 1e 7c 90 42 .P..Wl.Z.,A.%..K.....(.$.....|.B
1700 40 18 4c 71 b2 86 d2 43 0f 21 a4 60 d6 50 e8 d2 3f 30 3d 48 b6 65 bd 79 d6 b3 e5 42 28 d1 31 10 @.Lq...C.!.`.P..?0=H.e.y...B(.1.
1720 c7 f9 98 99 37 33 6f 7e a3 0e 2b 02 cb 65 8e e3 38 26 d4 f8 0c 7e 46 89 56 7e ff be 51 6e 68 9a ....73o~..+..e..8&...~F.V~..Qnh.
1740 4e 7c ca b9 a1 bd d2 86 d1 6d b0 76 ea 66 0c 11 2b b9 94 49 7f 42 c9 5b 11 56 24 75 00 e6 bc 73 N|.......m.v.f..+..I.B.[.V$u...s
1760 1d 40 3a a5 11 f1 fb 9a a6 95 35 4d eb fb 84 f8 3a 67 59 94 6c dc 4e e3 b0 ae 94 5d 61 dd ef 03 .@:.......5M....:gY.l.N....]a...
1780 0b d4 a6 d4 1f 38 2f 96 94 be 03 d7 05 93 87 f5 25 d1 35 2d 9e 3d d6 7d 5f 47 02 fc 5a 71 28 b6 .....8/.........%.5-.=.}_G..Zq(.
17a0 ac 5b 91 7f fc da 0d 16 a1 5a 1a e6 bb e1 47 b9 d4 7a 22 77 88 84 05 33 78 d7 05 00 97 b3 ac 44 .[.......Z....G..z"w...3x......D
17c0 7c 98 3c 7c cc b2 a8 95 0f ab 83 1d e3 17 f5 55 47 e2 9e ff c6 73 41 13 29 d7 4b 16 32 81 ab 5d |.<|...........UG....sA.).K.2..]
17e0 08 96 09 ae 73 8a 05 f8 fe db b7 ba ee fb 7e 2c 69 a2 36 9f 3a a4 67 4c 71 58 25 de a2 c2 8d 04 ....s.........~,i.6.:.gLqX%.....
1800 11 81 75 93 8d 33 d2 e5 6d 75 7a 9d 4f 4b 2d 58 1b 32 0f 89 59 33 3d 91 81 e9 be ae fb 3e f9 8a ..u..3..muz.OK-X.2..Y3=......>..
1820 4f 1d 48 ae 65 71 bd f4 20 33 33 83 c0 9a 66 2d 71 97 76 c0 e8 2c af 4c e8 14 83 c5 98 63 22 a7 O.H.eq...33...f-q.v..,.L.....c".
1840 61 32 37 94 08 07 7d 1e 16 a5 76 9e 65 0d f3 5c 0a 81 15 0a af 20 e5 9e 5b 35 d8 36 b5 73 5d 10 a27...}...v.e..\........[5.6.s].
1860 96 c3 90 00 bf 84 45 e2 b7 1d f9 48 06 4f 56 a0 a8 8d 9e 86 d9 a2 ad d9 93 80 c5 b9 ee 25 ec fe ......E....H.OV..............%..
1880 f4 26 1f 6e 04 99 6a af 58 3f 8b 39 c0 10 58 94 5a b1 d0 c4 27 84 20 49 69 5a 83 8f a7 0e 93 dc .&.n..j.X?.9..X.Z...'..IiZ......
18a0 66 0b 02 0b 8c dd 8b 43 d1 10 dc 02 71 ca 3b 81 ec 37 90 79 fe ac 83 87 58 56 14 1b cc 6a 5e 54 f......C....q.;..7.y....XV...j^T
18c0 04 2b 16 10 e0 31 4b 45 b2 9c 7c 58 1d e9 1e cd 5d 10 1c 01 40 69 4b 5f e2 8a c3 35 2a b8 5e 05 .+...1KE..|X....]...@iK_...5*.^.
18e0 bb be 8f 96 ee 45 e3 b9 51 1c 16 b5 6d 4a 28 25 94 10 04 56 6b 2f 58 5c d0 32 7a 82 68 6e c4 6d .....E..Q...mJ(%...Vk/X\.2z.hn.m
1900 65 43 59 88 67 2d 39 32 93 42 b0 06 00 2e 1f e0 a3 e4 cd 68 b1 d9 10 ca e7 59 89 e2 24 19 c1 a5 eCY.g-92.B.........h.....Y..$...
1920 12 b0 e6 52 b0 18 17 9e ef 1f d0 46 b8 a1 2c 61 29 c3 91 90 56 f6 d3 8e 8a 6e 66 63 66 ad 82 c0 ...R.......F..,a)...V....nfcf...
1940 b2 57 6f 29 24 c4 16 16 d2 f1 74 b7 f5 c8 c3 ca da 88 91 35 80 5e 1b 8b b2 fc f8 50 97 ef 77 56 .Wo)$.....t........5.^.....P..wV
1960 cf 57 f7 86 86 a2 28 ca fc 4e 0e 56 93 15 5c dc c3 98 5b 6b 61 96 95 c0 b0 6d 8a b8 e1 5a 9a 42 .W....(..N.V..\...[ka....m...Z.B
1980 08 b1 08 02 6b 94 73 b0 5d 19 e8 91 d4 e3 4f fe 76 98 89 dd 53 43 d9 84 a5 28 5d 95 49 b8 61 b7 ....k.s.].....O.v...SC...(].I.a.
19a0 d8 12 8c 41 19 80 99 2d 91 65 25 12 30 1e 56 1c d8 a9 6d 53 6a 11 4a 11 58 fc 04 4d ba d0 1b bd ...A...-.e%.0.V...mSj.J.X..M....
19c0 11 9d df d8 64 5a ea 5e fb 56 ed 34 d3 b3 0e 2b b6 c6 4d 9d a1 57 b1 1b 77 90 c5 2c ab 71 0a c0 ....dZ.^.V.4...+..M..W..w..,.q..
19e0 06 62 58 b6 4d 29 41 9a 7f d6 72 b7 2e a5 92 49 a9 a2 b4 2f 26 3d 00 28 8d 16 43 71 b2 c3 f0 a2 .bX.M)A...r....I.../&=.(..Cq....
1a00 d8 e8 de 04 c1 9b cd 01 9c 51 d6 d1 e6 53 75 35 c3 5c e2 c7 c2 9b bd 82 b0 9c be c7 df a4 47 19 .........Q...Su5.\............G.
1a20 ed 89 8d 58 d6 5a c3 63 51 1b b1 2c e9 e1 c5 6c 66 38 91 fe 8d 11 12 c2 15 45 31 ba 5d 7c aa e9 ...X.Z.cQ..,...lf8.......E1.]|..
1a40 75 d1 65 63 ac d6 af b1 d6 56 58 b6 fd 3b 5f ee 24 ed 77 42 08 a1 16 0a ab b4 27 2c f9 b1 47 01 u.ec.....VX..;_.$.wB......',..G.
1a60 2c 61 b1 53 2d 0a cb 03 00 67 96 ed 67 e5 c1 8a 83 fb 7a 5f e4 a3 64 8b 46 0a 16 d7 7b 38 0c ac ,a.S-....g..g.....z_..d.F...{8..
1a80 66 1d 8a c2 32 01 40 9f ed 68 59 5f c4 d2 5e 6b 29 3a a4 bb 35 ff f2 60 c9 7a f0 6e b0 5a 50 14 f...2.@..hY_..^k):..5..`.z.n.ZP.
1aa0 d6 c0 74 e0 3b 12 ed ec 86 1b f2 7b dc 0d f3 9a e3 af 87 e2 6a b6 d2 3c 34 ac 66 08 85 61 55 cc ..t.;......{........j..<4.f..aU.
1ac0 9a 43 f6 82 45 d3 9a 7b c1 85 c5 74 cb dd 94 8a 66 f0 ab ca 6f 78 58 58 ed 09 1c 00 96 6b 6a fa .C..E..{...t....f...oxXX.....kj.
1ae0 ce 6e f8 f7 26 2b 4a 1e 05 57 61 c2 58 dd bd 85 ad b0 80 4d f3 31 4c d0 04 05 7b 82 07 38 04 2c .n..&+J..Wa.X......M.1L...{..8.,
1b00 d3 d7 cb 66 65 67 58 19 e1 bd 08 16 d4 d1 e6 a5 f1 41 54 1b a6 6b 9a 8f 5b 71 19 67 a5 78 60 34 ...fegX..........AT..k..[q.g.x`4
1b20 ff 1c 39 2f 1d 40 6f a8 28 ca c0 24 65 26 4c 1d 68 b2 2f 0c b1 2c 5f 0e 16 54 83 26 ff 6f 56 41 ..9/.@o.(..$e&L.h./..,_..T.&.oVA
1b40 02 16 c0 83 40 6e a8 28 cd 4e 6b 5d 5f 57 c3 f3 2d 58 db 8b f4 cc e6 ab 5e b8 e7 33 f8 54 f9 da ....@n.(.Nk]_W..-X......^..3.T..
1b60 d5 3d 80 a3 4f 9f 3f ff 35 9b 8d a3 68 1c 45 d1 38 fa 6d 2d 1b 4f 66 6c a3 28 8a c6 e3 d9 6c 3c .=..O.?.5...h.E.8.m-.Ofl.(....l<
1b80 1e cf c6 e3 3f b2 3b 69 fe 19 7f b3 f1 c9 e9 26 53 ef 32 ed 2a d7 e7 ab 2a ee 6a f3 db a0 33 5d ....?.;i.......&S.2.*...*.j...3]
1ba0 55 f5 8c 9b 02 1f de f0 d2 cc bb 0a d6 1c 35 e6 17 99 12 fb d5 de ea 6a d7 31 bd 5a d9 05 80 d3 U.............5........j.1.Z....
1bc0 72 59 4b 1a 7a d6 ba bd be 7e 71 36 5d ae 09 49 eb ed 57 eb 8c 08 b5 69 63 7b 6b 7c 1a 04 41 10 rYK.z....~q6]..I..W....ic{k|..A.
1be0 5c a8 47 fb 7c cf 23 35 9c 26 dd ca 4a 78 27 96 be 96 ea e1 34 08 82 4e 77 1e 04 c1 45 38 41 5a \.G.|.#5.&..Jx'.....4..Nw...E8AZ
1c00 61 fb c3 f2 3c cf f1 3c 06 50 fb 51 6b e8 a9 25 7d 29 85 7d f2 32 1a 6a 51 4a e3 ed 90 94 df 76 a...<..<.P.Qk..%}).}.2.jQJ.....v
1c20 44 6d eb 59 ed 32 da 32 26 b9 f7 6f 9a a6 e7 79 35 00 28 6b 5a 23 de 3c 97 dd dd 60 a5 cb 9a f5 Dm.Y.2.2&..o...y5.(kZ#.<...`....
1c40 b6 a7 ec f3 9c 56 91 fe 57 b0 3c cf f1 dc 78 1b 59 7f 73 78 c1 b6 6d 2b f5 d6 bf 8d 45 f8 99 9d .....V..W.<...x.Y.sx..m+....E...
1c60 3d f1 de 90 67 b8 f0 02 85 e5 3e bd 3c 92 8f fb 02 eb 05 d6 0b ac 17 58 ff 07 58 df ff 7c 72 72 =...g.....>.<..........X..X..|rr
1c80 f2 cb 0f 4f 3f a5 7e 76 7c 7c 7c fc ed d3 bf ec 9d 41 8b ab 3c 14 86 37 52 de aa 9b ac 02 06 a4 ...O?.~v|||......A..<..7R.......
1ca0 20 01 19 5a d2 95 30 8b db c5 40 f1 42 e1 52 a9 0b 37 b6 ee b3 4b fe 42 ff f7 b9 0b ed 34 91 a9 ...Z..0...@.B.R..7...K.B.....4..
1cc0 d3 ce dc ef c2 9d 6f 66 31 03 ea e4 c4 c7 93 37 a7 35 fa 12 a9 e1 6f ff 93 31 c6 18 63 19 31 c6 ......of1......7.5....o..1..c.1.
1ce0 d8 fe 56 a0 2a 67 7f f9 d4 12 c6 18 63 01 cd 19 63 cd e4 91 41 b9 fd 14 ac 66 23 9b fd bc 09 e5 ..V.*g......c...c...A....f#.....
1d00 cc dd 5a 02 b2 22 a2 c4 28 77 b3 00 16 44 44 b9 c8 6e 06 ca 81 ec 8f f3 c8 96 53 7b e7 80 d9 12 ..Z.."..(w...DD..n........S{....
1d20 51 96 9e a6 9b 11 28 3e 03 ab 85 49 88 88 f6 a1 07 2b 01 c0 33 22 2a c6 20 6a 22 a2 20 be 1d a8 Q.....(>...I.....+..3"*..j".....
1d40 36 c5 9f 4f 9e b2 9d da 5b 01 39 11 11 45 ef 34 b3 e3 cd 27 60 6d 81 01 52 e2 c3 ca 65 bf 67 f6 6..O....[.9..E.4...'`m..R...e.g.
1d60 26 2c d5 fe dd 81 b6 c0 64 c0 1d a0 7a 05 f8 4f 35 ab 00 2e ac 03 0f 56 ab 0c b0 fb 00 ac ea 54 &,......d...z..O5......V.......T
1d80 7a 5d 6e 45 31 91 16 ac 2c d5 49 0a e5 2b 43 14 15 cd 28 ac 28 eb db e7 56 c0 f4 d0 9c 63 f6 c1 z]nE1...,.I..+C...(.(...V....c..
1da0 ae cc b2 36 76 24 61 5e 2f 9c 11 91 2c db 9a 68 9b 6f ef 86 65 80 37 25 2f 69 89 01 26 f8 40 66 ...6v$a^/...,..h.o..e.7%/i..&.@f
1dc0 e5 70 03 d5 a8 a9 2d 6f 6b 33 10 2e 05 b8 07 10 27 6a 7b 6d bc e6 7f be 9d df 16 34 33 48 d1 cc .p....-ok3......'j{m.......43H..
1de0 25 53 20 9c 73 c0 c9 81 2a 84 73 3a 49 89 94 94 c1 e9 5e 58 19 80 ea 06 2c ca 01 39 7f 1c 56 ec %S..s...*.s:I.....^X....,..9..V.
1e00 c1 8a 11 26 b4 9b 52 1b 46 2d e0 f6 49 a2 a1 00 c6 9d 25 30 39 0c 03 a0 8f 30 f3 d3 ed 94 2b 20 ...&..R.F-..I.....%09....0....+.
1e20 71 36 85 70 13 76 6f b0 2c b7 6a 7f 77 66 a1 6f 4d b1 d1 ac 9b b4 44 14 01 e2 fc 49 58 4b c0 b0 q6.p.vo.,.j.wf.oM.....D....IXK..
1e40 49 69 6e 46 b0 02 20 20 35 04 ba 0b 56 3c 5c 71 b5 f3 d3 6d 36 6f 90 fa c1 2a 1f 67 ba 7f 44 b3 IinF....5...V<\q...m6o...*.g..D.
1e60 2e 79 da 00 61 36 86 35 4f e1 05 bb c2 aa 17 f7 c2 a2 12 53 67 fa 06 ac 25 a0 48 01 ec 6e 58 21 .y..a6.5O..........Sg...%.H..nX!
1e80 c2 be 77 95 cf 7c 49 33 e4 de 3c 10 8e e6 85 f4 21 81 67 43 37 ae b3 a2 03 8b 12 33 6a 2e 06 96 ..w..|I3..<.....!.gC7......3j...
1ea0 44 44 53 b5 9f 0f 6b 4f cc f8 43 ea 3d 58 ea e1 cc 1a fa 9e 9d fd 6e 08 a2 8d d7 4a 01 bf e2 69 DDS...kO..C.=X........n....J...i
1ec0 fc 41 fa 7e 9d 55 40 66 bd d0 7a b0 b6 ed 70 95 7d 58 f5 d0 eb a2 ba 17 d6 2e a1 c4 e0 11 58 99 .A.~.U@f..z...p.}X............X.
1ee0 c4 92 6a 1f b0 41 4b b7 2b 5d 89 33 11 51 1b d0 48 9f 14 4c 92 b8 03 53 5d 0f 49 28 69 05 72 52 ..j..AK.+].3.Q..H..L...S].I(i.rR
1f00 0f c0 ca 4a 44 15 51 00 78 53 d6 6e 28 ef e2 51 a2 9e b1 69 f6 db 72 47 74 67 05 cf c2 2a 4b cf ...JD.Q.xS.n(..Q...i..rGtg...*K.
1f20 53 b3 e1 82 62 60 ee 5d 91 9c 62 4f 8a 49 40 c4 c9 ed fa 03 58 6c d5 a9 a5 b1 3e ed b0 89 bd 94 S...b`.]..bO.I@.....Xl....>.....
1f40 3d 25 d7 20 72 46 0c e6 ed 8a e4 e6 67 c3 ed 49 9c cf 45 1c 8c ca 9f b6 4f 9e 71 a9 ce 0a ce 4b =%..rF......g..I..E.....O.q....K
1f60 35 c1 4a e5 65 e9 28 5a b0 3b 17 f9 ed a4 88 cb f2 94 f8 ff 41 14 9c 67 45 e0 7f 9e 39 4d c6 0c 5.J.e.(Z.;..........A..gE...9M..
1f80 66 9c cf fc 03 54 19 13 55 f9 c2 09 9d 15 c5 b5 4c 4a 44 9c 11 e5 a2 fe fe d6 e1 fb 2b 9a 6f 58 f....T..U.......LJD.........+.oX
1fa0 df b0 be 61 fd bf 60 7d ec 6e 34 8c 91 52 1e 52 19 72 21 84 78 1e 5e b8 3d 36 ab e8 cd 1c 23 2b ...a..`}.n4..R.R.r!.x.^.=6....#+
1fc0 7a 4b 31 ad b5 e6 5c 58 21 fa bb 85 ce 2b e1 85 10 fc 8b de 64 95 d8 74 47 d9 c9 75 77 d4 5a 8b zK1...\X!....+......d..tG..uw.Z.
1fe0 57 db bd d5 78 55 77 ff 5c 80 e5 42 08 3d d8 af 69 61 85 bd 18 cc 38 16 ac 3c fc a2 b0 36 3f 7e W...xUw.\..B.=..ia....8..<...6?~
2000 ca 63 da c9 a3 4c 39 d7 7a f0 09 5d 8d d2 ea 69 75 f1 5e 1d fc c0 b4 d6 fc e2 27 b0 7a 7a 7d 7f .c...L9.z..]...iu.^.......'.zz}.
2020 7e 14 59 a1 39 97 5f 15 56 67 7e 70 d9 75 a9 4c f9 ba b7 6f 8a a2 95 b7 d8 a1 18 6c 42 57 bd e9 ~.Y.9._.Vg~p.u.L...o.......lBW..
2040 82 ee 9d 32 85 7e 19 60 3d bd 3a 33 d8 28 12 fc 57 fa 0f dc c1 ff 18 ac 14 dd 71 2d 3b 99 1e 0f ...2.~.`=.:3.(..W.........q-;...
2060 3c 5c f3 97 17 11 45 4f 2b f7 71 de d5 6a 15 45 4f d7 c4 d2 dc 5a db 53 7b 8e a2 c8 b1 45 b1 36 <\....EO+.q..j.EO....Z.S{....E.6
2080 b2 fa d8 7d dd 85 21 9d 49 8f fc 20 d3 f0 20 75 1a be 68 f1 1c 5d dc 79 87 e5 45 fd f3 5e 3d 12 ...}..!.I......u..h..].y..E..^=.
20a0 a1 39 e7 d6 5a 61 a3 c1 31 d3 59 a0 65 85 b5 e2 28 f1 75 61 21 0d c3 75 2a e5 3a 3d 70 b9 e6 17 .9..Za..1.Y.e...(.ua!..u*.:=p...
20c0 af 0e 2b ae 2b 66 9c df 82 73 ae ed e0 14 f3 7a ac 7d 95 76 ad ff 89 bc fa 38 ac f5 7a 7d 3c 74 ..+.+f...s.....z.}.v.....8..z}<t
20e0 e1 f1 b0 96 bf 06 58 f6 77 7b 67 a8 e3 48 0c 83 e1 83 96 f3 00 06 96 7e 16 b2 52 25 a3 91 16 b4 ......X.w{g..H.........~..R%....
2100 60 1e a0 60 8d 4a ac e1 66 e3 f7 97 0e 64 a6 db 5d 70 a7 d3 96 b4 3d a3 41 03 3e 39 ce 9f c4 c9 `..`.J..f....d..]p....=.A.>9....
2120 af 96 35 e2 c6 eb b8 b5 4a 91 f1 28 c6 cd c5 e9 6b cb 91 a6 24 e8 b9 61 b1 19 c3 0d 70 e7 f3 ac ..5.....J..(....k...$..a....p...
2140 aa 35 9b d9 18 62 55 ed ed d0 da a1 1d da a1 b5 2a 11 49 7d 7f af 6a 87 a9 f6 e7 31 aa b4 aa de .5...bU.........*.I}..j....1....
2160 2b 45 62 a5 a7 cf 2c 0b 37 0f 47 b0 a9 a6 05 20 da 3e 0d 88 76 5d 50 6a 26 a9 7b 4a d5 15 56 6d +Eb...,.7.G......>..v]Pj&.{J..Vm
2180 46 b6 d6 e9 b9 61 91 99 19 c3 9c e1 c1 9c 06 07 42 af 8d 90 d3 e1 2a 38 35 8d 07 2c dd b5 ba 56 F....a..........B.....*85..,...V
21a0 bd 6f b4 52 2c e8 d9 61 b1 45 30 32 e0 1d 81 e5 b8 00 bc 37 4b 7e 5b c7 58 f0 56 b3 f4 c6 87 75 .o.R,..a.E02.......7K~[.X.V....u
21c0 b3 17 15 06 3d 3d 2c 07 47 c0 c2 bb 03 4e b4 7c 70 ee 4d a4 5f 61 55 84 c9 66 e8 5b 7b 6a ed 76 ....==,.G....N.|p.M._aU..f.[{j.v
21e0 c8 12 17 7a 7e 58 14 88 e0 40 bf b8 a3 d3 b1 43 6a bb cd db a6 1b 58 55 1a e0 01 6b a3 55 aa b3 ...z~X...@.....Cj.....XU...k.U..
2200 0e cf d6 c7 29 57 3f ec 56 66 80 c3 2f ee ee cb b1 f7 d0 da 9d 09 bf 7a 16 8a 77 96 d4 79 e8 87 ....)W?.Vf../..........z..w..y..
2220 6a ad 69 a6 ce 73 a6 d8 4a 2f 02 8b d8 01 74 b8 7b a7 a3 e7 6e 63 f8 76 68 fa a9 d2 b5 78 f1 90 j.i..s..J/....t.{...nc.vh....x..
2240 cd f3 5d 55 5b 2b cd cc 39 53 6c a1 97 81 45 2b 80 0e b8 af b4 62 db a3 9a a6 d6 34 39 37 75 a0 ..]U[+..9Sl...E+.....b.....497u.
2260 aa e4 fd 43 86 e7 fb e6 dc 2e 26 39 8b 88 d1 0b c1 22 ea de f1 e1 4e b4 b2 56 9b a6 43 9b a6 d6 ...C......&9....."....N..V..C...
2280 12 ac 55 a5 4d 35 35 a9 77 88 d9 80 25 a9 9a c6 26 22 66 fc 5a b0 c8 4f 34 03 7e 74 49 dd d5 68 ..U.M55.w...%...&"f.Z..O4.~tI..h
22a0 05 ec f3 c9 3f 22 5a 10 6c 03 97 48 aa 8c 8f 88 f5 c5 60 11 93 87 bb 83 45 75 5b 24 57 84 5c fd ....?"Z.l..H......`.....Eu[$W.\.
22c0 ec 87 de 8f 60 8e 91 4e 92 c6 6c 62 47 7a bc f8 29 ac 15 64 ee dd c1 26 22 5a 9a 9a bc d5 72 4d ....`..N..lbGz..)..d...&"Z....rM
22e0 19 c9 b3 00 61 01 13 11 36 63 33 7e bc ac ba 07 2c 3a 85 47 ef dd 11 c1 a9 aa 22 f3 3e f1 a9 ed ....a...6c3~....,:.G......".>...
2300 bb 9f 23 b5 58 c4 98 8d 79 79 c4 b4 ba 07 2c 02 ba 2f fd e2 61 9b 40 18 13 df 9c 2a d7 95 cc 02 ..#.X...yy....,../..a.@....*....
2320 30 b3 49 ca 99 39 3a d1 ab c2 22 8e 93 bb 3b 82 cd c4 98 b7 42 9e b7 db 54 dd 11 61 22 12 1f 38 0.I..9:..."...;.....B...T..a"..8
2340 d2 0b c3 a2 0c bf f4 7e 41 98 f1 99 ed 2c b3 a4 64 7e 91 51 ce 00 8b f1 42 0f 1c f7 80 45 7c ea .......~A....,..d~.Q....B....E|.
2360 dd 81 6d ac c9 38 20 fc 76 66 ba 76 f8 a5 9f e8 e5 61 d1 f1 b4 74 00 88 d8 47 a1 24 3d 5f fc ba ..m..8..vf.v.....a...t...G.$=_..
2380 d3 7f 7a 5f 00 60 14 2e b1 33 d3 7f 58 7f 90 10 70 47 44 04 33 b3 3c 25 ab fb c1 22 ea cc 11 1c ..z_.`...3..X...pGD.3.<%..."....
23a0 11 58 56 fa 0f eb af 72 de d9 1e 6a 9f f8 1f e3 37 97 2c c5 bb 11 c7 3f f5 00 00 00 00 49 45 4e .XV....r...j....7.,....?.....IEN
23c0 44 ae 42 60 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D.B`............................
23e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2400 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 64 65 66 61 75 6c 74 2d 77 65 62 elnode-20190702.1509/default-web
2420 73 65 72 76 65 72 2d 74 65 73 74 2e 68 74 6d 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 server-test.html................
2440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2460 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
2480 30 30 30 30 37 31 35 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 37 35 35 36 00 20 30 00 00 00 0000715.00000000000.017556..0...
24a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
24c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
24e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2500 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
2520 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
2540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
25a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
25c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
25e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2600 3c 68 74 6d 6c 3e 0a 3c 62 6f 64 79 3e 0a 3c 68 31 3e 54 68 69 73 20 69 73 20 45 6c 6e 6f 64 65 <html>.<body>.<h1>This.is.Elnode
2620 27 73 20 54 65 73 74 20 48 54 4d 4c 20 66 69 6c 65 3c 2f 68 31 3e 0a 3c 70 3e 49 66 20 79 6f 75 's.Test.HTML.file</h1>.<p>If.you
2640 20 61 72 65 20 72 65 61 64 69 6e 67 20 74 68 69 73 20 74 68 65 6e 20 6d 6f 73 74 20 6c 69 6b 65 .are.reading.this.then.most.like
2660 6c 79 20 45 6c 6e 6f 64 65 20 69 73 20 77 6f 72 6b 69 6e 67 20 6f 6b 2e 3c 2f 70 3e 0a 0a 3c 70 ly.Elnode.is.working.ok.</p>..<p
2680 3e 54 68 69 73 20 66 69 6c 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e >This.file.is.normally.stored.in
26a0 20 74 68 65 20 75 73 65 72 27 73 20 64 69 72 65 63 74 6f 72 79 2e 20 49 74 20 63 61 6e 0a 6e 6f .the.user's.directory..It.can.no
26c0 72 6d 61 6c 6c 79 20 62 65 20 66 6f 75 6e 64 20 69 6e 3a 3c 2f 70 3e 0a 0a 3c 70 72 65 3e 0a 7e rmally.be.found.in:</p>..<pre>.~
26e0 2f 2e 65 6d 61 63 73 2e 64 2f 65 6c 6e 6f 64 65 0a 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 54 6f 20 6c /.emacs.d/elnode.</pre>..<p>To.l
2700 65 61 72 6e 20 6d 6f 72 65 20 61 62 6f 75 74 20 45 6c 6e 6f 64 65 20 76 69 73 69 74 20 3c 61 20 earn.more.about.Elnode.visit.<a.
2720 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6c 6e 6f 64 65 2e 6f 72 67 22 3e 74 68 65 20 77 65 62 href="http://elnode.org">the.web
2740 73 69 74 65 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4a 75 73 74 20 74 6f 20 73 68 6f 77 20 74 site</a>.</p>..<p>Just.to.show.t
2760 68 61 74 20 45 6c 6e 6f 64 65 20 77 69 6c 6c 20 73 65 72 76 65 20 61 6e 79 74 68 69 6e 67 2c 20 hat.Elnode.will.serve.anything,.
2780 68 65 72 65 27 73 20 61 20 70 6e 67 3a 3c 2f 70 3e 0a 0a 3c 69 6d 67 20 73 72 63 3d 22 64 65 66 here's.a.png:</p>..<img.src="def
27a0 61 75 6c 74 2d 77 65 62 73 65 72 76 65 72 2d 69 6d 61 67 65 2e 70 6e 67 22 2f 3e 0a 0a 3c 2f 62 ault-webserver-image.png"/>..</b
27c0 6f 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ody>.</html>....................
27e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2800 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 64 65 66 61 75 6c 74 2d 77 69 6b elnode-20190702.1509/default-wik
2820 69 2d 69 6e 64 65 78 2e 63 72 65 6f 6c 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 i-index.creole..................
2840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2860 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
2880 30 30 30 36 34 31 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 37 31 35 30 00 20 30 00 00 00 0006410.00000000000.017150..0...
28a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
28c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
28e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2900 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
2920 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
2940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
29a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
29c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
29e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2a00 3d 20 45 6c 6e 6f 64 65 20 57 69 6b 69 20 3d 0a 0a 54 68 69 73 20 69 73 20 45 6c 6e 6f 64 65 27 =.Elnode.Wiki.=..This.is.Elnode'
2a20 73 20 57 69 6b 69 2e 20 20 49 74 20 69 73 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 7b 7b 7b 63 s.Wiki...It.is.based.on.the.{{{c
2a40 72 65 6f 6c 65 7d 7d 7d 20 77 69 6b 69 20 6c 61 6e 67 75 61 67 65 0a 61 6e 64 20 69 73 20 77 72 reole}}}.wiki.language.and.is.wr
2a60 69 74 74 65 6e 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 20 45 6d 61 63 73 4c 69 73 70 2e 0a 0a itten.completely.in.EmacsLisp...
2a80 7b 7b 64 65 66 61 75 6c 74 2d 77 69 6b 69 2d 6c 6f 67 6f 2e 67 69 66 7c 47 4e 55 73 20 73 69 74 {{default-wiki-logo.gif|GNUs.sit
2aa0 74 69 6e 67 20 6f 6e 20 63 6c 6f 75 64 73 7d 7d 0a 0a 3d 3d 20 57 68 61 74 20 64 6f 65 73 20 69 ting.on.clouds}}..==.What.does.i
2ac0 74 20 64 6f 3f 20 3d 3d 0a 0a 49 74 20 64 6f 65 73 20 73 79 6e 74 61 78 20 63 6f 6c 6f 72 69 6e t.do?.==..It.does.syntax.colorin
2ae0 67 3a 0a 0a 7b 7b 7b 0a 23 23 21 20 65 6d 61 63 73 2d 6c 69 73 70 0a 28 64 65 66 75 6e 20 65 6c g:..{{{.##!.emacs-lisp.(defun.el
2b00 6e 6f 64 65 2d 77 69 6b 69 2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 6f 6e 20 77 69 6b 69 72 node-wiki-handler.(httpcon.wikir
2b20 6f 6f 74 29 0a 20 20 22 41 20 6c 6f 77 20 6c 65 76 65 6c 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 oot)..."A.low.level.handler.for.
2b40 57 69 6b 69 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 0a 53 65 6e 64 20 74 68 65 20 57 69 6b 69 20 Wiki.operations...Send.the.Wiki.
2b60 70 61 67 65 20 72 65 71 75 65 73 74 65 64 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61 20 page.requested,.which.must.be.a.
2b80 66 69 6c 65 20 65 78 69 73 74 69 6e 67 20 75 6e 64 65 72 0a 74 68 65 20 57 49 4b 49 52 4f 4f 54 file.existing.under.the.WIKIROOT
2ba0 2c 20 62 61 63 6b 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 55 70 64 61 74 65 20 6f ,.back.to.the.HTTPCON...Update.o
2bc0 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 61 75 74 68 65 perations.are.protected.by.authe
2be0 6e 74 69 63 61 74 69 6f 6e 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 65 74 68 6f 64 20 68 74 74 ntication."...(elnode-method.htt
2c00 70 63 6f 6e 0a 20 20 20 20 28 47 45 54 0a 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f pcon.....(GET......(elnode-docro
2c20 6f 74 2d 66 6f 72 20 77 69 6b 69 72 6f 6f 74 0a 20 20 20 20 20 20 20 77 69 74 68 20 74 61 72 67 ot-for.wikiroot........with.targ
2c40 65 74 2d 70 61 74 68 0a 20 20 20 20 20 20 20 6f 6e 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 et-path........on.httpcon.......
2c60 20 64 6f 0a 20 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 74 61 72 67 65 74 2d 70 61 74 .do........(if.(equal.target-pat
2c80 68 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 77 69 6b 69 h.(expand-file-name.(concat.wiki
2ca0 72 6f 6f 74 20 22 2f 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 root."/")))............(elnode-w
2cc0 69 6b 69 2d 70 61 67 65 20 68 74 74 70 63 6f 6e 20 28 63 6f 6e 63 61 74 20 77 69 6b 69 72 6f 6f iki-page.httpcon.(concat.wikiroo
2ce0 74 20 22 2f 69 6e 64 65 78 2e 63 72 65 6f 6c 65 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 t."/index.creole"))............(
2d00 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d elnode-wiki-page.httpcon.target-
2d20 70 61 74 68 29 29 29 29 0a 20 20 20 20 28 50 4f 53 54 0a 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d path)))).....(POST......(elnode-
2d40 77 69 74 68 2d 61 75 74 68 20 68 74 74 70 63 6f 6e 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 with-auth.httpcon.'elnode-wiki-a
2d60 75 74 68 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d uth........(let*.((path.(elnode-
2d80 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 http-pathinfo.httpcon)).........
2da0 20 20 20 20 20 20 28 74 65 78 74 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 74 65 78 74 2d 70 ......(text.(elnode-wiki--text-p
2dc0 61 72 61 6d 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f aram.httpcon)))..........(if.(no
2de0 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 70 72 t.(elnode-http-param.httpcon."pr
2e00 65 76 69 65 77 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 41 20 73 61 76 65 20 eview"))..............;;.A.save.
2e20 72 65 71 75 65 73 74 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 73 61 76 65 20 74 68 65 20 6e request.in.which.case.save.the.n
2e40 65 77 20 74 65 78 74 20 61 6e 64 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b ew.text.and.then..............;;
2e60 20 73 65 6e 64 20 74 68 65 20 77 69 6b 69 20 74 65 78 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 .send.the.wiki.text.............
2e80 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 73 61 76 65 2d 72 65 71 75 65 73 74 20 68 74 74 ..(elnode-wiki--save-request.htt
2ea0 70 63 6f 6e 20 77 69 6b 69 72 6f 6f 74 20 70 61 74 68 20 74 65 78 74 29 0a 20 20 20 20 20 20 20 pcon.wikiroot.path.text)........
2ec0 20 20 20 20 20 20 3b 3b 20 4d 69 67 68 74 20 62 65 20 61 20 70 72 65 76 69 65 77 20 72 65 71 75 ......;;.Might.be.a.preview.requ
2ee0 65 73 74 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 73 65 6e 64 20 62 61 63 6b 20 74 68 65 20 est.in.which.case.send.back.the.
2f00 57 49 4b 49 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 74 65 78 74 20 74 68 61 74 27 73 WIKI..............;;.text.that's
2f20 20 62 65 65 6e 20 73 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 .been.sent...............(with-t
2f40 65 6d 70 2d 66 69 6c 65 20 22 2f 74 6d 70 2f 70 72 65 76 69 65 77 22 0a 20 20 20 20 20 20 20 20 emp-file."/tmp/preview".........
2f60 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 74 65 78 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 .......(insert.text))...........
2f80 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 73 65 6e 64 20 68 74 74 70 63 6f 6e 20 22 2f 74 ...(elnode-wiki-send.httpcon."/t
2fa0 6d 70 2f 70 72 65 76 69 65 77 22 20 70 61 74 68 29 29 29 29 29 29 29 0a 7d 7d 7d 0a 0a 49 74 20 mp/preview".path))))))).}}}..It.
2fc0 64 6f 65 73 20 6c 69 6e 6b 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74 6f 0a 5b 5b 68 74 74 does.links,.for.example.to.[[htt
2fe0 70 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6e 69 63 66 65 72 72 69 65 72 2f 65 6c 77 69 6b 69 p://github.com/nicferrier/elwiki
3000 63 72 65 6f 6c 65 7c 45 6d 61 63 73 20 43 72 65 6f 6c 65 5d 5d 20 77 68 69 63 68 20 69 73 0a 74 creole|Emacs.Creole]].which.is.t
3020 68 65 20 57 69 6b 69 20 72 65 6e 64 65 72 20 65 6e 67 69 6e 65 20 75 73 65 64 20 74 6f 20 64 69 he.Wiki.render.engine.used.to.di
3040 73 70 6c 61 79 20 70 61 67 65 73 2e 0a 0a 49 74 20 64 6f 65 73 20 61 6c 6c 20 74 68 65 20 6e 6f splay.pages...It.does.all.the.no
3060 72 6d 61 6c 20 57 69 6b 69 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 68 65 61 64 69 6e 67 73 20 61 rmal.Wiki.things.like.headings.a
3080 6e 64 20 6c 69 73 74 73 2e 0a 0a 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 64 6f 20 73 6f 6d 65 20 nd.lists...You.can.also.do.some.
30a0 73 70 65 63 69 61 6c 20 45 6d 61 63 73 20 74 68 69 6e 67 73 2c 20 6c 69 6b 65 20 6f 72 67 2d 6d special.Emacs.things,.like.org-m
30c0 6f 64 65 20 74 61 62 6c 65 73 3a 0a 0a 7c 20 20 20 20 20 20 20 44 61 74 65 20 7c 20 41 6d 6f 75 ode.tables:..|.......Date.|.Amou
30e0 6e 74 20 7c 20 44 65 73 63 72 69 70 74 69 6f 6e 20 20 20 20 20 20 20 20 20 7c 0a 7c 2d 2d 2d 2d nt.|.Description.........|.|----
3100 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------+--------+--------------
3120 2d 2d 2d 2d 2d 2d 2d 7c 0a 7c 20 32 30 31 31 2d 31 31 2d 31 35 20 7c 20 31 30 30 2e 31 35 20 7c -------|.|.2011-11-15.|.100.15.|
3140 20 45 78 70 65 6e 73 69 76 65 20 6c 75 6e 63 68 20 6f 75 74 20 7c 0a 7c 20 32 30 31 31 2d 31 31 .Expensive.lunch.out.|.|.2011-11
3160 2d 31 38 20 7c 20 20 20 37 2e 33 30 20 7c 20 44 72 79 20 63 6c 65 61 6e 69 6e 67 20 20 20 20 20 -18.|...7.30.|.Dry.cleaning.....
3180 20 20 20 7c 0a 7c 20 32 30 31 31 2d 31 31 2d 32 31 20 7c 20 20 32 32 2e 35 30 20 7c 20 54 61 6b ...|.|.2011-11-21.|..22.50.|.Tak
31a0 65 61 77 61 79 20 63 75 72 72 79 20 20 20 20 20 20 7c 0a 7c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d eaway.curry......|.|------------
31c0 2b 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 7c +--------+---------------------|
31e0 0a 7c 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 31 32 39 2e 39 35 20 7c 20 20 20 20 20 20 20 20 .|............|.129.95.|........
3200 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 23 2b 54 42 4c 46 4d 3a 20 40 35 24 32 3d 76 73 75 .............|.#+TBLFM:.@5$2=vsu
3220 6d 28 40 49 2e 2e 40 49 49 29 0a 0a 61 6e 64 20 6c 69 73 70 20 63 61 6c 6c 6f 75 74 73 3a 0a 0a m(@I..@II)..and.lisp.callouts:..
3240 3c 3c 28 0a 20 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 28 6c 61 6d 62 64 61 20 28 73 29 0a 20 <<(..(mapconcat....(lambda.(s)..
3260 20 20 20 20 28 66 6f 72 6d 61 74 20 22 2a 20 25 73 22 20 73 29 29 0a 20 20 20 27 28 22 77 68 69 ....(format."*.%s".s))....'("whi
3280 63 68 22 20 22 65 76 61 6c 22 20 22 6c 69 73 70 22 20 22 61 6e 64 22 20 22 72 65 6e 64 65 72 22 ch"."eval"."lisp"."and"."render"
32a0 20 22 74 68 65 22 20 22 72 65 73 75 6c 74 73 22 29 0a 20 20 20 22 5c 6e 22 29 0a 29 3e 3e 0a 0a ."the"."results")...."\n").)>>..
32c0 0a 3d 3d 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 3d 3d 0a 0a 42 79 20 64 65 66 61 75 6c .==.Authentication.==..By.defaul
32e0 74 2c 20 74 68 65 20 57 69 6b 69 20 75 73 65 73 20 61 6e 20 61 75 74 68 65 6e 74 69 63 61 74 69 t,.the.Wiki.uses.an.authenticati
3300 6f 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 74 68 65 20 45 6d 61 63 73 0a 69 6e 73 74 61 6e 63 on.database.in.the.Emacs.instanc
3320 65 20 72 75 6e 6e 69 6e 67 20 45 6c 6e 6f 64 65 20 61 6e 64 20 74 68 65 20 57 69 6b 69 20 73 65 e.running.Elnode.and.the.Wiki.se
3340 72 76 65 72 2e 0a 0a 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 61 64 64 20 61 20 75 73 65 72 rver...If.you.want.to.add.a.user
3360 20 74 6f 20 74 68 65 20 57 69 6b 69 20 73 6f 20 79 6f 75 20 63 61 6e 20 65 64 69 74 20 70 61 67 .to.the.Wiki.so.you.can.edit.pag
3380 65 73 20 79 6f 75 20 63 61 6e 20 64 6f 20 74 68 69 73 20 69 6e 20 45 6d 61 63 73 3a 0a 0a 7b 7b es.you.can.do.this.in.Emacs:..{{
33a0 7b 0a 4d 2d 78 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 64 0a 7d 7d 7d 0a 0a {.M-x.elnode-auth-user-add.}}}..
33c0 61 6e 64 20 69 74 20 77 69 6c 6c 20 61 73 6b 20 79 6f 75 20 66 6f 72 20 61 20 75 73 65 72 6e 61 and.it.will.ask.you.for.a.userna
33e0 6d 65 20 61 6e 64 20 61 20 70 61 73 73 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 72 20 77 69 6c me.and.a.password...The.user.wil
3400 6c 20 62 65 0a 73 74 6f 72 65 64 20 69 6e 20 61 20 70 65 72 73 69 73 74 65 6e 74 20 64 61 74 61 l.be.stored.in.a.persistent.data
3420 62 61 73 65 2e 0a 0a 0a 3d 3d 20 57 68 65 72 65 20 74 68 65 20 57 69 6b 69 20 70 61 67 65 73 20 base....==.Where.the.Wiki.pages.
3440 61 72 65 20 3d 3d 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 6c 6e 6f 64 65 20 57 69 are.==..By.default.the.Elnode.Wi
3460 6b 69 20 73 74 6f 72 65 73 20 66 69 6c 65 73 20 69 6e 20 79 6f 75 72 20 7b 7b 7b 7e 2f 2e 65 6d ki.stores.files.in.your.{{{~/.em
3480 61 63 73 2e 64 7d 7d 7d 0a 64 69 72 65 63 74 6f 72 79 20 77 68 69 63 68 20 69 73 20 61 63 74 75 acs.d}}}.directory.which.is.actu
34a0 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 7b 7b 7b ally.defined.by.the.variable.{{{
34c0 75 73 65 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 7d 7d 7d 20 69 6e 20 45 6d 61 63 73 user-emacs-directory}}}.in.Emacs
34e0 2e 0a 0a 54 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 64 69 72 65 63 74 6f 72 79 ...There.is.normally.a.directory
3500 20 7b 7b 7b 65 6c 6e 6f 64 65 7d 7d 7d 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72 79 20 .{{{elnode}}}.in.that.directory.
3520 77 68 69 63 68 0a 63 6f 6e 74 61 69 6e 73 20 64 69 72 65 63 74 6f 72 69 65 73 20 66 6f 72 20 74 which.contains.directories.for.t
3540 68 65 20 57 65 62 20 73 65 72 76 65 72 20 64 6f 63 75 6d 65 6e 74 20 72 6f 6f 74 20 61 6e 64 20 he.Web.server.document.root.and.
3560 74 68 65 20 57 69 6b 69 2e 0a 0a 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 the.Wiki...The.location.of.the.W
3580 69 6b 69 20 66 69 6c 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20 74 68 6f 75 iki.files.can.be.configured.thou
35a0 67 68 2c 20 74 72 79 3a 0a 0a 7b 7b 7b 0a 4d 2d 78 20 63 75 73 74 6f 6d 69 7a 65 2d 76 61 72 69 gh,.try:..{{{.M-x.customize-vari
35c0 61 62 6c 65 20 5b 52 45 54 5d 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b able.[RET].elnode-wikiserver-wik
35e0 69 72 6f 6f 74 0a 7d 7d 7d 0a 0a 3d 3d 20 4d 6f 72 65 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f 6e iroot.}}}..==.More.customization
3600 20 3d 3d 0a 0a 54 68 65 72 65 20 61 72 65 20 6d 61 6e 79 20 6f 74 68 65 72 20 74 68 69 6e 67 73 .==..There.are.many.other.things
3620 20 69 6e 20 45 6c 6e 6f 64 65 27 73 20 57 69 6b 69 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 75 .in.Elnode's.Wiki.that.can.be.cu
3640 73 74 6f 6d 69 7a 65 64 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 61 stomized,.including.the.header.a
3660 6e 64 20 66 6f 6f 74 65 72 2e 20 55 73 65 3a 0a 0a 7b 7b 7b 0a 4d 2d 78 20 63 75 73 74 6f 6d 69 nd.footer..Use:..{{{.M-x.customi
3680 7a 65 2d 67 72 6f 75 70 20 5b 52 45 54 5d 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 ze-group.[RET].elnode-wikiserver
36a0 20 5b 52 45 54 5d 0a 7d 7d 7d 0a 0a 54 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 6f 20 64 6f 20 .[RET].}}}..There.is.more.to.do.
36c0 77 69 74 68 20 74 68 65 20 45 6c 6e 6f 64 65 20 57 69 6b 69 20 73 65 72 76 65 72 20 62 65 63 61 with.the.Elnode.Wiki.server.beca
36e0 75 73 65 20 74 68 65 72 65 20 69 73 20 73 6f 0a 6d 75 63 68 20 74 68 61 74 20 45 6d 61 63 73 20 use.there.is.so.much.that.Emacs.
3700 63 61 6e 20 64 6f 2e 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 can.do..........................
3720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
37a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
37c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
37e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3800 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 6c 69 73 74 elnode-20190702.1509/elnode-list
3820 73 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s.el............................
3840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3860 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
3880 30 30 31 31 34 34 34 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 35 32 31 32 00 20 30 00 00 00 0011444.00000000000.015212..0...
38a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
38c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
38e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3900 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
3920 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
3940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
39a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
39c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
39e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3a00 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 6c 69 73 74 73 2e 65 6c 20 2d 20 6d 61 6e 61 67 65 6d 65 6e 74 ;;;.elnode-lists.el.-.management
3a20 20 74 6f 6f 6c 73 20 66 6f 72 20 65 6c 6e 6f 64 65 0a 0a 28 72 65 71 75 69 72 65 20 27 65 6c 6e .tools.for.elnode..(require.'eln
3a40 6f 64 65 29 0a 28 72 65 71 75 69 72 65 20 27 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 29 0a 28 ode).(require.'tabulated-list).(
3a60 72 65 71 75 69 72 65 20 27 6e 6f 66 6c 65 74 29 0a 0a 3b 3b 3b 20 44 65 66 65 72 72 65 64 20 71 require.'noflet)..;;;.Deferred.q
3a80 75 65 75 65 20 6c 69 73 74 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e ueue.list..;;;###autoload.(defun
3aa0 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 2d 71 75 65 75 65 20 28 61 72 67 29 0a 20 20 22 .elnode-deferred-queue.(arg)..."
3ac0 4d 65 73 73 61 67 65 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 64 65 66 65 72 72 Message.the.length.of.the.deferr
3ae0 65 64 20 71 75 65 75 65 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 20 22 50 22 29 0a 20 ed.queue."...(interactive."P")..
3b00 20 28 69 66 20 28 6e 6f 74 20 61 72 67 29 0a 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 0a 20 20 .(if.(not.arg).......(message...
3b20 20 20 20 20 20 22 65 6c 6e 6f 64 65 20 64 65 66 65 72 72 65 64 20 71 75 65 75 65 3a 20 25 64 20 ....."elnode.deferred.queue:.%d.
3b40 25 73 22 0a 20 20 20 20 20 20 20 28 6c 65 6e 67 74 68 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 %s"........(length.elnode--defer
3b60 72 65 64 29 0a 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 29 red)........elnode--defer-timer)
3b80 0a 20 20 20 20 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 20 28 6c 69 73 .....(setq.elnode--deferred.(lis
3ba0 74 29 29 0a 20 20 20 20 28 6d 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 65 20 64 65 66 65 72 72 65 t)).....(message."elnode.deferre
3bc0 64 20 71 75 65 75 65 20 72 65 73 65 74 21 22 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 d.queue.reset!")))..(defun.elnod
3be0 65 2d 2d 6c 69 73 74 2d 64 65 66 65 72 72 65 64 73 20 28 29 0a 20 20 22 4c 69 73 74 20 74 68 65 e--list-deferreds.()..."List.the
3c00 20 64 65 66 65 72 72 65 64 20 73 65 72 76 65 72 73 2e 22 0a 20 20 3b 3b 20 54 4f 44 4f 20 68 61 .deferred.servers."...;;.TODO.ha
3c20 76 65 20 74 68 65 20 64 65 66 65 72 20 73 74 75 66 66 20 70 75 74 20 61 20 62 65 74 74 65 72 20 ve.the.defer.stuff.put.a.better.
3c40 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 0a 20 20 3b 3b 20 68 61 6e reference.to.the.actual...;;.han
3c60 64 6c 65 72 20 6f 6e 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 3f 0a 20 20 3b 3b 0a 20 20 3b 3b dler.onto.the.process?...;;...;;
3c80 20 77 65 20 63 6f 75 6c 64 20 68 61 76 65 20 74 68 65 20 6d 61 70 70 65 72 20 61 64 64 20 74 68 .we.could.have.the.mapper.add.th
3ca0 65 20 6d 61 70 70 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 e.mapped.function.to.the.process
3cc0 20 61 73 20 77 65 6c 6c 3f 0a 20 20 3b 3b 0a 20 20 3b 3b 20 69 6e 74 6f 20 61 20 6c 69 73 74 20 .as.well?...;;...;;.into.a.list.
3ce0 6f 66 20 6d 61 70 70 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 20 74 68 69 73 20 70 72 6f 63 of.mapped.functions.on.this.proc
3d00 65 73 73 3f 0a 20 20 28 6c 6f 6f 70 20 66 6f 72 20 28 70 72 6f 63 20 2e 20 64 65 66 65 72 72 65 ess?...(loop.for.(proc...deferre
3d20 64 2d 63 6c 6f 73 75 72 65 29 20 69 6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 0a 20 d-closure).in.elnode--deferred..
3d40 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 ....collect........(list........
3d60 20 70 72 6f 63 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 6c 20 28 70 72 6f 63 65 73 73 .proc.........(let.((pl.(process
3d80 2d 70 6c 69 73 74 20 70 72 6f 63 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 76 65 63 74 6f 72 -plist.proc)))...........(vector
3da0 20 28 61 70 70 6c 79 20 27 66 6f 72 6d 61 74 20 22 25 73 3a 25 53 22 20 28 70 72 6f 63 65 73 73 .(apply.'format."%s:%S".(process
3dc0 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -contact.proc)).................
3de0 20 20 28 61 70 70 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 66 6f 72 ..(apply....................'for
3e00 6d 61 74 20 22 25 73 2e 25 73 2e 25 73 2e 25 73 2e 3a 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 mat."%s.%s.%s.%s.:%s"...........
3e20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 27 69 64 65 6e 74 69 74 79 20 28 70 72 6f 63 .........(mapcar.'identity.(proc
3e40 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 20 3a 6c 6f 63 61 6c 29 29 29 0a 20 20 20 20 20 ess-contact.proc.:local)))......
3e60 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 28 70 6c 69 73 74 .............(symbol-name.(plist
3e80 2d 67 65 74 20 70 6c 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 61 6e 64 6c 65 72 29 29 0a 20 -get.pl.:elnode-http-handler))..
3ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 65 74 20 70 6c 20 3a .................(plist-get.pl.:
3ec0 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 73 6f 75 72 63 65 29 29 29 29 29 29 0a 0a 28 64 65 66 elnode-http-resource))))))..(def
3ee0 69 6e 65 2d 64 65 72 69 76 65 64 2d 6d 6f 64 65 0a 20 20 20 20 65 6c 6e 6f 64 65 2d 64 65 66 65 ine-derived-mode.....elnode-defe
3f00 72 72 65 64 2d 6c 69 73 74 2d 6d 6f 64 65 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 6d 6f rred-list-mode.tabulated-list-mo
3f20 64 65 20 22 45 6c 6e 6f 64 65 20 64 65 66 65 72 65 64 20 71 75 65 75 65 20 6c 69 73 74 22 0a 20 de."Elnode.defered.queue.list"..
3f40 20 20 20 22 4d 61 6a 6f 72 20 6d 6f 64 65 20 66 6f 72 20 6c 69 73 74 69 6e 67 20 74 68 65 20 63 ..."Major.mode.for.listing.the.c
3f60 75 72 72 65 6e 74 6c 79 20 64 65 66 65 72 72 65 64 20 45 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 urrently.deferred.Elnode.handler
3f80 73 2e 22 0a 20 20 20 20 28 73 65 74 71 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 65 6e 74 s.".....(setq.tabulated-list-ent
3fa0 72 69 65 73 20 27 65 6c 6e 6f 64 65 2d 2d 6c 69 73 74 2d 64 65 66 65 72 72 65 64 73 29 0a 20 20 ries.'elnode--list-deferreds)...
3fc0 20 20 28 73 65 74 71 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 66 6f 72 6d 61 74 0a 20 20 ..(setq.tabulated-list-format...
3fe0 20 20 20 20 20 20 20 20 5b 28 22 41 64 64 72 65 73 73 22 20 31 35 20 6e 69 6c 29 0a 20 20 20 20 ........[("Address".15.nil).....
4000 20 20 20 20 20 20 20 28 22 4c 6f 63 61 6c 20 73 65 72 76 65 72 22 20 31 35 20 6e 69 6c 29 0a 20 .......("Local.server".15.nil)..
4020 20 20 20 20 20 20 20 20 20 20 28 22 48 61 6e 64 6c 65 72 20 66 75 6e 63 74 69 6f 6e 22 20 32 30 ..........("Handler.function".20
4040 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 22 52 65 73 6f 75 72 63 65 22 20 33 30 20 .nil)............("Resource".30.
4060 6e 69 6c 29 5d 29 0a 20 20 20 20 28 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 69 6e 69 74 2d nil)]).....(tabulated-list-init-
4080 68 65 61 64 65 72 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 header))..;;;###autoload.(defun.
40a0 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 2d 6c 69 73 74 20 28 26 6f 70 74 69 6f 6e 61 6c 20 elnode-deferred-list.(&optional.
40c0 70 72 65 66 69 78 29 0a 20 20 22 4c 69 73 74 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65 prefix)..."List.the.currently.de
40e0 66 65 72 72 65 64 20 45 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 73 2e 22 0a 20 20 28 69 6e 74 65 ferred.Elnode.handlers."...(inte
4100 72 61 63 74 69 76 65 20 22 50 22 29 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 ractive."P")...(with-current-buf
4120 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 65 6c 6e 6f 64 65 20 fer.(get-buffer-create."*elnode.
4140 64 65 66 65 72 72 65 64 73 2a 22 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 deferreds*").....(elnode-deferre
4160 64 2d 6c 69 73 74 2d 6d 6f 64 65 29 0a 20 20 20 20 28 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 d-list-mode).....(tabulated-list
4180 2d 70 72 69 6e 74 29 0a 20 20 20 20 28 69 66 20 70 72 65 66 69 78 0a 20 20 20 20 20 20 20 20 28 -print).....(if.prefix.........(
41a0 73 77 69 74 63 68 2d 74 6f 2d 62 75 66 66 65 72 2d 6f 74 68 65 72 2d 77 69 6e 64 6f 77 20 28 63 switch-to-buffer-other-window.(c
41c0 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 20 20 28 73 77 69 74 63 68 2d urrent-buffer)).........(switch-
41e0 74 6f 2d 62 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 29 29 0a 0a to-buffer.(current-buffer)))))..
4200 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 61 6c 69 61 73 20 27 6c 69 73 74 2d 65 ;;;###autoload.(defalias.'list-e
4220 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 73 20 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 lnode-deferreds.'elnode-deferred
4240 2d 6c 69 73 74 29 0a 0a 3b 3b 3b 20 53 65 72 76 65 72 20 6c 69 73 74 0a 0a 28 64 65 66 75 6e 20 -list)..;;;.Server.list..(defun.
4260 65 6c 6e 6f 64 65 2d 2d 6c 69 73 74 2d 73 65 72 76 65 72 73 20 28 29 0a 20 20 22 4c 69 73 74 20 elnode--list-servers.()..."List.
4280 74 68 65 20 63 75 72 72 65 6e 74 20 45 6c 6e 6f 64 65 20 73 65 72 76 65 72 73 20 66 6f 72 20 60 the.current.Elnode.servers.for.`
42a0 65 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65 27 2e 22 0a 20 20 28 6e 6f 66 6c 65 74 20 28 28 elnode-list-mode'."...(noflet.((
42c0 63 6c 6f 73 75 72 65 70 20 28 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 61 6e 64 20 28 66 75 closurep.(v)............(and.(fu
42e0 6e 63 74 69 6f 6e 70 20 76 29 20 28 6c 69 73 74 70 20 76 29 20 28 65 71 20 28 63 61 72 20 76 29 nctionp.v).(listp.v).(eq.(car.v)
4300 20 27 63 6c 6f 73 75 72 65 29 29 29 29 0a 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 28 70 6f 72 .'closure)))).....(loop.for.(por
4320 74 20 2e 20 73 6f 63 6b 65 74 2d 70 72 6f 63 29 20 69 6e 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 t...socket-proc).in.elnode-serve
4340 72 2d 73 6f 63 6b 65 74 0a 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 r-socket........collect.........
4360 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 70 6f 72 74 0a 20 20 20 20 20 20 20 20 20 20 .(list...........port...........
4380 28 6c 65 74 2a 20 28 28 66 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 73 6f 63 6b 65 74 2d 70 (let*.((fn.(process-get.socket-p
43a0 72 6f 63 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 61 6e 64 6c 65 72 29 29 0a 20 20 20 20 20 roc.:elnode-http-handler))......
43c0 20 20 20 20 20 20 20 20 20 20 20 20 28 64 6f 63 20 28 77 68 65 6e 20 28 66 75 6e 63 74 69 6f 6e ............(doc.(when.(function
43e0 70 20 66 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 p.fn).........................(d
4400 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6e 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ocumentation.fn)))).............
4420 28 76 65 63 74 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 (vector..............(format."%s
4440 22 20 70 6f 72 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 ".port)..............(cond......
4460 20 20 20 20 20 20 20 20 20 20 28 28 63 6c 6f 73 75 72 65 70 20 66 6e 29 20 28 66 6f 72 6d 61 74 ..........((closurep.fn).(format
4480 20 22 25 53 22 20 66 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 62 79 74 65 ."%S".fn))................((byte
44a0 2d 63 6f 64 65 2d 66 75 6e 63 74 69 6f 6e 2d 70 20 66 6e 29 20 28 66 6f 72 6d 61 74 20 22 62 79 -code-function-p.fn).(format."by
44c0 74 65 2d 63 6f 64 65 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 61 6e 64 20 te-code"))................((and.
44e0 28 6c 69 73 74 70 20 66 6e 29 28 65 71 20 28 63 61 72 20 66 6e 29 20 27 6c 61 6d 62 64 61 29 29 (listp.fn)(eq.(car.fn).'lambda))
4500 20 28 66 6f 72 6d 61 74 20 22 6c 61 6d 62 64 61 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 .(format."lambda")).............
4520 20 20 20 28 74 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 66 6e 29 29 29 0a 20 20 20 20 20 20 20 ...(t.(symbol-name.fn)))........
4540 20 20 20 20 20 20 28 6f 72 20 28 69 66 20 28 61 6e 64 20 64 6f 63 20 28 73 74 72 69 6e 67 2d 6d ......(or.(if.(and.doc.(string-m
4560 61 74 63 68 20 22 5e 5c 5c 28 5b 5e 5c 6e 5d 2b 5c 5c 29 22 20 64 6f 63 29 29 0a 20 20 20 20 20 atch."^\\([^\n]+\\)".doc))......
4580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 ................(match-string.1.
45a0 64 6f 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 64 6f doc)......................"no.do
45c0 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 22 29 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c cumentation."))))))))..(defun.el
45e0 6e 6f 64 65 2d 6c 69 73 74 73 2d 73 65 72 76 65 72 2d 66 69 6e 64 2d 68 61 6e 64 6c 65 72 20 28 node-lists-server-find-handler.(
4600 29 0a 20 20 22 46 69 6e 64 20 74 68 65 20 68 61 6e 64 6c 65 72 20 6d 65 6e 74 69 6f 6e 65 64 20 )..."Find.the.handler.mentioned.
4620 69 6e 20 74 68 65 20 68 61 6e 64 6c 65 72 20 6c 69 73 74 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 in.the.handler.list."...(interac
4640 74 69 76 65 29 0a 20 20 28 6c 65 74 20 28 28 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 20 28 62 75 tive)...(let.((line..........(bu
4660 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 ffer-substring-no-properties....
4680 20 20 20 20 20 20 20 28 6c 69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f 73 69 74 69 6f 6e 29 .......(line-beginning-position)
46a0 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 6e 65 2d 65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29 29 29 ...........(line-end-position)))
46c0 29 0a 20 20 20 20 28 77 68 65 6e 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5e 5b 30 2d 39 ).....(when.(string-match."^[0-9
46e0 5d 2b 20 2b 5c 5c 28 5b 5e 20 5d 2b 5c 5c 29 20 2e 2a 22 20 6c 69 6e 65 29 0a 20 20 20 20 20 20 ]+.+\\([^.]+\\)..*".line).......
4700 28 6c 65 74 20 28 28 68 61 6e 64 6c 65 72 2d 6e 61 6d 65 20 28 69 6e 74 65 72 6e 20 28 6d 61 74 (let.((handler-name.(intern.(mat
4720 63 68 2d 73 74 72 69 6e 67 20 31 20 6c 69 6e 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 77 69 ch-string.1.line)))).........(wi
4740 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 th-current-buffer.............(f
4760 69 6e 64 2d 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 73 79 6d 62 6f ind-file..............(or.(symbo
4780 6c 2d 66 69 6c 65 20 68 61 6e 64 6c 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 l-file.handler-name)............
47a0 20 20 20 20 20 20 28 65 72 72 6f 72 20 22 6e 6f 20 73 75 63 68 20 66 69 6c 65 22 29 29 29 0a 20 ......(error."no.such.file")))..
47c0 20 20 20 20 20 20 20 20 20 28 66 69 6e 64 2d 66 75 6e 63 74 69 6f 6e 20 68 61 6e 64 6c 65 72 2d .........(find-function.handler-
47e0 6e 61 6d 65 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6c 69 73 74 73 2d name))))))..(defun.elnode-lists-
4800 6b 69 6c 6c 2d 73 65 72 76 65 72 20 28 29 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 kill-server.()...(interactive)..
4820 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6c 69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f 73 69 .(goto-char.(line-beginning-posi
4840 74 69 6f 6e 29 29 0a 20 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 20 22 5e 5c 5c tion))...(re-search-forward."^\\
4860 28 5b 30 2d 39 5d 2b 5c 5c 29 22 20 28 6c 69 6e 65 2d 65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29 20 ([0-9]+\\)".(line-end-position).
4880 74 29 0a 20 20 28 6c 65 74 20 28 28 70 6f 72 74 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 t)...(let.((port.(string-to-numb
48a0 65 72 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 29 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f er.(match-string.1)))).....(elno
48c0 64 65 2d 73 74 6f 70 20 70 6f 72 74 29 0a 20 20 20 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 2d de-stop.port).....(let.((buffer-
48e0 72 65 61 64 2d 6f 6e 6c 79 20 6e 69 6c 29 29 0a 20 20 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 read-only.nil)).......(erase-buf
4900 66 65 72 29 0a 20 20 20 20 20 20 28 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 70 72 69 6e 74 fer).......(tabulated-list-print
4920 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 2d 64 65 72 69 76 65 64 2d 6d 6f 64 65 0a 20 20 20 20 65 ))))..(define-derived-mode.....e
4940 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 6d lnode-list-mode.tabulated-list-m
4960 6f 64 65 20 22 45 6c 6e 6f 64 65 20 73 65 72 76 65 72 20 6c 69 73 74 22 0a 20 20 20 20 22 4d 61 ode."Elnode.server.list"....."Ma
4980 6a 6f 72 20 6d 6f 64 65 20 66 6f 72 20 6c 69 73 74 69 6e 67 20 45 6c 6e 6f 64 65 20 73 65 72 76 jor.mode.for.listing.Elnode.serv
49a0 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 2e 22 0a 20 20 20 20 28 73 65 74 ers.currently.running.".....(set
49c0 71 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 65 6e 74 72 69 65 73 20 27 65 6c 6e 6f 64 65 q.tabulated-list-entries.'elnode
49e0 2d 2d 6c 69 73 74 2d 73 65 72 76 65 72 73 29 0a 20 20 20 20 28 64 65 66 69 6e 65 2d 6b 65 79 20 --list-servers).....(define-key.
4a00 65 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65 2d 6d 61 70 20 28 6b 62 64 20 22 5c 72 22 29 0a elnode-list-mode-map.(kbd."\r").
4a20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 6c 69 73 74 73 2d 73 65 72 76 65 72 2d 66 69 6e 64 2d ......'elnode-lists-server-find-
4a40 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 28 64 65 66 69 6e 65 2d 6b 65 79 20 65 6c 6e 6f 64 65 2d handler).....(define-key.elnode-
4a60 6c 69 73 74 2d 6d 6f 64 65 2d 6d 61 70 20 28 6b 62 64 20 22 6b 22 29 0a 20 20 20 20 20 20 27 65 list-mode-map.(kbd."k").......'e
4a80 6c 6e 6f 64 65 2d 6c 69 73 74 73 2d 6b 69 6c 6c 2d 73 65 72 76 65 72 29 0a 20 20 20 20 28 73 65 lnode-lists-kill-server).....(se
4aa0 74 71 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 tq.tabulated-list-format........
4ac0 20 20 20 5b 28 22 50 6f 72 74 22 20 31 30 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 ...[("Port".10.nil)............(
4ae0 22 48 61 6e 64 6c 65 72 20 66 75 6e 63 74 69 6f 6e 22 20 34 30 20 6e 69 6c 29 0a 20 20 20 20 20 "Handler.function".40.nil)......
4b00 20 20 20 20 20 20 28 22 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 22 20 38 30 20 6e 69 6c 29 5d 29 ......("Documentation".80.nil)])
4b20 0a 20 20 20 20 28 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 69 6e 69 74 2d 68 65 61 64 65 72 .....(tabulated-list-init-header
4b40 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 ))..;;;###autoload.(defun.elnode
4b60 2d 73 65 72 76 65 72 2d 6c 69 73 74 20 28 26 6f 70 74 69 6f 6e 61 6c 20 70 72 65 66 69 78 29 0a -server-list.(&optional.prefix).
4b80 20 20 22 4c 69 73 74 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 45 6c .."List.the.currently.running.El
4ba0 6e 6f 64 65 20 73 65 72 76 65 72 73 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 20 22 50 node.servers."...(interactive."P
4bc0 22 29 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 ")...(with-current-buffer.(get-b
4be0 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 65 6c 6e 6f 64 65 20 73 65 72 76 65 72 73 2a 22 29 uffer-create."*elnode.servers*")
4c00 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65 29 0a 20 20 20 20 28 74 61 62 .....(elnode-list-mode).....(tab
4c20 75 6c 61 74 65 64 2d 6c 69 73 74 2d 70 72 69 6e 74 29 0a 20 20 20 20 28 69 66 20 70 72 65 66 69 ulated-list-print).....(if.prefi
4c40 78 0a 20 20 20 20 20 20 20 20 28 73 77 69 74 63 68 2d 74 6f 2d 62 75 66 66 65 72 2d 6f 74 68 65 x.........(switch-to-buffer-othe
4c60 72 2d 77 69 6e 64 6f 77 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 r-window.(current-buffer))......
4c80 20 20 20 28 73 77 69 74 63 68 2d 74 6f 2d 62 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 ...(switch-to-buffer.(current-bu
4ca0 66 66 65 72 29 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 61 6c ffer)))))..;;;###autoload.(defal
4cc0 69 61 73 20 27 6c 69 73 74 2d 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 73 20 27 65 6c 6e 6f 64 65 ias.'list-elnode-servers.'elnode
4ce0 2d 73 65 72 76 65 72 2d 6c 69 73 74 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d -server-list)..(provide.'elnode-
4d00 6c 69 73 74 29 0a 0a 3b 3b 3b 20 65 6e 6c 6f 64 65 2d 6c 69 73 74 2e 65 6c 20 65 6e 64 73 20 68 list)..;;;.enlode-list.el.ends.h
4d20 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ere.............................
4d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4e00 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 6c 6f 67 2d elnode-20190702.1509/elnode-log-
4e20 6d 6f 64 65 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 mode.el.........................
4e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4e60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
4e80 30 30 30 31 34 33 31 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 35 35 35 32 00 20 30 00 00 00 0001431.00000000000.015552..0...
4ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4f00 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
4f20 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
4f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5000 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 6d 6f 64 65 2e 65 6c 20 2d 20 76 69 65 77 20 65 6c ;;;.elnode-log-mode.el.-.view.el
5020 6e 6f 64 65 20 6c 6f 67 20 66 69 6c 65 73 20 6e 69 63 65 6c 79 0a 0a 3b 3b 3b 23 23 23 61 75 74 node.log.files.nicely..;;;###aut
5040 6f 6c 6f 61 64 0a 28 64 65 66 69 6e 65 2d 67 65 6e 65 72 69 63 2d 6d 6f 64 65 20 27 65 6c 6e 6f oload.(define-generic-mode.'elno
5060 64 65 2d 6c 6f 67 2d 6d 6f 64 65 0a 20 20 6e 69 6c 20 3b 20 63 6f 6d 6d 65 6e 74 73 0a 20 20 6e de-log-mode...nil.;.comments...n
5080 69 6c 3b 20 6b 65 79 77 6f 72 64 73 0a 20 20 60 28 28 22 5e 5c 5c 28 5b 30 2d 39 3a 2d 5d 2b 5c il;.keywords...`(("^\\([0-9:-]+\
50a0 5c 29 20 2e 2a 22 20 31 20 27 28 66 61 63 65 20 27 28 69 74 61 6c 69 63 20 28 3a 66 6f 72 65 67 \)..*".1.'(face.'(italic.(:foreg
50c0 72 6f 75 6e 64 20 22 62 6c 75 65 22 29 29 29 29 0a 20 20 20 20 28 22 5e 5b 30 2d 39 3a 2d 5d 2b round."blue")))).....("^[0-9:-]+
50e0 20 5c 5c 28 5b 33 32 5d 5b 30 2d 39 5d 5c 5c 7b 32 5c 5c 7d 5c 5c 29 20 2e 2a 22 20 31 20 27 28 .\\([32][0-9]\\{2\\}\\)..*".1.'(
5100 66 61 63 65 20 27 28 3a 66 6f 72 65 67 72 6f 75 6e 64 20 22 67 72 65 65 6e 22 29 29 29 0a 20 20 face.'(:foreground."green")))...
5120 20 20 28 22 5e 5b 30 2d 39 3a 2d 5d 2b 20 5c 5c 28 34 5b 30 2d 39 5d 5c 5c 7b 32 5c 5c 7d 5c 5c ..("^[0-9:-]+.\\(4[0-9]\\{2\\}\\
5140 29 20 2e 2a 22 20 31 20 27 28 66 61 63 65 20 27 28 3a 66 6f 72 65 67 72 6f 75 6e 64 20 22 79 65 )..*".1.'(face.'(:foreground."ye
5160 6c 6c 6f 77 22 29 29 29 0a 20 20 20 20 28 22 5e 5b 30 2d 39 3a 2d 5d 2b 20 5c 5c 28 35 5b 30 2d llow"))).....("^[0-9:-]+.\\(5[0-
5180 39 5d 5c 5c 7b 32 5c 5c 7d 5c 5c 29 20 2e 2a 22 20 31 20 27 28 66 61 63 65 20 27 28 3a 66 6f 72 9]\\{2\\}\\)..*".1.'(face.'(:for
51a0 65 67 72 6f 75 6e 64 20 22 72 65 64 22 29 29 29 0a 20 20 20 20 28 22 5e 2e 2a 20 5c 5c 28 47 45 eground."red"))).....("^.*.\\(GE
51c0 54 5c 5c 7c 50 4f 53 54 5c 5c 7c 48 45 41 44 5c 5c 7c 44 45 4c 45 54 45 5c 5c 7c 54 52 41 43 45 T\\|POST\\|HEAD\\|DELETE\\|TRACE
51e0 5c 5c 29 22 20 31 20 27 28 66 61 63 65 20 27 28 62 6f 6c 64 20 28 3a 66 6f 72 65 67 72 6f 75 6e \\)".1.'(face.'(bold.(:foregroun
5200 64 20 22 70 75 72 70 6c 65 22 29 29 29 29 29 20 3b 20 66 6f 6e 74 2d 6c 6f 63 6b 20 6c 69 73 74 d."purple"))))).;.font-lock.list
5220 0a 20 20 6e 69 6c 0a 20 20 27 28 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 3b 3b 28 75 ...nil...'((lambda.().......;;(u
5240 73 65 2d 6c 6f 63 61 6c 2d 6d 61 70 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 6d 6f 64 65 2d 6d 61 70 se-local-map.elnode-log-mode-map
5260 29 0a 20 20 20 20 20 20 28 73 65 74 71 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 27 ).......(setq.buffer-read-only.'
5280 74 29 0a 20 20 20 20 20 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 6f 64 69 66 69 65 64 2d 70 20 t).......(set-buffer-modified-p.
52a0 6e 69 6c 29 0a 20 20 20 20 20 20 29 29 0a 20 20 22 45 6c 6e 6f 64 65 20 6c 6f 67 20 76 69 65 77 nil).......))..."Elnode.log.view
52c0 69 6e 67 20 6d 6f 64 65 2e 0a 0a 46 6f 72 20 76 69 65 77 69 6e 67 20 61 63 63 65 73 73 20 6c 6f ing.mode...For.viewing.access.lo
52e0 67 20 66 69 6c 65 73 20 66 72 6f 6d 20 45 6c 6e 6f 64 65 2e 22 29 0a 0a 3b 3b 3b 20 65 6c 6e 6f g.files.from.Elnode.")..;;;.elno
5300 64 65 2d 6c 6f 67 2d 6d 6f 64 65 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a 00 00 00 00 00 00 00 de-log-mode.el.ends.here........
5320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
53a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
53c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
53e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5400 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 70 6b 67 2e elnode-20190702.1509/elnode-pkg.
5420 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 el..............................
5440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5460 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
5480 30 30 30 30 37 37 34 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 34 36 34 31 00 20 30 00 00 00 0000774.00000000000.014641..0...
54a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
54c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
54e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5500 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
5520 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
5540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
55a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
55c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
55e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5600 3b 3b 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63 6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63 ;;.-*-.no-byte-compile:.t;.lexic
5620 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20 2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b al-binding:.nil.-*-.(define-pack
5640 61 67 65 20 22 65 6c 6e 6f 64 65 22 20 22 32 30 31 39 30 37 30 32 2e 31 35 30 39 22 0a 20 20 22 age."elnode"."20190702.1509"..."
5660 54 68 65 20 45 6d 61 63 73 20 77 65 62 73 65 72 76 65 72 2e 22 0a 20 20 27 28 28 77 65 62 20 20 The.Emacs.webserver."...'((web..
5680 20 20 22 30 2e 31 2e 34 22 29 0a 20 20 20 20 28 64 61 73 68 20 20 20 22 31 2e 31 2e 30 22 29 0a .."0.1.4").....(dash..."1.1.0").
56a0 20 20 20 20 28 6e 6f 66 6c 65 74 20 22 30 2e 30 2e 37 22 29 0a 20 20 20 20 28 73 20 20 20 20 20 ....(noflet."0.0.7").....(s.....
56c0 20 22 31 2e 35 2e 30 22 29 0a 20 20 20 20 28 63 72 65 6f 6c 65 20 22 30 2e 38 2e 31 34 22 29 0a ."1.5.0").....(creole."0.8.14").
56e0 20 20 20 20 28 66 61 6b 69 72 20 20 22 30 2e 31 2e 36 22 29 0a 20 20 20 20 28 64 62 20 20 20 20 ....(fakir.."0.1.6").....(db....
5700 20 22 30 2e 30 2e 35 22 29 0a 20 20 20 20 28 6b 76 20 20 20 20 20 22 30 2e 30 2e 31 37 22 29 29 ."0.0.5").....(kv....."0.0.17"))
5720 0a 20 20 3a 75 72 6c 20 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6a 63 61 77 ...:url."https://github.com/jcaw
5740 2f 65 6c 6e 6f 64 65 22 0a 20 20 3a 63 6f 6d 6d 69 74 20 22 32 39 65 66 30 66 35 31 61 36 35 61 /elnode"...:commit."29ef0f51a65a
5760 32 34 66 63 61 37 66 64 63 64 62 34 31 34 30 64 32 65 34 35 35 36 65 34 62 62 32 39 22 0a 20 20 24fca7fdcdb4140d2e4556e4bb29"...
5780 3a 72 65 76 64 65 73 63 20 22 32 39 65 66 30 66 35 31 61 36 35 61 22 0a 20 20 3a 6b 65 79 77 6f :revdesc."29ef0f51a65a"...:keywo
57a0 72 64 73 20 27 28 22 6c 69 73 70 22 20 22 68 74 74 70 22 20 22 68 79 70 65 72 6d 65 64 69 61 22 rds.'("lisp"."http"."hypermedia"
57c0 29 0a 20 20 3a 61 75 74 68 6f 72 73 20 27 28 28 22 4e 69 63 20 46 65 72 72 69 65 72 22 20 2e 20 )...:authors.'(("Nic.Ferrier"...
57e0 22 6e 66 65 72 72 69 65 72 40 66 65 72 72 69 65 72 2e 6d 65 2e 75 6b 22 29 29 29 0a 00 00 00 00 "nferrier@ferrier.me.uk"))).....
5800 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 70 72 6f 78 elnode-20190702.1509/elnode-prox
5820 79 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 y.el............................
5840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5860 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
5880 30 30 32 32 31 33 36 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 35 32 33 35 00 20 30 00 00 00 0022136.00000000000.015235..0...
58a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
58c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
58e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5900 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
5920 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
5940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
59a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
59c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
59e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5a00 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2e 65 6c 20 2d 2d 20 70 72 6f 78 79 69 6e 67 20 ;;;.elnode-proxy.el.--.proxying.
5a20 77 69 74 68 20 65 6c 6e 6f 64 65 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a with.elnode.-*-.lexical-binding:
5a40 20 74 20 2d 2a 2d 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 54 68 69 73 .t.-*-..;;;.Commentary:..;;.This
5a60 20 69 73 20 73 74 75 66 66 20 74 6f 20 6c 65 74 20 79 6f 75 20 6d 61 6b 65 20 70 72 6f 78 79 20 .is.stuff.to.let.you.make.proxy.
5a80 73 65 72 76 65 72 73 20 77 69 74 68 20 45 6c 6e 6f 64 65 2e 0a 0a 0a 3b 3b 3b 20 43 6f 64 65 3a servers.with.Elnode....;;;.Code:
5aa0 0a 0a 28 72 65 71 75 69 72 65 20 27 73 29 0a 28 72 65 71 75 69 72 65 20 27 64 61 73 68 29 0a 28 ..(require.'s).(require.'dash).(
5ac0 72 65 71 75 69 72 65 20 27 77 65 62 29 0a 28 72 65 71 75 69 72 65 20 27 65 6c 6e 6f 64 65 29 0a require.'web).(require.'elnode).
5ae0 28 72 65 71 75 69 72 65 20 27 6b 76 29 0a 28 72 65 71 75 69 72 65 20 27 63 6c 29 20 3b 20 66 6f (require.'kv).(require.'cl).;.fo
5b00 72 20 64 65 73 74 72 75 63 74 75 72 69 6e 67 2d 62 69 6e 64 0a 0a 28 64 65 66 75 6e 20 65 6c 6e r.destructuring-bind..(defun.eln
5b20 6f 64 65 2d 2d 77 65 62 2d 3e 65 6c 6e 6f 64 65 2d 68 64 72 20 28 68 64 72 20 68 74 74 70 63 6f ode--web->elnode-hdr.(hdr.httpco
5b40 6e 29 0a 20 20 22 53 65 6e 64 20 74 68 65 20 48 44 52 20 66 72 6f 6d 20 74 68 65 20 77 65 62 20 n)..."Send.the.HDR.from.the.web.
5b60 48 54 54 50 20 72 65 71 75 65 73 74 20 74 6f 20 45 6c 6e 6f 64 65 27 73 20 48 54 54 50 43 4f 4e HTTP.request.to.Elnode's.HTTPCON
5b80 2e 22 0a 20 20 28 6c 65 74 20 28 28 68 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 28 2d 66 ."...(let.((headers..........(-f
5ba0 69 6c 74 65 72 0a 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 64 72 2d 70 61 69 ilter...........(lambda.(hdr-pai
5bc0 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 6d 65 6d 62 65 72 0a 20 r).............(unless.(member..
5be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 6f 77 6e 63 61 73 65 20 28 73 ....................(downcase.(s
5c00 79 6d 62 6f 6c 2d 6e 61 6d 65 20 28 63 61 72 20 68 64 72 2d 70 61 69 72 29 29 29 0a 20 20 20 20 ymbol-name.(car.hdr-pair))).....
5c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 22 73 74 61 74 75 73 2d 63 6f 64 65 22 .................'("status-code"
5c40 20 22 73 74 61 74 75 73 2d 73 74 72 69 6e 67 22 20 22 73 74 61 74 75 73 2d 76 65 72 73 69 6f 6e ."status-string"."status-version
5c60 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 73 79 6d 62 6f 6c 2d "))...............(cons.(symbol-
5c80 6e 61 6d 65 20 28 63 61 72 20 68 64 72 2d 70 61 69 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 name.(car.hdr-pair))............
5ca0 20 20 20 20 20 20 20 20 20 28 63 64 72 20 68 64 72 2d 70 61 69 72 29 29 29 29 0a 20 20 20 20 20 .........(cdr.hdr-pair))))......
5cc0 20 20 20 20 20 28 6b 76 68 61 73 68 2d 3e 61 6c 69 73 74 20 68 64 72 29 29 29 29 0a 20 20 20 20 .....(kvhash->alist.hdr)))).....
5ce0 28 61 70 70 6c 79 20 27 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 20 68 74 74 70 63 (apply.'elnode-http-start..httpc
5d00 6f 6e 20 32 30 30 20 68 65 61 64 65 72 73 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 on.200.headers)))..(defun.elnode
5d20 2d 2d 70 72 6f 78 79 2d 78 2d 66 6f 72 77 61 72 64 65 64 2d 66 6f 72 20 28 68 74 74 70 63 6f 6e --proxy-x-forwarded-for.(httpcon
5d40 29 0a 20 20 22 52 65 74 75 72 6e 20 61 6e 20 58 2d 46 6f 72 77 61 64 65 64 2d 46 6f 72 20 68 65 )..."Return.an.X-Forwaded-For.he
5d60 61 64 65 72 2e 22 0a 20 20 28 6c 65 74 20 28 28 69 70 61 64 64 72 20 28 65 6c 6e 6f 64 65 2d 67 ader."...(let.((ipaddr.(elnode-g
5d80 65 74 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 et-remote-ipaddr.httpcon))......
5da0 20 20 20 28 68 64 72 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 70 ...(hdr.(elnode-http-header.http
5dc0 63 6f 6e 20 22 58 2d 46 6f 72 77 61 72 64 65 64 2d 46 6f 72 22 29 29 29 0a 20 20 20 20 28 69 66 con."X-Forwarded-For"))).....(if
5de0 20 68 64 72 0a 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 68 64 72 20 28 66 6f 72 6d 61 74 .hdr.........(concat.hdr.(format
5e00 20 22 2c 20 25 73 22 20 69 70 61 64 64 72 29 29 0a 20 20 20 20 20 20 20 20 69 70 61 64 64 72 29 .",.%s".ipaddr)).........ipaddr)
5e20 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 64 6f 20 28 68 74 74 70 ))..(defun.elnode-proxy-do.(http
5e40 63 6f 6e 20 75 72 6c 29 0a 20 20 22 44 6f 20 70 72 6f 78 79 69 6e 67 20 74 6f 20 55 52 4c 20 6f con.url)..."Do.proxying.to.URL.o
5e60 6e 20 48 54 54 50 43 4f 4e 2e 0a 0a 41 20 72 65 71 75 65 73 74 20 69 73 20 6d 61 64 65 20 74 6f n.HTTPCON...A.request.is.made.to
5e80 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 55 52 4c 2e 20 20 54 68 65 20 55 52 4c 20 6d 61 79 .the.specified.URL...The.URL.may
5ea0 20 69 6e 63 6c 75 64 65 0a 60 73 2d 66 6f 72 6d 61 74 27 20 70 61 74 74 65 72 6e 73 20 66 6f 72 .include.`s-format'.patterns.for
5ec0 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 61 6e 79 20 6f 66 20 74 68 65 73 65 .interpolation.with.any.of.these
5ee0 0a 76 61 72 69 61 62 6c 65 73 3a 0a 0a 20 70 61 74 68 20 2d 20 74 68 65 20 70 61 74 68 20 66 72 .variables:...path.-.the.path.fr
5f00 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 0a 20 70 61 72 61 6d 73 20 2d 20 74 68 65 20 70 61 72 om.the.HTTPCON..params.-.the.par
5f20 61 6d 73 20 66 72 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 0a 20 71 75 65 72 79 20 2d 20 74 68 ams.from.the.HTTPCON..query.-.th
5f40 65 20 70 61 72 61 6d 73 20 66 72 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 20 61 73 20 61 20 71 e.params.from.the.HTTPCON.as.a.q
5f60 75 65 72 79 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 5c 22 68 74 74 70 3a 2f 2f 6d 79 73 65 uery..For.example,.\"http://myse
5f80 72 76 65 72 3a 38 30 30 30 24 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 5c 22 20 77 6f 75 6c 64 rver:8000${path}${query}\".would
5fa0 20 63 61 75 73 65 0a 5c 22 6d 79 73 65 72 76 65 72 5c 22 20 6f 6e 20 70 6f 72 74 20 38 30 30 30 .cause.\"myserver\".on.port.8000
5fc0 20 74 6f 20 67 65 74 20 74 68 65 20 71 75 65 72 79 20 66 72 6f 6d 20 74 68 65 20 75 73 65 72 20 .to.get.the.query.from.the.user.
5fe0 77 69 74 68 20 74 68 65 0a 73 70 65 63 69 66 69 65 64 20 70 61 74 68 20 61 6e 64 20 71 75 65 72 with.the.specified.path.and.quer
6000 79 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 6d 65 74 68 6f 64 20 28 65 6c 6e 6f 64 65 2d 68 74 74 y."...(let*.((method.(elnode-htt
6020 70 2d 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 74 p-method.httpcon))..........(pat
6040 68 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 h.(elnode-http-pathinfo.httpcon)
6060 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 72 61 6d 73 20 28 77 65 62 2d 74 6f 2d 71 75 65 72 79 )..........(params.(web-to-query
6080 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 -string...................(elnod
60a0 65 2d 68 74 74 70 2d 70 61 72 61 6d 73 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 e-http-params.httpcon)))........
60c0 20 20 28 70 61 72 61 6d 73 2d 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 0a ..(params-alist...........(list.
60e0 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 22 70 61 74 68 22 20 70 61 74 68 29 0a 20 20 ...........(cons."path".path)...
6100 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 22 71 75 65 72 79 22 20 28 69 66 20 28 73 2d 62 6c .........(cons."query".(if.(s-bl
6120 61 6e 6b 3f 20 70 61 72 61 6d 73 29 20 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ank?.params)."".................
6140 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 22 3f 22 20 70 61 72 61 6d 73 29 .............(concat."?".params)
6160 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 22 70 61 72 61 6d 73 22 20 70 61 72 ))............(cons."params".par
6180 61 6d 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 60 61 67 65 74 27 20 68 65 72 65 20 69 ams)))..........;;.`aget'.here.i
61a0 73 20 6a 75 73 74 20 61 20 73 79 6d 62 6f 6c 2c 20 6e 6f 74 20 61 20 66 75 6e 63 74 69 6f 6e 2e s.just.a.symbol,.not.a.function.
61c0 20 49 74 20 72 65 66 65 72 73 20 74 6f 20 61 6e 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 69 6e 74 .It.refers.to.an..........;;.int
61e0 65 72 6e 61 6c 20 73 2d 2d 61 67 65 74 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 20 20 20 20 20 20 ernal.s--aget.function..........
6200 20 28 77 65 62 2d 75 72 6c 20 28 73 2d 66 6f 72 6d 61 74 20 75 72 6c 20 27 61 67 65 74 20 70 61 .(web-url.(s-format.url.'aget.pa
6220 72 61 6d 73 2d 61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 68 64 72 2d 73 65 6e 74 29 0a rams-alist))..........hdr-sent).
6240 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 0a 20 20 20 20 20 20 20 68 74 74 70 63 6f ......(process-put........httpco
6260 6e 0a 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 0a 20 n........:elnode-child-process..
6280 20 20 20 20 20 20 28 77 65 62 2d 68 74 74 70 2d 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 6d 65 74 ......(web-http-call.........met
62a0 68 6f 64 0a 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 20 68 64 72 20 64 hod.........(lambda.(httpc.hdr.d
62c0 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 68 64 72 2d 73 65 6e 74 0a ata)...........(unless.hdr-sent.
62e0 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 77 65 62 2d 3e 65 6c 6e 6f 64 65 ............(elnode--web->elnode
6300 2d 68 64 72 20 68 64 72 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 -hdr.hdr.httpcon).............(s
6320 65 74 71 20 68 64 72 2d 73 65 6e 74 20 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 etq.hdr-sent.t))...........(if.(
6340 65 71 20 64 61 74 61 20 3a 64 6f 6e 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c eq.data.:done)...............(el
6360 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 node-http-return.httpcon).......
6380 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 ........(elnode-http-send-string
63a0 20 68 74 74 70 63 6f 6e 20 64 61 74 61 29 29 29 0a 20 20 20 20 20 20 20 20 3a 6d 6f 64 65 20 27 .httpcon.data))).........:mode.'
63c0 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 3a 75 72 6c 20 77 65 62 2d 75 72 6c 0a 20 20 20 20 stream.........:url.web-url.....
63e0 20 20 20 20 3a 65 78 74 72 61 2d 68 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 60 28 28 22 58 ....:extra-headers.........`(("X
6400 2d 46 6f 72 77 61 72 64 65 64 2d 46 6f 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 2e 20 2c 28 65 -Forwarded-For"..............,(e
6420 6c 6e 6f 64 65 2d 2d 70 72 6f 78 79 2d 78 2d 66 6f 72 77 61 72 64 65 64 2d 66 6f 72 20 68 74 74 lnode--proxy-x-forwarded-for.htt
6440 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 22 58 2d 50 72 6f 78 79 2d 43 6c 69 65 6e pcon))...........("X-Proxy-Clien
6460 74 22 20 2e 20 22 65 6c 6e 6f 64 65 2f 77 65 62 22 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 t"..."elnode/web"))))))..(defun.
6480 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 62 6f 75 6e 63 65 20 28 68 74 74 70 63 6f 6e 20 68 61 6e elnode-proxy-bounce.(httpcon.han
64a0 64 6c 65 72 20 68 6f 73 74 2d 70 6f 72 74 29 0a 20 20 22 42 6f 75 6e 63 65 20 74 68 69 73 20 72 dler.host-port)..."Bounce.this.r
64c0 65 71 75 65 73 74 2e 0a 0a 49 66 20 48 54 54 50 43 4f 4e 20 69 73 20 6e 6f 74 20 61 20 72 65 71 equest...If.HTTPCON.is.not.a.req
64e0 75 65 73 74 20 66 6f 72 20 70 6f 72 74 20 48 4f 53 54 2d 50 4f 52 54 20 74 68 65 6e 20 62 6f 75 uest.for.port.HOST-PORT.then.bou
6500 6e 63 65 20 74 6f 0a 48 4f 53 54 2d 50 4f 52 54 2c 20 65 6c 73 65 20 69 74 20 69 73 20 61 20 72 nce.to.HOST-PORT,.else.it.is.a.r
6520 65 71 75 65 73 74 20 6f 6e 20 48 4f 53 54 2d 50 4f 52 54 20 73 6f 20 70 61 73 73 20 74 6f 20 48 equest.on.HOST-PORT.so.pass.to.H
6540 41 4e 44 4c 45 52 2e 22 0a 20 20 28 64 65 73 74 72 75 63 74 75 72 69 6e 67 2d 62 69 6e 64 20 28 ANDLER."...(destructuring-bind.(
6560 68 6f 73 74 6e 61 6d 65 20 74 68 69 73 2d 70 6f 72 74 29 0a 20 20 20 20 20 20 28 73 70 6c 69 74 hostname.this-port).......(split
6580 2d 73 74 72 69 6e 67 20 28 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 69 6e 66 6f 20 68 74 74 70 -string.(elnode-server-info.http
65a0 63 6f 6e 29 20 22 3a 22 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 28 66 6f 72 6d 61 74 con).":").....(if.(equal.(format
65c0 20 22 25 73 22 20 74 68 69 73 2d 70 6f 72 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ."%s".this-port)................
65e0 28 66 6f 72 6d 61 74 20 22 25 73 22 20 68 6f 73 74 2d 70 6f 72 74 29 29 0a 20 20 20 20 20 20 20 (format."%s".host-port))........
6600 20 28 66 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65 72 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 .(funcall.handler.httpcon)......
6620 20 20 20 28 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 64 6f 0a 20 20 20 20 20 20 20 20 20 68 74 74 ...(elnode-proxy-do..........htt
6640 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 68 74 74 70 3a 2f 2f 25 73 pcon..........(format."http://%s
6660 3a 25 73 24 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 22 20 68 6f 73 74 6e 61 6d 65 20 68 6f 73 :%s${path}${query}".hostname.hos
6680 74 2d 70 6f 72 74 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 t-port)))))..(defun.elnode-proxy
66a0 2d 6d 61 6b 65 2d 62 6f 75 6e 63 65 72 20 28 68 61 6e 64 6c 65 72 20 68 6f 73 74 2d 70 6f 72 74 -make-bouncer.(handler.host-port
66c0 29 0a 20 20 22 4d 61 6b 65 20 61 20 70 72 6f 78 79 20 62 6f 75 6e 63 65 72 20 68 61 6e 64 6c 65 )..."Make.a.proxy.bouncer.handle
66e0 72 20 66 6f 72 20 48 41 4e 44 4c 45 52 20 70 72 6f 63 20 6f 6e 20 4f 54 48 45 52 2d 50 4f 52 54 r.for.HANDLER.proc.on.OTHER-PORT
6700 2e 0a 0a 54 68 69 73 20 69 73 20 66 6f 72 20 6d 61 6e 61 67 69 6e 67 20 70 72 6f 78 79 20 63 61 ...This.is.for.managing.proxy.ca
6720 6c 6c 73 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 68 61 6e 64 6c 65 72 0a 72 lls...If.the.resulting.handler.r
6740 65 63 65 69 76 65 73 20 61 20 63 61 6c 6c 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20 74 68 61 6e 20 eceives.a.call.on.anything.than.
6760 48 4f 53 54 2d 50 4f 52 54 20 74 68 65 6e 20 69 74 20 70 72 6f 78 69 65 73 20 74 68 65 0a 72 65 HOST-PORT.then.it.proxies.the.re
6780 71 75 65 73 74 20 74 6f 20 74 68 65 20 48 4f 53 54 2d 50 4f 52 54 2e 20 20 4f 74 68 65 72 77 69 quest.to.the.HOST-PORT...Otherwi
67a0 73 65 20 69 74 20 6a 75 73 74 20 68 61 6e 64 6c 65 73 20 74 68 65 0a 72 65 71 75 65 73 74 2e 22 se.it.just.handles.the.request."
67c0 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 ...(lambda.(httpcon).....(elnode
67e0 2d 70 72 6f 78 79 2d 62 6f 75 6e 63 65 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65 72 20 68 6f -proxy-bounce.httpcon.handler.ho
6800 73 74 2d 70 6f 72 74 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 st-port)))..;;;###autoload.(defu
6820 6e 20 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 20 28 75 72 6c 29 0a 20 20 22 4d 61 6b n.elnode-make-proxy.(url)..."Mak
6840 65 20 61 20 70 72 6f 78 79 20 68 61 6e 64 6c 65 72 20 73 65 6e 64 69 6e 67 20 72 65 71 75 65 73 e.a.proxy.handler.sending.reques
6860 74 73 20 74 6f 20 55 52 4c 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 64 6f ts.to.URL...See.`elnode-proxy-do
6880 27 20 66 6f 72 20 68 6f 77 20 55 52 4c 20 69 73 20 68 61 6e 64 6c 65 64 2e 0a 0a 41 6e 20 48 54 '.for.how.URL.is.handled...An.HT
68a0 54 50 20 75 73 65 72 2d 61 67 65 6e 74 20 77 69 74 68 20 61 20 73 70 65 63 69 66 69 65 64 20 48 TP.user-agent.with.a.specified.H
68c0 54 54 50 20 70 72 6f 78 79 20 73 65 6e 64 73 20 74 68 65 20 66 75 6c 6c 0a 72 65 71 75 65 73 74 TTP.proxy.sends.the.full.request
68e0 20 61 73 20 74 68 65 20 70 61 74 68 2c 20 65 67 3a 0a 0a 20 20 47 45 54 20 68 74 74 70 3a 2f 2f .as.the.path,.eg:....GET.http://
6900 73 6f 6d 65 68 6f 73 74 3a 70 6f 72 74 2f 70 61 74 68 3f 71 75 65 72 79 20 48 54 54 50 2f 31 2e somehost:port/path?query.HTTP/1.
6920 31 0a 0a 53 6f 20 60 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 27 20 63 61 6e 20 6d 61 1..So.`elnode-make-proxy'.can.ma
6940 6b 65 20 28 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 29 20 61 20 66 75 6c 6c 20 70 72 6f 78 79 ke.(something.like).a.full.proxy
6960 0a 73 65 72 76 65 72 20 77 69 74 68 3a 0a 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 .server.with:....(elnode-make-pr
6980 6f 78 79 20 5c 22 24 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 5c 22 29 0a 0a 54 68 65 72 65 20 oxy.\"${path}${query}\")..There.
69a0 6d 61 79 20 62 65 20 6d 61 6e 79 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 20 66 75 6c 6c 20 70 may.be.many.things.that.a.full.p
69c0 72 6f 78 79 20 64 6f 65 73 20 74 68 61 74 20 74 68 69 73 20 64 6f 65 73 0a 6e 6f 74 20 64 6f 20 roxy.does.that.this.does.not.do.
69e0 68 6f 77 65 76 65 72 2e 0a 0a 52 65 76 65 72 73 65 20 70 72 6f 78 79 69 6e 67 20 69 73 20 61 20 however...Reverse.proxying.is.a.
6a00 73 69 6d 70 6c 65 72 20 61 6e 64 20 70 65 72 68 61 70 73 20 6d 6f 72 65 20 75 73 65 66 75 6c 2e simpler.and.perhaps.more.useful.
6a20 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f 64 "...(lambda.(httpcon).....(elnod
6a40 65 2d 70 72 6f 78 79 2d 64 6f 20 68 74 74 70 63 6f 6e 20 75 72 6c 29 29 29 0a 0a 28 64 65 66 76 e-proxy-do.httpcon.url)))..(defv
6a60 61 72 20 65 6c 6e 6f 64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76 65 72 2d 70 6f 72 74 2d 68 69 73 ar.elnode--proxy-server-port-his
6a80 74 6f 72 79 20 6e 69 6c 0a 20 20 22 48 69 73 74 6f 72 79 20 76 61 72 69 61 62 6c 65 20 75 73 65 tory.nil..."History.variable.use
6aa0 64 20 66 6f 72 20 70 72 6f 78 79 20 73 65 72 76 65 72 20 70 6f 72 74 20 72 65 61 64 69 6e 67 2e d.for.proxy.server.port.reading.
6ac0 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76 65 72 ")..(defvar.elnode--proxy-server
6ae0 2d 67 6f 74 6f 2d 75 72 6c 2d 68 69 73 74 6f 72 79 20 6e 69 6c 0a 20 20 22 48 69 73 74 6f 72 79 -goto-url-history.nil..."History
6b00 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 70 72 6f 78 79 20 67 6f 74 6f 20 75 72 .variable.used.for.proxy.goto.ur
6b20 6c 73 2e 22 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e ls.")..;;;###autoload.(defun.eln
6b40 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 2d 73 65 72 76 65 72 20 28 70 6f 72 74 20 26 6f 70 74 ode-make-proxy-server.(port.&opt
6b60 69 6f 6e 61 6c 20 75 72 6c 29 0a 20 20 22 4d 61 6b 65 20 61 20 70 72 6f 78 79 20 73 65 72 76 65 ional.url)..."Make.a.proxy.serve
6b80 72 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 50 4f 52 54 2e 0a 0a 4f 70 74 69 6f 6e r.on.the.specified.PORT...Option
6ba0 61 6c 6c 79 20 68 61 76 65 20 72 65 71 75 65 73 74 73 20 67 6f 20 74 6f 20 55 52 4c 2e 20 20 49 ally.have.requests.go.to.URL...I
6bc0 66 20 55 52 4c 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 69 74 0a 69 73 20 5c 22 24 f.URL.is.not.specified.it.is.\"$
6be0 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 5c 22 2e 0a 0a 49 6e 74 65 72 61 63 74 69 76 65 6c 79 {path}${query}\"...Interactively
6c00 20 75 73 65 20 43 2d 75 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 55 52 4c 2e 22 0a 20 20 .use.C-u.to.specify.the.URL."...
6c20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20 20 28 6c 69 73 74 0a 20 20 20 20 28 72 65 61 64 2d (interactive....(list.....(read-
6c40 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66 65 72 0a 20 20 20 20 20 22 70 72 6f 78 79 20 73 65 72 76 from-minibuffer......"proxy.serv
6c60 65 72 20 70 6f 72 74 3a 22 20 6e 69 6c 20 6e 69 6c 20 6e 69 6c 0a 20 20 20 20 20 27 65 6c 6e 6f er.port:".nil.nil.nil......'elno
6c80 64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76 65 72 2d 70 6f 72 74 2d 68 69 73 74 6f 72 79 29 0a 20 de--proxy-server-port-history)..
6ca0 20 20 20 28 69 66 20 63 75 72 72 65 6e 74 2d 70 72 65 66 69 78 2d 61 72 67 0a 20 20 20 20 20 20 ...(if.current-prefix-arg.......
6cc0 20 20 28 72 65 61 64 2d 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 ..(read-from-minibuffer.........
6ce0 20 22 70 72 6f 78 79 20 73 65 72 76 65 72 20 67 6f 74 6f 20 75 72 6c 3a 22 20 22 24 7b 70 61 74 ."proxy.server.goto.url:"."${pat
6d00 68 7d 24 7b 71 75 65 72 79 7d 22 20 6e 69 6c 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 27 65 6c h}${query}".nil.nil..........'el
6d20 6e 6f 64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76 65 72 2d 67 6f 74 6f 2d 75 72 6c 2d 68 69 73 74 node--proxy-server-goto-url-hist
6d40 6f 72 79 0a 20 20 20 20 20 20 20 20 20 22 24 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 22 29 0a ory.........."${path}${query}").
6d60 20 20 20 20 20 20 20 20 22 24 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 22 29 29 29 0a 20 20 28 ........"${path}${query}")))...(
6d80 6c 65 74 20 28 28 70 72 6f 78 79 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 28 65 6c let.((proxy-handler..........(el
6da0 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 20 28 6f 72 20 75 72 6c 20 22 24 7b 70 61 74 68 7d node-make-proxy.(or.url."${path}
6dc0 24 7b 71 75 65 72 79 7d 22 29 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 74 61 72 74 20 ${query}")))).....(elnode-start.
6de0 70 72 6f 78 79 2d 68 61 6e 64 6c 65 72 20 3a 70 6f 72 74 20 70 6f 72 74 29 29 29 0a 0a 0a 28 64 proxy-handler.:port.port)))...(d
6e00 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 70 72 6f 78 79 2d 72 65 64 69 72 65 63 74 20 efun.elnode-send-proxy-redirect.
6e20 28 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f 6e 29 0a 20 20 22 53 65 6e 64 20 62 61 63 6b 20 (httpcon.location)..."Send.back.
6e40 61 20 70 72 6f 78 79 20 72 65 64 69 72 65 63 74 20 74 6f 20 4c 4f 43 41 54 49 4f 4e 2e 0a 0a 41 a.proxy.redirect.to.LOCATION...A
6e60 20 70 72 6f 78 79 20 72 65 64 69 72 65 63 74 20 69 73 20 73 65 74 74 69 6e 67 20 5c 22 58 2d 41 .proxy.redirect.is.setting.\"X-A
6e80 63 63 65 6c 2d 52 65 64 69 72 65 63 74 5c 22 20 74 6f 20 61 20 6c 6f 63 61 74 69 6f 6e 2c 0a 70 ccel-Redirect\".to.a.location,.p
6ea0 72 6f 78 69 65 73 20 63 61 6e 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 68 65 61 64 65 72 20 roxies.can.interpret.the.header.
6ec0 77 69 74 68 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20 6f 6e 6c 79 0a with.some.kind.of.internal.only.
6ee0 55 52 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 64 6f 20 URL.resolution.mechanism.and.do.
6f00 64 69 73 70 61 74 63 68 20 74 6f 20 61 6e 6f 74 68 65 72 20 62 61 63 6b 65 6e 64 0a 77 69 74 68 dispatch.to.another.backend.with
6f20 6f 75 74 20 73 65 6e 64 69 6e 67 20 74 68 65 20 72 65 64 69 72 65 63 74 20 62 61 63 6b 20 74 6f out.sending.the.redirect.back.to
6f40 20 74 68 65 20 6f 72 69 67 69 6e 20 55 41 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d .the.origin.UA."...(elnode-http-
6f60 68 65 61 64 65 72 2d 73 65 74 0a 20 20 20 68 74 74 70 63 6f 6e 20 22 58 2d 41 63 63 65 6c 2d 52 header-set....httpcon."X-Accel-R
6f80 65 64 69 72 65 63 74 22 20 6c 6f 63 61 74 69 6f 6e 29 0a 20 20 3b 3b 20 54 68 69 73 20 69 73 20 edirect".location)...;;.This.is.
6fa0 61 6e 20 6e 67 69 6e 78 20 73 70 65 63 69 66 69 63 20 68 61 63 6b 20 62 65 63 61 75 73 65 20 69 an.nginx.specific.hack.because.i
6fc0 74 20 73 65 65 6d 73 20 6e 67 69 6e 78 20 6b 69 6c 6c 73 20 74 68 65 0a 20 20 3b 3b 20 73 6f 63 t.seems.nginx.kills.the...;;.soc
6fe0 6b 65 74 20 6f 6e 63 65 20 74 68 65 20 61 63 63 65 6c 20 68 65 61 64 65 72 20 61 72 72 69 76 65 ket.once.the.accel.header.arrive
7000 73 0a 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 0a 20 20 20 20 20 20 28 65 s...(condition-case.err.......(e
7020 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72 65 63 74 20 68 74 74 70 63 6f 6e 20 6c 6f 63 61 lnode-send-redirect.httpcon.loca
7040 74 69 6f 6e 29 0a 20 20 20 20 28 65 72 72 6f 72 20 28 75 6e 6c 65 73 73 20 28 73 74 72 69 6e 67 tion).....(error.(unless.(string
7060 2d 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 28 53 -match....................."\\(S
7080 49 47 50 49 50 45 5c 5c 7c 6e 6f 20 6c 6f 6e 67 65 72 20 63 6f 6e 6e 65 63 74 65 64 5c 5c 29 22 IGPIPE\\|no.longer.connected\\)"
70a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 .....................(format."%s
70c0 22 20 28 63 64 72 20 65 72 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69 67 6e ".(cdr.err)))..............(sign
70e0 61 6c 20 28 63 61 72 20 65 72 72 29 20 28 63 64 72 20 65 72 72 29 29 29 29 29 29 0a 0a 28 64 65 al.(car.err).(cdr.err))))))..(de
7100 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 70 72 6f 78 79 2d 6c 6f 63 61 74 69 6f 6e 20 28 fun.elnode-send-proxy-location.(
7120 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f 6e 29 0a 20 20 22 53 65 6e 64 20 4c 4f 43 41 54 49 httpcon.location)..."Send.LOCATI
7140 4f 4e 20 77 69 74 68 20 70 72 6f 78 79 69 6e 67 20 74 65 63 68 6e 69 71 75 65 73 2e 0a 0a 49 66 ON.with.proxying.techniques...If
7160 20 74 68 65 20 48 54 54 50 43 4f 4e 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 6f 78 79 20 .the.HTTPCON.comes.from.a.proxy.
7180 28 64 65 74 65 63 74 65 64 20 62 79 20 63 68 65 63 6b 69 6e 67 20 74 68 65 0a 5c 22 58 2d 46 6f (detected.by.checking.the.\"X-Fo
71a0 72 77 61 72 64 65 64 2d 46 6f 72 5c 22 29 20 74 68 65 6e 20 61 6e 20 60 65 6c 6e 6f 64 65 2d 73 rwarded-For\").then.an.`elnode-s
71c0 65 6e 64 2d 70 72 6f 78 79 2d 72 65 64 69 72 65 63 74 27 20 74 6f 0a 6c 6f 63 61 74 69 6f 6e 20 end-proxy-redirect'.to.location.
71e0 69 73 20 73 65 6e 74 2e 0a 0a 41 6c 74 65 72 6e 61 74 65 6c 79 20 69 74 20 73 65 74 73 20 75 70 is.sent...Alternately.it.sets.up
7200 20 61 20 64 69 72 65 63 74 20 70 72 6f 78 79 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 63 75 72 72 .a.direct.proxy.call.to.the.curr
7220 65 6e 74 20 73 65 72 76 65 72 0a 66 6f 72 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 2e 22 0a 20 20 ent.server.for.the.location."...
7240 28 69 66 20 28 61 6e 64 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 (if.(and.(elnode-http-header.htt
7260 70 63 6f 6e 20 22 58 2d 46 6f 72 77 61 72 64 65 64 2d 46 6f 72 22 29 0a 20 20 20 20 20 20 20 20 pcon."X-Forwarded-For").........
7280 20 20 20 28 6e 6f 74 20 28 65 71 75 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...(not.(equal..................
72a0 22 65 6c 6e 6f 64 65 2f 77 65 62 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 "elnode/web"..................(e
72c0 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 70 63 6f 6e 20 22 58 2d 50 72 6f lnode-http-header.httpcon."X-Pro
72e0 78 79 2d 43 6c 69 65 6e 74 22 29 29 29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e xy-Client")))).......(elnode-sen
7300 64 2d 70 72 6f 78 79 2d 72 65 64 69 72 65 63 74 20 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f d-proxy-redirect.httpcon.locatio
7320 6e 29 0a 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 77 65 27 72 65 20 6e 6f 74 20 62 65 68 69 6e n).......;;.Else.we're.not.behin
7340 64 20 61 20 70 72 6f 78 79 2c 20 73 65 6e 64 20 61 20 70 72 6f 78 79 20 76 65 72 73 69 6f 6e 0a d.a.proxy,.send.a.proxy.version.
7360 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 73 65 72 76 65 72 20 28 65 6c 6e 6f 64 65 2d 73 65 72 ......(let*.((server.(elnode-ser
7380 76 65 72 2d 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ver-info.httpcon))..............
73a0 28 75 72 6c 20 28 66 6f 72 6d 61 74 20 22 68 74 74 70 3a 2f 2f 25 73 25 73 22 20 73 65 72 76 65 (url.(format."http://%s%s".serve
73c0 72 20 6c 6f 63 61 74 69 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 28 r.location))).........(funcall.(
73e0 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 20 75 72 6c 29 20 68 74 74 70 63 6f 6e 29 29 elnode-make-proxy.url).httpcon))
7400 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 70 6f 73 74 20 28 68 ))..(defun*.elnode-proxy-post.(h
7420 74 74 70 63 6f 6e 20 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ttpcon.path.....................
7440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 20 28 6d 6f 64 65 20 27 62 61 74 63 68 ...............&key.(mode.'batch
7460 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 )...............................
7480 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 20 65 78 74 72 61 2d 68 65 61 64 65 72 73 .....callback.data.extra-headers
74a0 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20 48 54 54 50 20 63 61 6c 6c 20 74 6f 20 6c 6f 63 61 6c 68 )..."Make.an.HTTP.call.to.localh
74c0 6f 73 74 20 6f 72 20 74 68 65 20 66 69 72 73 74 20 75 70 73 74 72 65 61 6d 20 70 72 6f 78 79 2e ost.or.the.first.upstream.proxy.
74e0 22 0a 20 20 28 6c 65 74 2a 20 28 28 68 70 2d 70 61 69 72 0a 20 20 20 20 20 20 20 20 20 20 28 69 "...(let*.((hp-pair...........(i
7500 66 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 70 63 6f 6e 20 22 58 f.(elnode-http-header.httpcon."X
7520 2d 46 6f 72 77 61 72 64 65 64 2d 46 6f 72 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 -Forwarded-For")...............(
7540 65 6c 6e 6f 64 65 2d 67 65 74 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72 20 68 74 74 70 63 6f 6e elnode-get-remote-ipaddr.httpcon
7560 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 69 )...............(elnode-server-i
7580 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 75 72 6c 20 28 66 6f nfo.httpcon)))..........(url.(fo
75a0 72 6d 61 74 20 22 68 74 74 70 3a 2f 2f 25 73 25 73 22 20 68 70 2d 70 61 69 72 20 70 61 74 68 29 rmat."http://%s%s".hp-pair.path)
75c0 29 29 0a 20 20 20 20 28 77 65 62 2d 68 74 74 70 2d 70 6f 73 74 0a 20 20 20 20 20 28 6f 72 20 63 )).....(web-http-post......(or.c
75e0 61 6c 6c 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 20 allback..........(lambda.(httpc.
7600 68 64 72 20 64 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 hdr.data)............(elnode-err
7620 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 20 70 6f 73 74 20 72 65 73 70 6f 6e 73 65 or............."%s.post.response
7640 20 25 53 20 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 68 64 72 20 .%S.%s".............httpcon.hdr.
7660 64 61 74 61 29 29 29 0a 20 20 20 20 20 3a 75 72 6c 20 75 72 6c 20 3a 6d 6f 64 65 20 6d 6f 64 65 data)))......:url.url.:mode.mode
7680 20 3a 64 61 74 61 20 64 61 74 61 0a 20 20 20 20 20 3a 65 78 74 72 61 2d 68 65 61 64 65 72 73 20 .:data.data......:extra-headers.
76a0 65 78 74 72 61 2d 68 65 61 64 65 72 73 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2f extra-headers)))..(defun.elnode/
76c0 70 72 6f 78 79 2d 72 6f 75 74 65 20 28 68 74 74 70 63 6f 6e 20 73 65 72 76 69 63 65 20 68 61 6e proxy-route.(httpcon.service.han
76e0 64 6c 65 72 20 70 61 74 68 29 0a 20 20 22 50 72 6f 78 69 65 73 20 61 20 70 61 72 74 69 63 75 6c dler.path)..."Proxies.a.particul
7700 61 72 20 72 6f 75 74 65 20 66 72 6f 6d 20 60 65 6c 6e 6f 64 65 2d 72 6f 75 74 65 27 2e 22 0a 20 ar.route.from.`elnode-route'."..
7720 20 28 6c 65 74 2a 20 28 28 73 65 72 76 65 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 .(let*.((server.(process-get.htt
7740 70 63 6f 6e 20 3a 73 65 72 76 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 32 20 70 61 74 68 pcon.:server))..........(p2.path
7760 29 0a 20 20 20 20 20 20 20 20 20 28 6d 61 70 73 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 73 65 )..........(maps.(process-get.se
7780 72 76 65 72 20 3a 65 6c 6e 6f 64 65 2d 73 65 72 76 69 63 65 2d 6d 61 70 29 29 0a 20 20 20 20 20 rver.:elnode-service-map))......
77a0 20 20 20 20 28 70 6f 72 74 0a 20 20 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 ....(port...........(or.........
77c0 20 20 20 28 6b 76 61 20 73 65 72 76 69 63 65 20 6d 61 70 73 29 0a 20 20 20 20 20 20 20 20 20 20 ...(kva.service.maps)...........
77e0 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 .(string-to-number.............(
7800 63 61 64 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 0a cadr..............(split-string.
7820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 69 6e 66 ..............(elnode-server-inf
7840 6f 20 68 74 74 70 63 6f 6e 29 20 22 3a 22 29 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 57 72 61 70 o.httpcon).":")))))).....;;.Wrap
7860 20 74 68 65 20 68 61 6e 64 6c 65 72 20 69 6e 20 61 20 62 6f 75 6e 63 65 72 0a 20 20 20 20 28 65 .the.handler.in.a.bouncer.....(e
7880 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 62 6f 75 6e 63 65 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c lnode-proxy-bounce.httpcon.handl
78a0 65 72 20 70 6f 72 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 6f 75 74 65 20 er.port)))..(defun.elnode-route.
78c0 28 68 74 74 70 63 6f 6e 20 72 6f 75 74 65 73 29 0a 20 20 22 50 61 73 73 20 48 54 54 50 43 4f 4e (httpcon.routes)..."Pass.HTTPCON
78e0 20 74 6f 20 74 68 65 20 68 61 6e 64 6c 65 72 20 64 65 63 69 64 65 64 20 62 79 20 52 4f 55 54 45 .to.the.handler.decided.by.ROUTE
7900 53 2e 0a 0a 52 4f 55 54 45 53 20 69 73 20 61 20 72 6f 75 74 69 6e 67 20 74 61 62 6c 65 20 6d 61 S...ROUTES.is.a.routing.table.ma
7920 74 63 68 69 6e 67 20 72 65 67 65 78 73 20 74 6f 20 68 61 6e 64 6c 65 72 73 20 77 69 74 68 20 65 tching.regexs.to.handlers.with.e
7940 78 74 72 61 0a 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 52 6f 75 74 65 73 20 6d xtra.meta.information...Routes.m
7960 61 79 20 64 6f 20 61 64 64 69 74 69 6f 6e 61 6c 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 63 61 75 ay.do.additional.things.like.cau
7980 73 65 20 61 0a 72 6f 75 74 65 20 74 6f 20 62 65 20 70 72 6f 78 79 65 64 20 74 6f 20 61 6e 6f 74 se.a.route.to.be.proxyed.to.anot
79a0 68 65 72 20 73 65 72 76 65 72 2e 0a 0a 55 73 69 6e 67 20 52 4f 55 54 45 53 20 79 6f 75 20 63 61 her.server...Using.ROUTES.you.ca
79c0 6e 20 64 65 73 63 72 69 62 65 20 63 6f 6d 70 6c 65 78 20 6d 75 6c 74 69 2d 70 72 6f 63 65 73 73 n.describe.complex.multi-process
79e0 2c 20 6d 75 6c 74 69 2d 70 6f 72 74 0a 65 6c 6e 6f 64 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ,.multi-port.elnode.configuratio
7a00 6e 73 2e 0a 0a 52 4f 55 54 45 53 20 69 73 20 61 6e 20 61 6c 69 73 74 20 77 68 65 72 65 20 65 61 ns...ROUTES.is.an.alist.where.ea
7a20 63 68 20 65 6c 65 6d 65 6e 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 28 52 45 47 45 58 50 0a 2e 20 ch.element.looks.like.(REGEXP...
7a40 46 55 4e 43 54 49 4f 4e 29 20 6f 72 20 28 52 45 47 45 58 50 20 46 55 4e 43 54 49 4f 4e 20 60 3a FUNCTION).or.(REGEXP.FUNCTION.`:
7a60 73 65 72 76 69 63 65 27 20 53 45 52 56 49 43 45 2d 4e 41 4d 45 29 2e 0a 53 45 52 56 49 43 45 2d service'.SERVICE-NAME)..SERVICE-
7a80 4e 41 4d 45 20 69 73 20 61 20 6e 61 6d 65 20 74 68 61 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 NAME.is.a.name.that.may.be.attac
7aa0 68 65 64 20 74 6f 20 74 68 65 20 72 6f 75 74 65 20 73 6f 20 74 68 61 74 0a 69 74 20 63 61 6e 20 hed.to.the.route.so.that.it.can.
7ac0 62 65 20 6d 61 70 70 65 64 20 74 6f 20 61 20 54 43 50 20 70 6f 72 74 2c 20 6f 72 20 65 76 65 6e be.mapped.to.a.TCP.port,.or.even
7ae0 20 61 6e 6f 74 68 65 72 20 45 6d 61 63 73 20 70 72 6f 63 65 73 73 2e 0a 4d 61 70 70 69 6e 67 20 .another.Emacs.process..Mapping.
7b00 73 65 72 76 69 63 65 20 6e 61 6d 65 73 20 69 73 20 64 6f 6e 65 20 62 79 20 60 65 6c 6e 6f 64 65 service.names.is.done.by.`elnode
7b20 2d 73 74 61 72 74 27 2e 22 0a 20 20 28 6c 65 74 2a 0a 20 20 20 20 20 20 28 73 65 72 76 69 63 65 -start'."...(let*.......(service
7b40 73 0a 20 20 20 20 20 20 20 28 72 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 s........(rtable.........(loop.f
7b60 6f 72 20 28 70 61 74 68 20 2e 20 72 65 73 6f 75 72 63 65 29 20 69 6e 20 74 61 62 6c 65 0a 20 20 or.(path...resource).in.table...
7b80 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 .........collect..............(i
7ba0 66 20 28 61 74 6f 6d 20 72 65 73 6f 75 72 63 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f.(atom.resource)...............
7bc0 20 20 20 28 6c 69 73 74 20 70 61 74 68 20 72 65 73 6f 75 72 63 65 29 0a 20 20 20 20 20 20 20 20 ...(list.path.resource).........
7be0 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74 27 73 20 61 20 6d 6f 72 65 20 63 6f 6d .........;;.Else.it's.a.more.com
7c00 70 6c 65 78 20 72 65 73 6f 75 72 63 65 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20 20 20 20 20 plex.resource.description.......
7c20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 68 61 6e 64 6c 65 72 20 28 63 61 72 20 ...........(let*.((handler.(car.
7c40 72 65 73 6f 75 72 63 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 resource))......................
7c60 20 20 20 28 73 65 72 76 69 63 65 20 28 70 6c 69 73 74 2d 67 65 74 20 28 63 64 72 20 72 65 73 6f ...(service.(plist-get.(cdr.reso
7c80 75 72 63 65 29 20 3a 73 65 72 76 69 63 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 urce).:service))................
7ca0 20 20 20 20 20 20 20 20 20 3b 3b 20 4d 61 6b 65 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 66 72 .........;;.Make.the.function.fr
7cc0 6f 6d 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20 20 20 om.the.resource.description.....
7ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 0a 20 20 20 20 20 20 ....................(func.......
7d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 ...................(lambda.(http
7d20 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 con)............................
7d40 28 65 6c 6e 6f 64 65 2f 70 72 6f 78 79 2d 72 6f 75 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 (elnode/proxy-route.............
7d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 73 65 72 76 69 63 65 20 ................httpcon.service.
7d80 68 61 6e 64 6c 65 72 20 70 61 74 68 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 handler.path))))................
7da0 20 20 20 20 28 77 68 65 6e 20 73 65 72 76 69 63 65 20 28 70 75 73 68 20 73 65 72 76 69 63 65 20 ....(when.service.(push.service.
7dc0 73 65 72 76 69 63 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c services))....................(l
7de0 69 73 74 20 70 61 74 68 20 66 75 6e 63 29 29 29 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d ist.path.func)))))).....(elnode-
7e00 68 6f 73 74 70 61 74 68 2d 64 69 73 70 61 74 63 68 65 72 20 68 74 74 70 63 6f 6e 20 72 74 61 62 hostpath-dispatcher.httpcon.rtab
7e20 6c 65 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 29 0a 0a le)))..(provide.'elnode-proxy)..
7e40 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a 00 00 ;;;.elnode-proxy.el.ends.here...
7e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8000 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 72 6c 65 2e elnode-20190702.1509/elnode-rle.
8020 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 el..............................
8040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8060 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
8080 30 30 33 32 32 37 36 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 34 36 34 34 00 20 30 00 00 00 0032276.00000000000.014644..0...
80a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
80c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
80e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8100 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
8120 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
8140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
81a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
81c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
81e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8200 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 72 6c 65 2e 65 6c 20 2d 2d 2d 20 52 65 6d 6f 74 65 20 4c 69 73 ;;;.elnode-rle.el.---.Remote.Lis
8220 70 20 45 78 65 63 75 74 69 69 6f 6e 20 77 69 74 68 20 45 6c 6e 6f 64 65 20 20 2d 2a 2d 20 6c 65 p.Executiion.with.Elnode..-*-.le
8240 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 74 20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70 79 72 69 67 xical-binding:.t.-*-..;;.Copyrig
8260 68 74 20 28 43 29 20 32 30 31 32 20 20 4e 69 63 20 46 65 72 72 69 65 72 0a 0a 3b 3b 20 41 75 74 ht.(C).2012..Nic.Ferrier..;;.Aut
8280 68 6f 72 3a 20 4e 69 63 20 46 65 72 72 69 65 72 0a 3b 3b 20 4b 65 79 77 6f 72 64 73 3a 20 6c 69 hor:.Nic.Ferrier.;;.Keywords:.li
82a0 73 70 2c 20 68 79 70 65 72 6d 65 64 69 61 2c 20 70 72 6f 63 65 73 73 65 73 0a 0a 3b 3b 20 54 68 sp,.hypermedia,.processes..;;.Th
82c0 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 is.program.is.free.software;.you
82e0 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 .can.redistribute.it.and/or.modi
8300 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 fy.;;.it.under.the.terms.of.the.
8320 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75 GNU.General.Public.License.as.pu
8340 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 blished.by.;;.the.Free.Software.
8360 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20 Foundation,.either.version.3.of.
8380 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74 69 the.License,.or.;;.(at.your.opti
83a0 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73 20 on).any.later.version...;;.This.
83c0 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f program.is.distributed.in.the.ho
83e0 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62 75 pe.that.it.will.be.useful,.;;.bu
8400 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 t.WITHOUT.ANY.WARRANTY;.without.
8420 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 even.the.implied.warranty.of.;;.
8440 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 MERCHANTABILITY.or.FITNESS.FOR.A
8460 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b .PARTICULAR.PURPOSE...See.the.;;
8480 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 .GNU.General.Public.License.for.
84a0 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 more.details...;;.You.should.hav
84c0 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e e.received.a.copy.of.the.GNU.Gen
84e0 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69 74 eral.Public.License.;;.along.wit
8500 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 74 h.this.program...If.not,.see.<ht
8520 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b tp://www.gnu.org/licenses/>...;;
8540 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 3b 3b 0a 3b 3b 20 54 68 69 73 20 69 73 20 61 6e 20 65 ;.Commentary:.;;.;;.This.is.an.e
8560 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 20 61 6e 64 20 74 6f 6f 6c 73 20 66 6f 72 20 64 6f 69 6e lnode.handler.and.tools.for.doin
8580 67 20 61 73 79 6e 63 68 72 6f 75 73 0a 3b 3b 20 70 72 6f 67 72 61 6d 6d 69 6e 67 2e 0a 3b 3b 0a g.asynchrous.;;.programming..;;.
85a0 3b 3b 20 54 68 65 20 69 64 65 61 20 69 73 20 74 68 61 74 20 79 6f 75 20 63 61 6e 20 73 65 74 75 ;;.The.idea.is.that.you.can.setu
85c0 70 20 61 73 73 6f 63 69 61 74 65 64 20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 65 73 20 61 6e 64 p.associated.child.processes.and
85e0 20 70 61 73 73 0a 3b 3b 20 74 68 65 6d 20 77 6f 72 6b 20 74 6f 20 64 6f 20 61 6e 64 20 72 65 63 .pass.;;.them.work.to.do.and.rec
8600 65 69 76 65 20 74 68 65 69 72 20 6f 75 74 70 75 74 20 6f 76 65 72 20 48 54 54 50 2e 0a 0a 3b 3b eive.their.output.over.HTTP...;;
8620 3b 20 43 6f 64 65 3a 0a 0a 28 72 65 71 75 69 72 65 20 27 65 6c 6e 6f 64 65 29 0a 28 72 65 71 75 ;.Code:..(require.'elnode).(requ
8640 69 72 65 20 27 77 65 62 29 0a 28 72 65 71 75 69 72 65 20 27 6c 6f 61 64 68 69 73 74 29 0a 28 72 ire.'web).(require.'loadhist).(r
8660 65 71 75 69 72 65 20 27 73 65 72 76 65 72 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 equire.'server)..(defun.elnode-r
8680 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 52 65 6d 6f 74 65 20 le--handler.(httpcon)..."Remote.
86a0 4c 69 73 70 20 45 76 61 6c 75 61 74 6f 72 20 68 61 6e 64 6c 65 72 2e 0a 0a 54 68 69 73 20 63 61 Lisp.Evaluator.handler...This.ca
86c0 6e 20 62 65 20 73 70 61 77 6e 65 64 20 69 6e 20 61 20 63 6c 69 65 6e 74 20 74 6f 20 61 6c 6c 6f n.be.spawned.in.a.client.to.allo
86e0 77 20 61 6e 79 20 6c 69 73 70 20 63 6f 64 65 20 74 6f 20 62 65 0a 70 61 73 73 65 64 20 6f 76 65 w.any.lisp.code.to.be.passed.ove
8700 72 20 74 68 65 20 63 6c 69 65 6e 74 2d 73 65 72 76 65 72 20 6c 69 6e 6b 2e 22 0a 20 20 28 6c 65 r.the.client-server.link."...(le
8720 74 2a 20 28 28 6c 69 73 70 2d 74 6f 2d 72 75 6e 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 t*.((lisp-to-run.(elnode-http-pa
8740 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 6c 69 73 70 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 6c ram.httpcon."lisp"))..........(l
8760 69 73 70 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 6c 69 73 70 2d 74 6f 2d 72 75 6e 0a 20 20 isp...........(if.lisp-to-run...
8780 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 28 72 65 61 64 2d 66 72 6f 6d 2d 73 74 72 69 ............(car.(read-from-stri
87a0 6e 67 20 6c 69 73 70 2d 74 6f 2d 72 75 6e 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 62 69 6e ng.lisp-to-run))))..........(bin
87c0 64 69 6e 67 73 2d 74 6f 2d 75 73 65 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 dings-to-use.(elnode-http-param.
87e0 68 74 74 70 63 6f 6e 20 22 62 69 6e 64 69 6e 67 73 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 62 httpcon."bindings"))..........(b
8800 69 6e 64 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 62 69 6e 64 69 6e 67 73 2d 74 indings...........(if.bindings-t
8820 6f 2d 75 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 28 72 65 61 64 2d 66 o-use...............(car.(read-f
8840 72 6f 6d 2d 73 74 72 69 6e 67 20 62 69 6e 64 69 6e 67 73 2d 74 6f 2d 75 73 65 29 29 29 29 0a 20 rom-string.bindings-to-use))))..
8860 20 20 20 20 20 20 20 20 28 74 6f 2d 65 76 61 6c 20 28 6c 69 73 74 20 27 6c 65 74 20 62 69 6e 64 ........(to-eval.(list.'let.bind
8880 69 6e 67 73 20 6c 69 73 70 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 ings.lisp))).....(elnode-http-st
88a0 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 20 27 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 22 art.httpcon.200.'("Content-type"
88c0 20 2e 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 29 29 0a 20 20 20 20 28 6c 65 74 20 28 28 6e 6f 6d ..."text/plain")).....(let.((nom
88e0 65 73 73 61 67 65 20 74 29 29 0a 20 20 20 20 20 20 28 77 69 74 68 2d 73 74 64 6f 75 74 2d 74 6f essage.t)).......(with-stdout-to
8900 2d 65 6c 6e 6f 64 65 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 28 65 76 61 6c 20 -elnode.httpcon...........(eval.
8920 74 6f 2d 65 76 61 6c 29 29 29 29 29 0a 0a 28 65 72 74 2d 64 65 66 74 65 73 74 20 65 6c 6e 6f 64 to-eval)))))..(ert-deftest.elnod
8940 65 2d 72 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 28 29 0a 20 20 22 54 65 73 74 20 74 68 65 20 52 65 e-rle--handler.()..."Test.the.Re
8960 6d 6f 74 65 20 4c 69 73 70 20 45 76 61 6c 75 61 74 6f 72 20 68 61 6e 64 6c 65 72 2e 22 0a 20 20 mote.Lisp.Evaluator.handler."...
8980 3a 65 78 70 65 63 74 65 64 2d 72 65 73 75 6c 74 20 3a 66 61 69 6c 65 64 0a 20 20 28 66 6c 65 74 :expected-result.:failed...(flet
89a0 20 28 28 6c 69 73 70 2d 65 6e 63 6f 64 65 20 28 70 61 72 61 6d 20 6c 69 73 70 29 0a 20 20 20 20 .((lisp-encode.(param.lisp).....
89c0 20 20 20 20 20 20 20 28 63 6f 6e 73 20 70 61 72 61 6d 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 .......(cons.param.(format."%S".
89e0 6c 69 73 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 64 6f 2d 74 65 73 74 20 28 6c 69 73 70 20 lisp)))..........(do-test.(lisp.
8a00 62 69 6e 64 69 6e 67 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 66 61 6b 69 72 2d 6d 6f 63 6b bindings)............(fakir-mock
8a20 2d 70 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 68 74 74 70 63 6f 6e -process................:httpcon
8a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 ................((:elnode-http-p
8a60 61 72 61 6d 73 20 28 6c 69 73 74 20 6c 69 73 70 20 62 69 6e 64 69 6e 67 73 29 29 29 0a 20 20 20 arams.(list.lisp.bindings)))....
8a80 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 3a ..........(elnode-rle--handler.:
8aa0 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 httpcon)..............(with-curr
8ac0 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 3a 68 74 74 70 ent-buffer.(process-buffer.:http
8ae0 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 con)................(goto-char.(
8b00 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 46 69 point-min))................;;.Fi
8b20 6e 64 20 74 68 65 20 68 65 61 64 65 72 20 65 6e 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 nd.the.header.end...............
8b40 20 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 20 22 5c 72 5c 6e 5c 72 5c 6e 22 20 ..(re-search-forward."\r\n\r\n".
8b60 6e 69 6c 20 27 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 nil.'t)................(buffer-s
8b80 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 29 ubstring.(point).(point-max)))))
8ba0 29 0a 20 20 20 20 20 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 20 28 65 71 75 61 6c 0a 20 20 ).......(should........(equal...
8bc0 20 20 20 20 20 20 3b 3b 20 4d 61 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 74 72 61 6e 73 ......;;.Match.the.content.trans
8be0 66 65 72 20 65 6e 63 6f 64 65 64 0a 20 20 20 20 20 20 20 20 22 63 5c 72 5c 6e 68 65 6c 6c 6f 20 fer.encoded........."c\r\nhello.
8c00 77 6f 72 6c 64 21 5c 72 5c 6e 30 5c 72 5c 6e 5c 72 5c 6e 22 0a 20 20 20 20 20 20 20 20 28 6c 65 world!\r\n0\r\n\r\n".........(le
8c20 74 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6c 69 73 70 20 28 6c 69 73 70 2d 65 6e 63 6f t*.............((lisp.(lisp-enco
8c40 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 69 73 70 22 20 27 28 de....................."lisp".'(
8c60 6c 65 74 20 28 28 61 20 22 68 65 6c 6c 6f 20 77 6f 72 6c 64 21 22 29 29 20 28 70 72 69 6e 63 20 let.((a."hello.world!")).(princ.
8c80 61 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 69 6e 64 69 6e 67 73 20 28 6c 69 a))))..............(bindings.(li
8ca0 73 70 2d 65 6e 63 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 sp-encode.......................
8cc0 20 20 22 62 69 6e 64 69 6e 67 73 22 20 27 28 28 61 20 31 30 29 28 62 20 32 30 29 29 29 29 29 0a .."bindings".'((a.10)(b.20))))).
8ce0 20 20 20 20 20 20 20 20 20 20 28 64 6f 2d 74 65 73 74 20 6c 69 73 70 20 62 69 6e 64 69 6e 67 73 ..........(do-test.lisp.bindings
8d00 29 29 29 29 0a 20 20 20 20 20 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 20 28 65 71 75 61 6c )))).......(should........(equal
8d20 0a 20 20 20 20 20 20 20 20 22 32 5c 72 5c 6e 33 30 5c 72 5c 6e 30 5c 72 5c 6e 5c 72 5c 6e 22 0a ........."2\r\n30\r\n0\r\n\r\n".
8d40 20 20 20 20 20 20 20 20 28 6c 65 74 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6c 69 73 70 ........(let*.............((lisp
8d60 20 28 6c 69 73 70 2d 65 6e 63 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(lisp-encode...................
8d80 20 20 22 6c 69 73 70 22 20 27 28 6c 65 74 20 28 28 61 20 28 2b 20 62 20 31 30 29 29 29 20 28 70 .."lisp".'(let.((a.(+.b.10))).(p
8da0 72 69 6e 63 20 61 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 69 6e 64 69 6e 67 rinc.a))))..............(binding
8dc0 73 20 28 6c 69 73 70 2d 65 6e 63 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.(lisp-encode..................
8de0 20 20 20 20 20 20 20 22 62 69 6e 64 69 6e 67 73 22 20 27 28 28 61 20 31 30 29 28 62 20 32 30 29 ......."bindings".'((a.10)(b.20)
8e00 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 64 6f 2d 74 65 73 74 20 6c 69 73 70 20 62 69 6e ))))...........(do-test.lisp.bin
8e20 64 69 6e 67 73 29 29 29 29 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d dings))))))..(defvar.elnode-rle-
8e40 2d 73 65 72 76 65 72 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 -servers.(make-hash-table.:test.
8e60 27 65 71 75 61 6c 29 0a 20 20 22 54 68 65 20 68 61 73 68 20 6f 66 20 52 4c 45 20 73 65 72 76 65 'equal)..."The.hash.of.RLE.serve
8e80 72 73 20 61 76 61 69 6c 61 62 6c 65 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 rs.available.")..(defun.elnode-r
8ea0 6c 65 2d 2d 6c 6f 61 64 2d 70 61 74 68 2d 69 7a 65 20 28 6c 69 73 70 29 0a 20 20 22 57 72 61 70 le--load-path-ize.(lisp)..."Wrap
8ec0 20 4c 49 53 50 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 61 64 2d 70 61 74 68 2e 22 .LISP.in.the.current.load-path."
8ee0 0a 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 3b 3b 20 54 68 65 72 65 20 69 73 20 61 20 76 65 72 79 ...(concat....;;.There.is.a.very
8f00 20 73 74 72 61 6e 67 65 20 74 68 69 6e 67 20 77 69 74 68 20 73 65 6e 64 69 6e 67 20 6c 69 73 70 .strange.thing.with.sending.lisp
8f20 20 74 6f 0a 20 20 20 3b 3b 20 28 72 65 61 64 29 20 6f 76 65 72 20 61 20 70 69 70 65 64 20 73 74 .to....;;.(read).over.a.piped.st
8f40 72 65 61 6d 2e 2e 2e 20 28 72 65 61 64 29 20 63 61 6e 27 74 20 63 6f 70 65 20 77 69 74 68 0a 20 ream....(read).can't.cope.with..
8f60 20 20 3b 3b 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 3b 20 73 6f 20 77 65 20 65 6e 63 6f 64 ..;;.multiple.lines;.so.we.encod
8f80 65 20 6e 65 77 6c 69 6e 65 20 68 65 72 65 2e 0a 20 20 20 3b 3b 28 72 65 70 6c 61 63 65 2d 72 65 e.newline.here.....;;(replace-re
8fa0 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 3b 3b 20 22 5c 6e 22 0a 20 20 20 3b 3b 20 gexp-in-string....;;."\n"....;;.
8fc0 22 5c 5c 5c 5c 6e 22 0a 20 20 20 28 66 6f 72 6d 61 74 20 22 28 70 72 6f 67 6e 20 28 73 65 74 71 "\\\\n"....(format."(progn.(setq
8fe0 20 6c 6f 61 64 2d 70 61 74 68 20 28 71 75 6f 74 65 20 25 53 29 29 20 25 73 29 22 0a 20 20 20 20 .load-path.(quote.%S)).%s)".....
9000 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 20 28 6c 69 73 74 20 64 65 66 61 75 6c 74 2d 64 69 72 .......(append.(list.default-dir
9020 65 63 74 6f 72 79 29 20 6c 6f 61 64 2d 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 6c 69 ectory).load-path)............li
9040 73 70 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 61 6e 64 6c 65 sp)))..(defun.elnode-rle--handle
9060 72 2d 6c 69 73 70 20 28 74 6f 2d 72 65 71 75 69 72 65 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 r-lisp.(to-require)..."Return.a.
9080 66 69 6c 65 20 77 69 74 68 20 4c 69 73 70 20 74 6f 20 73 74 61 72 74 20 45 6c 6e 6f 64 65 20 77 file.with.Lisp.to.start.Elnode.w
90a0 69 74 68 20 54 4f 2d 52 45 51 55 49 52 45 2e 0a 0a 55 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 ith.TO-REQUIRE...Used.to.constru
90c0 63 74 20 74 68 65 20 6c 69 73 70 20 74 6f 20 73 65 6e 64 2e 20 20 59 6f 75 27 72 65 20 75 6e 6c ct.the.lisp.to.send...You're.unl
90e0 69 6b 65 6c 79 20 74 6f 20 6e 65 65 64 20 74 6f 0a 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 61 ikely.to.need.to.override.this.a
9100 74 20 61 6c 6c 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6a 75 73 74 20 68 65 72 65 t.all,.the.function.is.just.here
9120 20 74 6f 20 6d 61 6b 65 20 74 68 65 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 65 61 73 69 .to.make.the.implementation.easi
9140 65 72 20 74 6f 20 64 65 62 75 67 2e 0a 0a 54 4f 2d 52 45 51 55 49 52 45 20 69 73 20 61 20 6c 69 er.to.debug...TO-REQUIRE.is.a.li
9160 73 74 20 6f 66 20 74 68 69 6e 67 73 20 74 6f 20 72 65 71 75 69 72 65 2c 20 63 75 72 72 65 6e 74 st.of.things.to.require,.current
9180 6c 79 20 6f 6e 6c 79 20 31 20 69 73 0a 61 6c 6c 6f 77 65 64 2e 22 0a 20 20 28 6c 65 74 20 28 28 ly.only.1.is.allowed."...(let.((
91a0 74 65 6d 70 2d 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 28 6d 61 6b 65 2d 74 65 6d 70 2d 66 69 temp-file..........(make-temp-fi
91c0 6c 65 0a 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 65 6c 6e 6f 64 65 2d 72 6c 65 le...........(format."elnode-rle
91e0 2d 25 73 22 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 74 6f 2d 72 65 71 75 69 72 65 29 29 29 29 -%s".(symbol-name.to-require))))
9200 29 0a 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 66 69 6c 65 20 74 65 6d 70 2d 66 69 6c 65 0a ).....(with-temp-file.temp-file.
9220 20 20 20 20 20 20 28 69 6e 73 65 72 74 0a 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 ......(insert........(elnode-rle
9240 2d 2d 6c 6f 61 64 2d 70 61 74 68 2d 69 7a 65 0a 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 --load-path-ize.........(format.
9260 22 28 70 72 6f 67 6e 0a 20 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 64 6f 2d 69 6e 69 74 20 6e 69 "(progn..(setq.elnode-do-init.ni
9280 6c 29 0a 20 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 2d 64 6f 2d 65 72 72 6f 72 2d 6c 6f 67 67 69 l)..(setq.elnode--do-error-loggi
92a0 6e 67 20 6e 69 6c 29 0a 20 28 72 65 71 75 69 72 65 20 28 71 75 6f 74 65 20 25 73 29 29 0a 20 28 ng.nil)..(require.(quote.%s))..(
92c0 72 65 71 75 69 72 65 20 28 71 75 6f 74 65 20 65 6c 6e 6f 64 65 2d 72 6c 65 29 29 0a 20 28 74 6f require.(quote.elnode-rle))..(to
92e0 67 67 6c 65 2d 64 65 62 75 67 2d 6f 6e 2d 65 72 72 6f 72 29 0a 20 28 73 65 74 71 20 65 6c 6e 6f ggle-debug-on-error)..(setq.elno
9300 64 65 2d 72 6c 65 2d 70 6f 72 74 20 28 65 6c 6e 6f 64 65 2d 66 69 6e 64 2d 66 72 65 65 2d 73 65 de-rle-port.(elnode-find-free-se
9320 72 76 69 63 65 29 29 0a 20 28 65 6c 6e 6f 64 65 2d 73 74 61 72 74 20 27 65 6c 6e 6f 64 65 2d 72 rvice))..(elnode-start.'elnode-r
9340 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 3a 70 6f 72 74 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 70 6f 72 le--handler.:port.elnode-rle-por
9360 74 29 0a 20 28 70 72 69 6e 74 20 28 66 6f 72 6d 61 74 20 5c 22 5c 5c 6e 65 6c 6e 6f 64 65 2d 70 t)..(print.(format.\"\\nelnode-p
9380 6f 72 74 3d 25 25 64 5c 5c 6e 5c 22 20 70 6f 72 74 29 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 ort=%%d\\n\".port)))"...........
93a0 20 20 20 20 20 20 74 6f 2d 72 65 71 75 69 72 65 29 29 29 29 0a 20 20 20 20 74 65 6d 70 2d 66 69 ......to-require)))).....temp-fi
93c0 6c 65 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 74 74 70 63 6f 6e le))..(defun.elnode-rle--httpcon
93e0 2d 6d 61 70 70 65 72 20 28 63 6c 69 65 6e 74 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 20 -mapper.(client-header..........
9400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e 74 ..........................client
9420 2d 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -data...........................
9440 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 .........elnode-httpcon.........
9460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6f 70 74 69 ...........................&opti
9480 6f 6e 61 6c 20 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 0a 20 20 22 45 6c 6e 6f 64 65 20 73 70 65 onal.end-callback)..."Elnode.spe
94a0 63 69 66 69 63 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 48 54 54 50 20 cific.client.connection.to.HTTP.
94c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 70 70 65 72 2e 0a 0a 4d 61 70 73 20 63 6c 69 65 6e 74 20 connection.mapper...Maps.client.
94e0 61 73 79 6e 63 20 64 61 74 61 20 72 65 73 70 6f 6e 73 65 73 20 74 6f 20 61 6e 20 65 6c 6e 6f 64 async.data.responses.to.an.elnod
9500 65 20 73 65 72 76 65 72 20 72 65 73 70 6f 6e 73 65 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 70 e.server.response."...(unless.(p
9520 72 6f 63 65 73 73 2d 67 65 74 20 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 rocess-get.elnode-httpcon.:elnod
9540 65 2d 72 6c 65 2d 68 65 61 64 65 72 2d 73 65 6e 74 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 e-rle-header-sent).....(elnode-h
9560 74 74 70 2d 73 74 61 72 74 0a 20 20 20 20 20 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 0a 20 20 ttp-start......elnode-httpcon...
9580 20 20 20 28 67 65 74 68 61 73 68 20 27 73 74 61 74 75 73 2d 63 6f 64 65 20 63 6c 69 65 6e 74 2d ...(gethash.'status-code.client-
95a0 68 65 61 64 65 72 29 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 65 6c 6e 6f 64 65 header)).....(process-put.elnode
95c0 2d 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 72 6c 65 2d 68 65 61 64 65 72 2d 73 65 6e 74 -httpcon.:elnode-rle-header-sent
95e0 20 74 29 29 0a 20 20 28 69 66 20 28 65 71 20 63 6c 69 65 6e 74 2d 64 61 74 61 20 3a 64 6f 6e 65 .t))...(if.(eq.client-data.:done
9600 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 20 65 6c 6e 6f ).......(elnode-http-return.elno
9620 64 65 2d 68 74 74 70 63 6f 6e 29 20 3b 20 72 65 74 75 72 6e 20 69 66 20 77 65 27 72 65 20 64 6f de-httpcon).;.return.if.we're.do
9640 6e 65 0a 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 6a 75 73 74 20 73 65 6e 64 20 74 68 65 20 64 ne.......;;.Else.just.send.the.d
9660 61 74 61 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 ata.......(elnode-http-send-stri
9680 6e 67 20 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 20 63 6c 69 65 6e 74 2d 64 61 74 61 29 29 29 ng.elnode-httpcon.client-data)))
96a0 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 63 6c 69 65 6e 74 2d 64 61 74 61 ..(defun.elnode-rle--client-data
96c0 2d 6d 61 70 70 65 72 20 28 63 6f 6e 20 68 65 61 64 65 72 20 64 61 74 61 20 73 74 72 65 61 6d 20 -mapper.(con.header.data.stream.
96e0 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 0a 20 20 22 52 65 63 65 76 69 65 73 20 64 61 74 61 20 66 end-callback)..."Recevies.data.f
9700 72 6f 6d 20 74 68 65 20 52 4c 45 20 73 65 72 76 65 72 20 61 6e 64 20 73 65 6e 64 73 20 69 74 20 rom.the.RLE.server.and.sends.it.
9720 74 6f 20 74 68 65 20 53 54 52 45 41 4d 2e 0a 0a 45 4e 44 2d 43 41 4c 4c 42 41 43 4b 20 69 73 20 to.the.STREAM...END-CALLBACK.is.
9740 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 73 65 65 to.be.called.when.the.client.see
9760 73 20 45 4f 46 2e 22 0a 20 20 28 63 6f 6e 64 0a 20 20 20 20 28 28 70 72 6f 63 65 73 73 70 20 73 s.EOF."...(cond.....((processp.s
9780 74 72 65 61 6d 29 20 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 72 65 61 6c 6c 79 20 65 6c 6e 6f tream).;.this.should.really.elno
97a0 64 65 2d 68 74 74 70 2d 70 0a 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 74 74 70 de-http-p......(elnode-rle--http
97c0 63 6f 6e 2d 6d 61 70 70 65 72 20 68 65 61 64 65 72 20 64 61 74 61 20 73 74 72 65 61 6d 20 65 6e con-mapper.header.data.stream.en
97e0 64 2d 63 61 6c 6c 62 61 63 6b 29 29 0a 20 20 20 20 28 28 62 75 66 66 65 72 70 20 73 74 72 65 61 d-callback)).....((bufferp.strea
9800 6d 29 0a 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 71 20 64 61 74 61 20 3a 64 6f 6e 65 29 m)......(if.(not.(eq.data.:done)
9820 29 0a 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 )..........(with-current-buffer.
9840 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f stream............(save-excursio
9860 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 n..............(goto-char.(point
9880 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 64 61 74 61 -max))..............(insert.data
98a0 29 29 29 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 50 72 6f 63 65 73 73 20 69 73 20 64 6f 6e 65 2e )))..........;;.Process.is.done.
98c0 0a 20 20 20 20 20 20 20 20 20 28 61 6e 64 20 28 66 75 6e 63 74 69 6f 6e 70 20 65 6e 64 2d 63 61 ..........(and.(functionp.end-ca
98e0 6c 6c 62 61 63 6b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 65 llback)...............(funcall.e
9900 6e 64 2d 63 61 6c 6c 62 61 63 6b 20 68 65 61 64 65 72 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e nd-callback.header))))))..(defun
9920 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 63 61 6c 6c 2d 6d 61 70 70 65 72 20 28 64 61 74 61 2d 74 .elnode-rle--call-mapper.(data-t
9940 6f 2d 73 65 6e 64 20 73 74 72 65 61 6d 20 70 6f 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 o-send.stream.port..............
9960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6f 70 74 69 6f 6e 61 6c 20 65 6e 64 ...................&optional.end
9980 2d 63 61 6c 6c 62 61 63 6b 29 0a 20 20 22 4d 61 6b 65 20 61 20 63 6c 69 65 6e 74 20 63 61 6c 6c -callback)..."Make.a.client.call
99a0 20 74 6f 20 50 4f 52 54 20 6d 61 70 70 69 6e 67 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 53 54 52 .to.PORT.mapping.response.to.STR
99c0 45 41 4d 2e 0a 0a 57 68 65 6e 20 69 74 20 66 69 6e 69 73 68 65 73 2c 20 63 61 6c 6c 20 45 4e 44 EAM...When.it.finishes,.call.END
99e0 2d 43 41 4c 4c 42 41 43 4b 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20 -CALLBACK,.if.present,.with.the.
9a00 68 65 61 64 65 72 2e 22 0a 20 20 28 77 65 62 2d 68 74 74 70 2d 70 6f 73 74 0a 20 20 20 28 6c 61 header."...(web-http-post....(la
9a20 6d 62 64 61 20 28 63 6f 6e 20 68 65 61 64 65 72 20 64 61 74 61 29 0a 20 20 20 20 20 28 65 6c 6e mbda.(con.header.data)......(eln
9a40 6f 64 65 2d 72 6c 65 2d 2d 63 6c 69 65 6e 74 2d 64 61 74 61 2d 6d 61 70 70 65 72 0a 20 20 20 20 ode-rle--client-data-mapper.....
9a60 20 20 63 6f 6e 0a 20 20 20 20 20 20 68 65 61 64 65 72 0a 20 20 20 20 20 20 64 61 74 61 0a 20 20 ..con.......header.......data...
9a80 20 20 20 20 73 74 72 65 61 6d 0a 20 20 20 20 20 20 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 29 0a ....stream.......end-callback)).
9aa0 20 20 20 22 2f 22 0a 20 20 20 3a 68 6f 73 74 20 22 6c 6f 63 61 6c 68 6f 73 74 22 0a 20 20 20 3a ..."/"....:host."localhost"....:
9ac0 70 6f 72 74 20 70 6f 72 74 0a 20 20 20 3a 64 61 74 61 20 64 61 74 61 2d 74 6f 2d 73 65 6e 64 0a port.port....:data.data-to-send.
9ae0 20 20 20 3a 6d 69 6d 65 2d 74 79 70 65 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 65 6c 6e ...:mime-type."application/x-eln
9b00 6f 64 65 22 0a 20 20 20 3a 6d 6f 64 65 20 27 73 74 72 65 61 6d 29 29 0a 0a 28 64 65 66 75 6e 20 ode"....:mode.'stream))..(defun.
9b20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 6d 61 6b 65 2d 73 65 72 76 65 72 20 28 74 6f 2d 72 65 71 75 elnode-rle--make-server.(to-requ
9b40 69 72 65 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20 52 4c 45 20 73 65 72 76 65 72 2c 20 61 20 63 68 ire)..."Make.an.RLE.server,.a.ch
9b60 69 6c 64 20 45 6d 61 63 73 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 52 4c 45 20 68 61 6e 64 6c 65 ild.Emacs.running.the.RLE.handle
9b80 72 2e 0a 0a 52 65 74 75 72 6e 20 61 20 70 72 6f 63 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 r...Return.a.proc.that.represent
9ba0 73 20 74 68 65 20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 2e 20 20 54 68 65 20 63 68 69 6c 64 0a s.the.child.process...The.child.
9bc0 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 70 72 6f 70 65 72 74 79 20 60 3a 65 78 65 63 27 20 77 process.has.a.property.`:exec'.w
9be0 68 69 63 68 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 63 61 6c 6c 73 20 74 68 hich.is.a.function.that.calls.th
9c00 65 0a 52 4c 45 20 68 61 6e 64 6c 65 72 20 69 6e 20 74 68 65 20 63 68 69 6c 64 27 73 20 45 6c 6e e.RLE.handler.in.the.child's.Eln
9c20 6f 64 65 20 73 65 72 76 65 72 20 28 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 20 73 65 72 76 ode.server.(waiting.for.the.serv
9c40 65 72 0a 74 6f 20 73 74 61 72 74 20 66 69 72 73 74 20 61 6e 64 20 70 72 6f 76 69 64 65 20 74 68 er.to.start.first.and.provide.th
9c60 65 20 72 65 6c 65 76 61 6e 74 20 70 6f 72 74 29 20 62 79 20 63 61 6c 6c 69 6e 67 0a 60 65 6c 6e e.relevant.port).by.calling.`eln
9c80 6f 64 65 2d 72 6c 65 2d 63 61 6c 6c 2d 6d 61 70 70 65 72 27 20 77 69 74 68 20 74 68 65 20 73 74 ode-rle-call-mapper'.with.the.st
9ca0 72 65 61 6d 20 66 72 6f 6d 20 74 68 65 20 60 3a 65 78 65 63 27 20 63 61 6c 6c 0a 61 6e 64 20 74 ream.from.the.`:exec'.call.and.t
9cc0 68 65 20 63 68 69 6c 64 27 73 20 72 65 6d 6f 74 65 20 48 54 54 50 20 70 6f 72 74 2e 0a 0a 54 68 he.child's.remote.HTTP.port...Th
9ce0 65 20 60 3a 65 78 65 63 27 20 70 72 6f 63 20 77 69 6c 6c 20 73 69 67 6e 61 6c 20 60 65 6c 6e 6f e.`:exec'.proc.will.signal.`elno
9d00 64 65 2d 72 6c 65 2d 63 68 69 6c 64 2d 70 6f 72 74 27 20 69 66 20 74 68 65 20 63 68 69 6c 64 0a de-rle-child-port'.if.the.child.
9d20 73 65 72 76 65 72 20 64 6f 65 73 20 6e 6f 74 20 73 74 61 72 74 20 70 72 6f 70 65 72 6c 79 2e 22 server.does.not.start.properly."
9d40 20 20 3b 20 79 65 73 2e 20 49 20 6b 6e 6f 77 20 69 74 27 73 20 62 6c 6f 6f 64 79 20 63 6f 6d 70 ..;.yes..I.know.it's.bloody.comp
9d60 6c 69 63 61 74 65 64 2e 0a 20 20 28 6c 65 74 2a 20 28 28 70 72 6f 63 2d 62 75 66 66 65 72 0a 20 licated....(let*.((proc-buffer..
9d80 20 20 20 20 20 20 20 20 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 0a 20 20 20 20 .........(get-buffer-create.....
9da0 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 2a 20 25 73 20 2a 22 20 22 74 68 69 6e 67 79 22 .......(format."*.%s.*"."thingy"
9dc0 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 65 6d 61 63 73 72 75 6e 0a 20 20 20 20 20 20 20 20 20 )))..........(emacsrun..........
9de0 20 22 2f 75 73 72 2f 62 69 6e 2f 65 6d 61 63 73 20 2d 51 20 2d 2d 64 61 65 6d 6f 6e 3d 65 6c 6e ."/usr/bin/emacs.-Q.--daemon=eln
9e00 6f 64 65 2d 64 65 62 75 67 69 74 22 29 0a 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 0a 20 20 20 ode-debugit")..........(proc....
9e20 20 20 20 20 20 20 20 28 73 74 61 72 74 2d 70 72 6f 63 65 73 73 2d 73 68 65 6c 6c 2d 63 6f 6d 6d .......(start-process-shell-comm
9e40 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 72 6c 65 2d 73 65 72 76 65 and............"elnode-rle-serve
9e60 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 r"............proc-buffer.......
9e80 20 20 20 20 20 65 6d 61 63 73 72 75 6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6f .....emacsrun))..........(file-o
9ea0 66 2d 6c 69 73 70 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 61 f-lisp...........(elnode-rle--ha
9ec0 6e 64 6c 65 72 2d 6c 69 73 70 0a 20 20 20 20 20 20 20 20 20 20 20 74 6f 2d 72 65 71 75 69 72 65 ndler-lisp............to-require
9ee0 29 29 29 0a 20 20 20 20 3b 3b 20 53 74 61 72 74 20 65 6c 6e 6f 64 65 20 69 6e 20 69 74 0a 20 20 ))).....;;.Start.elnode.in.it...
9f00 20 20 28 73 65 72 76 65 72 2d 65 76 61 6c 2d 61 74 20 22 65 6c 6e 6f 64 65 2d 64 65 62 75 67 69 ..(server-eval-at."elnode-debugi
9f20 74 22 20 60 28 6c 6f 61 64 2d 66 69 6c 65 20 2c 66 69 6c 65 2d 6f 66 2d 6c 69 73 70 29 29 0a 20 t".`(load-file.,file-of-lisp))..
9f40 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72 6f 63 20 3a 64 61 65 6d 6f 6e 68 61 6e 64 ...(process-put.proc.:daemonhand
9f60 6c 65 20 22 65 6c 6e 6f 64 65 2d 64 65 62 75 67 69 74 22 29 0a 20 20 20 20 28 70 72 6f 63 65 73 le."elnode-debugit").....(proces
9f80 73 2d 70 75 74 0a 20 20 20 20 20 70 72 6f 63 0a 20 20 20 20 20 3a 70 6f 72 74 0a 20 20 20 20 20 s-put......proc......:port......
9fa0 28 73 65 72 76 65 72 2d 65 76 61 6c 2d 61 74 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 (server-eval-at.......(process-g
9fc0 65 74 20 70 72 6f 63 20 3a 64 61 65 6d 6f 6e 68 61 6e 64 6c 65 29 0a 20 20 20 20 20 20 27 65 6c et.proc.:daemonhandle).......'el
9fe0 6e 6f 64 65 2d 72 6c 65 2d 70 6f 72 74 29 29 0a 20 20 20 20 3b 3b 20 43 6f 6c 6c 65 63 74 20 74 node-rle-port)).....;;.Collect.t
a000 68 65 20 70 6f 72 74 20 66 72 6f 6d 20 74 68 65 20 72 65 6d 6f 74 65 20 45 6d 61 63 73 0a 20 20 he.port.from.the.remote.Emacs...
a020 20 20 3b 3b 20 2d 20 46 49 58 4d 45 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 63 6f ..;;.-.FIXME.this.should.also.co
a040 6c 6c 65 63 74 20 74 68 65 20 73 65 63 75 72 65 20 74 6f 6b 65 6e 0a 20 20 20 20 28 73 65 74 2d llect.the.secure.token.....(set-
a060 70 72 6f 63 65 73 73 2d 66 69 6c 74 65 72 0a 20 20 20 20 20 70 72 6f 63 0a 20 20 20 20 20 28 6c process-filter......proc......(l
a080 61 6d 62 64 61 20 28 70 72 6f 63 20 64 61 74 61 29 0a 20 20 20 20 20 20 20 3b 3b 20 4f 70 74 69 ambda.(proc.data)........;;.Opti
a0a0 6f 6e 61 6c 20 64 65 6c 61 79 20 66 6f 72 20 74 65 73 74 20 72 65 61 73 6f 6e 73 0a 20 20 20 20 onal.delay.for.test.reasons.....
a0c0 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 ...(with-current-buffer.(process
a0e0 2d 62 75 66 66 65 72 20 70 72 6f 63 29 0a 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 -buffer.proc)..........(save-exc
a100 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f ursion............(goto-char.(po
a120 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 64 61 74 int-max))............(insert.dat
a140 61 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 4d 61 6b 65 20 61 20 68 61 6e 64 6c 65 72 20 74 6f 20 a))))).....;;.Make.a.handler.to.
a160 63 61 6c 6c 20 74 68 65 20 73 65 72 76 65 72 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 call.the.server.....(process-put
a180 0a 20 20 20 20 20 70 72 6f 63 20 3a 65 78 65 63 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 64 ......proc.:exec......(lambda.(d
a1a0 61 74 61 20 73 74 72 65 61 6d 20 26 6f 70 74 69 6f 6e 61 6c 20 65 6e 64 2d 63 61 6c 6c 62 61 63 ata.stream.&optional.end-callbac
a1c0 6b 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 70 68 65 6d 65 72 61 6c 2d 70 6f 72 74 20 k)........(let.((ephemeral-port.
a1e0 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 3a 70 6f 72 74 29 29 29 0a 20 20 20 20 20 (process-get.proc.:port)))......
a200 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 63 61 6c 6c 2d 6d 61 70 70 65 72 20 64 61 74 ....(elnode-rle--call-mapper.dat
a220 61 20 73 74 72 65 61 6d 20 65 70 68 65 6d 65 72 61 6c 2d 70 6f 72 74 20 65 6e 64 2d 63 61 6c 6c a.stream.ephemeral-port.end-call
a240 62 61 63 6b 29 29 29 29 0a 20 20 20 20 70 72 6f 63 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f back)))).....proc))..(defun.elno
a260 64 65 2d 72 6c 65 2d 2d 73 65 6e 64 65 72 20 28 73 74 72 65 61 6d 20 74 6f 2d 72 65 71 75 69 72 de-rle--sender.(stream.to-requir
a280 65 20 62 69 6e 64 69 6e 67 73 20 62 6f 64 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.bindings.body.................
a2a0 20 20 20 20 20 20 20 20 20 20 20 26 6f 70 74 69 6f 6e 61 6c 20 65 6e 64 2d 63 61 6c 6c 62 61 63 ...........&optional.end-callbac
a2c0 6b 29 0a 20 20 22 4d 61 6b 65 20 61 20 63 61 6c 6c 20 75 73 69 6e 67 20 61 20 63 6c 69 65 6e 74 k)..."Make.a.call.using.a.client
a2e0 20 74 6f 20 74 68 65 20 52 4c 45 20 73 65 72 76 65 72 20 65 6c 73 65 77 68 65 72 65 2e 0a 0a 54 .to.the.RLE.server.elsewhere...T
a300 68 65 20 52 4c 45 20 73 65 72 76 65 72 20 69 73 20 72 65 75 73 65 64 20 6f 76 65 72 20 54 4f 2d he.RLE.server.is.reused.over.TO-
a320 52 45 51 55 49 52 45 2c 20 69 66 20 69 74 27 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 65 78 69 REQUIRE,.if.it's.not.already.exi
a340 73 74 69 6e 67 2c 20 69 74 20 69 73 20 63 72 65 61 74 65 64 2e 22 0a 20 20 28 6c 65 74 20 28 28 sting,.it.is.created."...(let.((
a360 73 65 72 76 65 72 20 28 67 65 74 68 61 73 68 20 74 6f 2d 72 65 71 75 69 72 65 20 65 6c 6e 6f 64 server.(gethash.to-require.elnod
a380 65 2d 72 6c 65 2d 2d 73 65 72 76 65 72 73 29 29 29 0a 20 20 20 20 3b 3b 20 4d 61 6b 65 20 74 68 e-rle--servers))).....;;.Make.th
a3a0 65 20 73 65 72 76 65 72 20 69 66 20 77 65 20 64 6f 6e 27 74 20 68 61 76 65 20 69 74 0a 20 20 20 e.server.if.we.don't.have.it....
a3c0 20 28 75 6e 6c 65 73 73 20 73 65 72 76 65 72 0a 20 20 20 20 20 20 28 73 65 74 71 20 73 65 72 76 .(unless.server.......(setq.serv
a3e0 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75 74 68 61 73 68 20 74 6f 2d 72 65 71 75 69 er.............(puthash.to-requi
a400 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d re......................(elnode-
a420 72 6c 65 2d 2d 6d 61 6b 65 2d 73 65 72 76 65 72 20 28 63 61 72 20 74 6f 2d 72 65 71 75 69 72 65 rle--make-server.(car.to-require
a440 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 72 ))......................elnode-r
a460 6c 65 2d 2d 73 65 72 76 65 72 73 29 29 29 0a 20 20 20 20 3b 3b 20 4e 6f 77 20 6d 61 6b 65 20 74 le--servers))).....;;.Now.make.t
a480 68 65 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 0a 20 20 20 20 28 6c 65 74 20 28 he.call.to.the.server.....(let.(
a4a0 28 64 61 74 61 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65 71 (data.(make-hash-table.:test.'eq
a4c0 75 61 6c 29 29 29 0a 20 20 20 20 20 20 28 70 75 74 68 61 73 68 20 22 62 69 6e 64 69 6e 67 73 22 ual))).......(puthash."bindings"
a4e0 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 62 69 6e 64 69 6e 67 73 29 20 64 61 74 61 29 0a 20 20 .(format."%S".bindings).data)...
a500 20 20 20 20 28 70 75 74 68 61 73 68 20 22 6c 69 73 70 22 20 28 66 6f 72 6d 61 74 20 22 25 53 22 ....(puthash."lisp".(format."%S"
a520 20 62 6f 64 79 29 20 64 61 74 61 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 63 6c 69 65 6e 74 .body).data).......(let.((client
a540 2d 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c -connection..............(funcal
a560 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 73 65 72 l...............(process-get.ser
a580 76 65 72 20 3a 65 78 65 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 ver.:exec)...............data...
a5a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ............stream..............
a5c0 20 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 29 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 77 .end-callback))).........;;.If.w
a5e0 65 27 72 65 20 73 74 72 65 61 6d 69 6e 67 20 74 6f 20 65 6c 6e 6f 64 65 20 74 68 65 6e 20 77 65 e're.streaming.to.elnode.then.we
a600 20 6e 65 65 64 20 74 6f 20 6d 61 72 6b 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 .need.to.mark.the.connection....
a620 20 20 20 20 20 28 77 68 65 6e 20 28 70 72 6f 63 65 73 73 70 20 73 74 72 65 61 6d 29 0a 20 20 20 .....(when.(processp.stream)....
a640 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 73 .......(process-put............s
a660 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 tream............:elnode-child-p
a680 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e 74 2d 63 6f 6e 6e 65 63 74 rocess............client-connect
a6a0 69 6f 6e 29 29 29 29 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 61 ion))))))..(defvar.elnode-rle--a
a6c0 73 79 6e 63 2d 64 6f 2d 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 20 6e 69 6c 0a 20 20 22 55 73 65 64 sync-do-end-callback.nil..."Used
a6e0 20 62 79 20 60 65 6c 6e 6f 64 65 2d 61 73 79 6e 63 2d 64 6f 27 20 61 73 20 74 68 65 20 73 6f 75 .by.`elnode-async-do'.as.the.sou
a700 72 63 65 20 6f 66 20 61 6e 20 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 2e 0a 0a 54 68 69 73 20 69 73 rce.of.an.end-callback...This.is
a720 20 6a 75 73 74 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 66 6f 72 20 65 6e 64 20 73 69 67 6e .just.used.by.tests.for.end.sign
a740 61 6c 6c 69 6e 67 2e 22 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 61 73 79 6e alling.")..(defmacro.elnode-asyn
a760 63 2d 64 6f 20 28 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c-do.(stream....................
a780 20 20 20 20 20 20 20 20 72 65 71 75 69 72 65 73 20 72 65 71 75 69 72 65 6d 65 6e 74 73 0a 20 20 ........requires.requirements...
a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 69 74 68 2d 65 6e .........................with-en
a7c0 76 69 72 6f 6e 6d 65 6e 74 20 62 69 6e 64 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 vironment.bindings..............
a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 ..............do.&rest.body)..."
a800 45 78 65 63 75 74 65 20 74 68 65 20 42 4f 44 59 20 69 6e 20 61 20 72 65 6d 6f 74 65 20 45 6d 61 Execute.the.BODY.in.a.remote.Ema
a820 63 73 2e 0a 0a 54 68 65 20 53 54 52 45 41 4d 20 69 73 20 75 73 65 64 20 74 6f 20 68 61 6e 64 6c cs...The.STREAM.is.used.to.handl
a840 65 20 61 6e 79 20 6f 75 74 70 75 74 2e 0a 0a 54 68 65 20 52 45 51 55 49 52 45 4d 45 4e 54 53 20 e.any.output...The.REQUIREMENTS.
a860 69 73 20 61 20 6c 69 73 74 20 6f 66 20 70 72 6f 76 69 64 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 is.a.list.of.provide.symbol.name
a880 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0a 75 73 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73 68 s.that.will.be.used.to.establish
a8a0 20 74 68 65 20 72 69 67 68 74 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 69 6e 20 74 68 65 20 72 65 .the.right.environment.in.the.re
a8c0 6d 6f 74 65 2e 0a 0a 54 68 65 20 42 49 4e 44 49 4e 47 53 20 61 72 65 20 61 6c 73 6f 20 73 65 6e mote...The.BINDINGS.are.also.sen
a8e0 74 20 74 6f 20 74 68 65 20 72 65 6d 6f 74 65 2e 0a 0a 54 4f 44 4f 0a 0a 73 65 63 75 72 69 74 79 t.to.the.remote...TODO..security
a900 20 66 6f 72 20 74 68 65 20 72 65 6d 6f 74 65 20 75 73 69 6e 67 20 74 68 65 20 73 74 6f 72 65 64 .for.the.remote.using.the.stored
a920 20 6b 65 79 2e 22 0a 20 20 28 61 73 73 65 72 74 20 28 65 71 20 77 69 74 68 2d 65 6e 76 69 72 6f .key."...(assert.(eq.with-enviro
a940 6e 6d 65 6e 74 20 27 77 69 74 68 2d 65 6e 76 69 72 6f 6e 6d 65 6e 74 29 29 0a 20 20 28 61 73 73 nment.'with-environment))...(ass
a960 65 72 74 20 28 65 71 20 72 65 71 75 69 72 65 73 20 27 72 65 71 75 69 72 65 73 29 29 0a 20 20 28 ert.(eq.requires.'requires))...(
a980 61 73 73 65 72 74 20 28 65 71 20 64 6f 20 27 64 6f 29 29 0a 20 20 28 6c 65 74 20 28 28 62 6f 64 assert.(eq.do.'do))...(let.((bod
a9a0 79 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 62 6f 64 79 22 29 29 0a 20 20 20 20 20 20 20 yv.(make-symbol."body"))........
a9c0 20 28 62 69 6e 64 73 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 62 69 6e 64 73 22 29 29 0a .(bindsv.(make-symbol."binds")).
a9e0 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 73 ........(streamv.(make-symbol."s
aa00 74 72 65 61 6d 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 72 65 71 75 69 72 65 76 20 28 6d 61 6b treamv")).........(requirev.(mak
aa20 65 2d 73 79 6d 62 6f 6c 20 22 70 72 6f 76 69 64 69 6e 67 22 29 29 29 0a 20 20 20 20 60 28 6c 65 e-symbol."providing"))).....`(le
aa40 74 2a 20 28 28 2c 73 74 72 65 61 6d 76 20 2c 73 74 72 65 61 6d 29 0a 20 20 20 20 20 20 20 20 20 t*.((,streamv.,stream)..........
aa60 20 20 20 28 2c 62 6f 64 79 76 20 28 71 75 6f 74 65 20 28 70 72 6f 67 6e 20 2c 40 62 6f 64 79 29 ...(,bodyv.(quote.(progn.,@body)
aa80 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 62 69 6e 64 73 76 20 28 6c 69 73 74 0a 20 20 )).............(,bindsv.(list...
aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 40 28 6c 6f 6f 70 20 66 6f 72 20 ....................,@(loop.for.
aac0 70 20 69 6e 20 62 69 6e 64 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.in.bindings...................
aae0 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........collect................
ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 70 20 28 6c 69 73 74 70 20 ..............(if.(and.p.(listp.
ab20 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p)).............................
ab40 20 20 20 20 20 28 6c 69 73 74 20 27 6c 69 73 74 20 60 28 71 75 6f 74 65 20 2c 28 63 61 72 20 70 .....(list.'list.`(quote.,(car.p
ab60 29 29 20 28 63 61 64 72 20 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 )).(cadr.p))....................
ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 27 63 6f 6e 73 20 60 2c 70 20 6e 69 ..............(list.'cons.`,p.ni
aba0 6c 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 72 65 71 75 69 72 65 76 20 28 71 l))))).............(,requirev.(q
abc0 75 6f 74 65 20 2c 72 65 71 75 69 72 65 6d 65 6e 74 73 29 29 29 0a 20 20 20 20 20 20 20 28 65 6c uote.,requirements)))........(el
abe0 6e 6f 64 65 2d 72 6c 65 2d 2d 73 65 6e 64 65 72 0a 20 20 20 20 20 20 20 20 2c 73 74 72 65 61 6d node-rle--sender.........,stream
ac00 76 20 2c 72 65 71 75 69 72 65 76 20 2c 62 69 6e 64 73 76 20 2c 62 6f 64 79 76 0a 20 20 20 20 20 v.,requirev.,bindsv.,bodyv......
ac20 20 20 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 61 73 79 6e 63 2d 64 6f 2d 65 6e 64 2d 63 61 6c 6c ...elnode-rle--async-do-end-call
ac40 62 61 63 6b 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 77 69 74 68 2d 65 6c 6e 6f 64 65 2d back))))..(defmacro.with-elnode-
ac60 72 6c 65 2d 77 61 69 74 20 28 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 53 69 6d 70 6c 69 66 rle-wait.(&rest.body)..."Simplif
ac80 79 20 74 68 65 20 77 61 69 74 20 66 6f 72 20 52 4c 45 3b 20 66 6f 72 20 74 65 73 74 65 72 73 2e y.the.wait.for.RLE;.for.testers.
aca0 22 0a 20 20 60 28 75 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20 20 20 20 20 20 20 20 28 6c 65 "...`(unwind-protect.........(le
acc0 74 20 28 65 6e 64 65 64 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 t.(ended)...........(progn......
ace0 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 .......,@body)...........(while.
ad00 28 6e 6f 74 20 65 6e 64 65 64 29 20 28 73 69 74 2d 66 6f 72 20 31 29 29 29 0a 20 20 20 20 20 3b (not.ended).(sit-for.1)))......;
ad20 3b 20 46 49 58 4d 45 20 2d 20 63 61 6e 20 77 65 20 67 65 74 20 74 6f 20 74 68 65 20 6e 61 6d 65 ;.FIXME.-.can.we.get.to.the.name
ad40 20 6f 66 20 74 68 69 73 3f 0a 20 20 20 20 20 28 73 65 72 76 65 72 2d 65 76 61 6c 2d 61 74 20 22 .of.this?......(server-eval-at."
ad60 65 6c 6e 6f 64 65 2d 64 65 62 75 67 69 74 22 20 27 28 6b 69 6c 6c 2d 65 6d 61 63 73 29 29 29 29 elnode-debugit".'(kill-emacs))))
ad80 0a 0a 28 65 72 74 2d 64 65 66 74 65 73 74 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 6d 61 6b 65 2d ..(ert-deftest.elnode-rle--make-
ada0 73 65 72 76 65 72 20 28 29 0a 20 20 22 54 65 73 74 20 6d 61 6b 69 6e 67 20 61 6e 20 52 4c 45 20 server.()..."Test.making.an.RLE.
adc0 73 65 72 76 65 72 2e 0a 0a 44 6f 20 69 74 20 61 6c 6c 20 33 20 77 61 79 73 3a 20 64 69 72 65 63 server...Do.it.all.3.ways:.direc
ade0 74 6c 79 20 77 69 74 68 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 72 6c 65 2d 6d 61 6b 65 2d 73 65 tly.with.the.`elnode-rle-make-se
ae00 72 76 65 72 27 2c 0a 77 69 74 68 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 73 65 6e rver',.with.the.`elnode-rle--sen
ae20 64 65 72 27 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 77 69 74 68 20 74 der'.function.and.finally.with.t
ae40 68 65 20 75 73 65 72 0a 66 61 63 69 6e 67 20 6d 61 63 72 6f 20 60 65 6c 6e 6f 64 65 2d 61 73 79 he.user.facing.macro.`elnode-asy
ae60 6e 63 2d 64 6f 27 2e 0a 0a 54 68 65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 52 4c 45 nc-do'...The.output.from.the.RLE
ae80 20 63 61 6c 6c 20 69 73 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e 20 61 20 62 75 66 66 65 72 0a 61 .call.is.collected.in.a.buffer.a
aea0 6e 64 20 74 65 73 74 65 64 2e 22 0a 20 20 3a 65 78 70 65 63 74 65 64 2d 72 65 73 75 6c 74 20 3a nd.tested."...:expected-result.:
aec0 66 61 69 6c 65 64 0a 20 20 28 66 6c 65 74 20 28 28 6d 61 6b 65 2d 68 61 73 68 20 28 62 69 6e 64 failed...(flet.((make-hash.(bind
aee0 69 6e 67 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 20 28 6d 61 6b 65 2d ings)............(let.((h.(make-
af00 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65 71 75 61 6c 29 29 29 0a 20 20 20 20 20 hash-table.:test.'equal)))......
af20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 62 20 69 6e 20 62 69 6e 64 69 6e 67 73 0a ........(loop.for.b.in.bindings.
af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20 28 70 75 74 68 61 73 68 20 28 63 ..................do.(puthash.(c
af60 61 72 20 62 29 20 28 63 61 64 72 20 62 29 20 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ar.b).(cadr.b).h))..............
af80 68 29 29 29 0a 20 20 20 20 3b 3b 20 44 6f 20 69 74 20 52 41 57 0a 20 20 20 20 28 73 68 6f 75 6c h))).....;;.Do.it.RAW.....(shoul
afa0 64 0a 20 20 20 20 20 28 65 71 75 61 6c 0a 20 20 20 20 20 20 22 68 65 6c 6c 6f 22 0a 20 20 20 20 d......(equal......."hello".....
afc0 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 6c 65 74 ..(with-temp-buffer.........(let
afe0 2a 20 28 28 63 68 69 6c 64 2d 70 72 6f 63 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 6d 61 6b 65 *.((child-proc.(elnode-rle--make
b000 2d 73 65 72 76 65 72 20 27 65 6c 6e 6f 64 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -server.'elnode))...............
b020 20 28 64 61 65 6d 6f 6e 2d 68 61 6e 64 6c 65 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 63 68 .(daemon-handler.(process-get.ch
b040 69 6c 64 2d 70 72 6f 63 20 3a 64 61 65 6d 6f 6e 68 61 6e 64 6c 65 29 29 0a 20 20 20 20 20 20 20 ild-proc.:daemonhandle))........
b060 20 20 20 20 20 20 20 20 28 63 6f 6c 6c 65 63 74 2d 62 75 66 20 28 63 75 72 72 65 6e 74 2d 62 75 ........(collect-buf.(current-bu
b080 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 65 6c 6e 6f 64 65 2d 72 ffer)))...........(with-elnode-r
b0a0 6c 65 2d 77 61 69 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 0a 20 le-wait...............(funcall..
b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 63 68 69 6c 64 ..............(process-get.child
b0e0 2d 70 72 6f 63 20 3a 65 78 65 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b -proc.:exec)................(mak
b100 65 2d 68 61 73 68 20 27 28 28 22 62 69 6e 64 69 6e 67 73 22 20 22 28 28 61 20 5c 22 68 65 6c 6c e-hash.'(("bindings"."((a.\"hell
b120 6f 5c 22 29 29 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 o\"))").........................
b140 20 20 20 20 28 22 6c 69 73 70 22 20 22 28 70 72 69 6e 63 20 5c 22 68 65 6c 6c 6f 5c 22 29 22 29 ....("lisp"."(princ.\"hello\")")
b160 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 ))................(current-buffe
b180 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 64 72 29 20 r)................(lambda.(hdr).
b1a0 3b 20 74 68 65 20 65 6e 64 20 70 72 6f 63 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.the.end.proc..................
b1c0 28 73 65 74 71 20 65 6e 64 65 64 20 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 62 75 66 (setq.ended.t))))...........(buf
b1e0 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 fer-substring.(point-min).(point
b200 2d 6d 61 78 29 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 44 6f 20 69 74 20 76 69 61 20 74 68 65 20 -max)))))).....;;.Do.it.via.the.
b220 73 65 6e 64 65 72 20 66 75 6e 63 0a 20 20 20 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 28 65 71 sender.func.....(should......(eq
b240 75 61 6c 0a 20 20 20 20 20 20 22 34 30 22 0a 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d ual......."40".......(with-temp-
b260 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 65 6c 6e 6f 64 65 2d 72 6c 65 2d buffer.........(with-elnode-rle-
b280 77 61 69 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 6c 6e 6f 64 65 2d 72 wait.............(let.((elnode-r
b2a0 6c 65 2d 2d 73 65 72 76 65 72 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 le--servers.(make-hash-table.:te
b2c0 73 74 20 27 65 71 75 61 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f st.'equal)))...............(elno
b2e0 64 65 2d 72 6c 65 2d 2d 73 65 6e 64 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 de-rle--sender................(c
b300 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 urrent-buffer)................'(
b320 65 6c 6e 6f 64 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 28 61 20 31 30 29 20 elnode)................'((a.10).
b340 28 62 20 32 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 6c 65 74 20 28 28 63 (b.20))................'(let.((c
b360 20 33 30 29 29 28 70 72 69 6e 63 20 28 2b 20 63 20 61 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 .30))(princ.(+.c.a)))...........
b380 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 65 61 64 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 .....(lambda.(header)...........
b3a0 20 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 65 2d 72 6c 65 3a 20 61 6c 6c .......(message."elnode-rle:.all
b3c0 20 64 6f 6e 65 21 22 29 28 73 65 74 71 20 65 6e 64 65 64 20 74 29 29 29 29 29 0a 20 20 20 20 20 .done!")(setq.ended.t)))))......
b3e0 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 ...(buffer-substring.(point-min)
b400 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 44 6f 20 69 74 20 77 69 .(point-max))))).....;;.Do.it.wi
b420 74 68 20 74 68 65 20 6d 61 63 72 6f 0a 20 20 20 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 28 65 th.the.macro.....(should......(e
b440 71 75 61 6c 0a 20 20 20 20 20 20 22 68 65 6c 6c 6f 22 0a 20 20 20 20 20 20 28 77 69 74 68 2d 74 qual......."hello".......(with-t
b460 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 65 6c 6e 6f 64 65 2d emp-buffer.........(with-elnode-
b480 72 6c 65 2d 77 61 69 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 6c 6e 6f rle-wait.............(let.((elno
b4a0 64 65 2d 72 6c 65 2d 2d 73 65 72 76 65 72 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 de-rle--servers.(make-hash-table
b4c0 20 3a 74 65 73 74 20 27 65 71 75 61 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .:test.'equal)).................
b4e0 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 61 73 79 6e 63 2d 64 6f 2d 65 6e 64 2d 63 61 6c 6c ..(elnode-rle--async-do-end-call
b500 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 back....................(lambda.
b520 28 68 65 61 64 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d (header)......................(m
b540 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 65 2d 72 6c 65 3a 20 69 6e 20 74 68 65 20 64 79 6e 20 62 essage."elnode-rle:.in.the.dyn.b
b560 6f 75 6e 64 20 63 61 6c 6c 62 61 63 6b 21 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ound.callback!")................
b580 20 20 20 20 20 20 28 73 65 74 71 20 65 6e 64 65 64 20 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 ......(setq.ended.t)))).........
b5a0 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 73 79 6e 63 2d 64 6f 0a 20 20 20 20 20 20 20 20 20 ......(elnode-async-do..........
b5c0 20 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 ......(current-buffer)..........
b5e0 20 20 20 20 20 20 72 65 71 75 69 72 65 73 20 28 65 6c 6e 6f 64 65 20 65 6e 6f 64 65 2d 72 6c 65 ......requires.(elnode.enode-rle
b600 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 69 74 68 2d 65 6e 76 69 72 6f 6e 6d 65 6e )................with-environmen
b620 74 20 28 28 61 20 31 30 29 28 62 20 32 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.((a.10)(b.20))................
b640 64 6f 20 28 70 72 69 6e 63 20 22 68 65 6c 6c 6f 22 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 62 do.(princ."hello")))).........(b
b660 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 uffer-substring.(point-min).(poi
b680 6e 74 2d 6d 61 78 29 29 29 29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d nt-max)))))))..(provide.'elnode-
b6a0 72 6c 65 29 0a 0a 3b 3b 20 65 6c 6e 6f 64 65 2d 72 6c 65 20 65 6e 64 73 20 68 65 72 65 0a 00 00 rle)..;;.elnode-rle.ends.here...
b6c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b6e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b7a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b7c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b7e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b800 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 74 65 73 74 elnode-20190702.1509/elnode-test
b820 73 75 70 70 6f 72 74 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 support.el......................
b840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b860 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
b880 30 30 30 34 35 30 34 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 36 34 36 37 00 20 30 00 00 00 0004504.00000000000.016467..0...
b8a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b8c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b8e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b900 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
b920 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
b940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b9a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b9c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b9e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
ba00 3b 3b 3b 20 74 65 73 74 20 73 75 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 65 ;;;.test.support.functions.for.e
ba20 6c 6e 6f 64 65 0a 0a 28 72 65 71 75 69 72 65 20 27 6e 6f 66 6c 65 74 29 0a 0a 28 64 65 66 6d 61 lnode..(require.'noflet)..(defma
ba40 63 72 6f 20 65 6c 6e 6f 64 65 2d 73 69 6e 6b 20 28 68 74 74 70 63 6f 6e 20 26 72 65 73 74 20 62 cro.elnode-sink.(httpcon.&rest.b
ba60 6f 64 79 29 0a 20 20 22 53 69 6e 6b 20 74 68 65 20 48 54 54 50 20 72 65 73 70 6f 6e 73 65 20 66 ody)..."Sink.the.HTTP.response.f
ba80 72 6f 6d 20 42 4f 44 59 2e 0a 0a 4f 75 74 70 75 74 20 74 6f 20 60 65 6c 6e 6f 64 65 2d 68 74 74 rom.BODY...Output.to.`elnode-htt
baa0 70 2d 73 74 61 72 74 27 2c 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 p-start',.`elnode-http-send-stri
bac0 6e 67 27 20 61 6e 64 0a 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 27 20 69 73 20 ng'.and.`elnode-http-return'.is.
bae0 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 74 65 72 6e 61 6c 6c 6c 79 collected.and.stored.internallly
bb00 2e 0a 0a 57 68 65 6e 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 27 20 69 73 20 ...When.`elnode-http-return'.is.
bb20 63 61 6c 6c 65 64 20 74 68 65 20 66 6f 72 6d 20 65 6e 64 73 20 77 69 74 68 20 61 20 73 74 72 69 called.the.form.ends.with.a.stri
bb40 6e 67 0a 72 65 73 75 6c 74 20 6f 66 20 77 68 61 74 65 76 65 72 20 77 61 73 20 73 65 6e 74 20 61 ng.result.of.whatever.was.sent.a
bb60 73 20 74 68 65 20 72 65 73 70 6f 6e 73 65 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73 0a 70 s.the.response...The.string.is.p
bb80 72 6f 70 65 72 74 69 7a 65 64 20 77 69 74 68 20 74 68 65 20 68 65 61 64 65 72 20 73 65 6e 74 20 ropertized.with.the.header.sent.
bba0 74 6f 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 27 2e 22 0a 20 20 28 64 65 63 6c to.`elnode-http-start'."...(decl
bbc0 61 72 65 20 28 69 6e 64 65 6e 74 20 31 29 28 64 65 62 75 67 20 28 73 65 78 70 20 26 72 65 73 74 are.(indent.1)(debug.(sexp.&rest
bbe0 20 66 6f 72 6d 29 29 29 0a 20 20 60 28 6c 65 74 20 28 72 65 73 20 72 65 73 68 64 72 29 0a 20 20 .form)))...`(let.(res.reshdr)...
bc00 20 20 20 28 63 61 74 63 68 20 3a 65 6c 6e 6f 64 65 2d 73 69 6e 6b 2d 72 65 74 0a 20 20 20 20 20 ...(catch.:elnode-sink-ret......
bc20 20 20 28 6e 6f 66 6c 65 74 20 28 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 28 68 ..(noflet.((elnode-http-start.(h
bc40 74 74 70 63 6f 6e 20 73 74 61 74 75 73 20 26 72 65 73 74 20 68 65 61 64 65 72 29 0a 20 20 20 20 ttpcon.status.&rest.header).....
bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 72 65 73 68 64 72 20 0a 20 20 20 20 ..............(setq.reshdr......
bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6b 76 61 6c 69 73 74 2d 3e 70 6c ....................(kvalist->pl
bca0 69 73 74 20 68 65 61 64 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 ist.header))).................(e
bcc0 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 2d 73 65 74 20 28 68 74 74 70 63 6f 6e 20 68 lnode-http-header-set.(httpcon.h
bce0 65 61 64 65 72 20 26 6f 70 74 69 6f 6e 61 6c 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 eader.&optional.value)..........
bd00 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 72 65 73 68 64 72 0a 20 20 20 20 20 20 20 20 20 20 .........(setq.reshdr...........
bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 70 75 74 20 28 69 6e 74 65 72 6e ..............(plist-put.(intern
bd40 20 28 63 6f 6e 63 61 74 20 22 3a 22 20 72 65 73 68 64 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 .(concat.":".reshdr))...........
bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 20 .........................header.
bd80 76 61 6c 75 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 value))).................(elnode
bda0 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 68 74 74 70 63 6f 6e 20 64 61 74 61 29 -http-send-string.(httpcon.data)
bdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 72 65 73 20 28 61 70 ...................(setq.res.(ap
bde0 70 6c 79 20 27 70 72 6f 70 65 72 74 69 7a 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ply.'propertize.................
be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 72 65 73 20 64 ...................(concat.res.d
be20 61 74 61 29 20 72 65 73 68 64 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ata).reshdr))).................(
be40 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 elnode-http-return.(httpcon.&opt
be60 69 6f 6e 61 6c 20 64 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 ional.data)...................(w
be80 68 65 6e 20 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 hen.data.....................(se
bea0 74 71 20 72 65 73 20 28 61 70 70 6c 79 20 27 70 72 6f 70 65 72 74 69 7a 65 0a 20 20 20 20 20 20 tq.res.(apply.'propertize.......
bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ...............................(
bee0 63 6f 6e 63 61 74 20 72 65 73 20 64 61 74 61 29 20 72 65 73 68 64 72 29 29 29 0a 20 20 20 20 20 concat.res.data).reshdr)))......
bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 68 72 6f 77 20 3a 65 6c 6e 6f 64 65 2d 73 69 6e 6b .............(throw.:elnode-sink
bf20 2d 72 65 74 20 3a 65 6e 64 29 29 29 0a 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 0a 20 -ret.:end)))..........,@body))..
bf40 20 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 66 61 6b 65 ....res))..(defmacro.elnode-fake
bf60 2d 70 61 72 61 6d 73 20 28 68 74 74 70 63 6f 6e 20 70 61 72 61 6d 73 2d 6c 69 73 74 20 26 72 65 -params.(httpcon.params-list.&re
bf80 73 74 20 62 6f 64 79 29 0a 20 20 22 46 61 6b 65 20 74 68 65 20 50 41 52 41 4d 2d 42 49 4e 44 49 st.body)..."Fake.the.PARAM-BINDI
bfa0 4e 47 53 20 61 6e 64 20 65 76 61 6c 75 61 74 65 20 42 4f 44 59 2e 0a 0a 50 41 52 41 4d 2d 42 49 NGS.and.evaluate.BODY...PARAM-BI
bfc0 4e 44 49 4e 47 53 20 69 73 20 61 6e 20 41 4c 49 53 54 20 77 69 74 68 20 73 74 72 69 6e 67 20 63 NDINGS.is.an.ALIST.with.string.c
bfe0 61 72 73 20 66 6f 72 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 73 0a 61 6e 64 20 73 74 72 69 ars.for.parameter.names.and.stri
c000 6e 67 20 63 64 72 73 20 66 6f 72 20 76 61 6c 75 65 73 2e 20 20 41 20 63 64 72 20 6f 66 20 61 20 ng.cdrs.for.values...A.cdr.of.a.
c020 6c 69 73 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 70 72 6f 76 69 64 65 20 61 20 73 74 list.can.be.used.to.provide.a.st
c040 72 69 6e 67 20 76 61 6c 75 65 20 77 69 74 68 20 61 20 70 72 6f 70 65 72 74 79 20 6c 69 73 74 2c ring.value.with.a.property.list,
c060 20 66 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 20 20 27 28 28 5c 22 70 61 72 61 6d 31 5c 22 20 2e .for.example:....'((\"param1\"..
c080 20 5c 22 76 61 6c 75 65 5c 22 20 29 0a 20 20 20 20 28 5c 22 70 61 72 61 6d 32 5c 22 20 5c 22 76 .\"value\".).....(\"param2\".\"v
c0a0 61 6c 75 65 5c 22 20 3a 65 6c 6e 6f 64 65 2d 66 69 6c 65 6e 61 6d 65 20 5c 22 73 6f 6d 65 66 69 alue\".:elnode-filename.\"somefi
c0c0 6c 65 2e 74 78 74 5c 22 29 29 0a 0a 4e 6f 74 65 20 74 68 65 20 66 69 72 73 74 20 70 61 72 61 6d le.txt\"))..Note.the.first.param
c0e0 65 74 65 72 20 69 73 20 61 6e 20 69 6d 70 72 6f 70 65 72 20 6c 69 73 74 2e 0a 0a 50 41 52 41 4d eter.is.an.improper.list...PARAM
c100 2d 42 49 4e 44 49 4e 47 53 20 73 68 6f 75 6c 64 20 62 65 20 71 75 6f 74 65 64 2e 22 0a 20 20 28 -BINDINGS.should.be.quoted."...(
c120 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 32 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 declare.(indent.2)............(d
c140 65 62 75 67 20 28 73 65 78 70 20 73 65 78 70 20 26 72 65 73 74 20 66 6f 72 6d 29 29 29 0a 20 20 ebug.(sexp.sexp.&rest.form)))...
c160 60 28 6c 65 74 20 28 28 2c 68 74 74 70 63 6f 6e 20 2c 70 61 72 61 6d 73 2d 6c 69 73 74 29 29 0a `(let.((,httpcon.,params-list)).
c180 20 20 20 20 20 28 6e 6f 66 6c 65 74 20 28 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d .....(noflet.((elnode-http-param
c1a0 20 28 68 74 74 70 63 20 70 61 72 61 6d 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 .(httpc.param-name).............
c1c0 20 20 20 20 28 69 66 20 28 65 71 20 68 74 74 70 63 20 2c 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 ....(if.(eq.httpc.,httpcon).....
c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 76 20 28 6b 76 61 20 70 61 ................(let.((v.(kva.pa
c200 72 61 6d 2d 6e 61 6d 65 20 2c 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ram-name.,httpcon)))............
c220 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........(cond................
c240 20 20 20 20 20 20 20 20 20 28 28 6c 69 73 74 70 20 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 .........((listp.v).............
c260 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70 6c 79 20 27 70 72 6f 70 65 72 74 69 7a 65 20 .............(apply.'propertize.
c280 28 63 61 72 20 76 29 20 28 63 64 72 20 76 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (car.v).(cdr.v)))...............
c2a0 20 20 20 20 20 20 20 20 20 20 28 74 20 76 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........(t.v)))...............
c2c0 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 74 68 69 73 2d 66 6e 20 68 74 74 70 63 6f 6e 20 70 ......(funcall.this-fn.httpcon.p
c2e0 61 72 61 6d 2d 6e 61 6d 65 29 29 29 29 0a 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 0a 0a aram-name))))........,@body)))..
c300 0a 28 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d 74 65 73 74 73 75 70 70 6f 72 74 29 0a 0a .(provide.'elnode-testsupport)..
c320 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 74 65 73 74 73 75 70 70 6f 72 74 2e 65 6c 20 65 6e 64 73 20 68 ;;;.elnode-testsupport.el.ends.h
c340 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ere.............................
c360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c3a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c3c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c3e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c400 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2d 77 69 6b 69 elnode-20190702.1509/elnode-wiki
c420 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .el.............................
c440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c460 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
c480 30 30 31 36 35 36 34 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 35 30 32 37 00 20 30 00 00 00 0016564.00000000000.015027..0...
c4a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c4c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c4e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c500 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
c520 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
c540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c5a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c5c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c5e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c600 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 2e 65 6c 20 2d 2d 2d 20 61 20 77 69 6b 69 20 77 69 ;;;.elnode-wiki.el.---.a.wiki.wi
c620 74 68 20 45 6c 6e 6f 64 65 20 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 th.Elnode..-*-.lexical-binding:.
c640 74 20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32 30 31 30 2c 20 32 30 t.-*-..;;.Copyright.(C).2010,.20
c660 31 31 2c 20 32 30 31 32 20 20 4e 69 63 20 46 65 72 72 69 65 72 0a 0a 3b 3b 20 41 75 74 68 6f 72 11,.2012..Nic.Ferrier..;;.Author
c680 3a 20 4e 69 63 20 46 65 72 72 69 65 72 20 3c 6e 66 65 72 72 69 65 72 40 66 65 72 72 69 65 72 2e :.Nic.Ferrier.<nferrier@ferrier.
c6a0 6d 65 2e 75 6b 3e 0a 3b 3b 20 4d 61 69 6e 74 61 69 6e 65 72 3a 20 4e 69 63 20 46 65 72 72 69 65 me.uk>.;;.Maintainer:.Nic.Ferrie
c6c0 72 20 3c 6e 66 65 72 72 69 65 72 40 66 65 72 72 69 65 72 2e 6d 65 2e 75 6b 3e 0a 3b 3b 20 43 72 r.<nferrier@ferrier.me.uk>.;;.Cr
c6e0 65 61 74 65 64 3a 20 35 74 68 20 4f 63 74 6f 62 65 72 20 32 30 31 30 0a 3b 3b 20 4b 65 79 77 6f eated:.5th.October.2010.;;.Keywo
c700 72 64 73 3a 20 6c 69 73 70 2c 20 68 74 74 70 2c 20 68 79 70 65 72 6d 65 64 69 61 0a 0a 3b 3b 20 rds:.lisp,.http,.hypermedia..;;.
c720 54 68 69 73 20 66 69 6c 65 20 69 73 20 4e 4f 54 20 70 61 72 74 20 6f 66 20 47 4e 55 20 45 6d 61 This.file.is.NOT.part.of.GNU.Ema
c740 63 73 2e 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66 cs...;;.This.program.is.free.sof
c760 74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 tware;.you.can.redistribute.it.a
c780 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 nd/or.modify.;;.it.under.the.ter
c7a0 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 ms.of.the.GNU.General.Public.Lic
c7c0 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65 ense.as.published.by.;;.the.Free
c7e0 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 .Software.Foundation,.either.ver
c800 73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74 sion.3.of.the.License,.or.;;.(at
c820 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e .your.option).any.later.version.
c840 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 ..;;.This.program.is.distributed
c860 20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 .in.the.hope.that.it.will.be.use
c880 66 75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 ful,.;;.but.WITHOUT.ANY.WARRANTY
c8a0 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 ;.without.even.the.implied.warra
c8c0 6e 74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 nty.of.;;.MERCHANTABILITY.or.FIT
c8e0 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 NESS.FOR.A.PARTICULAR.PURPOSE...
c900 53 65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 See.the.;;.GNU.General.Public.Li
c920 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20 cense.for.more.details...;;.You.
c940 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74 should.have.received.a.copy.of.t
c960 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b he.GNU.General.Public.License.;;
c980 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f .along.with.this.program...If.no
c9a0 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e t,.see.<http://www.gnu.org/licen
c9c0 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 3b 3b 0a 3b 3b 20 54 68 ses/>...;;;.Commentary:.;;.;;.Th
c9e0 69 73 20 69 73 20 61 20 57 69 6b 69 20 45 6e 67 69 6e 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 77 is.is.a.Wiki.Engine.completely.w
ca00 72 69 74 74 65 6e 20 69 6e 20 45 6d 61 63 73 4c 69 73 70 2c 20 75 73 69 6e 67 20 45 6c 6e 6f 64 ritten.in.EmacsLisp,.using.Elnod
ca20 65 0a 3b 3b 20 61 73 20 61 20 73 65 72 76 65 72 2e 0a 3b 3b 0a 3b 3b 3b 20 53 6f 75 72 63 65 20 e.;;.as.a.server..;;.;;;.Source.
ca40 63 6f 64 65 0a 3b 3b 0a 3b 3b 20 65 6c 6e 6f 64 65 27 73 20 63 6f 64 65 20 63 61 6e 20 62 65 20 code.;;.;;.elnode's.code.can.be.
ca60 66 6f 75 6e 64 20 68 65 72 65 3a 0a 3b 3b 20 20 20 68 74 74 70 3a 2f 2f 67 69 74 68 75 62 2e 63 found.here:.;;...http://github.c
ca80 6f 6d 2f 6e 69 63 66 65 72 72 69 65 72 2f 65 6c 6e 6f 64 65 0a 0a 3b 3b 3b 20 53 74 79 6c 65 20 om/nicferrier/elnode..;;;.Style.
caa0 6e 6f 74 65 0a 3b 3b 0a 3b 3b 20 54 68 69 73 20 63 6f 64 65 73 20 75 73 65 73 20 74 68 65 20 45 note.;;.;;.This.codes.uses.the.E
cac0 6d 61 63 73 20 73 74 79 6c 65 20 6f 66 3a 0a 3b 3b 0a 3b 3b 20 20 20 20 65 6c 6e 6f 64 65 2d 77 macs.style.of:.;;.;;....elnode-w
cae0 69 6b 69 2d 2d 70 72 69 76 61 74 65 2d 66 75 6e 63 74 69 6f 6e 0a 3b 3b 0a 3b 3b 20 66 6f 72 20 iki--private-function.;;.;;.for.
cb00 70 72 69 76 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 0a private.functions....;;;.Code:..
cb20 28 72 65 71 75 69 72 65 20 27 65 6c 6e 6f 64 65 29 0a 28 72 65 71 75 69 72 65 20 27 64 62 29 0a (require.'elnode).(require.'db).
cb40 28 65 76 61 6c 2d 77 68 65 6e 2d 63 6f 6d 70 69 6c 65 20 27 66 61 6b 69 72 29 0a 28 72 65 71 75 (eval-when-compile.'fakir).(requ
cb60 69 72 65 20 27 63 72 65 6f 6c 65 20 6e 69 6c 20 27 74 29 0a 3b 3b 28 72 65 71 75 69 72 65 20 27 ire.'creole.nil.'t).;;(require.'
cb80 76 63 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 vc)..(defgroup.elnode-wikiserver
cba0 20 6e 69 6c 0a 20 20 22 41 20 57 69 6b 69 20 73 65 72 76 65 72 20 77 72 69 74 74 65 6e 20 77 69 .nil..."A.Wiki.server.written.wi
cbc0 74 68 20 45 6c 6e 6f 64 65 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 29 0a 0a 3b th.Elnode."...:group.'elnode)..;
cbe0 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 77 ;;###autoload.(defconst.elnode-w
cc00 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f 6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 28 65 78 ikiserver-wikiroot-default...(ex
cc20 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 65 6c 6e 6f 64 65 2d 63 6f pand-file-name.(concat.elnode-co
cc40 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 20 22 77 69 6b 69 2f 22 29 29 0a 20 20 22 54 68 65 20 nfig-directory."wiki/"))..."The.
cc60 64 65 66 61 75 6c 74 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 77 69 6b 69 20 72 6f 6f default.location.of.the.wiki.roo
cc80 74 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 74 68 t...This.is.used.to.detect.wheth
cca0 65 72 20 65 6c 6e 6f 64 65 20 6e 65 65 64 73 20 74 6f 20 63 72 65 61 74 65 20 74 68 69 73 0a 64 er.elnode.needs.to.create.this.d
ccc0 69 72 65 63 74 6f 72 79 20 6f 72 20 6e 6f 74 2e 22 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f irectory.or.not.")..;;;###autolo
cce0 61 64 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d ad.(defcustom.elnode-wikiserver-
cd00 77 69 6b 69 72 6f 6f 74 0a 20 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b wikiroot...elnode-wikiserver-wik
cd20 69 72 6f 6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 22 54 68 65 20 72 6f 6f 74 20 66 6f 72 20 74 68 iroot-default..."The.root.for.th
cd40 65 20 45 6c 6e 6f 64 65 20 77 69 6b 69 20 66 69 6c 65 73 2e 0a 0a 54 68 69 73 20 69 73 20 77 68 e.Elnode.wiki.files...This.is.wh
cd60 65 72 65 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 20 73 65 72 76 65 73 20 77 69 6b ere.elnode-wikiserver.serves.wik
cd80 69 20 66 69 6c 65 73 20 66 72 6f 6d 2e 22 0a 20 20 3a 74 79 70 65 20 27 28 64 69 72 65 63 74 6f i.files.from."...:type.'(directo
cda0 72 79 29 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 29 ry)...:group.'elnode-wikiserver)
cdc0 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 62 ..(defcustom.elnode-wikiserver-b
cde0 6f 64 79 2d 68 65 61 64 65 72 0a 20 20 22 3c 64 69 76 20 69 64 3d 27 74 6f 70 27 3e 3c 2f 64 69 ody-header..."<div.id='top'></di
ce00 76 3e 22 0a 20 20 22 48 54 4d 4c 20 42 4f 44 59 20 70 72 65 61 6d 61 62 6c 65 20 6f 66 20 61 20 v>"..."HTML.BODY.preamable.of.a.
ce20 72 65 6e 64 65 72 65 64 20 57 69 6b 69 20 70 61 67 65 2e 22 0a 20 20 3a 74 79 70 65 20 27 28 73 rendered.Wiki.page."...:type.'(s
ce40 74 72 69 6e 67 29 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 tring)...:group.'elnode-wikiserv
ce60 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 er)..(defcustom.elnode-wikiserve
ce80 72 2d 62 6f 64 79 2d 66 6f 6f 74 65 72 0a 20 20 22 3c 64 69 76 20 69 64 3d 27 66 6f 6f 74 65 72 r-body-footer..."<div.id='footer
cea0 27 3e 0a 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 27 7b 7b 70 61 67 65 7d 7d 27 20 6d 65 74 68 6f '>.<form.action='{{page}}'.metho
cec0 64 3d 27 50 4f 53 54 27 3e 0a 3c 66 69 65 6c 64 73 65 74 3e 0a 3c 6c 65 67 65 6e 64 3e 45 64 69 d='POST'>.<fieldset>.<legend>Edi
cee0 74 20 74 68 69 73 20 70 61 67 65 3c 2f 6c 65 67 65 6e 64 3e 0a 3c 74 65 78 74 61 72 65 61 20 20 t.this.page</legend>.<textarea..
cf00 63 6f 6c 73 3d 27 38 30 27 20 72 6f 77 73 3d 27 32 30 27 20 6e 61 6d 65 3d 27 77 69 6b 69 74 65 cols='80'.rows='20'.name='wikite
cf20 78 74 27 3e 0a 7b 7b 74 65 78 74 7d 7d 0a 3c 2f 74 65 78 74 61 72 65 61 3e 3c 62 72 2f 3e 0a 3c xt'>.{{text}}.</textarea><br/>.<
cf40 69 6e 70 75 74 20 74 79 70 65 3d 27 74 65 78 74 27 20 6e 61 6d 65 3d 27 63 6f 6d 6d 65 6e 74 27 input.type='text'.name='comment'
cf60 20 76 61 6c 75 65 3d 27 27 2f 3e 0a 3c 69 6e 70 75 74 20 74 79 70 65 3d 27 73 75 62 6d 69 74 27 .value=''/>.<input.type='submit'
cf80 20 6e 61 6d 65 3d 27 73 61 76 65 27 20 76 61 6c 75 65 3d 27 73 61 76 65 27 2f 3e 0a 3c 69 6e 70 .name='save'.value='save'/>.<inp
cfa0 75 74 20 74 79 70 65 3d 27 73 75 62 6d 69 74 27 20 6e 61 6d 65 3d 27 70 72 65 76 69 65 77 27 20 ut.type='submit'.name='preview'.
cfc0 76 61 6c 75 65 3d 27 70 72 65 76 69 65 77 27 2f 3e 0a 3c 2f 66 69 65 6c 64 73 65 74 3e 0a 3c 2f value='preview'/>.</fieldset>.</
cfe0 66 6f 72 6d 3e 0a 3c 2f 64 69 76 3e 22 0a 20 20 22 48 54 4d 4c 20 42 4f 44 59 20 66 6f 6f 74 74 form>.</div>"..."HTML.BODY.foott
d000 65 72 20 66 6f 72 20 61 20 72 65 6e 64 65 72 65 64 20 57 69 6b 69 20 70 61 67 65 2e 22 0a 20 20 er.for.a.rendered.Wiki.page."...
d020 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 29 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 :type.'(string)...:group.'elnode
d040 2d 77 69 6b 69 73 65 72 76 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d -wikiserver)..(defcustom.elnode-
d060 77 69 6b 69 73 65 72 76 65 72 2d 62 6f 64 79 2d 66 6f 6f 74 65 72 2d 6e 6f 74 2d 6c 6f 67 67 65 wikiserver-body-footer-not-logge
d080 64 69 6e 0a 20 20 22 3c 64 69 76 20 69 64 3d 27 66 6f 6f 74 65 72 27 3e 0a 20 20 20 20 3c 61 20 din..."<div.id='footer'>.....<a.
d0a0 68 72 65 66 3d 27 2f 77 69 6b 69 2f 6c 6f 67 69 6e 2f 3f 72 65 64 69 72 65 63 74 3d 7b 7b 70 61 href='/wiki/login/?redirect={{pa
d0c0 67 65 7d 7d 27 3e 6c 6f 67 69 6e 20 74 6f 20 65 64 69 74 3c 2f 61 3e 0a 20 20 3c 2f 64 69 76 3e ge}}'>login.to.edit</a>...</div>
d0e0 22 0a 20 20 22 48 54 4d 4c 20 42 4f 44 59 20 66 6f 6f 74 74 65 72 20 66 6f 72 20 61 20 72 65 6e "..."HTML.BODY.footter.for.a.ren
d100 64 65 72 65 64 20 57 69 6b 69 20 70 61 67 65 2e 22 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 dered.Wiki.page."...:type.'(stri
d120 6e 67 29 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 29 ng)...:group.'elnode-wikiserver)
d140 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 73 65 74 75 70 20 28 29 0a 20 ..(defun.elnode-wiki--setup.()..
d160 20 22 53 65 74 75 70 20 74 68 65 20 77 69 6b 69 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 69 ."Setup.the.wiki."...(elnode--di
d180 72 2d 73 65 74 75 70 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f r-setup.elnode-wikiserver-wikiro
d1a0 6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 ot......................elnode-w
d1c0 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f 6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 20 20 20 ikiserver-wikiroot-default......
d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 66 61 75 6c 74 2d 77 69 6b 69 2d 69 6e ................"default-wiki-in
d200 64 65 78 2e 63 72 65 6f 6c 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dex.creole".....................
d220 20 22 69 6e 64 65 78 2e 63 72 65 6f 6c 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ."index.creole".................
d240 20 20 20 20 20 22 64 65 66 61 75 6c 74 2d 77 69 6b 69 2d 6c 6f 67 6f 2e 67 69 66 22 29 29 0a 0a ....."default-wiki-logo.gif"))..
d260 3b 3b 20 49 6e 74 65 72 6e 61 6c 20 77 69 6b 69 20 73 74 75 66 66 0a 0a 28 64 65 66 76 61 72 20 ;;.Internal.wiki.stuff..(defvar.
d280 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 64 62 0a 20 20 28 64 62 2d 6d 61 6b 65 0a 20 20 20 60 28 64 elnode-wiki-db...(db-make....`(d
d2a0 62 2d 68 61 73 68 0a 20 20 20 20 20 3a 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 20 2c 28 65 78 70 b-hash......:filename......,(exp
d2c0 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 65 6c 6e and-file-name........(concat.eln
d2e0 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 20 22 65 6c 6e 6f 64 65 2d 77 69 6b ode-config-directory."elnode-wik
d300 69 2d 61 75 74 68 22 29 29 29 29 29 0a 0a 3b 3b 20 44 65 66 69 6e 65 20 74 68 65 20 61 75 74 68 i-auth")))))..;;.Define.the.auth
d320 65 6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 20 66 6f 72 20 74 68 65 20 77 69 6b 69 0a 28 entication.scheme.for.the.wiki.(
d340 65 6c 6e 6f 64 65 2d 64 65 66 61 75 74 68 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 75 74 68 elnode-defauth.'elnode-wiki-auth
d360 0a 20 20 3a 61 75 74 68 2d 64 62 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 64 62 0a 20 20 3a 72 65 ...:auth-db.elnode-wiki-db...:re
d380 64 69 72 65 63 74 20 22 2f 77 69 6b 69 2f 6c 6f 67 69 6e 2f 22 29 0a 0a 28 64 65 66 75 6e 20 65 direct."/wiki/login/")..(defun.e
d3a0 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 28 68 74 74 70 63 6f 6e 20 77 69 6b 69 70 61 67 lnode-wiki-page.(httpcon.wikipag
d3c0 65 20 26 6f 70 74 69 6f 6e 61 6c 20 70 61 67 65 69 6e 66 6f 29 0a 20 20 22 43 72 65 6f 6c 65 20 e.&optional.pageinfo)..."Creole.
d3e0 72 65 6e 64 65 72 20 61 20 57 49 4b 49 50 41 47 45 20 62 61 63 6b 20 74 6f 20 74 68 65 20 48 54 render.a.WIKIPAGE.back.to.the.HT
d400 54 50 43 4f 4e 2e 22 0a 20 20 3b 3b 20 4f 74 68 65 72 77 69 73 65 20 6a 75 73 74 20 64 6f 20 69 TPCON."...;;.Otherwise.just.do.i
d420 74 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 t...(elnode-http-start.httpcon.2
d440 30 30 20 60 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 00.`("Content-type"..."text/html
d460 22 29 29 0a 20 20 28 77 69 74 68 2d 73 74 64 6f 75 74 2d 74 6f 2d 65 6c 6e 6f 64 65 20 68 74 74 "))...(with-stdout-to-elnode.htt
d480 70 63 6f 6e 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 67 65 2d 69 6e 66 6f 20 28 6f 72 20 pcon.......(let.((page-info.(or.
d4a0 70 61 67 65 69 6e 66 6f 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 pageinfo.(elnode-http-pathinfo.h
d4c0 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 20 65 6c ttpcon))).............(header.el
d4e0 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 62 6f 64 79 2d 68 65 61 64 65 72 29 0a 20 20 20 node-wikiserver-body-header)....
d500 20 20 20 20 20 20 20 20 20 28 66 6f 6f 74 65 72 20 28 69 66 2d 65 6c 6e 6f 64 65 2d 61 75 74 68 .........(footer.(if-elnode-auth
d520 20 68 74 74 70 63 6f 6e 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 75 74 68 0a 20 20 20 20 20 .httpcon.'elnode-wiki-auth......
d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 .................elnode-wikiserv
d560 65 72 2d 62 6f 64 79 2d 66 6f 6f 74 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 er-body-footer..................
d580 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 62 6f 64 79 2d 66 6f 6f 74 .....elnode-wikiserver-body-foot
d5a0 65 72 2d 6e 6f 74 2d 6c 6f 67 67 65 64 69 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 63 72 65 6f er-not-loggedin))).........(creo
d5c0 6c 65 2d 77 69 6b 69 0a 20 20 20 20 20 20 20 20 20 77 69 6b 69 70 61 67 65 0a 20 20 20 20 20 20 le-wiki..........wikipage.......
d5e0 20 20 20 3a 64 65 73 74 69 6e 61 74 69 6f 6e 20 74 0a 20 20 20 20 20 20 20 20 20 3a 76 61 72 69 ...:destination.t..........:vari
d600 61 62 6c 65 73 20 28 6c 69 73 74 20 28 63 6f 6e 73 20 27 70 61 67 65 20 70 61 67 65 2d 69 6e 66 ables.(list.(cons.'page.page-inf
d620 6f 29 29 0a 20 20 20 20 20 20 20 20 20 3a 62 6f 64 79 2d 68 65 61 64 65 72 20 68 65 61 64 65 72 o))..........:body-header.header
d640 0a 20 20 20 20 20 20 20 20 20 3a 62 6f 64 79 2d 66 6f 6f 74 65 72 20 66 6f 6f 74 65 72 29 29 29 ..........:body-footer.footer)))
d660 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 74 65 78 74 2d 70 61 72 61 )..(defun.elnode-wiki--text-para
d680 6d 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47 65 74 20 74 68 65 20 74 65 78 74 20 70 61 72 61 m.(httpcon)..."Get.the.text.para
d6a0 6d 20 66 72 6f 6d 20 48 54 54 50 43 4f 4e 20 61 6e 64 20 63 6f 6e 76 65 72 74 20 69 74 2e 22 0a m.from.HTTPCON.and.convert.it.".
d6c0 20 20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 22 ..(replace-regexp-in-string...."
d6e0 5c 72 22 20 22 22 20 3b 20 62 72 6f 77 73 65 72 73 20 73 65 6e 64 20 74 65 78 74 20 69 6e 20 44 \r"."".;.browsers.send.text.in.D
d700 4f 53 20 6c 69 6e 65 20 65 6e 64 69 6e 67 20 66 6f 72 6d 61 74 0a 20 20 20 28 65 6c 6e 6f 64 65 OS.line.ending.format....(elnode
d720 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 77 69 6b 69 74 65 78 74 22 29 29 -http-param.httpcon."wikitext"))
d740 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 73 61 76 65 2d 72 65 71 75 )..(defun.elnode-wiki--save-requ
d760 65 73 74 20 28 68 74 74 70 63 6f 6e 20 77 69 6b 69 72 6f 6f 74 20 70 61 74 68 20 74 65 78 74 29 est.(httpcon.wikiroot.path.text)
d780 0a 20 20 22 50 72 6f 63 65 73 73 20 61 6e 20 75 70 64 61 74 65 20 72 65 71 75 65 73 74 2e 22 0a ..."Process.an.update.request.".
d7a0 20 20 28 6c 65 74 2a 20 28 28 70 61 67 65 20 28 69 66 20 70 61 74 68 0a 20 20 20 20 20 20 20 20 ..(let*.((page.(if.path.........
d7c0 20 20 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 ...........(save-match-data.....
d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 .................(string-match."
d800 2f 77 69 6b 69 2f 5c 5c 28 2e 2a 5c 5c 29 24 22 20 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 /wiki/\\(.*\\)$".path)..........
d820 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 70 61 74 68 ............(match-string.1.path
d840 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 6f 6d 6d 65 6e 74 20 28 65 6c 6e 6f 64 65 2d 68 ))))..........(comment.(elnode-h
d860 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 63 6f 6d 6d 65 6e 74 22 29 29 0a 20 20 ttp-param.httpcon."comment"))...
d880 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6e 61 6d 65 20 28 69 66 20 28 65 71 75 61 6c 20 70 61 67 .......(file-name.(if.(equal.pag
d8a0 65 20 22 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 e."").........................(c
d8c0 6f 6e 63 61 74 20 77 69 6b 69 72 6f 6f 74 20 22 69 6e 64 65 78 2e 63 72 65 6f 6c 65 22 29 0a 20 oncat.wikiroot."index.creole")..
d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 28 66 69 .....................(concat.(fi
d900 6c 65 2d 6e 61 6d 65 2d 61 73 2d 64 69 72 65 63 74 6f 72 79 20 77 69 6b 69 72 6f 6f 74 29 20 70 le-name-as-directory.wikiroot).p
d920 61 67 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65 72 20 28 66 69 6e 64 2d 66 69 age)))..........(buffer.(find-fi
d940 6c 65 2d 6e 6f 73 65 6c 65 63 74 20 66 69 6c 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 77 69 le-noselect.file-name))).....(wi
d960 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 28 th-current-buffer.buffer.......(
d980 65 72 61 73 65 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 74 65 78 74 erase-buffer).......(insert.text
d9a0 29 0a 20 20 20 20 20 20 28 73 61 76 65 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 28 6c 65 74 ).......(save-buffer).......(let
d9c0 20 28 28 67 69 74 2d 62 75 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 2d 62 75 66 .((git-buf..............(get-buf
d9e0 66 65 72 2d 63 72 65 61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 6e 65 72 61 fer-create...............(genera
da00 74 65 2d 6e 65 77 2d 62 75 66 66 65 72 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 te-new-buffer-name..............
da20 20 20 22 2a 20 65 6c 6e 6f 64 65 20 77 69 6b 69 20 63 6f 6d 6d 69 74 20 62 75 66 20 2a 22 29 29 .."*.elnode.wiki.commit.buf.*"))
da40 29 29 0a 20 20 20 20 20 20 20 20 28 73 68 65 6c 6c 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 )).........(shell-command.......
da60 20 20 20 28 66 6f 72 6d 61 74 20 22 67 69 74 20 63 6f 6d 6d 69 74 20 2d 6d 20 27 25 73 27 20 25 ...(format."git.commit.-m.'%s'.%
da80 73 22 20 63 6f 6d 6d 65 6e 74 20 66 69 6c 65 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 67 s".comment.file-name)..........g
daa0 69 74 2d 62 75 66 29 0a 20 20 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 67 69 74 it-buf).........(kill-buffer.git
dac0 2d 62 75 66 29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 68 -buf)).......(elnode-wiki-page.h
dae0 74 74 70 63 6f 6e 20 66 69 6c 65 2d 6e 61 6d 65 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e ttpcon.file-name))))..(defun.eln
db00 6f 64 65 2d 77 69 6b 69 2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 6f 6e 20 77 69 6b 69 72 6f ode-wiki-handler.(httpcon.wikiro
db20 6f 74 29 0a 20 20 22 41 20 6c 6f 77 20 6c 65 76 65 6c 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 57 ot)..."A.low.level.handler.for.W
db40 69 6b 69 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 0a 53 65 6e 64 20 74 68 65 20 57 69 6b 69 20 70 iki.operations...Send.the.Wiki.p
db60 61 67 65 20 72 65 71 75 65 73 74 65 64 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61 20 66 age.requested,.which.must.be.a.f
db80 69 6c 65 20 65 78 69 73 74 69 6e 67 20 75 6e 64 65 72 0a 74 68 65 20 57 49 4b 49 52 4f 4f 54 2c ile.existing.under.the.WIKIROOT,
dba0 20 62 61 63 6b 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 55 70 64 61 74 65 20 6f 70 .back.to.the.HTTPCON...Update.op
dbc0 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 61 75 74 68 65 6e erations.are.protected.by.authen
dbe0 74 69 63 61 74 69 6f 6e 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 65 74 68 6f 64 20 68 74 74 70 tication."...(elnode-method.http
dc00 63 6f 6e 0a 20 20 20 20 28 47 45 54 0a 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f con.....(GET......(elnode-docroo
dc20 74 2d 66 6f 72 20 77 69 6b 69 72 6f 6f 74 0a 20 20 20 20 20 20 20 77 69 74 68 20 74 61 72 67 65 t-for.wikiroot........with.targe
dc40 74 2d 70 61 74 68 0a 20 20 20 20 20 20 20 6f 6e 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 t-path........on.httpcon........
dc60 64 6f 0a 20 20 20 20 20 20 20 3b 3b 20 44 6f 20 77 65 20 6e 65 65 64 20 74 6f 20 73 65 72 76 65 do........;;.Do.we.need.to.serve
dc80 20 61 6e 20 69 6e 64 65 78 3f 0a 20 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 74 61 72 .an.index?........(if.(equal.tar
dca0 67 65 74 2d 70 61 74 68 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 get-path.(expand-file-name.(conc
dcc0 61 74 20 77 69 6b 69 72 6f 6f 74 20 22 2f 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 at.wikiroot."/")))............(e
dce0 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 68 74 74 70 63 6f 6e 20 28 63 6f 6e 63 61 74 20 lnode-wiki-page.httpcon.(concat.
dd00 77 69 6b 69 72 6f 6f 74 20 22 2f 69 6e 64 65 78 2e 63 72 65 6f 6c 65 22 29 29 0a 20 20 20 20 20 wikiroot."/index.creole"))......
dd20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74 27 73 20 61 20 77 69 6b 69 20 70 61 67 65 20 6f ......;;.Else.it's.a.wiki.page.o
dd40 72 20 73 6f 6d 65 20 63 6f 6c 6c 61 74 65 72 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 r.some.collateral............(if
dd60 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5c 5c 2e 63 72 65 6f 6c 65 24 22 20 74 61 72 67 .(string-match."\\.creole$".targ
dd80 65 74 2d 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 53 65 72 76 65 et-path)................;;.Serve
dda0 20 61 20 63 72 65 6f 6c 65 20 70 61 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 .a.creole.page................(e
ddc0 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d 70 lnode-wiki-page.httpcon.target-p
dde0 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 73 65 72 76 ath)................;;.Else.serv
de00 65 20 6a 75 73 74 20 63 6f 6e 74 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 e.just.content................(e
de20 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 20 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d 70 lnode-send-file.httpcon.target-p
de40 61 74 68 29 29 29 29 29 0a 20 20 20 20 28 50 4f 53 54 0a 20 20 20 20 20 28 77 69 74 68 2d 65 6c ath))))).....(POST......(with-el
de60 6e 6f 64 65 2d 61 75 74 68 20 68 74 74 70 63 6f 6e 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 node-auth.httpcon.'elnode-wiki-a
de80 75 74 68 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d uth........(let*.((path.(elnode-
dea0 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 http-pathinfo.httpcon)).........
dec0 20 20 20 20 20 20 28 74 65 78 74 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 74 65 78 74 2d 70 ......(text.(elnode-wiki--text-p
dee0 61 72 61 6d 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f aram.httpcon)))..........(if.(no
df00 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 70 72 t.(elnode-http-param.httpcon."pr
df20 65 76 69 65 77 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 41 20 73 61 76 65 20 eview"))..............;;.A.save.
df40 72 65 71 75 65 73 74 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 73 61 76 65 20 74 68 65 20 6e request.in.which.case.save.the.n
df60 65 77 20 74 65 78 74 20 61 6e 64 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b ew.text.and.then..............;;
df80 20 73 65 6e 64 20 74 68 65 20 77 69 6b 69 20 74 65 78 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 .send.the.wiki.text.............
dfa0 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 73 61 76 65 2d 72 65 71 75 65 73 74 20 68 74 74 ..(elnode-wiki--save-request.htt
dfc0 70 63 6f 6e 20 77 69 6b 69 72 6f 6f 74 20 70 61 74 68 20 74 65 78 74 29 0a 20 20 20 20 20 20 20 pcon.wikiroot.path.text)........
dfe0 20 20 20 20 20 20 3b 3b 20 4d 69 67 68 74 20 62 65 20 61 20 70 72 65 76 69 65 77 20 72 65 71 75 ......;;.Might.be.a.preview.requ
e000 65 73 74 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 73 65 6e 64 20 62 61 63 6b 20 74 68 65 20 est.in.which.case.send.back.the.
e020 57 49 4b 49 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 74 65 78 74 20 74 68 61 74 27 73 WIKI..............;;.text.that's
e040 20 62 65 65 6e 20 73 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 .been.sent...............(with-t
e060 65 6d 70 2d 66 69 6c 65 20 22 2f 74 6d 70 2f 70 72 65 76 69 65 77 22 0a 20 20 20 20 20 20 20 20 emp-file."/tmp/preview".........
e080 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 74 65 78 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 .......(insert.text))...........
e0a0 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 68 74 74 70 63 6f 6e 20 22 2f 74 ...(elnode-wiki-page.httpcon."/t
e0c0 6d 70 2f 70 72 65 76 69 65 77 22 20 70 61 74 68 29 29 29 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 mp/preview".path)))))))..;;;###a
e0e0 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 utoload.(defun.elnode-wikiserver
e100 2d 74 65 73 74 20 28 29 0a 20 20 22 54 65 73 74 20 77 68 65 74 68 65 72 20 77 65 20 73 68 6f 75 -test.()..."Test.whether.we.shou
e120 6c 64 20 73 65 72 76 65 20 57 69 6b 69 20 6f 72 20 6e 6f 74 2e 22 0a 20 20 28 66 65 61 74 75 72 ld.serve.Wiki.or.not."...(featur
e140 65 70 20 27 63 72 65 6f 6c 65 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 ep.'creole))..;;;###autoload.(de
e160 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 20 28 68 74 74 70 63 6f 6e 29 0a fun.elnode-wikiserver.(httpcon).
e180 20 20 22 53 65 72 76 65 20 57 69 6b 69 20 70 61 67 65 73 20 66 72 6f 6d 20 60 65 6c 6e 6f 64 65 .."Serve.Wiki.pages.from.`elnode
e1a0 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f 6f 74 27 2e 0a 0a 48 54 54 50 43 4f 4e 20 -wikiserver-wikiroot'...HTTPCON.
e1c0 69 73 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a 54 68 65 20 57 69 6b 69 20 73 65 72 76 65 72 is.the.request...The.Wiki.server
e1e0 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 60 63 72 65 6f 6c .is.only.available.if.the.`creol
e200 65 27 20 70 61 63 6b 61 67 65 20 69 73 0a 70 72 6f 76 69 64 65 64 2e 20 4f 74 68 65 72 77 69 73 e'.package.is.provided..Otherwis
e220 65 20 69 74 20 77 69 6c 6c 20 6a 75 73 74 20 65 72 72 6f 72 2e 22 0a 20 20 28 69 66 20 28 6e 6f e.it.will.just.error."...(if.(no
e240 74 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 74 65 73 74 29 29 0a 20 20 20 20 t.(elnode-wikiserver-test)).....
e260 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 35 30 30 20 68 74 74 70 63 6f 6e 20 22 54 68 65 20 ..(elnode-send-500.httpcon."The.
e280 45 6d 61 63 73 20 66 65 61 74 75 72 65 20 27 63 72 65 6f 6c 65 20 69 73 20 72 65 71 75 69 72 65 Emacs.feature.'creole.is.require
e2a0 64 2e 22 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 69 73 70 61 74 63 68 d.").......(elnode-auth-dispatch
e2c0 65 72 20 68 74 74 70 63 6f 6e 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 75 74 68 0a 20 20 20 er.httpcon.'elnode-wiki-auth....
e2e0 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d 73 65 74 75 70 29 0a 20 20 20 20 20 20 .....(elnode-wiki--setup).......
e300 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 68 61 6e 64 6c 65 72 20 68 74 74 70 63 6f 6e 20 65 ..(elnode-wiki-handler.httpcon.e
e320 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f 6f 74 29 29 29 29 0a 0a 28 lnode-wikiserver-wikiroot))))..(
e340 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 29 0a 0a 3b 3b 3b 20 65 6c 6e 6f 64 provide.'elnode-wiki)..;;;.elnod
e360 65 2d 77 69 6b 69 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 e-wiki.el.ends.here.............
e380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e3a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e3c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e3e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e400 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e 31 35 30 39 2f 65 6c 6e 6f 64 65 2e 65 6c 00 00 elnode-20190702.1509/elnode.el..
e420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e460 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
e480 30 34 32 33 32 30 31 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 34 30 35 34 00 20 30 00 00 00 0423201.00000000000.014054..0...
e4a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e4c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e4e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e500 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
e520 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
e540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e5a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e5c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e5e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
e600 3b 3b 3b 20 65 6c 6e 6f 64 65 2e 65 6c 20 2d 2d 2d 20 61 20 73 69 6d 70 6c 65 20 65 6d 61 63 73 ;;;.elnode.el.---.a.simple.emacs
e620 20 61 73 79 6e 63 20 48 54 54 50 20 73 65 72 76 65 72 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 .async.HTTP.server.-*-.lexical-b
e640 69 6e 64 69 6e 67 3a 20 74 20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 inding:.t.-*-..;;.Copyright.(C).
e660 32 30 31 30 2c 20 32 30 31 31 2c 20 32 30 31 32 20 20 4e 69 63 20 46 65 72 72 69 65 72 0a 3b 3b 2010,.2011,.2012..Nic.Ferrier.;;
e680 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32 30 31 39 20 20 47 69 74 48 75 62 20 75 73 65 72 .Copyright.(C).2019..GitHub.user
e6a0 20 22 4a 63 61 77 22 0a 0a 3b 3b 20 41 75 74 68 6f 72 3a 20 4e 69 63 20 46 65 72 72 69 65 72 20 ."Jcaw"..;;.Author:.Nic.Ferrier.
e6c0 3c 6e 66 65 72 72 69 65 72 40 66 65 72 72 69 65 72 2e 6d 65 2e 75 6b 3e 0a 3b 3b 20 4d 61 69 6e <nferrier@ferrier.me.uk>.;;.Main
e6e0 74 61 69 6e 65 72 3a 20 47 69 74 48 75 62 20 75 73 65 72 20 22 4a 63 61 77 22 0a 3b 3b 20 43 72 tainer:.GitHub.user."Jcaw".;;.Cr
e700 65 61 74 65 64 3a 20 35 74 68 20 4f 63 74 6f 62 65 72 20 32 30 31 30 0a 3b 3b 20 50 61 63 6b 61 eated:.5th.October.2010.;;.Packa
e720 67 65 2d 56 65 72 73 69 6f 6e 3a 20 32 30 31 39 30 37 30 32 2e 31 35 30 39 0a 3b 3b 20 50 61 63 ge-Version:.20190702.1509.;;.Pac
e740 6b 61 67 65 2d 52 65 76 69 73 69 6f 6e 3a 20 32 39 65 66 30 66 35 31 61 36 35 61 0a 3b 3b 20 4b kage-Revision:.29ef0f51a65a.;;.K
e760 65 79 77 6f 72 64 73 3a 20 6c 69 73 70 2c 20 68 74 74 70 2c 20 68 79 70 65 72 6d 65 64 69 61 0a eywords:.lisp,.http,.hypermedia.
e780 0a 3b 3b 20 54 68 69 73 20 66 69 6c 65 20 69 73 20 4e 4f 54 20 70 61 72 74 20 6f 66 20 47 4e 55 .;;.This.file.is.NOT.part.of.GNU
e7a0 20 45 6d 61 63 73 2e 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 .Emacs...;;.This.program.is.free
e7c0 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 .software;.you.can.redistribute.
e7e0 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20 74 68 65 it.and/or.modify.;;.it.under.the
e800 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 .terms.of.the.GNU.General.Public
e820 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74 68 65 20 .License.as.published.by.;;.the.
e840 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68 65 72 Free.Software.Foundation,.either
e860 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a 3b 3b .version.3.of.the.License,.or.;;
e880 20 28 61 74 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 .(at.your.option).any.later.vers
e8a0 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74 72 69 62 ion...;;.This.program.is.distrib
e8c0 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 uted.in.the.hope.that.it.will.be
e8e0 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 .useful,.;;.but.WITHOUT.ANY.WARR
e900 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 ANTY;.without.even.the.implied.w
e920 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f 72 arranty.of.;;.MERCHANTABILITY.or
e940 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 .FITNESS.FOR.A.PARTICULAR.PURPOS
e960 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 E...See.the.;;.GNU.General.Publi
e980 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 c.License.for.more.details...;;.
e9a0 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 You.should.have.received.a.copy.
e9c0 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 of.the.GNU.General.Public.Licens
e9e0 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e 20 20 49 e.;;.along.with.this.program...I
ea00 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c f.not,.see.<http://www.gnu.org/l
ea20 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 53 6f 75 72 63 65 20 63 6f 64 65 0a 3b 3b 0a 3b icenses/>...;;;.Source.code.;;.;
ea40 3b 20 65 6c 6e 6f 64 65 27 73 20 63 6f 64 65 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 68 65 72 ;.elnode's.code.can.be.found.her
ea60 65 3a 0a 3b 3b 20 20 20 68 74 74 70 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6a 63 61 77 2f 65 e:.;;...http://github.com/jcaw/e
ea80 6c 6e 6f 64 65 0a 0a 3b 3b 3b 20 53 74 79 6c 65 20 6e 6f 74 65 0a 3b 3b 0a 3b 3b 20 54 68 69 73 lnode..;;;.Style.note.;;.;;.This
eaa0 20 63 6f 64 65 73 20 75 73 65 73 20 74 68 65 20 45 6d 61 63 73 20 73 74 79 6c 65 20 6f 66 3a 0a .codes.uses.the.Emacs.style.of:.
eac0 3b 3b 0a 3b 3b 20 20 20 20 65 6c 6e 6f 64 65 2d 2d 70 72 69 76 61 74 65 2d 66 75 6e 63 74 69 6f ;;.;;....elnode--private-functio
eae0 6e 0a 3b 3b 0a 3b 3b 20 66 6f 72 20 70 72 69 76 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 0a n.;;.;;.for.private.functions...
eb00 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 3b 3b 0a 3b 3b 20 54 68 69 73 20 69 73 20 61 .;;;.Commentary:.;;.;;.This.is.a
eb20 6e 20 65 6c 69 73 70 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 6f 70 75 6c 61 72 20 6e n.elisp.version.of.the.popular.n
eb40 6f 64 65 2e 6a 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 3b 3b 20 77 65 62 73 65 72 76 65 72 ode.js.asynchronous.;;.webserver
eb60 20 74 6f 6f 6c 6b 69 74 2e 0a 3b 3b 0a 3b 3b 20 59 6f 75 20 63 61 6e 20 64 65 66 69 6e 65 20 48 .toolkit..;;.;;.You.can.define.H
eb80 54 54 50 20 72 65 71 75 65 73 74 20 68 61 6e 64 6c 65 72 73 20 61 6e 64 20 73 74 61 72 74 20 61 TTP.request.handlers.and.start.a
eba0 6e 20 48 54 54 50 20 73 65 72 76 65 72 0a 3b 3b 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 n.HTTP.server.;;.attached.to.the
ebc0 20 68 61 6e 64 6c 65 72 2e 20 20 4d 61 6e 79 20 48 54 54 50 20 73 65 72 76 65 72 73 20 63 61 6e .handler...Many.HTTP.servers.can
ebe0 20 62 65 20 73 74 61 72 74 65 64 2c 20 65 61 63 68 0a 3b 3b 20 6d 75 73 74 20 68 61 76 65 20 69 .be.started,.each.;;.must.have.i
ec00 74 73 20 6f 77 6e 20 54 43 50 20 70 6f 72 74 2e 20 20 48 61 6e 64 6c 65 72 73 20 63 61 6e 20 64 ts.own.TCP.port...Handlers.can.d
ec20 65 66 65 72 20 70 72 6f 63 65 73 73 69 6e 67 20 77 69 74 68 20 61 0a 3b 3b 20 73 69 67 6e 61 6c efer.processing.with.a.;;.signal
ec40 20 28 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 63 6f 6d 65 74 20 73 74 79 6c 65 20 72 65 73 6f 75 .(which.allows.comet.style.resou
ec60 72 63 65 20 6d 61 6e 61 67 65 6d 65 6e 74 29 0a 3b 3b 0a 3b 3b 20 53 65 65 20 65 6c 6e 6f 64 65 rce.management).;;.;;.See.elnode
ec80 2d 73 74 61 72 74 20 66 6f 72 20 68 6f 77 20 74 6f 20 73 74 61 72 74 20 61 6e 20 48 54 54 50 20 -start.for.how.to.start.an.HTTP.
eca0 73 65 72 76 65 72 2e 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 0a 28 72 65 71 75 69 72 65 20 27 66 61 server...;;;.Code:..(require.'fa
ecc0 6b 69 72 29 0a 28 72 65 71 75 69 72 65 20 27 6d 6d 2d 65 6e 63 6f 64 65 29 0a 28 72 65 71 75 69 kir).(require.'mm-encode).(requi
ece0 72 65 20 27 6d 61 69 6c 63 61 70 29 0a 28 72 65 71 75 69 72 65 20 27 6d 61 69 6c 2d 70 61 72 73 re.'mailcap).(require.'mail-pars
ed00 65 29 20 3b 20 66 6f 72 20 6d 61 69 6c 2d 68 65 61 64 65 72 2d 70 61 72 73 65 2d 63 6f 6e 74 65 e).;.for.mail-header-parse-conte
ed20 6e 74 2d 74 79 70 65 0a 28 72 65 71 75 69 72 65 20 27 75 72 6c 2d 75 74 69 6c 29 0a 28 72 65 71 nt-type.(require.'url-util).(req
ed40 75 69 72 65 20 27 6b 76 29 0a 28 72 65 71 75 69 72 65 20 27 73 29 0a 28 72 65 71 75 69 72 65 20 uire.'kv).(require.'s).(require.
ed60 27 64 61 73 68 29 0a 28 72 65 71 75 69 72 65 20 27 72 78 29 0a 28 72 65 71 75 69 72 65 20 27 77 'dash).(require.'rx).(require.'w
ed80 65 62 29 0a 28 72 65 71 75 69 72 65 20 27 6a 73 6f 6e 29 0a 28 72 65 71 75 69 72 65 20 27 64 62 eb).(require.'json).(require.'db
eda0 29 0a 28 72 65 71 75 69 72 65 20 27 64 69 72 65 64 29 20 3b 20 6e 65 65 64 65 64 20 66 6f 72 20 ).(require.'dired).;.needed.for.
edc0 74 68 65 20 73 65 74 75 70 0a 28 72 65 71 75 69 72 65 20 27 74 61 62 75 6c 61 74 65 64 2d 6c 69 the.setup.(require.'tabulated-li
ede0 73 74 29 0a 28 72 65 71 75 69 72 65 20 27 6e 6f 66 6c 65 74 29 0a 28 72 65 71 75 69 72 65 20 27 st).(require.'noflet).(require.'
ee00 65 72 74 29 20 3b 20 77 65 20 70 72 6f 76 69 64 65 20 73 6f 6d 65 20 61 73 73 65 72 74 69 6f 6e ert).;.we.provide.some.assertion
ee20 73 20 61 6e 64 20 6e 65 65 64 20 27 73 68 6f 75 6c 64 27 0a 28 65 76 61 6c 2d 77 68 65 6e 2d 63 s.and.need.'should'.(eval-when-c
ee40 6f 6d 70 69 6c 65 20 28 72 65 71 75 69 72 65 20 27 63 6c 29 29 0a 0a 28 64 65 66 63 6f 6e 73 74 ompile.(require.'cl))..(defconst
ee60 20 45 4c 4e 4f 44 45 2d 46 4f 52 4d 2d 44 41 54 41 2d 54 59 50 45 20 22 61 70 70 6c 69 63 61 74 .ELNODE-FORM-DATA-TYPE."applicat
ee80 69 6f 6e 2f 78 2d 77 77 77 2d 66 6f 72 6d 2d 75 72 6c 65 6e 63 6f 64 65 64 22 0a 20 20 22 54 68 ion/x-www-form-urlencoded"..."Th
eea0 65 20 74 79 70 65 20 6f 66 20 48 54 54 50 20 46 6f 72 6d 20 50 4f 53 54 73 2e 22 29 0a 0a 28 64 e.type.of.HTTP.Form.POSTs.")..(d
eec0 65 66 63 6f 6e 73 74 20 68 74 74 70 2d 72 65 66 65 72 72 65 72 20 27 72 65 66 65 72 65 72 0a 20 efconst.http-referrer.'referer..
eee0 20 22 48 65 6c 70 65 72 20 74 6f 20 62 79 70 61 73 73 20 69 64 69 6f 74 20 73 70 65 6c 6c 69 6e ."Helper.to.bypass.idiot.spellin
ef00 67 20 6f 66 20 74 68 65 20 77 6f 72 64 20 60 72 65 66 65 72 72 65 72 27 2e 22 29 0a 0a 0a 3b 3b g.of.the.word.`referrer'.")...;;
ef20 20 45 78 74 65 6e 73 69 6f 6e 73 20 74 6f 20 65 72 74 0a 0a 28 64 65 66 6d 61 63 72 6f 20 73 68 .Extensions.to.ert..(defmacro.sh
ef40 6f 75 6c 64 2d 65 71 75 61 6c 20 28 61 20 62 29 0a 20 20 22 53 69 6d 70 6c 65 20 73 68 6f 72 74 ould-equal.(a.b)..."Simple.short
ef60 63 75 74 20 66 6f 72 20 60 28 73 68 6f 75 6c 64 20 28 65 71 75 61 6c 20 61 20 62 29 29 27 2e 22 cut.for.`(should.(equal.a.b))'."
ef80 0a 20 20 60 28 73 68 6f 75 6c 64 0a 20 20 20 20 28 65 71 75 61 6c 20 2c 61 20 2c 62 29 29 29 0a ...`(should.....(equal.,a.,b))).
efa0 0a 28 64 65 66 6d 61 63 72 6f 20 73 68 6f 75 6c 64 2d 6d 61 74 63 68 20 28 72 65 67 65 78 20 61 .(defmacro.should-match.(regex.a
efc0 29 0a 20 20 22 53 69 6d 70 6c 65 20 73 68 6f 72 74 63 75 74 20 66 6f 72 20 61 20 60 73 74 72 69 )..."Simple.shortcut.for.a.`stri
efe0 6e 67 2d 6d 61 74 63 68 27 20 77 69 74 68 20 60 73 68 6f 75 6c 64 27 2e 22 0a 20 20 60 28 73 68 ng-match'.with.`should'."...`(sh
f000 6f 75 6c 64 0a 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 0a 20 20 20 20 2c 72 65 67 65 78 ould....(string-match.....,regex
f020 0a 20 20 20 20 2c 61 29 29 29 0a 0a 3b 3b 20 43 75 73 74 6f 6d 69 7a 61 74 69 6f 6e 20 73 74 75 .....,a)))..;;.Customization.stu
f040 66 66 0a 0a 28 64 65 66 67 72 6f 75 70 20 65 6c 6e 6f 64 65 20 6e 69 6c 0a 20 20 22 41 6e 20 65 ff..(defgroup.elnode.nil..."An.e
f060 78 74 65 6e 73 69 62 6c 65 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 77 65 62 20 73 65 72 76 65 xtensible.asynchronous.web.serve
f080 72 20 66 6f 72 20 45 6d 61 63 73 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 61 70 70 6c 69 63 61 74 r.for.Emacs."...:group.'applicat
f0a0 69 6f 6e 73 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 ions)..(defvar.elnode-server-soc
f0c0 6b 65 74 20 6e 69 6c 0a 20 20 22 57 68 65 72 65 20 77 65 20 73 74 6f 72 65 20 74 68 65 20 73 65 ket.nil..."Where.we.store.the.se
f0e0 72 76 65 72 20 73 6f 63 6b 65 74 73 2e 0a 0a 54 68 69 73 20 69 73 20 61 6e 20 61 6c 69 73 74 20 rver.sockets...This.is.an.alist.
f100 6f 66 20 70 72 6f 63 2d 3e 73 65 72 76 65 72 2d 70 72 6f 63 65 73 73 3a 0a 0a 20 20 28 70 6f 72 of.proc->server-process:....(por
f120 74 20 2e 20 70 72 6f 63 65 73 73 29 22 29 0a 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f t...process)")...(defcustom.elno
f140 64 65 2d 69 6e 69 74 2d 70 6f 72 74 20 38 30 30 30 0a 20 20 22 54 68 65 20 70 6f 72 74 20 74 68 de-init-port.8000..."The.port.th
f160 61 74 20 60 65 6c 6e 6f 64 65 2d 69 6e 69 74 27 20 73 74 61 72 74 73 20 74 68 65 20 64 65 66 61 at.`elnode-init'.starts.the.defa
f180 75 6c 74 20 73 65 72 76 65 72 20 6f 6e 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 ult.server.on."...:group.'elnode
f1a0 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73 74 20 22 )..(defcustom.elnode-init-host."
f1c0 6c 6f 63 61 6c 68 6f 73 74 22 0a 20 20 22 54 68 65 20 64 65 66 61 75 6c 74 20 68 6f 73 74 20 66 localhost"..."The.default.host.f
f1e0 6f 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 77 65 62 73 65 72 76 65 72 2e 0a 0a 41 6c 73 6f 20 or.the.default.webserver...Also.
f200 75 73 65 64 20 61 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 68 6f 73 74 20 66 6f 72 20 60 65 6c used.as.the.default.host.for.`el
f220 6e 6f 64 65 2d 6d 61 6b 65 2d 77 65 62 73 65 72 76 65 72 27 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f node-make-webserver'...See.`elno
f240 64 65 2d 69 6e 69 74 27 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 22 0a 20 20 3a 67 de-init'.for.more.details."...:g
f260 72 6f 75 70 20 27 65 6c 6e 6f 64 65 29 0a 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 roup.'elnode)...;;;###autoload.(
f280 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 defconst.elnode-config-directory
f2a0 0a 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 75 73 65 ...(expand-file-name.(concat.use
f2c0 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 20 22 65 6c 6e 6f 64 65 2f 22 29 29 0a 20 20 r-emacs-directory."elnode/"))...
f2e0 22 54 68 65 20 63 6f 6e 66 69 67 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 65 6c 6e 6f 64 65 "The.config.directory.for.elnode
f300 20 74 6f 20 73 74 6f 72 65 20 70 65 72 69 70 68 65 72 61 6c 20 66 69 6c 65 73 2e 0a 0a 54 68 69 .to.store.peripheral.files...Thi
f320 73 20 69 73 20 75 73 65 64 20 61 73 20 61 20 62 61 73 65 20 66 6f 72 20 6f 74 68 65 72 20 63 6f s.is.used.as.a.base.for.other.co
f340 6e 73 74 61 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 72 20 66 69 6c 65 0a 6e 61 6d 65 73 20 28 nstant.directory.or.file.names.(
f360 74 68 65 20 65 6c 6e 6f 64 65 20 61 75 74 68 20 64 61 74 61 62 61 73 65 20 69 73 20 61 20 66 69 the.elnode.auth.database.is.a.fi
f380 6c 65 20 69 6e 20 74 68 69 73 20 64 69 72 65 63 74 6f 72 79 2c 20 74 68 65 0a 65 6c 6e 6f 64 65 le.in.this.directory,.the.elnode
f3a0 20 77 65 62 73 65 72 76 65 72 20 68 61 73 20 61 20 64 6f 63 72 6f 6f 74 20 64 69 72 65 63 74 6f .webserver.has.a.docroot.directo
f3c0 72 79 20 69 6e 20 74 68 69 73 20 64 69 72 65 63 74 6f 72 79 29 2e 0a 0a 49 74 20 69 73 20 62 61 ry.in.this.directory)...It.is.ba
f3e0 73 65 64 20 6f 6e 20 74 68 65 20 60 75 73 65 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 sed.on.the.`user-emacs-directory
f400 27 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 73 65 65 6d 73 20 74 6f 0a 62 65 20 73 65 74 2c 20 '.which.always.seems.to.be.set,.
f420 65 76 65 6e 20 77 68 65 6e 20 65 6d 61 63 73 20 69 73 20 73 74 61 72 74 65 64 20 77 69 74 68 20 even.when.emacs.is.started.with.
f440 2d 51 2e 22 29 0a 0a 0a 3b 3b 20 45 72 72 6f 72 20 6c 6f 67 20 68 61 6e 64 6c 69 6e 67 0a 0a 28 -Q.")...;;.Error.log.handling..(
f460 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 74 72 75 6e 63 20 28 64 61 74 61 29 0a 20 20 22 54 72 75 defun.elnode-trunc.(data)..."Tru
f480 6e 63 61 74 65 20 61 6e 64 20 63 6c 65 61 6e 20 44 41 54 41 2e 22 0a 20 20 28 72 65 70 6c 61 63 ncate.and.clean.DATA."...(replac
f4a0 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 22 5b 5c 72 5c 6e 5d 22 20 22 e-regexp-in-string...."[\r\n]"."
f4c0 2e 22 0a 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 64 61 74 61 20 30 20 28 69 66 20 28 3e 20 32 ."....(substring.data.0.(if.(>.2
f4e0 30 20 28 6c 65 6e 67 74 68 20 64 61 74 61 29 29 20 28 6c 65 6e 67 74 68 20 64 61 74 61 29 20 32 0.(length.data)).(length.data).2
f500 30 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 74 72 69 6d 20 28 73 74 72 29 0a 0))))..(defun.elnode-trim.(str).
f520 20 20 22 54 72 69 6d 20 6f 66 66 20 77 68 69 74 65 73 70 61 63 65 2e 22 0a 20 20 28 73 74 72 69 .."Trim.off.whitespace."...(stri
f540 6e 67 2d 6d 61 74 63 68 20 22 5b 20 5c 74 5c 6e 5c 72 5d 2a 24 22 20 73 74 72 29 0a 20 20 28 73 ng-match."[.\t\n\r]*$".str)...(s
f560 65 74 71 20 73 74 72 20 28 72 65 70 6c 61 63 65 2d 6d 61 74 63 68 20 22 22 20 6e 69 6c 20 6e 69 etq.str.(replace-match."".nil.ni
f580 6c 20 73 74 72 29 29 0a 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5e 5b 20 5c 74 5c 6e l.str))...(string-match."^[.\t\n
f5a0 5c 72 5d 2a 22 20 73 74 72 29 0a 20 20 28 72 65 70 6c 61 63 65 2d 6d 61 74 63 68 20 22 22 20 6e \r]*".str)...(replace-match."".n
f5c0 69 6c 20 6e 69 6c 20 73 74 72 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6a 6f 69 6e il.nil.str))..(defun.elnode-join
f5e0 20 28 26 72 65 73 74 20 70 61 72 74 73 29 0a 20 20 22 50 61 74 68 20 6a 6f 69 6e 20 74 68 65 20 .(&rest.parts)..."Path.join.the.
f600 70 61 72 74 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 45 6d 61 63 73 4c 69 73 70 20 73 68 6f 75 6c parts.together...EmacsLisp.shoul
f620 64 20 72 65 61 6c 6c 79 20 70 72 6f 76 69 64 65 20 74 68 69 73 20 62 79 20 64 65 66 61 75 6c 74 d.really.provide.this.by.default
f640 2e 22 0a 20 20 28 6c 65 74 2a 20 28 73 61 76 65 64 70 61 72 74 0a 20 20 20 20 20 20 20 20 20 28 ."...(let*.(savedpart..........(
f660 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 70 20 69 6e 20 70 61 path...........(loop.for.p.in.pa
f680 72 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 rts..............concat.........
f6a0 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 3e 20 28 6c 65 6e 67 74 68 20 70 29 20 30 29 0a 20 20 .......(when.(>.(length.p).0)...
f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 73 61 76 65 64 70 61 72 74 20 70 ...............(setq.savedpart.p
f6e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 61 73 )..................(file-name-as
f700 2d 64 69 72 65 63 74 6f 72 79 20 70 29 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 6c -directory.p))))).....(if.(equal
f720 20 28 65 6c 74 20 73 61 76 65 64 70 61 72 74 20 28 2d 20 28 6c 65 6e 67 74 68 20 73 61 76 65 64 .(elt.savedpart.(-.(length.saved
f740 70 61 72 74 29 20 31 29 29 20 3f 5c 2f 29 0a 20 20 20 20 20 20 20 20 70 61 74 68 0a 20 20 20 20 part).1)).?\/).........path.....
f760 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 70 61 74 68 20 30 20 28 2d 20 28 6c 65 6e 67 74 68 ....(substring.path.0.(-.(length
f780 20 70 61 74 68 29 20 31 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 64 69 .path).1)))))..(defun.elnode--di
f7a0 72 2d 73 65 74 75 70 20 28 64 69 72 20 64 65 66 61 75 6c 74 20 64 65 66 61 75 6c 74 2d 66 69 6c r-setup.(dir.default.default-fil
f7c0 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e-name..........................
f7e0 20 26 6f 70 74 69 6f 6e 61 6c 20 74 61 72 67 65 74 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 .&optional.target-file-name.....
f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 72 65 73 74 20 6f 74 68 65 ......................&rest.othe
f820 72 2d 66 69 6c 65 73 29 0a 20 20 22 49 6e 73 74 61 6c 6c 20 61 20 44 49 52 20 61 6e 64 20 44 45 r-files)..."Install.a.DIR.and.DE
f840 46 41 55 4c 54 2d 46 49 4c 45 2d 4e 41 4d 45 20 69 66 20 69 74 27 73 20 6e 6f 74 20 73 65 74 75 FAULT-FILE-NAME.if.it's.not.setu
f860 70 20 61 6c 72 65 61 64 79 2e 0a 0a 54 68 69 73 20 69 73 20 61 20 70 61 63 6b 61 67 69 6e 67 20 p.already...This.is.a.packaging.
f880 68 65 6c 70 65 72 2e 20 20 49 74 20 68 65 6c 70 73 20 61 6e 20 45 4c 50 41 20 70 61 63 6b 61 67 helper...It.helps.an.ELPA.packag
f8a0 65 20 69 6e 73 74 61 6c 6c 0a 66 69 6c 65 73 20 66 72 6f 6d 20 69 74 27 73 20 70 61 63 6b 61 67 e.install.files.from.it's.packag
f8c0 65 20 62 61 73 65 20 69 6e 74 6f 20 74 68 65 20 75 73 65 72 27 73 20 45 6d 61 63 73 2e 20 20 49 e.base.into.the.user's.Emacs...I
f8e0 66 20 74 68 65 20 44 49 52 0a 69 73 20 73 70 65 63 69 66 69 65 64 20 75 6e 64 65 72 20 60 75 73 f.the.DIR.is.specified.under.`us
f900 65 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 27 2e 0a 0a 44 49 52 20 69 73 20 74 68 65 er-emacs-directory'...DIR.is.the
f920 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 69 6e 73 74 61 6c 6c 2c 20 44 45 46 41 55 4c 54 20 69 .directory.to.install,.DEFAULT.i
f940 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 61 74 0a 64 69 72 65 63 74 6f 72 79 s.the.default.for.that.directory
f960 2c 20 75 6e 6c 65 73 73 20 44 49 52 20 65 71 75 61 6c 73 20 44 45 46 41 55 4c 54 20 6e 6f 74 68 ,.unless.DIR.equals.DEFAULT.noth
f980 69 6e 67 20 69 73 20 64 6f 6e 65 2e 0a 0a 44 45 46 41 55 4c 54 2d 46 49 4c 45 2d 4e 41 4d 45 20 ing.is.done...DEFAULT-FILE-NAME.
f9a0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 20 77 69 6c is.the.name.of.the.file.that.wil
f9c0 6c 20 62 65 20 69 6e 73 74 61 6c 6c 65 64 0a 69 6e 20 44 49 52 2e 20 20 49 74 20 69 73 20 74 68 l.be.installed.in.DIR...It.is.th
f9e0 65 20 65 78 70 65 63 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 66 69 e.expected.name.of.the.source.fi
fa00 6c 65 20 69 6e 73 69 64 65 20 74 68 65 0a 70 61 63 6b 61 67 65 2e 20 20 55 6e 6c 65 73 73 20 54 le.inside.the.package...Unless.T
fa20 41 52 47 45 54 2d 46 49 4c 45 2d 4e 41 4d 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20 69 74 20 ARGET-FILE-NAME.is.specified.it.
fa40 69 73 20 61 6c 73 6f 20 74 68 65 0a 6e 61 6d 65 20 74 68 65 20 69 6e 73 74 61 6c 6c 65 64 20 66 is.also.the.name.the.installed.f
fa60 69 6c 65 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 2e 20 20 49 66 20 74 68 65 20 54 41 52 47 45 ile.will.be.given...If.the.TARGE
fa80 54 2d 46 49 4c 45 2d 4e 41 4d 45 0a 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 T-FILE-NAME.is.specified.then.th
faa0 61 74 20 69 73 20 74 68 65 20 74 68 65 20 6e 61 6d 65 20 74 68 65 20 66 69 6c 65 20 69 73 20 69 at.is.the.the.name.the.file.is.i
fac0 6e 73 74 61 6c 6c 65 64 20 61 73 2e 0a 0a 49 66 20 4f 54 48 45 52 2d 46 49 4c 45 53 20 69 73 20 nstalled.as...If.OTHER-FILES.is.
fae0 70 72 65 73 65 6e 74 20 69 74 20 69 73 20 74 72 65 61 74 65 64 20 61 73 20 61 20 6c 69 73 74 20 present.it.is.treated.as.a.list.
fb00 6f 66 20 6f 74 68 65 72 0a 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 74 6f 20 74 68 of.other.filenames.to.copy.to.th
fb20 65 20 44 49 52 2e 22 0a 20 20 28 77 68 65 6e 20 20 28 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20 e.DIR."...(when..(and...........
fb40 28 65 71 75 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 64 69 72 0a 20 20 20 20 20 20 20 20 20 20 (equal............dir...........
fb60 20 64 65 66 61 75 6c 74 29 0a 20 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 66 69 6c 65 2d 65 .default)...........(not.(file-e
fb80 78 69 73 74 73 2d 70 20 64 69 72 29 29 29 0a 20 20 20 20 3b 3b 20 44 6f 20 69 6e 73 74 61 6c 6c xists-p.dir))).....;;.Do.install
fba0 0a 20 20 20 20 28 6c 65 74 20 28 28 73 6f 75 72 63 65 2d 64 65 66 61 75 6c 74 2d 66 69 6c 65 0a .....(let.((source-default-file.
fbc0 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 ...........(concat.............(
fbe0 66 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 file-name-directory.............
fc00 20 28 6f 72 20 28 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 .(or.(buffer-file-name).........
fc20 20 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c 2d 66 69 6c 65 20 27 65 6c 6e 6f 64 65 2d 2d 64 .........(symbol-file.'elnode--d
fc40 69 72 2d 73 65 74 75 70 29 29 29 20 3b 20 74 68 69 73 20 6e 6f 74 20 76 65 72 79 20 70 6f 72 74 ir-setup))).;.this.not.very.port
fc60 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 69 73 20 73 68 6f 75 6c 64 20 able.............;;.This.should.
fc80 70 72 6f 62 61 62 6c 79 20 74 69 65 20 69 6e 20 77 69 74 68 20 74 68 65 20 6d 61 6b 65 66 69 6c probably.tie.in.with.the.makefil
fca0 65 20 73 6f 6d 65 68 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 2d 66 69 e.somehow.............default-fi
fcc0 6c 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 28 61 6e 64 20 73 6f 75 72 le-name))).......(when.(and.sour
fce0 63 65 2d 64 65 66 61 75 6c 74 2d 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ce-default-file.................
fd00 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 73 6f 75 72 63 65 2d 64 65 66 61 75 6c 74 2d 66 .(file-exists-p.source-default-f
fd20 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 74 6f 20 28 63 6f 6e 63 61 74 0a ile)).........(let.((to.(concat.
fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 0a 20 20 20 20 20 20 20 20 20 ...................dir..........
fd60 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 74 61 72 67 65 74 2d 66 69 6c 65 2d 6e 61 6d 65 20 64 ..........(or.target-file-name.d
fd80 65 66 61 75 6c 74 2d 66 69 6c 65 2d 6e 61 6d 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 efault-file-name))))...........(
fda0 6d 61 6b 65 2d 64 69 72 65 63 74 6f 72 79 20 64 69 72 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 make-directory.dir.t)...........
fdc0 28 6d 65 73 73 61 67 65 20 22 63 6f 70 79 69 6e 67 20 25 73 20 65 6c 6e 6f 64 65 20 77 69 6b 69 (message."copying.%s.elnode.wiki
fde0 20 64 65 66 61 75 6c 74 20 70 61 67 65 20 74 6f 20 25 73 22 20 64 69 72 20 74 6f 29 0a 20 20 20 .default.page.to.%s".dir.to)....
fe00 20 20 20 20 20 20 20 28 64 69 72 65 64 2d 63 6f 70 79 2d 66 69 6c 65 20 73 6f 75 72 63 65 2d 64 .......(dired-copy-file.source-d
fe20 65 66 61 75 6c 74 2d 66 69 6c 65 20 74 6f 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 28 77 efault-file.to.nil)...........(w
fe40 68 65 6e 20 6f 74 68 65 72 2d 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 66 hen.other-files.............(nof
fe60 6c 65 74 20 28 28 72 65 73 6f 6c 76 65 2d 66 69 6c 65 6e 61 6d 65 20 28 66 69 6c 65 29 0a 20 20 let.((resolve-filename.(file)...
fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 6e 61 6d ...................(if.(file-nam
fea0 65 2d 61 62 73 6f 6c 75 74 65 2d 70 20 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e-absolute-p.file)..............
fec0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............file................
fee0 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........(concat...............
ff00 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 ............(file-name-directory
ff20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 ............................sour
ff40 63 65 2d 64 65 66 61 75 6c 74 2d 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ce-default-file)................
ff60 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ...........file)))).............
ff80 20 20 28 6c 6f 6f 70 20 66 6f 72 20 66 69 6c 65 20 69 6e 20 6f 74 68 65 72 2d 66 69 6c 65 73 0a ..(loop.for.file.in.other-files.
ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 64 6f 65 73 20 74 68 65 20 66 69 6c .................;;.does.the.fil
ffc0 65 20 65 78 69 73 74 3f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6e e.exist?..................if.(an
ffe0 64 20 66 69 6c 65 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 28 72 65 73 6f 6c 76 65 2d 66 d.file.(file-exists-p.(resolve-f
10000 69 6c 65 6e 61 6d 65 20 66 69 6c 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ilename.file))).................
10020 20 64 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 69 72 65 64 2d 63 6f .do....................(dired-co
10040 70 79 2d 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 66 py-file.....................;;.f
10060 72 6f 6d 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 73 6f rom........................(reso
10080 6c 76 65 2d 66 69 6c 65 6e 61 6d 65 20 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 lve-filename.file)..............
100a0 20 20 20 20 20 20 20 3b 3b 20 74 6f 2e 2e 2e 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .......;;.to...nd...............
100c0 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 64 69 72 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e 6f 6e ......(concat.dir.(file-name-non
100e0 64 69 72 65 63 74 6f 72 79 20 66 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 directory.file))................
10100 20 20 20 20 20 6e 69 6c 29 29 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 .....nil)))))))))..(defun.elnode
10120 2d 2d 70 72 6f 74 65 63 74 65 64 2d 6c 6f 61 64 20 28 66 65 61 74 75 72 65 20 64 69 72 29 0a 20 --protected-load.(feature.dir)..
10140 20 22 54 72 79 20 61 6e 64 20 72 65 71 75 69 72 65 20 46 45 41 54 55 52 45 2c 20 69 66 20 69 74 ."Try.and.require.FEATURE,.if.it
10160 20 66 61 69 6c 73 20 74 72 79 20 61 6e 64 20 6c 6f 61 64 2e 22 0a 20 20 28 63 6f 6e 64 69 74 69 .fails.try.and.load."...(conditi
10180 6f 6e 2d 63 61 73 65 20 65 72 72 0a 20 20 20 20 20 20 28 72 65 71 75 69 72 65 20 66 65 61 74 75 on-case.err.......(require.featu
101a0 72 65 29 0a 20 20 20 20 28 66 69 6c 65 2d 65 72 72 6f 72 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 re).....(file-error.(progn......
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .............(load..............
101e0 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 64 69 72 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 66 ......(concat.dir.(symbol-name.f
10200 65 61 74 75 72 65 29 20 22 2e 65 6c 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 eature).".el")).................
10220 20 20 28 72 65 71 75 69 72 65 20 66 65 61 74 75 72 65 29 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 ..(require.feature)))))..;;;###a
10240 75 74 6f 6c 6f 61 64 0a 28 64 65 66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 61 70 70 20 28 64 69 utoload.(defmacro.elnode-app.(di
10260 72 2d 76 61 72 20 26 72 65 73 74 20 66 65 61 74 75 72 65 73 29 0a 20 20 22 41 20 6d 61 63 72 6f r-var.&rest.features)..."A.macro
10280 20 74 68 61 74 20 73 65 74 73 20 75 70 20 74 68 65 20 62 6f 72 69 6e 67 20 62 6f 69 6c 65 72 70 .that.sets.up.the.boring.boilerp
102a0 6c 61 74 65 20 66 6f 72 20 45 6c 6e 6f 64 65 20 61 70 70 73 2e 0a 0a 54 68 69 73 20 73 65 74 73 late.for.Elnode.apps...This.sets
102c0 20 75 70 20 6c 65 78 69 63 61 6c 20 62 69 6e 64 69 6e 67 2c 20 63 61 70 74 75 72 65 73 20 74 68 .up.lexical.binding,.captures.th
102e0 65 20 6d 6f 64 75 6c 65 27 73 20 70 61 72 65 6e 74 0a 64 69 72 65 63 74 6f 72 79 20 69 6e 20 44 e.module's.parent.directory.in.D
10300 49 52 2d 56 41 52 2c 20 72 65 71 75 69 72 65 73 20 60 63 6c 27 20 61 6e 64 20 61 6e 79 20 6f 74 IR-VAR,.requires.`cl'.and.any.ot
10320 68 65 72 20 66 65 61 74 75 72 65 73 20 79 6f 75 0a 6c 69 73 74 2e 20 20 55 73 65 20 69 74 20 6c her.features.you.list...Use.it.l
10340 69 6b 65 20 74 68 69 73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d 61 70 70 20 6d 79 2d 61 70 70 2d 64 ike.this:...(elnode-app.my-app-d
10360 69 72 20 65 73 78 6d 6c 20 6d 6f 6e 67 6f 2d 65 6c 6e 6f 64 65 29 0a 0a 4f 6e 63 65 20 75 73 65 ir.esxml.mongo-elnode)..Once.use
10380 64 20 79 6f 75 20 63 61 6e 20 61 63 63 65 73 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 60 6d d.you.can.access.the.variable.`m
103a0 79 2d 61 70 70 2d 64 69 72 27 20 61 73 20 74 68 65 20 64 69 72 6e 61 6d 65 0a 6f 66 20 79 6f 75 y-app-dir'.as.the.dirname.of.you
103c0 72 20 6d 6f 64 75 6c 65 20 28 77 68 69 63 68 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 73 65 r.module.(which.is.useful.for.se
103e0 72 76 69 6e 67 20 66 69 6c 65 73 20 61 6e 64 20 73 75 63 68 29 2e 22 0a 20 20 28 64 65 63 6c 61 rving.files.and.such)."...(decla
10400 72 65 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20 20 28 6c 65 74 20 28 28 64 69 72 2d 76 61 72 2d re.(indent.1))...(let.((dir-var-
10420 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 64 76 22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 v.(make-symbol."dv"))).....`(let
10440 20 28 28 2c 64 69 72 2d 76 61 72 2d 76 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f .((,dir-var-v.(file-name-directo
10460 72 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 ry.........................(or.(
10480 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 buffer-file-name)...............
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 61 64 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 ..............load-file-name....
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 .........................default
104e0 2d 64 69 72 65 63 74 6f 72 79 29 29 29 29 0a 20 20 20 20 20 20 20 28 73 65 74 71 20 6c 65 78 69 -directory))))........(setq.lexi
10500 63 61 6c 2d 62 69 6e 64 69 6e 67 20 74 29 0a 20 20 20 20 20 20 20 28 64 65 66 63 6f 6e 73 74 20 cal-binding.t)........(defconst.
10520 2c 64 69 72 2d 76 61 72 20 2c 64 69 72 2d 76 61 72 2d 76 29 0a 20 20 20 20 20 20 20 28 72 65 71 ,dir-var.,dir-var-v)........(req
10540 75 69 72 65 20 27 63 6c 29 0a 20 20 20 20 20 20 20 28 72 65 71 75 69 72 65 20 27 65 6c 6e 6f 64 uire.'cl)........(require.'elnod
10560 65 29 0a 20 20 20 20 20 20 20 2c 40 28 6c 6f 6f 70 20 66 6f 72 20 66 20 69 6e 20 66 65 61 74 75 e)........,@(loop.for.f.in.featu
10580 72 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 res.............collect.........
105a0 20 20 20 20 20 20 60 28 65 6c 6e 6f 64 65 2d 2d 70 72 6f 74 65 63 74 65 64 2d 6c 6f 61 64 0a 20 ......`(elnode--protected-load..
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 71 75 6f 74 65 20 2c 66 29 20 2c 64 69 72 2d 76 ...............(quote.,f).,dir-v
105e0 61 72 2d 76 29 29 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 ar-v)))))..(defcustom.elnode-log
10600 2d 66 69 6c 65 73 2d 64 69 72 65 63 74 6f 72 79 20 6e 69 6c 0a 20 20 22 54 68 65 20 64 69 72 65 -files-directory.nil..."The.dire
10620 63 74 6f 72 79 20 74 6f 20 73 74 6f 72 65 20 61 6e 79 20 45 6c 6e 6f 64 65 20 6c 6f 67 20 66 69 ctory.to.store.any.Elnode.log.fi
10640 6c 65 73 2e 0a 0a 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 2d 6e 69 6c 20 28 69 6e 20 77 68 69 les...If.this.is.not-nil.(in.whi
10660 63 68 20 63 61 73 65 20 6c 6f 67 73 20 61 72 65 20 6e 6f 74 20 73 61 76 65 64 20 61 74 20 61 6c ch.case.logs.are.not.saved.at.al
10680 6c 29 20 69 74 0a 6d 75 73 74 20 62 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 64 69 72 65 l).it.must.be.the.name.of.a.dire
106a0 63 74 6f 72 79 20 45 6c 6e 6f 64 65 20 63 61 6e 20 75 73 65 20 66 6f 72 20 73 74 6f 72 69 6e 67 ctory.Elnode.can.use.for.storing
106c0 20 6c 6f 67 73 2e 0a 49 66 20 61 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 73 70 65 63 69 66 69 .logs..If.a.directory.is.specifi
106e0 65 64 20 62 75 74 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 74 20 69 73 20 63 ed.but.it.does.not.exist.it.is.c
10700 72 65 61 74 65 64 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 reated."...:group.'elnode...:typ
10720 65 20 27 28 63 68 6f 69 63 65 20 28 63 6f 6e 73 74 20 3a 74 61 67 20 22 4f 66 66 22 20 6e 69 6c e.'(choice.(const.:tag."Off".nil
10740 29 0a 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 29 29 0a 0a 28 64 65 66 76 61 72 )...........directory))..(defvar
10760 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 .elnode-log-buffer-position-writ
10780 74 65 6e 20 30 0a 20 20 22 54 68 65 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 6c 6f 67 ten.0..."The.position.in.the.log
107a0 20 62 75 66 66 65 72 20 77 72 69 74 74 65 6e 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 62 .buffer.written...This.is.used.b
107c0 79 20 60 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6c 6f 67 27 20 74 6f 20 74 72 61 y.`elnode-log-buffer-log'.to.tra
107e0 63 6b 20 77 68 61 74 20 68 61 73 20 62 65 65 6e 20 77 72 69 74 74 65 6e 0a 73 6f 20 66 61 72 2e ck.what.has.been.written.so.far.
10800 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6d 61 ")..(defvar.elnode-log-buffer-ma
10820 78 2d 73 69 7a 65 20 31 30 30 30 0a 20 20 22 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 x-size.1000..."Maximum.number.of
10840 20 6c 69 6e 65 73 20 6f 66 20 6c 6f 67 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 .lines.of.log.")..(defvar.elnode
10860 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 64 61 74 65 74 69 6d 65 2d 66 6f 72 6d 61 74 20 22 25 59 2d -log-buffer-datetime-format."%Y-
10880 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 22 0a 20 20 22 54 68 65 20 64 61 74 65 20 74 69 6d 65 %m-%dT%H:%M:%S"..."The.date.time
108a0 20 66 6f 72 6d 61 74 20 75 73 65 64 20 62 79 20 60 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 .format.used.by.`elnode-log-buff
108c0 65 72 2d 6c 6f 67 27 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 er-log'.")..(defun.elnode-log-bu
108e0 66 66 65 72 2d 6c 6f 67 20 28 74 65 78 74 20 62 75 66 66 65 72 2d 6f 72 2d 6e 61 6d 65 20 26 6f ffer-log.(text.buffer-or-name.&o
10900 70 74 69 6f 6e 61 6c 20 66 69 6c 65 6e 61 6d 65 29 0a 20 20 22 4c 6f 67 20 54 45 58 54 20 74 6f ptional.filename)..."Log.TEXT.to
10920 20 74 68 65 20 42 55 46 46 45 52 2d 4f 52 2d 4e 41 4d 45 20 73 61 76 69 6e 67 20 74 68 65 20 62 .the.BUFFER-OR-NAME.saving.the.b
10940 75 66 66 65 72 20 69 6e 20 46 49 4c 45 4e 41 4d 45 2e 0a 0a 42 55 46 46 45 52 2d 4f 52 2d 4e 41 uffer.in.FILENAME...BUFFER-OR-NA
10960 4d 45 20 69 73 20 65 69 74 68 65 72 20 61 20 62 75 66 66 65 72 20 6f 72 20 61 20 73 74 72 69 6e ME.is.either.a.buffer.or.a.strin
10980 67 20 6e 61 6d 69 6e 67 20 61 20 62 75 66 66 65 72 2e 0a 46 49 4c 45 4e 41 4d 45 20 69 73 20 61 g.naming.a.buffer..FILENAME.is.a
109a0 20 66 69 6c 65 6e 61 6d 65 20 74 6f 20 73 61 76 65 20 74 68 65 20 62 75 66 66 65 72 20 69 6e 74 .filename.to.save.the.buffer.int
109c0 6f 2e 20 20 49 66 20 74 68 65 20 46 49 4c 45 4e 41 4d 45 0a 69 73 20 6e 6f 74 20 73 70 65 63 69 o...If.the.FILENAME.is.not.speci
109e0 66 69 65 64 20 74 68 65 6e 20 77 65 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 66 69 6c 65 fied.then.we.try.to.use.the.file
10a00 6e 61 6d 65 20 6f 66 20 74 68 65 0a 42 55 46 46 45 52 2d 4f 52 2d 4e 41 4d 45 2e 0a 0a 49 66 20 name.of.the.BUFFER-OR-NAME...If.
10a20 6e 65 69 74 68 65 72 20 61 20 62 75 66 66 65 72 20 66 69 6c 65 6e 61 6d 65 20 6e 6f 72 20 46 49 neither.a.buffer.filename.nor.FI
10a40 4c 45 4e 41 4d 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 61 6e 0a 65 72 72 6f LENAME.is.specified.then.an.erro
10a60 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a 0a 54 68 65 20 54 45 58 54 20 69 73 20 6c 6f 67 r.is.generated...The.TEXT.is.log
10a80 67 65 64 20 77 69 74 68 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 ged.with.the.current.date.and.ti
10aa0 6d 65 20 66 6f 72 6d 61 74 74 65 64 20 77 69 74 68 0a 60 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 me.formatted.with.`elnode-log-bu
10ac0 66 66 65 72 2d 64 61 74 65 74 69 6d 65 2d 66 6f 72 6d 61 74 27 2e 22 0a 20 20 28 6c 65 74 20 28 ffer-datetime-format'."...(let.(
10ae0 28 6e 61 6d 65 20 28 6f 72 20 66 69 6c 65 6e 61 6d 65 20 28 62 75 66 66 65 72 2d 66 69 6c 65 2d (name.(or.filename.(buffer-file-
10b00 6e 61 6d 65 20 28 67 65 74 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 2d 6f 72 2d 6e 61 6d 65 29 name.(get-buffer.buffer-or-name)
10b20 29 29 29 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 )))).....(with-current-buffer.(g
10b40 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 62 75 66 66 65 72 2d 6f 72 2d 6e 61 6d 65 29 et-buffer-create.buffer-or-name)
10b60 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 6e .......(let.((buffer-read-only.n
10b80 69 6c 29 29 0a 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 61 73 73 71 0a 20 20 20 20 20 il)).........(unless.(assq......
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 70 ............'elnode-log-buffer-p
10bc0 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 osition-written.................
10be0 20 28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76 61 72 69 61 62 6c 65 73 29 29 0a 20 20 20 20 20 .(buffer-local-variables))......
10c00 20 20 20 20 20 28 6d 61 6b 65 2d 6c 6f 63 61 6c 2d 76 61 72 69 61 62 6c 65 20 27 65 6c 6e 6f 64 .....(make-local-variable.'elnod
10c20 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 29 0a 20 e-log-buffer-position-written)..
10c40 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 .........(setq.elnode-log-buffer
10c60 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 20 28 6d 61 6b 65 2d 6d 61 72 6b 65 72 29 29 -position-written.(make-marker))
10c80 0a 20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d 6d 61 72 6b 65 72 20 65 6c 6e 6f 64 65 2d 6c 6f ...........(set-marker.elnode-lo
10ca0 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 20 28 70 6f 69 6e 74 g-buffer-position-written.(point
10cc0 2d 6d 69 6e 29 29 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 54 6f 20 74 65 73 74 20 74 68 69 73 20 -min))).........;;.To.test.this.
10ce0 73 74 75 66 66 20 77 65 20 63 6f 75 6c 64 20 72 69 70 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f stuff.we.could.rip.these.functio
10d00 6e 73 20 6f 75 74 20 69 6e 74 6f 0a 20 20 20 20 20 20 20 20 3b 3b 20 73 65 70 61 72 61 74 65 20 ns.out.into.........;;.separate.
10d20 70 69 65 63 65 73 3f 0a 20 20 20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a pieces?.........(save-excursion.
10d40 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 ..........(goto-char.(point-max)
10d60 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 28 )...........(insert............(
10d80 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 3a 20 25 73 5c 6e 22 0a 20 20 format............."%s:.%s\n"...
10da0 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 65 6c ..........(format-time-string.el
10dc0 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 64 61 74 65 74 69 6d 65 2d 66 6f 72 6d 61 74 29 node-log-buffer-datetime-format)
10de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b .............text))...........;;
10e00 20 53 61 76 65 20 74 68 65 20 66 69 6c 65 20 69 66 20 77 65 20 68 61 76 65 20 61 20 66 69 6c 65 .Save.the.file.if.we.have.a.file
10e20 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 6e 61 6d 65 0a 20 20 20 20 20 20 name...........(when.name.......
10e40 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 28 66 ......(if.(not.(file-exists-p.(f
10e60 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 ile-name-directory.name)))......
10e80 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b 65 2d 64 69 72 65 63 74 6f 72 79 20 28 66 69 6c 65 ...........(make-directory.(file
10ea0 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 29 20 74 29 29 0a 20 20 20 20 20 20 -name-directory.name).t)).......
10ec0 20 20 20 20 20 20 3b 3b 20 63 6f 75 6c 64 20 62 65 20 73 77 69 74 63 68 65 64 20 74 6f 20 77 72 ......;;.could.be.switched.to.wr
10ee0 69 74 65 2d 72 65 67 69 6f 6e 20 2d 20 70 72 6f 62 61 62 6c 79 20 62 65 74 74 65 72 0a 20 20 20 ite-region.-.probably.better....
10f00 20 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 2d 74 6f 2d 66 69 6c 65 20 65 6c 6e 6f 64 65 2d .........(append-to-file.elnode-
10f20 6c 6f 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 20 28 70 6f 69 log-buffer-position-written.(poi
10f40 6e 74 2d 6d 61 78 29 20 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d 6d nt-max).name).............(set-m
10f60 61 72 6b 65 72 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f 6e arker.elnode-log-buffer-position
10f80 2d 77 72 69 74 74 65 6e 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 20 20 20 -written.(point-max)))..........
10fa0 20 3b 3b 20 54 72 75 6e 63 61 74 65 20 74 68 65 20 66 69 6c 65 20 69 66 20 69 74 27 73 20 67 72 .;;.Truncate.the.file.if.it's.gr
10fc0 6f 77 6e 20 74 6f 6f 20 6c 61 72 67 65 0a 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 own.too.large...........(goto-ch
10fe0 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 77 61 ar.(point-max))...........(forwa
11000 72 64 2d 6c 69 6e 65 20 28 2d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6d 61 78 rd-line.(-.elnode-log-buffer-max
11020 2d 73 69 7a 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 62 65 67 69 6e 6e 69 6e 67 2d 6f 66 2d -size))...........(beginning-of-
11040 6c 69 6e 65 29 0a 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d 72 65 67 69 6f 6e 20 28 line)...........(delete-region.(
11060 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 29 29 29 29 29 29 29 0a 0a 28 64 65 66 63 75 point-min).(point)))))))..(defcu
11080 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 2d 6c 6f 67 2d 74 6f 2d 6d 65 73 73 61 67 65 stom.elnode-error-log-to-message
110a0 73 20 74 0a 20 20 22 57 68 65 74 68 65 72 20 74 6f 20 73 65 6e 64 20 65 6c 6e 6f 64 65 20 6c 6f s.t..."Whether.to.send.elnode.lo
110c0 67 67 69 6e 67 20 74 68 72 6f 75 67 68 20 74 68 65 20 6d 65 73 73 61 67 69 6e 67 20 73 79 73 74 gging.through.the.messaging.syst
110e0 65 6d 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 em."...:group.'elnode...:type.'(
11100 62 6f 6f 6c 65 61 6e 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 boolean))..(defvar.elnode-server
11120 2d 65 72 72 6f 72 2d 6c 6f 67 20 22 2a 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 65 72 72 6f 72 -error-log."*elnode-server-error
11140 2a 22 0a 20 20 22 54 68 65 20 62 75 66 66 65 72 20 77 68 65 72 65 20 65 72 72 6f 72 20 6c 6f 67 *"..."The.buffer.where.error.log
11160 20 6d 65 73 73 61 67 65 73 20 61 72 65 20 73 65 6e 74 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 .messages.are.sent.")..(defvar.e
11180 6c 6e 6f 64 65 2d 2d 64 6f 2d 65 72 72 6f 72 2d 6c 6f 67 67 69 6e 67 20 74 0a 20 20 22 41 6c 6c lnode--do-error-logging.t..."All
111a0 6f 77 73 20 74 65 73 74 73 20 74 6f 20 74 75 72 6e 20 6f 66 66 20 65 72 72 6f 72 20 6c 6f 67 67 ows.tests.to.turn.off.error.logg
111c0 69 6e 67 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 73 65 6e ing.")..(defvar.elnode--http-sen
111e0 64 2d 73 74 72 69 6e 67 2d 64 65 62 75 67 20 6e 69 6c 0a 20 20 22 57 68 65 74 68 65 72 20 74 6f d-string-debug.nil..."Whether.to
11200 20 64 6f 20 65 72 72 6f 72 20 6c 6f 67 67 69 6e 67 20 69 6e 20 60 65 6c 6e 6f 64 65 2d 68 74 74 .do.error.logging.in.`elnode-htt
11220 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 27 2e 0a 0a 54 68 61 74 20 69 73 20 76 65 72 79 20 68 69 p-send-string'...That.is.very.hi
11240 67 68 20 6c 6f 67 67 69 6e 67 2c 20 70 72 6f 62 61 62 6c 79 20 61 20 62 61 64 20 69 64 65 61 20 gh.logging,.probably.a.bad.idea.
11260 66 6f 72 20 61 6e 79 6f 6e 65 20 62 75 74 20 61 6e 0a 65 6c 6e 6f 64 65 20 64 65 76 65 6c 6f 70 for.anyone.but.an.elnode.develop
11280 65 72 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 67 65 74 2d 65 72 72 6f 72 2d er.")..(defun.elnode--get-error-
112a0 6c 6f 67 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22 52 65 74 75 72 6e 73 20 74 68 65 20 62 75 66 log-buffer.()..."Returns.the.buf
112c0 66 65 72 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 2d 6c 6f 67 2e 22 0a 20 20 28 67 65 74 2d 62 fer.for.the.error-log."...(get-b
112e0 75 66 66 65 72 2d 63 72 65 61 74 65 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 65 72 72 6f 72 uffer-create.elnode-server-error
11300 2d 6c 6f 67 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 28 6d 73 67 -log))..(defun.elnode-error.(msg
11320 20 26 72 65 73 74 20 61 72 67 73 29 0a 20 20 22 4c 6f 67 20 4d 53 47 20 77 69 74 68 20 41 52 47 .&rest.args)..."Log.MSG.with.ARG
11340 53 20 61 73 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 S.as.an.error...This.function.is
11360 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 68 61 6e 64 6c 65 72 73 20 74 6f 20 63 61 6c 6c 2e .available.for.handlers.to.call.
11380 20 20 49 74 20 69 73 20 61 6c 73 6f 20 75 73 65 64 0a 62 79 20 65 6c 6e 6f 64 65 20 69 74 65 73 ..It.is.also.used.by.elnode.ites
113a0 6c 66 2e 0a 0a 54 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 65 72 72 6f 72 20 6c 6f 67 lf...There.is.only.one.error.log
113c0 2c 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 6d 6f 72 ,.in.the.future.there.may.be.mor
113e0 65 2e 22 0a 20 20 28 77 68 65 6e 20 65 6c 6e 6f 64 65 2d 2d 64 6f 2d 65 72 72 6f 72 2d 6c 6f 67 e."...(when.elnode--do-error-log
11400 67 69 6e 67 0a 20 20 20 20 28 6c 65 74 20 28 28 66 69 6c 65 6e 61 6d 65 20 28 65 6c 6e 6f 64 65 ging.....(let.((filename.(elnode
11420 2d 2d 6c 6f 67 2d 66 69 6c 65 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 22 29 29 0a --log-filename."elnode-error")).
11440 20 20 20 20 20 20 20 20 20 20 28 66 6d 74 6d 73 67 20 28 61 70 70 6c 79 20 27 66 6f 72 6d 61 74 ..........(fmtmsg.(apply.'format
11460 20 60 28 2c 6d 73 67 20 2c 40 61 72 67 73 29 29 29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 .`(,msg.,@args)))).......(elnode
11480 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6c 6f 67 0a 20 20 20 20 20 20 20 66 6d 74 6d 73 67 0a 20 20 -log-buffer-log........fmtmsg...
114a0 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 67 65 74 2d 65 72 72 6f 72 2d 6c 6f 67 2d 62 75 66 66 .....(elnode--get-error-log-buff
114c0 65 72 29 0a 20 20 20 20 20 20 20 66 69 6c 65 6e 61 6d 65 29 0a 20 20 20 20 20 20 28 77 68 65 6e er)........filename).......(when
114e0 20 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 2d 6c 6f 67 2d 74 6f 2d 6d 65 73 73 61 67 65 73 0a 20 20 .elnode-error-log-to-messages...
11500 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 3a 20 25 73 ......(message."elnode-error:.%s
11520 22 20 66 6d 74 6d 73 67 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6c 6f ".fmtmsg)))))..(defun.elnode--lo
11540 67 2d 66 69 6c 65 6e 61 6d 65 20 28 6c 6f 67 6e 61 6d 65 29 0a 20 20 22 54 75 72 6e 20 4c 4f 47 g-filename.(logname)..."Turn.LOG
11560 4e 41 4d 45 20 69 6e 74 6f 20 61 20 66 69 6c 65 6e 61 6d 65 2e 0a 0a 60 65 6c 6e 6f 64 65 2d 6c NAME.into.a.filename...`elnode-l
11580 6f 67 2d 66 69 6c 65 73 2d 64 69 72 65 63 74 6f 72 79 27 20 69 73 20 75 73 65 64 20 61 73 20 74 og-files-directory'.is.used.as.t
115a0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 66 6f 72 20 6c 6f 67 20 66 69 6c 65 73 2e 0a 0a 54 68 69 he.container.for.log.files...Thi
115c0 73 20 66 75 6e 63 74 69 6f 6e 20 6d 61 69 6e 6c 79 20 65 78 69 73 74 73 20 74 6f 20 6d 61 6b 65 s.function.mainly.exists.to.make
115e0 20 74 65 73 74 69 6e 67 20 65 61 73 69 65 72 2e 22 0a 20 20 28 77 68 65 6e 20 65 6c 6e 6f 64 65 .testing.easier."...(when.elnode
11600 2d 6c 6f 67 2d 66 69 6c 65 73 2d 64 69 72 65 63 74 6f 72 79 0a 20 20 20 20 28 65 78 70 61 6e 64 -log-files-directory.....(expand
11620 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 2f 25 73 22 0a -file-name......(format."%s/%s".
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 66 69 6c 65 73 2d 64 69 .............elnode-log-files-di
11660 72 65 63 74 6f 72 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 6e 61 6d 65 29 29 29 29 rectory..............logname))))
11680 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d ..(defvar.elnode-log-access-form
116a0 61 74 2d 70 61 74 68 2d 77 69 64 74 68 20 32 30 29 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d at-path-width.20).(defun.elnode-
116c0 6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d 61 74 2d 66 75 6e 63 20 28 68 74 74 70 63 6f 6e 29 log-access-format-func.(httpcon)
116e0 0a 20 20 22 53 74 61 6e 64 61 72 64 20 61 63 63 65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 20 66 ..."Standard.access.log.format.f
11700 75 6e 63 74 69 6f 6e 2e 22 0a 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 28 63 6f 6e 63 61 74 0a 20 unction."...(format....(concat..
11720 20 20 20 22 25 73 20 25 20 38 64 20 25 73 20 25 20 22 0a 20 20 20 20 28 6e 75 6d 62 65 72 2d 74 ..."%s.%.8d.%s.%.".....(number-t
11740 6f 2d 73 74 72 69 6e 67 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d 61 o-string.elnode-log-access-forma
11760 74 2d 70 61 74 68 2d 77 69 64 74 68 29 0a 20 20 20 20 22 73 22 29 0a 20 20 20 28 70 72 6f 63 65 t-path-width)....."s")....(proce
11780 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 72 65 73 70 6f ss-get.httpcon.:elnode-httprespo
117a0 6e 73 65 2d 73 74 61 74 75 73 29 0a 20 20 20 28 6f 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 nse-status)....(or.(process-get.
117c0 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 62 79 74 65 73 2d 77 72 69 74 74 65 6e 29 20 30 httpcon.:elnode-bytes-written).0
117e0 29 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e )....(elnode-http-method.httpcon
11800 29 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 )....(elnode-http-pathinfo.httpc
11820 6f 6e 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 on)))..(defcustom.elnode-log-acc
11840 65 73 73 2d 64 65 66 61 75 6c 74 2d 66 6f 72 6d 61 74 74 65 72 2d 66 75 6e 63 74 69 6f 6e 0a 20 ess-default-formatter-function..
11860 20 27 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d 61 74 2d 66 75 6e 63 0a .'elnode-log-access-format-func.
11880 20 20 22 54 68 65 20 64 65 66 61 75 6c 74 20 61 63 63 65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 .."The.default.access.log.format
118a0 74 65 72 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 77 68 65 6e ter.function...This.is.used.when
118c0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 70 65 63 69 66 69 63 20 6c 6f 67 67 65 72 20 66 75 6e .there.is.no.specific.logger.fun
118e0 63 74 69 6f 6e 20 66 6f 72 20 61 0a 6c 6f 67 2d 6e 61 6d 65 2e 22 0a 20 20 3a 67 72 6f 75 70 20 ction.for.a.log-name."...:group.
11900 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 66 75 6e 63 74 69 6f 6e 29 0a 0a 28 64 65 66 'elnode...:type.'function)..(def
11920 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 65 73 73 2d 61 6c 69 73 74 20 6e custom.elnode-log-access-alist.n
11940 69 6c 0a 20 20 22 41 6e 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 6c 69 73 74 20 6f 66 20 61 63 63 il..."An.association.list.of.acc
11960 65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6c 6f 67 ess.log.format.functions.for.log
11980 20 6e 61 6d 65 73 2e 0a 0a 41 6e 20 61 63 63 65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 20 66 75 .names...An.access.log.format.fu
119a0 6e 63 74 69 6f 6e 20 72 65 63 65 69 76 65 73 20 74 68 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 nction.receives.the.http.connect
119c0 69 6f 6e 20 61 6e 64 0a 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 6c 6f 67 20 6c 69 6e 65 ion.and.should.return.a.log.line
119e0 20 74 6f 20 62 65 20 65 6e 74 65 72 65 64 20 69 6e 20 74 68 65 20 6c 6f 67 20 62 75 66 66 65 72 .to.be.entered.in.the.log.buffer
11a00 2e 0a 0a 54 68 65 73 65 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f ...These.override.the.default.lo
11a20 67 20 66 6f 72 6d 61 74 74 65 72 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 g.formatter."...:group.'elnode..
11a40 20 3a 74 79 70 65 20 27 28 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 3a 6b 65 79 2d 74 79 .:type.'(alist...........:key-ty
11a60 70 65 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 3a 76 61 6c 75 65 2d 74 79 70 65 20 pe.string...........:value-type.
11a80 66 75 6e 63 74 69 6f 6e 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 function))..(defun.elnode-log-ac
11aa0 63 65 73 73 20 28 6c 6f 67 6e 61 6d 65 20 68 74 74 70 63 6f 6e 29 0a 20 20 22 4c 6f 67 20 74 68 cess.(logname.httpcon)..."Log.th
11ac0 65 20 48 54 54 50 20 61 63 63 65 73 73 20 69 6e 20 62 75 66 66 65 72 20 4c 4f 47 4e 41 4d 45 2e e.HTTP.access.in.buffer.LOGNAME.
11ae0 0a 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 ..This.function.is.available.for
11b00 20 68 61 6e 64 6c 65 72 73 20 74 6f 20 63 61 6c 6c 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 75 .handlers.to.call...It.is.also.u
11b20 73 65 64 0a 62 79 20 65 6c 6e 6f 64 65 20 69 74 65 73 6c 66 2e 22 0a 20 20 28 6c 65 74 2a 20 28 sed.by.elnode.iteslf."...(let*.(
11b40 28 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 64 61 74 65 74 69 6d 65 2d 66 6f 72 6d (elnode-log-buffer-datetime-form
11b60 61 74 20 22 25 59 2d 25 6d 2d 25 64 2d 25 48 3a 25 4d 3a 25 53 22 29 0a 20 20 20 20 20 20 20 20 at."%Y-%m-%d-%H:%M:%S").........
11b80 20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 28 66 6f 72 6d 61 74 20 22 2a 25 73 2d 65 6c 6e 6f 64 .(buffer-name.(format."*%s-elnod
11ba0 65 2d 61 63 63 65 73 73 2a 22 20 6c 6f 67 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 e-access*".logname))..........(f
11bc0 69 6c 65 6e 61 6d 65 20 28 65 6c 6e 6f 64 65 2d 2d 6c 6f 67 2d 66 69 6c 65 6e 61 6d 65 20 6c 6f ilename.(elnode--log-filename.lo
11be0 67 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 74 65 72 0a 20 20 20 20 gname))..........(formatter.....
11c00 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 28 6b 76 61 20 6c 6f 67 6e 61 6d ......(or............(kva.lognam
11c20 65 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 65 73 73 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 e.elnode-log-access-alist)......
11c40 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 65 73 73 2d 64 65 66 61 75 6c 74 2d ......elnode-log-access-default-
11c60 66 6f 72 6d 61 74 74 65 72 2d 66 75 6e 63 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 formatter-function))..........(f
11c80 6f 72 6d 61 74 74 65 64 0a 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 66 6f 72 6d 61 74 74 ormatted...........(when.formatt
11ca0 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 66 6f 72 6d 61 74 74 65 er.............(funcall.formatte
11cc0 72 20 68 74 74 70 63 6f 6e 29 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 r.httpcon)))).....(elnode-log-bu
11ce0 66 66 65 72 2d 6c 6f 67 20 66 6f 72 6d 61 74 74 65 64 20 62 75 66 66 65 72 2d 6e 61 6d 65 20 66 ffer-log.formatted.buffer-name.f
11d00 69 6c 65 6e 61 6d 65 29 29 29 0a 0a 0a 3b 3b 20 44 65 66 65 72 20 73 74 75 66 66 0a 0a 28 70 72 ilename)))...;;.Defer.stuff..(pr
11d20 6f 67 6e 0a 20 20 3b 3b 20 53 65 74 73 20 75 70 20 74 68 65 20 65 6c 6e 6f 64 65 20 64 65 66 65 ogn...;;.Sets.up.the.elnode.defe
11d40 72 20 73 69 67 6e 61 6c 0a 20 20 28 70 75 74 20 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 0a 20 20 r.signal...(put.'elnode-defer...
11d60 20 20 20 20 20 27 65 72 72 6f 72 2d 63 6f 6e 64 69 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 27 28 .....'error-conditions........'(
11d80 65 72 72 6f 72 20 65 6c 6e 6f 64 65 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 29 29 0a 20 20 28 70 error.elnode.elnode-defer))...(p
11da0 75 74 20 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 0a 20 20 20 20 20 20 20 27 65 72 72 6f 72 2d 6d ut.'elnode-defer........'error-m
11dc0 65 73 73 61 67 65 0a 20 20 20 20 20 20 20 22 45 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 20 70 72 essage........"Elnode.handler.pr
11de0 6f 63 65 73 73 69 6e 67 20 64 65 66 65 72 65 64 22 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e ocessing.defered"))..(defvar.eln
11e00 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 20 27 28 29 0a 20 20 22 4c 69 73 74 20 6f 66 20 64 65 66 ode--deferred.'()..."List.of.def
11e20 65 72 72 65 64 20 70 61 69 72 73 3a 20 28 73 6f 63 6b 65 74 20 2e 20 68 61 6e 64 6c 65 72 29 2e erred.pairs:.(socket...handler).
11e40 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6e 6f 77 20 28 68 61 6e ")..(defun.elnode-defer-now.(han
11e60 64 6c 65 72 29 0a 20 20 22 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 63 61 6c 6c 20 74 dler)..."The.function.you.call.t
11e80 6f 20 64 65 66 65 72 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e o.defer.processing.of.the.curren
11ea0 74 20 73 6f 63 6b 65 74 2e 0a 0a 50 61 73 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 48 t.socket...Pass.in.the.current.H
11ec0 41 4e 44 4c 45 52 2e 0a 0a 46 49 58 4d 45 3a 20 57 65 20 63 6f 75 6c 64 20 63 61 70 74 75 72 65 ANDLER...FIXME:.We.could.capture
11ee0 20 74 68 65 20 63 75 72 72 65 6e 74 20 68 61 6e 64 6c 65 72 20 73 6f 6d 65 68 6f 77 3f 20 49 20 .the.current.handler.somehow?.I.
11f00 74 68 69 6e 6b 20 74 68 65 0a 70 6f 69 6e 74 20 69 73 20 74 68 61 74 20 77 68 61 74 65 76 65 72 think.the.point.is.that.whatever
11f20 20 73 69 67 6e 61 6c 73 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 20 73 68 6f 75 6c 64 20 62 65 20 .signals.elnode-defer.should.be.
11f40 67 65 74 74 69 6e 67 0a 63 6f 6e 74 72 6f 6c 20 62 61 63 6b 20 77 68 65 6e 20 74 68 65 20 64 65 getting.control.back.when.the.de
11f60 66 65 72 72 65 64 20 69 73 20 72 65 2d 70 72 6f 63 65 73 73 65 64 2e 22 0a 20 20 28 73 69 67 6e ferred.is.re-processed."...(sign
11f80 61 6c 20 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 20 68 61 6e 64 6c 65 72 29 29 0a 0a 28 64 65 66 al.'elnode-defer.handler))..(def
11fa0 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 75 6e 74 69 6c 20 28 67 75 61 72 64 20 macro.elnode-defer-until.(guard.
11fc0 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 54 65 73 74 20 47 55 41 52 44 20 61 6e 64 20 64 65 &rest.body)..."Test.GUARD.and.de
11fe0 66 65 72 20 69 66 20 69 74 20 66 61 69 6c 73 20 61 6e 64 20 42 4f 44 59 20 69 66 20 69 74 20 64 fer.if.it.fails.and.BODY.if.it.d
12000 6f 65 73 6e 27 74 2e 0a 0a 60 68 74 74 70 63 6f 6e 27 20 69 73 20 63 61 70 74 75 72 65 64 20 69 oesn't...`httpcon'.is.captured.i
12020 6e 20 74 68 69 73 20 6d 61 63 72 6f 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 63 n.this.macro.which.means.the.mac
12040 72 6f 20 63 61 6e 0a 6f 6e 6c 79 20 62 65 20 65 78 70 61 6e 64 65 64 20 77 68 65 72 65 20 74 68 ro.can.only.be.expanded.where.th
12060 65 72 65 20 69 73 20 61 6e 20 69 6e 73 63 6f 70 65 20 60 68 74 74 70 63 6f 6e 27 2e 0a 0a 49 6e ere.is.an.inscope.`httpcon'...In
12080 73 69 64 65 20 74 68 65 20 6d 61 63 72 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 60 65 6c 6e 6f 64 side.the.macro.the.symbol.`elnod
120a0 65 2d 64 65 66 65 72 2d 67 75 61 72 64 2d 69 74 27 20 69 73 20 62 6f 75 6e 64 20 74 6f 0a 74 68 e-defer-guard-it'.is.bound.to.th
120c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 47 55 41 52 44 2e 22 0a 20 20 28 64 65 63 6c 61 72 e.value.of.the.GUARD."...(declar
120e0 65 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20 20 28 6c 65 74 20 28 28 62 76 20 28 6d 61 6b 65 2d e.(indent.1))...(let.((bv.(make-
12100 73 79 6d 62 6f 6c 20 22 62 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 67 76 20 28 6d 61 6b 65 2d symbol."bv")).........(gv.(make-
12120 73 79 6d 62 6f 6c 20 22 67 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 66 76 20 28 6d 61 6b 65 2d symbol."gv")).........(fv.(make-
12140 73 79 6d 62 6f 6c 20 22 66 76 22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c 67 76 20 symbol."fv"))).....`(let*.((,gv.
12160 28 6c 61 6d 62 64 61 20 28 29 20 2c 67 75 61 72 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 (lambda.().,guard)).............
12180 28 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 67 75 61 72 64 2d 69 74 20 28 66 75 6e 63 61 6c 6c 20 (elnode-defer-guard-it.(funcall.
121a0 2c 67 76 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 62 76 20 28 6c 61 6d 62 64 61 20 28 ,gv)).............(,bv.(lambda.(
121c0 68 74 74 70 63 6f 6e 29 20 2c 40 62 6f 64 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c httpcon).,@body)).............(,
121e0 66 76 20 3b 20 61 20 79 2d 63 6f 6d 62 69 6e 61 74 6f 72 21 0a 20 20 20 20 20 20 20 20 20 20 20 fv.;.a.y-combinator!............
12200 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 20 70 72 6f 63 29 0a 20 20 20 20 20 20 20 ..(lambda.(httpcon.proc)........
12220 20 20 20 20 20 20 20 20 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 67 75 61 72 64 ........(setq.elnode-defer-guard
12240 2d 69 74 20 28 66 75 6e 63 61 6c 6c 20 2c 67 76 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 -it.(funcall.,gv))..............
12260 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 67 75 61 72 64 2d 69 74 0a 20 20 20 20 ..(if.elnode-defer-guard-it.....
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 2c 62 76 20 68 74 74 70 ...............(funcall.,bv.http
122a0 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20 74 con)....................;;.the.t
122c0 65 73 74 20 66 61 69 6c 65 64 20 77 65 20 73 68 6f 75 6c 64 20 64 65 66 65 72 20 61 67 61 69 6e est.failed.we.should.defer.again
122e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 64 65 66 65 ....................(elnode-defe
12300 72 2d 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 r-now.....................(lambd
12320 61 20 28 68 74 74 70 2d 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a.(http-con)....................
12340 20 20 20 28 66 75 6e 63 61 6c 6c 20 70 72 6f 63 20 68 74 74 70 2d 63 6f 6e 20 70 72 6f 63 29 29 ...(funcall.proc.http-con.proc))
12360 29 29 29 29 29 0a 20 20 20 20 20 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 67 75 )))))........(if.elnode-defer-gu
12380 61 72 64 2d 69 74 0a 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 2c 62 76 20 68 ard-it............(funcall.,bv.h
123a0 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20 74 65 73 74 20 66 ttpcon)............;;.The.test.f
123c0 61 69 6c 65 64 2c 20 77 65 20 73 68 6f 75 6c 64 20 64 65 66 65 72 2e 0a 20 20 20 20 20 20 20 20 ailed,.we.should.defer..........
123e0 20 20 20 28 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 ...(elnode-defer-now............
12400 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 29 20 3b 20 61 70 70 6c 79 20 74 68 65 20 79 .(lambda.(httpcon).;.apply.the.y
12420 2d 63 6f 6d 62 69 6e 61 74 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 -combinator...............(funca
12440 6c 6c 20 2c 66 76 20 68 74 74 70 63 6f 6e 20 2c 66 76 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 ll.,fv.httpcon.,fv)))))))..(defu
12460 6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 61 64 64 20 28 68 74 74 70 63 6f 6e 20 n.elnode--deferred-add.(httpcon.
12480 68 61 6e 64 6c 65 72 29 0a 20 20 22 41 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 48 54 handler)..."Add.the.specified.HT
124a0 54 50 43 4f 4e 2f 48 41 4e 44 4c 45 52 20 70 61 69 72 20 74 6f 20 74 68 65 20 64 65 66 65 72 72 TPCON/HANDLER.pair.to.the.deferr
124c0 65 64 20 6c 69 73 74 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 64 65 66 65 72 ed.list."...(elnode-error."defer
124e0 72 65 64 2d 61 64 64 3a 20 61 64 64 69 6e 67 20 61 20 64 65 66 65 72 20 25 73 20 66 6f 72 20 25 red-add:.adding.a.defer.%s.for.%
12500 73 22 20 68 61 6e 64 6c 65 72 20 68 74 74 70 63 6f 6e 29 0a 20 20 28 70 75 73 68 20 28 63 6f 6e s".handler.httpcon)...(push.(con
12520 73 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65 72 29 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 s.httpcon.handler).elnode--defer
12540 72 65 64 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 70 red))..(defun.elnode--deferred-p
12560 72 6f 63 65 73 73 2d 6f 70 65 6e 20 28 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 rocess-open.(httpcon.handler)...
12580 22 50 72 6f 63 65 73 73 20 74 68 65 20 48 41 4e 44 4c 45 52 20 77 69 74 68 20 74 68 65 20 6b 6e "Process.the.HANDLER.with.the.kn
125a0 6f 77 6e 20 6f 70 65 6e 20 48 54 54 50 43 4f 4e 2e 22 0a 20 20 3b 3b 20 28 65 6c 6e 6f 64 65 2d own.open.HTTPCON."...;;.(elnode-
125c0 65 72 72 6f 72 20 22 64 65 66 65 72 20 2d 20 6a 75 73 74 20 62 65 66 6f 72 65 20 63 61 6c 6c 69 error."defer.-.just.before.calli
125e0 6e 67 20 74 68 65 20 68 61 6e 64 6c 65 72 20 25 73 22 20 68 61 6e 64 6c 65 72 29 0a 20 20 28 66 ng.the.handler.%s".handler)...(f
12600 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65 72 20 68 74 74 70 63 6f 6e 29 29 0a 0a 0a 3b 3b 20 4c 6f uncall.handler.httpcon))...;;.Lo
12620 67 20 6c 65 76 65 6c 73 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 64 65 g.levels.(defconst.elnode-log-de
12640 62 75 67 20 30 29 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 69 6e 66 6f bug.0).(defconst.elnode-log-info
12660 20 31 29 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 61 72 6e 69 6e 67 .1).(defconst.elnode-log-warning
12680 20 32 29 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 63 72 69 74 69 63 61 .2).(defconst.elnode-log-critica
126a0 6c 20 33 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 70 72 6f 63 65 l.3)..(defvar.elnode-defer-proce
126c0 73 73 6f 72 2d 6c 6f 67 2d 6c 65 76 65 6c 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 63 72 69 74 69 63 ssor-log-level.elnode-log-critic
126e0 61 6c 0a 20 20 22 4c 6f 67 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 64 65 66 65 72 20 70 72 6f al..."Log.level.of.the.defer.pro
12700 63 65 73 73 6f 72 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 cessor.")..(defun.elnode--deferr
12720 65 64 2d 6c 6f 67 20 28 6c 65 76 65 6c 20 6d 73 67 20 26 72 65 73 74 20 61 72 67 73 29 0a 20 20 ed-log.(level.msg.&rest.args)...
12740 22 53 70 65 63 69 61 6c 20 6c 6f 67 20 66 6f 72 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 "Special.log.for.elnode-deferred
12760 73 22 0a 20 20 28 77 68 65 6e 20 28 3e 3d 20 6c 65 76 65 6c 20 65 6c 6e 6f 64 65 2d 64 65 66 65 s"...(when.(>=.level.elnode-defe
12780 72 2d 70 72 6f 63 65 73 73 6f 72 2d 6c 6f 67 2d 6c 65 76 65 6c 29 0a 20 20 20 20 28 61 70 70 6c r-processor-log-level).....(appl
127a0 79 0a 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 28 66 6f 72 6d 61 y......'elnode-error......(forma
127c0 74 20 22 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 2d 70 72 6f 63 65 73 73 6f 72 20 25 73 22 t."elnode-deferred-processor.%s"
127e0 20 6d 73 67 29 0a 20 20 20 20 20 61 72 67 73 29 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f .msg)......args)))..(defvar.elno
12800 64 65 2d 64 65 66 65 72 2d 66 61 69 6c 75 72 65 2d 68 6f 6f 6b 20 6e 69 6c 0a 20 20 22 48 6f 6f de-defer-failure-hook.nil..."Hoo
12820 6b 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 20 64 65 66 65 72 72 65 64 20 73 6f 63 6b 65 74 20 k.called.when.a.deferred.socket.
12840 66 61 69 6c 73 2e 0a 0a 54 68 65 20 68 6f 6f 6b 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c fails...The.hook.function.is.cal
12860 6c 65 64 20 77 69 74 68 20 74 68 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 6e 64 led.with.the.http.connection.and
12880 20 74 68 65 0a 66 61 69 6c 75 72 65 20 73 74 61 74 65 20 77 68 69 63 68 20 65 69 74 68 65 72 20 .the.failure.state.which.either.
128a0 74 68 65 20 73 79 6d 62 6f 6c 20 60 63 6c 6f 73 65 64 27 20 6f 72 20 74 68 65 20 73 79 6d 62 6f the.symbol.`closed'.or.the.symbo
128c0 6c 0a 60 66 61 69 6c 65 64 27 2e 22 29 0a 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d l.`failed'.")..(defconst.elnode-
128e0 2d 64 65 62 75 67 2d 77 69 74 68 2d 62 61 63 6b 74 72 61 63 65 73 20 6e 69 6c 0a 20 20 22 46 65 -debug-with-backtraces.nil..."Fe
12900 61 74 75 72 65 20 73 77 69 74 63 68 20 74 6f 20 69 6e 63 6c 75 64 65 20 62 61 63 6b 74 72 61 63 ature.switch.to.include.backtrac
12920 65 20 64 65 62 75 67 67 69 6e 67 20 73 75 70 70 6f 72 74 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 e.debugging.support.")..(defun.e
12940 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 70 72 6f 63 65 73 73 6f 72 20 28 29 0a 20 20 22 lnode--deferred-processor.()..."
12960 50 72 6f 63 65 73 73 20 74 68 65 20 64 65 66 65 72 72 65 64 20 71 75 65 75 65 2e 22 0a 20 20 28 Process.the.deferred.queue."...(
12980 6c 65 74 20 28 28 72 75 6e 20 28 72 61 6e 64 6f 6d 20 35 30 30 30 29 29 20 3b 20 75 73 65 20 74 let.((run.(random.5000)).;.use.t
129a0 68 69 73 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 20 72 75 6e 73 20 69 6e 20 74 68 65 20 his.to.disambiguate.runs.in.the.
129c0 6c 6f 67 73 0a 20 20 20 20 20 20 20 20 28 6e 65 77 2d 64 65 66 65 72 72 65 64 20 28 6c 69 73 74 logs.........(new-deferred.(list
129e0 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c 6f 67 20 65 6c ))).....(elnode--deferred-log.el
12a00 6e 6f 64 65 2d 6c 6f 67 2d 69 6e 66 6f 20 22 73 74 61 72 74 22 29 0a 20 20 20 20 28 6c 6f 6f 70 node-log-info."start").....(loop
12a20 20 66 6f 72 20 70 61 69 72 20 69 6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 0a 20 20 .for.pair.in.elnode--deferred...
12a40 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 20 .....do..........(let.((httpcon.
12a60 28 63 61 72 20 70 61 69 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 61 6e 64 (car.pair))................(hand
12a80 6c 65 72 20 28 63 64 72 20 70 61 69 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 61 73 ler.(cdr.pair)))............(cas
12aa0 65 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 e.(process-status.httpcon)......
12ac0 20 20 20 20 20 20 20 20 28 27 6f 70 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c ........('open...............(el
12ae0 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c 6f 67 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 69 6e node--deferred-log.elnode-log-in
12b00 66 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fo..............................
12b20 20 20 20 20 20 20 20 22 6f 70 65 6e 20 25 73 20 25 73 22 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 ......."open.%s.%s".httpcon.hand
12b40 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 ler)...............(condition-ca
12b60 73 65 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 se.signal-value.................
12b80 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 70 72 6f 63 65 73 73 2d 6f 70 65 6e ..(elnode--deferred-process-open
12ba0 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .httpcon.handler)...............
12bc0 20 20 28 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..('elnode-defer................
12be0 20 20 28 70 75 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 ..(push...................(cons.
12c00 68 74 74 70 63 6f 6e 20 28 63 64 72 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 29 29 0a 20 20 20 20 httpcon.(cdr.signal-value)).....
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 65 66 65 72 72 65 64 29 29 0a 20 20 20 ..............new-deferred))....
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 .............(error.............
12c60 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c 6f 67 0a 20 20 20 20 20 .....(elnode--deferred-log......
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 63 72 69 74 69 63 61 6c .............elnode-log-critical
12ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 72 72 6f 72 20 25 73 20 2d 20 25 ..................."error.%s.-.%
12cc0 73 20 25 53 22 20 68 74 74 70 63 6f 6e 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 0a 20 20 20 20 20 s.%S".httpcon.signal-value......
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 2d 64 65 62 75 67 2d 77 .............(if.elnode--debug-w
12d00 69 74 68 2d 62 61 63 6b 74 72 61 63 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ith-backtraces..................
12d20 20 20 20 20 20 64 65 62 75 67 67 65 72 2d 70 72 65 76 69 6f 75 73 2d 62 61 63 6b 74 72 61 63 65 .....debugger-previous-backtrace
12d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 29 29 29 29 29 0a 20 ......................."")))))..
12d60 20 20 20 20 20 20 20 20 20 20 20 20 28 27 63 6c 6f 73 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 ............('closed............
12d80 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c 6f 67 20 65 6c 6e 6f 64 65 2d ...(elnode--deferred-log.elnode-
12da0 6c 6f 67 2d 69 6e 66 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 log-info........................
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6c 6f 73 65 64 20 25 73 20 25 73 22 20 68 74 74 70 ............."closed.%s.%s".http
12de0 63 6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 61 con.handler)...............;;.Ca
12e00 6c 6c 20 61 6e 79 20 68 6f 6f 6b 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 64 65 66 65 72 20 63 ll.any.hook.function.for.defer.c
12e20 6c 6f 73 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 68 6f loses...............(loop.for.ho
12e40 6f 6b 2d 66 75 6e 63 20 69 6e 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 66 61 69 6c 75 72 65 2d ok-func.in.elnode-defer-failure-
12e60 68 6f 6f 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 hook..................do........
12e80 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 68 6f 6f 6b 2d 66 75 6e 63 20 68 ............(funcall.hook-func.h
12ea0 74 74 70 63 6f 6e 20 27 63 6c 6f 73 65 64 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ttpcon.'closed)))..............(
12ec0 27 66 61 69 6c 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 'failed...............(elnode--d
12ee0 65 66 65 72 72 65 64 2d 6c 6f 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 eferred-log................elnod
12f00 65 2d 6c 6f 67 2d 69 6e 66 6f 20 22 66 61 69 6c 65 64 20 25 73 20 25 73 22 20 68 74 74 70 63 6f e-log-info."failed.%s.%s".httpco
12f20 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 61 6c 6c n.handler)...............;;.Call
12f40 20 61 6e 79 20 68 6f 6f 6b 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 64 65 66 65 72 20 66 61 69 .any.hook.function.for.defer.fai
12f60 6c 75 72 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 68 6f lures...............(loop.for.ho
12f80 6f 6b 2d 66 75 6e 63 20 69 6e 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 66 61 69 6c 75 72 65 2d ok-func.in.elnode-defer-failure-
12fa0 68 6f 6f 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 hook..................do........
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 68 6f 6f 6b 2d 66 75 6e 63 20 68 ............(funcall.hook-func.h
12fe0 74 74 70 63 6f 6e 20 27 66 61 69 6c 65 64 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ttpcon.'failed)))..............;
13000 3b 20 4e 6f 74 20 73 75 72 65 20 68 6f 77 20 74 6f 20 64 6f 20 63 6f 6e 6e 65 63 74 2e 2e 2e 20 ;.Not.sure.how.to.do.connect....
13020 73 61 6d 65 20 61 73 20 6f 70 65 6e 3f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 2e 2e same.as.open?..............;;...
13040 2e 20 6f 72 20 6a 75 73 74 20 70 75 74 20 69 74 20 62 61 63 6b 3f 0a 20 20 20 20 20 20 20 20 20 ..or.just.put.it.back?..........
13060 20 20 20 20 28 27 63 6f 6e 6e 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75 73 ....('connect...............(pus
13080 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 68 74 74 70 63 6f 6e 20 68 h................(cons.httpcon.h
130a0 61 6e 64 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 65 66 65 72 andler)................new-defer
130c0 72 65 64 29 29 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c red))))).....(elnode--deferred-l
130e0 6f 67 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 69 6e 66 6f 20 22 63 6f 6d 70 6c 65 74 65 22 29 0a 20 og.elnode-log-info."complete")..
13100 20 20 20 3b 3b 20 53 65 74 20 74 68 65 20 63 6f 72 72 65 63 74 20 71 75 65 75 65 0a 20 20 20 20 ...;;.Set.the.correct.queue.....
13120 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 20 6e 65 77 2d 64 65 66 65 72 (setq.elnode--deferred.new-defer
13140 72 65 64 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 2d 71 red)))..(defun.elnode-deferred-q
13160 75 65 75 65 2d 70 72 6f 63 65 73 73 20 28 29 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a ueue-process.()...(interactive).
13180 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 70 72 6f 63 65 73 73 6f 72 29 29 0a ..(elnode--deferred-processor)).
131a0 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6f 6e 20 6e 69 6c 0a 20 20 22 .(defvar.elnode-defer-on.nil..."
131c0 57 68 65 74 68 65 72 20 74 6f 20 64 6f 20 64 65 66 65 72 72 69 6e 67 20 6f 72 20 6e 6f 74 2e 22 Whether.to.do.deferring.or.not."
131e0 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 20 6e )..(defvar.elnode--defer-timer.n
13200 69 6c 0a 20 20 22 54 68 65 20 74 69 6d 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 6c 6e 6f il..."The.timer.used.by.the.elno
13220 64 65 20 64 65 66 65 72 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 0a 54 68 69 73 20 69 73 20 69 6e de.defer.processing...This.is.in
13240 69 74 69 61 6c 69 7a 65 64 20 62 79 20 60 65 6c 6e 6f 64 65 2d 2d 69 6e 69 74 2d 64 65 66 65 72 itialized.by.`elnode--init-defer
13260 72 69 6e 67 27 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 69 6e 69 74 2d 64 65 ring'.")..(defun.elnode--init-de
13280 66 65 72 72 69 6e 67 20 28 29 0a 20 20 22 49 6e 69 74 69 61 6c 69 7a 65 20 65 6c 6e 6f 64 65 20 ferring.()..."Initialize.elnode.
132a0 64 65 66 65 72 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 0a 4e 65 63 65 73 73 61 72 79 20 66 6f 72 defer.processing...Necessary.for
132c0 20 72 75 6e 6e 69 6e 67 20 63 6f 6d 65 74 20 61 70 70 73 2e 22 0a 20 20 28 73 65 74 71 20 65 6c .running.comet.apps."...(setq.el
132e0 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 0a 20 20 20 20 20 20 20 20 28 72 75 6e 2d 61 node--defer-timer.........(run-a
13300 74 2d 74 69 6d 65 20 22 32 20 73 65 63 22 20 32 20 27 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 t-time."2.sec".2.'elnode--deferr
13320 65 64 2d 70 72 6f 63 65 73 73 6f 72 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 64 ed-processor)))..(defun.elnode-d
13340 65 66 65 72 72 65 64 2d 71 75 65 75 65 2d 73 74 61 72 74 20 28 29 0a 20 20 22 53 74 61 72 74 20 eferred-queue-start.()..."Start.
13360 74 68 65 20 64 65 66 65 72 72 65 64 20 71 75 65 75 65 2c 20 75 6e 6c 65 73 73 20 69 74 27 73 20 the.deferred.queue,.unless.it's.
13380 72 75 6e 6e 69 6e 67 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 75 6e 6c running."...(interactive)...(unl
133a0 65 73 73 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6f 6e 0a 20 20 20 20 28 73 65 74 71 20 65 6c ess.elnode-defer-on.....(setq.el
133c0 6e 6f 64 65 2d 64 65 66 65 72 2d 6f 6e 20 74 29 29 0a 20 20 28 75 6e 6c 65 73 73 20 65 6c 6e 6f node-defer-on.t))...(unless.elno
133e0 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 69 6e 69 de--defer-timer.....(elnode--ini
13400 74 2d 64 65 66 65 72 72 69 6e 67 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 64 65 t-deferring)))..(defun.elnode-de
13420 66 65 72 72 65 64 2d 71 75 65 75 65 2d 73 74 6f 70 20 28 29 0a 20 20 22 53 74 6f 70 20 61 6e 79 ferred-queue-stop.()..."Stop.any
13440 20 72 75 6e 6e 69 6e 67 20 64 65 66 65 72 72 65 64 20 71 75 65 75 65 20 70 72 6f 63 65 73 73 6f .running.deferred.queue.processo
13460 72 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 77 68 65 6e 20 65 6c 6e 6f r."...(interactive)...(when.elno
13480 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 0a 20 20 20 20 28 63 61 6e 63 65 6c 2d 74 69 6d 65 de--defer-timer.....(cancel-time
134a0 72 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 29 0a 20 20 20 20 28 73 65 74 71 r.elnode--defer-timer).....(setq
134c0 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 20 6e 69 6c 29 29 29 0a 0a 3b 3b 3b .elnode--defer-timer.nil)))..;;;
134e0 20 42 61 73 69 63 20 72 65 73 70 6f 6e 73 65 20 6d 61 6e 67 6c 69 6e 67 0a 0a 28 64 65 66 63 75 .Basic.response.mangling..(defcu
13500 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 64 65 66 61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 2d 74 61 62 stom.elnode-default-response-tab
13520 6c 65 0a 20 20 27 28 28 32 30 31 20 2e 20 22 43 72 65 61 74 65 64 22 29 0a 20 20 20 20 28 34 30 le...'((201..."Created").....(40
13540 30 20 2e 20 22 42 61 64 20 72 65 71 75 65 73 74 22 29 0a 20 20 20 20 28 34 30 34 20 2e 20 22 4e 0..."Bad.request").....(404..."N
13560 6f 74 20 66 6f 75 6e 64 22 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 53 65 72 76 65 72 20 65 72 ot.found").....(500..."Server.er
13580 72 6f 72 22 29 0a 20 20 20 20 28 74 20 2e 20 22 4f 6b 22 29 29 0a 20 20 22 54 68 65 20 73 74 61 ror").....(t..."Ok"))..."The.sta
135a0 74 75 73 20 63 6f 64 65 20 2d 3e 20 64 65 66 61 75 6c 74 20 6d 65 73 73 61 67 65 20 6d 61 70 70 tus.code.->.default.message.mapp
135c0 69 6e 67 73 2e 0a 0a 57 68 65 6e 20 45 6c 6e 6f 64 65 20 73 65 6e 64 73 20 61 20 64 65 66 61 75 ings...When.Elnode.sends.a.defau
135e0 6c 74 20 72 65 73 70 6f 6e 73 65 20 74 68 65 73 65 20 61 72 65 20 74 68 65 20 74 65 78 74 20 75 lt.response.these.are.the.text.u
13600 73 65 64 2e 0a 0a 41 6c 74 65 72 20 74 68 69 73 20 69 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 sed...Alter.this.if.you.want.to.
13620 63 68 61 6e 67 65 20 74 68 65 20 6d 65 73 73 61 67 65 73 20 74 68 61 74 20 45 6c 6e 6f 64 65 20 change.the.messages.that.Elnode.
13640 73 65 6e 64 73 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74 69 6f sends.with.the.following.functio
13660 6e 73 3a 0a 0a 20 27 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 30 27 0a 20 27 65 6c 6e 6f 64 65 ns:...'elnode-send-400'..'elnode
13680 2d 73 65 6e 64 2d 34 30 34 27 0a 20 27 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 35 30 30 27 0a 0a 54 -send-404'..'elnode-send-500'..T
136a0 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 73 27 he.function.`elnode-send-status'
136c0 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 73 65 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e .also.uses.these."...:group.'eln
136e0 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 61 6c 69 73 74 20 3a 6b 65 79 2d 74 79 70 65 20 69 6e ode...:type.'(alist.:key-type.in
13700 74 65 67 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 76 61 6c 75 65 2d 74 79 70 teger.................:value-typ
13720 65 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 2d 64 65 e.string))..(defconst.elnode--de
13740 66 61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 2d 67 72 6f 75 70 73 0a 20 20 27 28 28 31 20 2e 20 22 fault-response-groups...'((1..."
13760 49 6e 66 6f 72 6d 69 6e 67 20 79 6f 75 20 6f 66 20 73 6f 6d 65 74 68 69 6e 67 2e 22 29 0a 20 20 Informing.you.of.something.")...
13780 20 20 28 32 20 2e 20 22 4f 6b 2e 22 29 0a 20 20 20 20 28 33 20 2e 20 22 22 29 0a 20 20 20 20 28 ..(2..."Ok.").....(3..."").....(
137a0 34 20 2e 20 22 42 61 64 2e 22 29 0a 20 20 20 20 28 35 20 2e 20 22 45 72 72 6f 72 2e 22 29 29 0a 4..."Bad.").....(5..."Error.")).
137c0 20 20 22 52 65 73 70 6f 6e 73 65 20 63 6f 64 65 73 20 66 6f 72 20 65 72 72 6f 72 20 63 6f 64 65 .."Response.codes.for.error.code
137e0 20 2f 20 31 30 30 2e 0a 0a 54 68 65 73 65 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 ./.100...These.are.designed.to.b
13800 65 20 75 73 65 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 63 20 63 6f 64 65 20 69 73 20 6e e.used.when.a.specific.code.is.n
13820 6f 74 0a 61 76 61 69 6c 61 62 6c 65 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d ot.available.")..(defun.elnode--
13840 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e 73 65 20 28 73 74 61 74 75 73 20 26 6f 70 74 69 6f 6e 61 format-response.(status.&optiona
13860 6c 20 6d 73 67 29 0a 20 20 22 46 6f 72 6d 61 74 20 74 68 65 20 53 54 41 54 55 53 20 61 6e 64 20 l.msg)..."Format.the.STATUS.and.
13880 6f 70 74 69 6f 6e 61 6c 6c 79 20 4d 45 53 53 41 47 45 20 61 73 20 61 6e 20 48 54 4d 4c 20 72 65 optionally.MESSAGE.as.an.HTML.re
138a0 74 75 72 6e 2e 22 0a 20 20 28 66 6f 72 6d 61 74 20 22 3c 68 31 3e 25 73 3c 2f 68 31 3e 25 73 5c turn."...(format."<h1>%s</h1>%s\
138c0 72 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 28 6f 72 20 28 61 73 73 6f 63 20 73 r\n"...........(cdr.(or.(assoc.s
138e0 74 61 74 75 73 20 65 6c 6e 6f 64 65 2d 64 65 66 61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 2d 74 61 tatus.elnode-default-response-ta
13900 62 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 20 28 ble)....................(assoc.(
13920 2f 20 73 74 61 74 75 73 20 31 30 30 29 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 61 75 6c 74 2d 72 65 /.status.100).elnode--default-re
13940 73 70 6f 6e 73 65 2d 67 72 6f 75 70 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 sponse-groups)..................
13960 20 20 28 61 73 73 6f 63 20 74 20 65 6c 6e 6f 64 65 2d 64 65 66 61 75 6c 74 2d 72 65 73 70 6f 6e ..(assoc.t.elnode-default-respon
13980 73 65 2d 74 61 62 6c 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 6d 73 67 20 28 66 se-table)))...........(if.msg.(f
139a0 6f 72 6d 61 74 20 22 3c 70 3e 25 73 3c 2f 70 3e 22 20 6d 73 67 29 20 22 22 29 29 29 0a 0a 0a 3b ormat."<p>%s</p>".msg)."")))...;
139c0 3b 20 4d 61 69 6e 20 63 6f 6e 74 72 6f 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66 75 6e ;.Main.control.functions..(defun
139e0 20 65 6c 6e 6f 64 65 2d 2d 73 65 6e 74 69 6e 65 6c 20 28 70 72 6f 63 65 73 73 20 73 74 61 74 75 .elnode--sentinel.(process.statu
13a00 73 29 0a 20 20 22 53 65 6e 74 69 6e 65 6c 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 s)..."Sentinel.function.for.the.
13a20 6d 61 69 6e 20 73 65 72 76 65 72 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 6c 69 65 6e 74 20 73 main.server.and.for.the.client.s
13a40 6f 63 6b 65 74 73 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 22 65 6c 6e ockets."...(elnode-error...."eln
13a60 6f 64 65 2d 2d 73 65 6e 74 69 6e 65 6c 20 27 25 73 27 20 66 6f 72 20 70 72 6f 63 65 73 73 20 20 ode--sentinel.'%s'.for.process..
13a80 25 73 20 77 69 74 68 20 62 75 66 66 65 72 20 25 73 22 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 74 72 %s.with.buffer.%s"....(elnode-tr
13aa0 75 6e 63 20 73 74 61 74 75 73 29 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 6e 61 6d 65 20 70 72 6f unc.status)....(process-name.pro
13ac0 63 65 73 73 29 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 cess)....(process-buffer.process
13ae0 29 29 0a 20 20 28 63 6f 6e 64 0a 20 20 20 3b 3b 20 53 65 72 76 65 72 20 73 74 61 74 75 73 0a 20 ))...(cond....;;.Server.status..
13b00 20 20 28 28 61 6e 64 0a 20 20 20 20 20 28 61 73 73 6f 63 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e ..((and......(assoc.(process-con
13b20 74 61 63 74 20 70 72 6f 63 65 73 73 20 3a 73 65 72 76 69 63 65 29 20 65 6c 6e 6f 64 65 2d 73 65 tact.process.:service).elnode-se
13b40 72 76 65 72 2d 73 6f 63 6b 65 74 29 0a 20 20 20 20 20 28 65 71 75 61 6c 20 73 74 61 74 75 73 20 rver-socket)......(equal.status.
13b60 22 64 65 6c 65 74 65 64 5c 6e 22 29 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 0a 09 20 28 "deleted\n")).....(if.(equal...(
13b80 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 0a 09 20 20 3b 3b 20 47 65 74 20 74 68 65 20 73 65 72 process-buffer....;;.Get.the.ser
13ba0 76 65 72 20 70 72 6f 63 65 73 73 0a 09 20 20 28 63 64 72 20 28 61 73 73 6f 63 0a 09 09 28 70 72 ver.process....(cdr.(assoc...(pr
13bc0 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 65 73 73 20 3a 73 65 72 76 69 63 65 29 0a ocess-contact.process.:service).
13be0 09 09 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 29 29 0a 09 20 28 70 72 6f ..elnode-server-socket)))...(pro
13c00 63 65 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 29 29 0a 09 28 6d 65 73 73 61 67 65 20 cess-buffer.process))..(message.
13c20 22 66 6f 75 6e 64 20 74 68 65 20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 20 2d 20 4e 4f 54 20 "found.the.server.process.-.NOT.
13c40 64 65 6c 65 74 69 6e 67 22 29 0a 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22 61 68 61 21 20 deleting").......(message."aha!.
13c60 64 65 6c 65 74 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 63 65 73 73 22 deleting.the.connection.process"
13c80 29 0a 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 ).......(kill-buffer.(process-bu
13ca0 66 66 65 72 20 70 72 6f 63 65 73 73 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f ffer.process))).....(elnode-erro
13cc0 72 20 22 45 6c 6e 6f 64 65 20 73 65 72 76 65 72 20 73 74 6f 70 70 65 64 22 29 29 0a 0a 20 20 20 r."Elnode.server.stopped")).....
13ce0 3b 3b 20 43 6c 69 65 6e 74 20 73 6f 63 6b 65 74 20 73 74 61 74 75 73 0a 20 20 20 28 28 65 71 75 ;;.Client.socket.status....((equ
13d00 61 6c 20 73 74 61 74 75 73 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 72 6f 6b 65 6e 20 62 79 20 al.status."connection.broken.by.
13d20 72 65 6d 6f 74 65 20 70 65 65 72 5c 6e 22 29 0a 20 20 20 20 28 77 68 65 6e 20 28 70 72 6f 63 65 remote.peer\n").....(when.(proce
13d40 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 ss-buffer.process).......(kill-b
13d60 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 29 29 0a uffer.(process-buffer.process)).
13d80 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c 6e 6f 64 65 20 63 6f 6e 6e ......(elnode-error."Elnode.conn
13da0 65 63 74 69 6f 6e 20 64 72 6f 70 70 65 64 20 25 73 22 20 70 72 6f 63 65 73 73 29 29 29 0a 0a 20 ection.dropped.%s".process)))...
13dc0 20 20 28 28 65 71 75 61 6c 20 73 74 61 74 75 73 20 22 6f 70 65 6e 5c 6e 22 29 20 3b 3b 20 74 68 ..((equal.status."open\n").;;.th
13de0 69 73 20 73 61 79 73 20 22 6f 70 65 6e 20 66 72 6f 6d 20 2e 2e 2e 22 0a 20 20 20 20 28 65 6c 6e is.says."open.from....".....(eln
13e00 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c 6e 6f 64 65 20 6f 70 65 6e 65 64 20 6e 65 77 20 63 6f 6e ode-error."Elnode.opened.new.con
13e20 6e 65 63 74 69 6f 6e 22 29 29 0a 0a 20 20 20 3b 3b 20 44 65 66 61 75 6c 74 0a 20 20 20 28 74 0a nection")).....;;.Default....(t.
13e40 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c 6e 6f 64 65 20 73 74 61 74 75 73 ....(elnode-error."Elnode.status
13e60 3a 20 25 73 20 25 73 22 20 70 72 6f 63 65 73 73 20 28 65 6c 6e 6f 64 65 2d 74 72 69 6d 20 73 74 :.%s.%s".process.(elnode-trim.st
13e80 61 74 75 73 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 70 72 6f 63 65 73 atus)))))..(defun.elnode--proces
13ea0 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 70 72 6f 63 20 64 61 74 61 29 0a 20 20 22 45 6c 6e s-send-string.(proc.data)..."Eln
13ec0 6f 64 65 20 61 64 61 70 74 65 72 20 66 6f 72 20 60 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 ode.adapter.for.`process-send-st
13ee0 72 69 6e 67 27 2e 0a 0a 53 65 6e 64 73 20 44 41 54 41 20 74 6f 20 74 68 65 20 48 54 54 50 20 63 ring'...Sends.DATA.to.the.HTTP.c
13f00 6f 6e 6e 65 63 74 69 6f 6e 20 50 52 4f 43 20 28 77 68 69 63 68 20 69 73 20 61 6e 20 48 54 54 50 onnection.PROC.(which.is.an.HTTP
13f20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 29 20 75 73 69 6e 67 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d .connection).using.`elnode-http-
13f40 73 65 6e 64 2d 73 74 72 69 6e 67 27 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 60 send-string'...This.is.used.by.`
13f60 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 27 20 74 6f 20 69 6d 70 6c 65 6d 65 6e elnode-worker-elisp'.to.implemen
13f80 74 20 61 20 70 72 6f 74 6f 63 6f 6c 20 66 6f 72 0a 73 65 6e 64 69 6e 67 20 64 61 74 61 20 74 68 t.a.protocol.for.sending.data.th
13fa0 72 6f 75 67 68 20 61 6e 20 65 6c 6e 6f 64 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 72 61 6e 73 rough.an.elnode.connection.trans
13fc0 70 61 72 65 6e 74 6c 79 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 parently."...(elnode-http-send-s
13fe0 74 72 69 6e 67 20 70 72 6f 63 20 64 61 74 61 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 tring.proc.data))..(defun.elnode
14000 2d 2d 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 28 70 72 6f 63 29 0a 20 20 22 45 6c 6e --process-send-eof.(proc)..."Eln
14020 6f 64 65 20 61 64 61 70 74 65 72 20 66 6f 72 20 60 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f ode.adapter.for.`process-send-eo
14040 66 27 2e 0a 0a 53 65 6e 64 73 20 45 4f 46 20 74 6f 20 74 68 65 20 48 54 54 50 20 63 6f 6e 6e 65 f'...Sends.EOF.to.the.HTTP.conne
14060 63 74 69 6f 6e 20 50 52 4f 43 20 28 77 68 69 63 68 20 69 73 20 61 6e 20 48 54 54 50 0a 63 6f 6e ction.PROC.(which.is.an.HTTP.con
14080 6e 65 63 74 69 6f 6e 29 20 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 63 68 75 6e 6b 65 64 20 65 nection).in.a.way.that.chunked.e
140a0 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 64 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 0a 54 68 69 73 ncoding.is.ended.properly...This
140c0 20 69 73 20 75 73 65 64 20 62 79 20 60 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 .is.used.by.`elnode-worker-elisp
140e0 27 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 70 72 6f 74 6f 63 6f 6c 20 66 6f 72 0a 73 65 '.to.implement.a.protocol.for.se
14100 6e 64 69 6e 67 20 64 61 74 61 20 74 68 72 6f 75 67 68 20 61 6e 20 65 6c 6e 6f 64 65 20 63 6f 6e nding.data.through.an.elnode.con
14120 6e 65 63 74 69 6f 6e 20 74 72 61 6e 73 70 61 72 65 6e 74 6c 79 2e 22 0a 20 20 28 65 6c 6e 6f 64 nection.transparently."...(elnod
14140 65 2d 65 72 72 6f 72 20 22 65 6c 6e 6f 64 65 2d 2d 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f e-error."elnode--process-send-eo
14160 66 20 6f 6e 20 25 73 22 20 70 72 6f 63 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 f.on.%s".proc)...(elnode-http-se
14180 6e 64 2d 73 74 72 69 6e 67 20 70 72 6f 63 20 22 22 29 0a 20 20 3b 3b 28 70 72 6f 63 65 73 73 2d nd-string.proc."")...;;(process-
141a0 73 65 6e 64 2d 73 74 72 69 6e 67 20 70 72 6f 63 20 22 5c 72 5c 6e 22 29 0a 20 20 28 65 6c 6e 6f send-string.proc."\r\n")...(elno
141c0 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 70 72 6f 63 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f de--http-end.proc))..(defun.elno
141e0 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 68 65 61 64 65 72 20 28 62 75 66 66 65 72 20 73 74 de--http-parse-header.(buffer.st
14200 61 72 74 20 26 6f 70 74 69 6f 6e 61 6c 20 6e 6f 6e 2d 68 65 61 64 65 72 29 0a 20 20 22 50 61 72 art.&optional.non-header)..."Par
14220 73 65 20 61 20 68 65 61 64 65 72 20 66 72 6f 6d 20 74 68 65 20 42 55 46 46 45 52 20 61 74 20 70 se.a.header.from.the.BUFFER.at.p
14240 6f 69 6e 74 20 53 54 41 52 54 2e 0a 0a 54 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 oint.START...The.initial.header.
14260 6d 61 79 20 62 65 20 70 61 72 73 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 72 20 69 66 20 4e 4f may.be.parsed.with.this.or.if.NO
14280 4e 2d 48 45 41 44 45 52 20 69 73 0a 73 65 6e 74 20 74 68 65 6e 20 61 6e 6f 74 68 65 72 20 68 65 N-HEADER.is.sent.then.another.he
142a0 61 64 65 72 2c 20 73 75 63 68 20 61 73 20 61 20 6d 75 6c 74 69 70 61 72 74 20 68 65 61 64 65 72 ader,.such.as.a.multipart.header
142c0 2c 20 6d 61 79 20 62 65 20 72 65 61 64 2e 0a 0a 49 66 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 ,.may.be.read...If.the.complete.
142e0 68 65 61 64 65 72 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 72 65 61 64 20 74 68 65 6e 20 77 65 header.has.not.been.read.then.we
14300 20 74 68 72 6f 77 20 74 6f 0a 60 65 6c 6e 6f 64 65 2d 70 61 72 73 65 2d 68 74 74 70 27 20 77 69 .throw.to.`elnode-parse-http'.wi
14320 74 68 20 65 69 74 68 65 72 20 60 68 65 61 64 65 72 27 20 6f 72 20 60 6e 6f 6e 2d 68 65 61 64 65 th.either.`header'.or.`non-heade
14340 72 27 2e 0a 0a 57 65 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 20 6c 65 61 r'...We.return.a.list.of.the.lea
14360 64 65 72 2c 20 77 68 69 63 68 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6c 69 6e 65 20 6f 66 20 der,.which.is.the.first.line.of.
14380 74 68 65 0a 68 65 61 64 65 72 20 28 77 68 69 63 68 20 69 73 20 6e 6f 74 20 74 68 65 20 68 65 61 the.header.(which.is.not.the.hea
143a0 64 65 72 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 61 6c 69 73 74 20 6f 66 0a 68 65 61 der).followed.by.an.alist.of.hea
143c0 64 65 72 73 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75 ders."...(with-current-buffer.bu
143e0 66 66 65 72 0a 20 20 20 20 28 6c 65 74 20 28 28 68 64 72 65 6e 64 20 28 72 65 2d 73 65 61 72 63 ffer.....(let.((hdrend.(re-searc
14400 68 2d 66 6f 72 77 61 72 64 20 22 5c 72 5c 6e 5c 72 5c 6e 22 20 6e 69 6c 20 27 74 29 29 29 0a 20 h-forward."\r\n\r\n".nil.'t)))..
14420 20 20 20 20 20 28 77 68 65 6e 20 28 6e 6f 74 20 68 64 72 65 6e 64 29 0a 20 20 20 20 20 20 20 20 .....(when.(not.hdrend).........
14440 28 74 68 72 6f 77 20 27 65 6c 6e 6f 64 65 2d 70 61 72 73 65 2d 68 74 74 70 20 28 6f 72 20 28 61 (throw.'elnode-parse-http.(or.(a
14460 6e 64 20 6e 6f 6e 2d 68 65 61 64 65 72 20 27 6e 6f 6e 2d 68 65 61 64 65 72 29 20 27 68 65 61 64 nd.non-header.'non-header).'head
14480 65 72 29 29 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 6c 69 6e 65 73 0a 20 20 20 20 20 20 er))).......(let*.((lines.......
144a0 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 ........(split-string...........
144c0 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 73 74 61 72 74 20 68 64 72 .....(buffer-substring.start.hdr
144e0 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 72 5c 6e 22 0a 20 20 20 20 20 end)................"\r\n"......
14500 20 20 20 20 20 20 20 20 20 20 27 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 61 ..........'t))..............(sta
14520 74 75 73 20 28 63 61 72 20 6c 69 6e 65 73 29 29 20 3b 3b 20 74 68 65 20 66 69 72 73 74 20 6c 69 tus.(car.lines)).;;.the.first.li
14540 6e 65 20 69 73 20 74 68 65 20 73 74 61 74 75 73 20 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 20 20 ne.is.the.status.line...........
14560 20 20 20 28 68 65 61 64 65 72 20 28 63 64 72 20 6c 69 6e 65 73 29 29 20 3b 3b 20 74 68 65 20 72 ...(header.(cdr.lines)).;;.the.r
14580 65 73 74 20 6f 66 20 74 68 65 20 6c 69 6e 65 73 20 61 72 65 20 74 68 65 20 68 65 61 64 65 72 0a est.of.the.lines.are.the.header.
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 2d 61 6c 69 73 74 2d 73 74 72 69 6e .............(header-alist-strin
145c0 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 0a 20 20 20 20 20 20 20 gs...............(mapcar........
145e0 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 64 72 6c 69 6e 65 29 0a 20 20 20 20 20 20 ........(lambda.(hdrline).......
14600 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 0a 20 ...........(when.(string-match..
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 28 5b 41 2d 5a 61 ......................."\\([A-Za
14640 2d 7a 30 2d 39 5f 2d 5d 2b 5c 5c 29 3a 5b 20 5d 2a 5c 5c 28 2e 2a 5c 5c 29 22 0a 20 20 20 20 20 -z0-9_-]+\\):[.]*\\(.*\\)"......
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 64 72 6c 69 6e 65 29 0a 20 20 20 20 ...................hdrline).....
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 ...............(cons............
146a0 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 68 64 72 6c 69 6e 65 .........(match-string.1.hdrline
146c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 ).....................(match-str
146e0 69 6e 67 20 32 20 68 64 72 6c 69 6e 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ing.2.hdrline))))...............
14700 20 68 65 61 64 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 73 74 61 74 75 73 20 .header))).........(list.status.
14720 68 65 61 64 65 72 2d 61 6c 69 73 74 2d 73 74 72 69 6e 67 73 29 29 29 29 29 0a 0a 28 64 65 66 75 header-alist-strings)))))..(defu
14740 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 20 28 68 74 74 70 63 6f 6e 29 0a 20 n.elnode--http-parse.(httpcon)..
14760 20 22 50 61 72 73 65 20 74 68 65 20 48 54 54 50 20 68 65 61 64 65 72 20 66 6f 72 20 74 68 65 20 ."Parse.the.HTTP.header.for.the.
14780 70 72 6f 63 65 73 73 2e 0a 0a 49 66 20 74 68 65 20 72 65 71 75 65 73 74 20 69 73 20 6e 6f 74 20 process...If.the.request.is.not.
147a0 66 75 6c 6c 79 20 63 6f 6d 70 6c 65 74 65 20 28 69 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 fully.complete.(if.the.header.ha
147c0 73 20 6e 6f 74 0a 61 72 72 69 76 65 64 20 79 65 74 20 6f 72 20 77 65 20 64 6f 6e 27 74 20 68 61 s.not.arrived.yet.or.we.don't.ha
147e0 76 65 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 79 65 74 20 66 6f ve.all.the.content-length.yet.fo
14800 72 0a 65 78 61 6d 70 6c 65 29 20 74 68 69 73 20 63 61 6e 20 74 68 72 6f 77 20 60 65 6c 6e 6f 64 r.example).this.can.throw.`elnod
14820 65 2d 70 61 72 73 65 2d 68 74 74 70 27 2e 20 20 54 68 65 20 74 68 69 6e 67 20 62 65 69 6e 67 0a e-parse-http'...The.thing.being.
14840 77 61 69 74 65 64 20 66 6f 72 20 69 73 20 69 6e 64 69 63 61 74 65 64 2e 0a 0a 49 6d 70 6f 72 74 waited.for.is.indicated...Import
14860 61 6e 74 20 73 69 64 65 20 65 66 66 65 63 74 73 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f ant.side.effects.of.this.functio
14880 6e 20 61 72 65 20 74 6f 20 61 64 64 20 63 65 72 74 61 69 6e 0a 70 72 6f 63 65 73 73 20 70 72 6f n.are.to.add.certain.process.pro
148a0 70 65 72 74 69 65 73 20 74 6f 20 74 68 65 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 perties.to.the.HTTP.connection..
148c0 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 73 75 63 63 65 73 73 .These.are.the.result.of.success
148e0 66 75 6c 20 70 61 72 73 69 6e 67 2e 22 0a 20 20 3b 3b 20 46 49 58 4d 45 20 2d 20 77 65 20 64 6f ful.parsing."...;;.FIXME.-.we.do
14900 6e 27 74 20 6e 65 65 64 20 74 6f 20 64 6f 20 74 68 69 73 20 2d 20 77 65 20 73 68 6f 75 6c 64 20 n't.need.to.do.this.-.we.should.
14920 63 68 65 63 6b 20 66 6f 72 0a 20 20 3b 3b 20 68 65 61 64 65 72 2d 70 61 72 73 65 64 20 61 6e 64 check.for...;;.header-parsed.and
14940 20 61 76 6f 69 64 20 69 74 20 77 65 20 77 65 20 63 61 6e 0a 20 20 28 77 69 74 68 2d 63 75 72 72 .avoid.it.we.we.can...(with-curr
14960 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 70 63 ent-buffer.(process-buffer.httpc
14980 6f 6e 29 0a 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 28 67 on).....(save-excursion.......(g
149a0 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 20 20 28 64 65 73 oto-char.(point-min)).......(des
149c0 74 72 75 63 74 75 72 69 6e 67 2d 62 69 6e 64 20 28 6c 65 61 64 65 72 20 61 6c 69 73 74 2d 73 74 tructuring-bind.(leader.alist-st
149e0 72 69 6e 67 73 29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 rings)...........(elnode--http-p
14a00 61 72 73 65 2d 68 65 61 64 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 20 28 70 6f arse-header.(current-buffer).(po
14a20 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 68 64 72 65 6e 64 int-min)).........(let*.((hdrend
14a40 20 28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 6c 69 73 74 2d .(point))................(alist-
14a60 73 79 6d 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6b 76 61 6c 69 73 74 2d 6b 65 syms.................(kvalist-ke
14a80 79 73 2d 3e 73 79 6d 62 6f 6c 73 20 61 6c 69 73 74 2d 73 74 72 69 6e 67 73 20 3a 66 69 72 73 74 ys->symbols.alist-strings.:first
14aa0 2d 66 6e 20 27 64 6f 77 6e 63 61 73 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 -fn.'downcase))................(
14ac0 63 6f 6e 74 65 6e 74 2d 6c 65 6e 20 28 61 73 73 71 20 27 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 content-len.(assq.'content-lengt
14ae0 68 20 61 6c 69 73 74 2d 73 79 6d 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 68 65 h.alist-syms)))...........;;.Che
14b00 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 66 20 77 65 20 68 61 76 65 20 69 74 2e 0a 20 20 ck.the.content.if.we.have.it....
14b20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 0a 20 20 20 20 20 20 ........(when.content-len.......
14b40 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 61 76 61 69 6c 61 62 6c 65 2d 63 6f 6e 74 65 6e 74 20 ......(let*.((available-content.
14b60 28 2d 20 28 70 6f 69 6e 74 2d 6d 61 78 29 20 68 64 72 65 6e 64 29 29 29 0a 20 20 20 20 20 20 20 (-.(point-max).hdrend)))........
14b80 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 3e 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 .......(when.(>.(string-to-numbe
14ba0 72 20 28 63 64 72 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 r.(cdr.content-len))............
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 2d 63 6f 6e 74 65 6e 74 29 0a 20 ............available-content)..
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 68 72 6f 77 20 27 65 6c 6e 6f 64 65 2d 70 61 ...............(throw.'elnode-pa
14c00 72 73 65 2d 68 74 74 70 20 27 63 6f 6e 74 65 6e 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 rse-http.'content))))...........
14c20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 65 61 (process-put.httpcon.:elnode-hea
14c40 64 65 72 2d 65 6e 64 20 68 64 72 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 der-end.hdrend)...........(proce
14c60 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 74 ss-put.httpcon.:elnode-http-stat
14c80 75 73 20 6c 65 61 64 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 us.leader)...........(process-pu
14ca0 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 2d 73 79 t.httpcon.:elnode-http-header-sy
14cc0 6d 73 20 61 6c 69 73 74 2d 73 79 6d 73 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 ms.alist-syms)...........(proces
14ce0 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 s-put.httpcon.:elnode-http-heade
14d00 72 20 61 6c 69 73 74 2d 73 74 72 69 6e 67 73 29 29 29 29 29 0a 20 20 3b 3b 20 52 65 74 75 72 6e r.alist-strings)))))...;;.Return
14d20 20 61 20 73 79 6d 62 6f 6c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 64 6f 6e 65 2d 6e 65 73 73 0a .a.symbol.to.indicate.done-ness.
14d40 20 20 27 64 6f 6e 65 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 ..'done)..(defun.elnode--http-ma
14d60 6b 65 2d 68 64 72 20 28 6d 65 74 68 6f 64 20 72 65 73 6f 75 72 63 65 20 26 72 65 73 74 20 68 65 ke-hdr.(method.resource.&rest.he
14d80 61 64 65 72 73 29 0a 20 20 20 20 22 43 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e aders)....."Convenience.function
14da0 20 74 6f 20 6d 61 6b 65 20 61 6e 20 48 54 54 50 20 68 65 61 64 65 72 2e 0a 0a 4d 45 54 48 4f 44 .to.make.an.HTTP.header...METHOD
14dc0 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 74 6f 20 75 73 65 2e 20 20 52 45 53 4f 55 52 43 45 .is.the.method.to.use...RESOURCE
14de0 20 69 73 20 74 68 65 20 70 61 74 68 20 74 6f 20 75 73 65 2e 0a 48 45 41 44 45 52 53 20 73 68 6f .is.the.path.to.use..HEADERS.sho
14e00 75 6c 64 20 62 65 20 70 61 69 72 73 20 6f 66 20 73 74 72 69 6e 67 73 20 69 6e 64 69 63 61 74 69 uld.be.pairs.of.strings.indicati
14e20 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 76 61 6c 75 65 73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d ng.the.header.values:...(elnode-
14e40 2d 68 74 74 70 2d 6d 61 6b 65 2d 68 64 72 20 27 67 65 74 20 5c 22 2f 5c 22 20 27 28 68 6f 73 74 -http-make-hdr.'get.\"/\".'(host
14e60 20 2e 20 5c 22 6c 6f 63 61 6c 68 6f 73 74 5c 22 29 29 0a 0a 57 68 65 72 65 20 73 79 6d 62 6f 6c ...\"localhost\"))..Where.symbol
14e80 73 20 61 72 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 79 20 61 72 65 20 74 75 72 6e 65 s.are.encountered.they.are.turne
14ea0 64 20 69 6e 74 6f 20 73 74 72 69 6e 67 73 2e 0a 49 6e 73 69 64 65 20 68 65 61 64 65 72 73 20 74 d.into.strings..Inside.headers.t
14ec0 68 65 79 20 61 72 65 20 63 61 70 69 74 61 6c 69 7a 65 64 2e 0a 0a 41 20 68 65 61 64 65 72 20 70 hey.are.capitalized...A.header.p
14ee0 61 69 72 20 77 69 74 68 20 74 68 65 20 6b 65 79 20 60 62 6f 64 79 27 20 63 61 6e 20 62 65 20 75 air.with.the.key.`body'.can.be.u
14f00 73 65 64 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6e 74 65 6e 74 20 62 6f 64 79 3a 0a 0a 20 28 65 sed.to.make.a.content.body:...(e
14f20 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 6b 65 2d 68 64 72 20 27 67 65 74 20 5c 22 2f 5c 22 20 lnode--http-make-hdr.'get.\"/\".
14f40 27 28 62 6f 64 79 20 2e 20 5c 22 73 6f 6d 65 20 74 65 78 74 5c 22 29 29 0a 20 3d 3e 0a 20 47 45 '(body...\"some.text\"))..=>..GE
14f60 54 20 2f 20 48 54 54 50 2f 31 2e 31 0a 0a 20 73 6f 6d 65 20 74 65 78 74 0a 0a 4e 6f 20 6f 74 68 T./.HTTP/1.1...some.text..No.oth
14f80 65 72 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20 64 6f 6e 65 20 6f 6e 20 74 er.transformations.are.done.on.t
14fa0 68 65 20 62 6f 64 79 2c 20 6e 6f 20 63 6f 6e 74 65 6e 74 20 74 79 70 65 0a 61 64 64 65 64 20 6f he.body,.no.content.type.added.o
14fc0 72 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 63 6f 6d 70 75 74 65 64 2e 22 0a 20 20 20 20 r.content.length.computed.".....
14fe0 28 6c 65 74 20 28 62 6f 64 79 29 0a 20 20 20 20 20 20 28 6e 6f 66 6c 65 74 20 28 28 68 65 61 64 (let.(body).......(noflet.((head
15000 65 72 2d 6e 61 6d 65 20 28 68 64 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 er-name.(hdr)................(if
15020 20 28 73 79 6d 62 6f 6c 70 20 28 63 61 72 20 68 64 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 .(symbolp.(car.hdr))............
15040 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 28 63 61 72 20 68 64 72 29 29 0a ........(symbol-name.(car.hdr)).
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 68 64 72 29 29 29 29 0a ...................(car.hdr)))).
15080 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 22 25 73 20 25 73 20 ........(format.........."%s.%s.
150a0 48 54 54 50 2f 31 2e 31 5c 72 5c 6e 25 73 5c 72 5c 6e 25 73 22 0a 20 20 20 20 20 20 20 20 20 28 HTTP/1.1\r\n%s\r\n%s"..........(
150c0 75 70 63 61 73 65 20 28 69 66 20 28 73 79 6d 62 6f 6c 70 20 6d 65 74 68 6f 64 29 20 28 73 79 6d upcase.(if.(symbolp.method).(sym
150e0 62 6f 6c 2d 6e 61 6d 65 20 6d 65 74 68 6f 64 29 20 6d 65 74 68 6f 64 29 29 0a 20 20 20 20 20 20 bol-name.method).method)).......
15100 20 20 20 72 65 73 6f 75 72 63 65 0a 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 68 ...resource..........(loop.for.h
15120 65 61 64 65 72 20 69 6e 20 68 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 eader.in.headers.............if.
15140 28 65 71 75 61 6c 20 28 68 65 61 64 65 72 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 20 22 62 6f 64 (equal.(header-name.header)."bod
15160 79 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20 28 73 65 74 71 20 62 6f 64 79 20 28 63 y").............do.(setq.body.(c
15180 64 72 20 68 65 61 64 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 dr.header)).............else....
151a0 20 20 20 20 20 20 20 20 20 63 6f 6e 63 61 74 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 .........concat.(format.........
151c0 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 3a 20 25 73 5c 72 5c 6e 22 0a 20 20 20 20 20 20 20 ............"%s:.%s\r\n"........
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 70 69 74 61 6c 69 7a 65 20 28 68 65 61 64 65 72 .............(capitalize.(header
15200 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -name.header))..................
15220 20 20 20 28 63 64 72 20 68 65 61 64 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 49 66 ...(cdr.header)))..........;;.If
15240 20 77 65 20 68 61 76 65 20 61 20 62 6f 64 79 20 74 68 65 6e 20 61 64 64 20 74 68 61 74 20 61 73 .we.have.a.body.then.add.that.as
15260 20 77 65 6c 6c 0a 20 20 20 20 20 20 20 20 20 28 6f 72 20 62 6f 64 79 20 22 22 29 29 29 29 29 0a .well..........(or.body.""))))).
15280 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 67 65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 20 .(defun.elnode--get-server-prop.
152a0 28 70 72 6f 63 65 73 73 20 6b 65 79 29 0a 20 20 22 47 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f (process.key)..."Get.the.value.o
152c0 66 20 74 68 65 20 4b 45 59 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 65 72 20 61 74 74 61 63 68 f.the.KEY.from.the.server.attach
152e0 65 64 20 74 6f 20 50 52 4f 43 45 53 53 2e 0a 0a 53 65 72 76 65 72 20 70 72 6f 70 65 72 74 69 65 ed.to.PROCESS...Server.propertie
15300 73 20 61 72 65 20 62 6f 75 6e 64 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 73 74 61 72 74 27 20 s.are.bound.with.`elnode-start'.
15320 77 68 69 63 68 20 73 65 74 73 20 75 70 0a 60 65 6c 6e 6f 64 65 2d 2d 6c 6f 67 2d 66 6e 27 20 74 which.sets.up.`elnode--log-fn'.t
15340 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 73 6f 63 6b 65 74 73 20 63 72 65 61 74 65 o.ensure.that.all.sockets.create
15360 64 20 68 61 76 65 20 61 20 6c 69 6e 6b 0a 62 61 63 6b 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 d.have.a.link.back.to.the.server
15380 2e 22 0a 20 20 20 20 28 6c 65 74 2a 20 28 28 73 65 72 76 65 72 20 28 70 72 6f 63 65 73 73 2d 67 .".....(let*.((server.(process-g
153a0 65 74 20 70 72 6f 63 65 73 73 20 3a 73 65 72 76 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 et.process.:server))............
153c0 28 76 61 6c 75 65 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 73 65 72 76 65 72 20 6b 65 79 29 29 (value.(process-get.server.key))
153e0 29 0a 20 20 20 20 20 20 76 61 6c 75 65 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d ).......value))..(defun.elnode--
15400 6d 61 6b 65 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 29 0a 20 20 20 20 22 4d 61 6b 65 20 61 20 make-send-string.()....."Make.a.
15420 66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65 6e 64 20 61 20 73 74 72 69 6e 67 20 74 6f 20 61 6e 20 function.to.send.a.string.to.an.
15440 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 HTTP.connection.".....(lambda.(h
15460 74 74 70 63 6f 6e 20 73 74 72 29 0a 20 20 20 20 20 20 22 53 65 6e 64 20 53 54 52 20 74 6f 20 74 ttpcon.str)......."Send.STR.to.t
15480 68 65 20 48 54 54 50 43 4f 4e 2e 0a 44 6f 65 73 20 61 6e 79 20 6e 65 63 65 73 73 61 72 79 20 65 he.HTTPCON..Does.any.necessary.e
154a0 6e 63 6f 64 69 6e 67 2e 22 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 70 72 6f 63 65 73 73 ncoding.".......(elnode--process
154c0 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 73 74 72 29 29 29 0a 0a 28 64 65 -send-string.httpcon.str)))..(de
154e0 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d 65 6f 66 20 28 29 0a 20 20 22 fun.elnode--make-send-eof.()..."
15500 4d 61 6b 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65 6e 64 20 45 4f 46 20 74 6f 20 61 Make.a.function.to.send.EOF.to.a
15520 6e 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 63 n.HTTP.connection."...(lambda.(c
15540 6f 6e 29 0a 20 20 20 20 22 53 65 6e 64 20 45 4f 46 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e on)....."Send.EOF.to.the.HTTPCON
15560 2e 0a 44 6f 65 73 20 61 6e 79 20 6e 65 63 65 73 73 61 72 79 20 65 6e 63 6f 64 69 6e 67 2e 22 0a ..Does.any.necessary.encoding.".
15580 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 63 6f ....(elnode--process-send-eof.co
155a0 6e 29 29 29 0a 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 61 6e 64 6c 65 72 2d 63 61 n)))...(defun.elnode--handler-ca
155c0 6c 6c 20 28 68 61 6e 64 6c 65 72 20 70 72 6f 63 65 73 73 29 0a 20 20 22 53 69 6d 70 6c 65 20 66 ll.(handler.process)..."Simple.f
155e0 75 6e 63 74 69 6f 6e 20 74 6f 20 77 72 61 70 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 48 41 4e 44 unction.to.wrap.calling.the.HAND
15600 4c 45 52 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20 63 LER."...(elnode-error."filter:.c
15620 61 6c 6c 69 6e 67 20 68 61 6e 64 6c 65 72 20 6f 6e 20 25 73 22 20 70 72 6f 63 65 73 73 29 0a 20 alling.handler.on.%s".process)..
15640 20 28 66 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 65 73 73 29 0a 20 20 28 65 6c .(funcall.handler.process)...(el
15660 6e 6f 64 65 2d 65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20 68 61 6e 64 6c 65 72 20 72 65 74 75 node-error."filter:.handler.retu
15680 72 6e 65 64 20 6f 6e 20 25 73 22 20 70 72 6f 63 65 73 73 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c rned.on.%s".process))..(defun.el
156a0 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 20 28 70 72 6f 63 65 73 73 20 64 61 74 61 29 0a 20 20 22 46 node--filter.(process.data)..."F
156c0 69 6c 74 65 72 69 6e 67 20 44 41 54 41 20 73 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 6c 69 65 iltering.DATA.sent.from.the.clie
156e0 6e 74 20 50 52 4f 43 45 53 53 2e 2e 0a 0a 54 68 69 73 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b nt.PROCESS....This.does.the.work
15700 20 6f 66 20 66 69 6e 64 69 6e 67 20 61 6e 64 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 75 73 65 72 .of.finding.and.calling.the.user
15720 20 48 54 54 50 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 74 68 65 .HTTP.connection.handler.for.the
15740 20 72 65 71 75 65 73 74 20 6f 6e 20 50 52 4f 43 45 53 53 2e 0a 0a 41 20 62 75 66 66 65 72 20 66 .request.on.PROCESS...A.buffer.f
15760 6f 72 20 74 68 65 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 72 65 61 74 65 or.the.HTTP.connection.is.create
15780 64 2c 20 75 6e 69 71 75 69 66 69 65 64 20 62 79 20 74 68 65 0a 70 6f 72 74 20 6e 75 6d 62 65 72 d,.uniquified.by.the.port.number
157a0 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 20 28 6c 65 74 20 28 28 62 75 .of.the.connection."...(let.((bu
157c0 66 0a 20 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 f..........(or...........(proces
157e0 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 53 s-buffer.process)...........;;.S
15800 65 74 20 74 68 65 20 70 72 6f 63 65 73 73 20 62 75 66 66 65 72 20 28 62 65 63 61 75 73 65 20 74 et.the.process.buffer.(because.t
15820 68 65 20 73 65 72 76 65 72 20 64 6f 65 73 6e 27 74 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 61 he.server.doesn't...........;;.a
15840 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 6d 29 0a 20 20 20 20 utomatically.allocate.them).....
15860 20 20 20 20 20 20 3b 3b 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20 6e 61 6d 65 20 6f ......;;...........;;.The.name.o
15880 66 20 74 68 65 20 62 75 66 66 65 72 20 68 61 73 20 74 68 65 20 63 6c 69 65 6e 74 20 70 6f 72 74 f.the.buffer.has.the.client.port
158a0 20 69 6e 20 69 74 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20 73 70 61 63 65 20 69 6e .in.it...........;;.the.space.in
158c0 20 74 68 65 20 6e 61 6d 65 20 65 6e 73 75 72 65 73 20 74 68 61 74 20 65 6d 61 63 73 20 64 6f 65 .the.name.ensures.that.emacs.doe
158e0 73 20 6e 6f 74 20 6c 69 73 74 20 69 74 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 0a 20 20 20 20 20 s.not.list.it...........;;......
15900 20 20 20 20 20 3b 3b 20 57 65 20 61 6c 73 6f 20 75 73 65 20 74 68 69 73 20 6d 6f 6d 65 6e 74 20 .....;;.We.also.use.this.moment.
15920 74 6f 20 73 65 74 75 70 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20 62 79 0a 20 to.setup.functions.required.by..
15940 20 20 20 20 20 20 20 20 20 3b 3b 20 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 6c 69 73 70 0a 20 .........;;.elnode-worker-lisp..
15960 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 70 6f 72 74 20 28 63 61 64 72 20 28 70 72 6f .........(let*.((port.(cadr.(pro
15980 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 65 73 73 29 29 29 0a 20 20 20 20 20 20 20 20 cess-contact.process))).........
159a0 20 20 20 20 20 20 20 20 20 28 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e 63 20 28 65 6c 6e 6f .........(send-string-func.(elno
159c0 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d 73 74 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 de--make-send-string))..........
159e0 20 20 20 20 20 20 20 20 28 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 20 28 65 6c 6e 6f 64 65 2d 2d ........(send-eof-func.(elnode--
15a00 6d 61 6b 65 2d 73 65 6e 64 2d 65 6f 66 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 make-send-eof))).............(pr
15a20 6f 63 65 73 73 2d 70 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 3a ocess-put..............process.:
15a40 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 send-string-function............
15a60 20 20 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..send-string-func).............
15a80 3b 3b 20 2e 2e 2e 20 61 6e 64 20 74 68 69 73 20 6f 6e 65 20 64 6f 65 73 20 63 6c 6f 73 69 6e 67 ;;.....and.this.one.does.closing
15aa0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 70 65 72 6c 79 0a 20 20 20 20 20 20 20 .the.connection.properly........
15ac0 20 20 20 20 20 3b 3b 20 77 69 74 68 20 65 6c 6e 6f 64 65 27 73 20 63 68 75 6e 6b 65 64 20 65 6e .....;;.with.elnode's.chunked.en
15ae0 63 6f 64 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 coding..............(process-put
15b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 3a 73 65 6e 64 2d 65 6f 66 2d ..............process.:send-eof-
15b20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 2d 65 6f 66 2d 66 function..............send-eof-f
15b40 75 6e 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 4e 6f 77 20 64 6f 20 74 68 65 20 62 unc).............;;.Now.do.the.b
15b60 75 66 66 65 72 20 63 72 65 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d uffer.creation.............(set-
15b80 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 process-buffer..............proc
15ba0 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 ess..............(get-buffer-cre
15bc0 61 74 65 20 28 66 6f 72 6d 61 74 20 22 20 2a 65 6c 6e 6f 64 65 2d 72 65 71 75 65 73 74 2d 25 73 ate.(format.".*elnode-request-%s
15be0 2a 22 20 70 6f 72 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d *".port))).............(process-
15c00 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 29 29 29 29 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 buffer.process))))).....(with-cu
15c20 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75 66 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 64 rrent-buffer.buf.......(insert.d
15c40 61 74 61 29 0a 20 20 20 20 20 20 3b 3b 20 54 72 79 20 61 6e 64 20 70 61 72 73 65 2e 2e 2e 0a 20 ata).......;;.Try.and.parse.....
15c60 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 72 73 65 2d 73 74 61 74 75 73 20 28 63 61 74 63 68 20 .....(let.((parse-status.(catch.
15c80 27 65 6c 6e 6f 64 65 2d 70 61 72 73 65 2d 68 74 74 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 'elnode-parse-http..............
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 ...............(elnode--http-par
15cc0 73 65 20 70 72 6f 63 65 73 73 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 63 61 73 65 20 70 61 72 se.process)))).........(case.par
15ce0 73 65 2d 73 74 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 74 68 69 73 20 66 se-status...........;;.If.this.f
15d00 61 69 6c 73 20 77 69 74 68 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 73 70 65 63 69 66 69 63 20 ails.with.one.of.these.specific.
15d20 63 6f 64 65 73 20 69 74 27 73 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 6f 6b 2e 2e 2e 20 77 65 codes.it's...........;;.ok....we
15d40 27 6c 6c 20 66 69 6e 69 73 68 20 69 74 20 77 68 65 6e 20 74 68 65 20 64 61 74 61 20 61 72 72 69 'll.finish.it.when.the.data.arri
15d60 76 65 73 0a 20 20 20 20 20 20 20 20 20 20 28 27 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 20 ves...........('header..........
15d80 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 65 6c 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 3a ..(elnode-error."elnode--filter:
15da0 20 70 61 72 74 69 61 6c 20 68 65 61 64 65 72 20 64 61 74 61 20 72 65 63 65 69 76 65 64 22 29 29 .partial.header.data.received"))
15dc0 0a 20 20 20 20 20 20 20 20 20 20 28 27 63 6f 6e 74 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 ...........('content............
15de0 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 65 6c 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 3a 20 70 (elnode-error."elnode--filter:.p
15e00 61 72 74 69 61 6c 20 68 65 61 64 65 72 20 64 61 74 61 20 72 65 63 65 69 76 65 64 22 29 29 0a 20 artial.header.data.received"))..
15e20 20 20 20 20 20 20 20 20 20 3b 3b 20 57 65 20 77 65 72 65 20 73 75 63 63 65 73 73 66 75 6c 20 73 .........;;.We.were.successful.s
15e40 6f 20 77 65 20 63 61 6e 20 63 61 6c 6c 20 74 68 65 20 75 73 65 72 20 68 61 6e 64 6c 65 72 2e 0a o.we.can.call.the.user.handler..
15e60 20 20 20 20 20 20 20 20 20 20 28 27 64 6f 6e 65 0a 20 20 20 20 20 20 20 20 20 20 20 28 73 61 76 ..........('done............(sav
15e80 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 e-excursion..............(goto-c
15ea0 68 61 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 har.(process-get.process.:elnode
15ec0 2d 68 65 61 64 65 72 2d 65 6e 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 -header-end))..............(let.
15ee0 28 28 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 ((handler.....................(e
15f00 6c 6e 6f 64 65 2d 2d 67 65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 20 70 72 6f 63 65 73 73 20 3a lnode--get-server-prop.process.:
15f20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 61 6e 64 6c 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 elnode-http-handler)))..........
15f40 20 20 20 20 20 20 3b 3b 20 54 68 69 73 20 69 73 20 77 68 65 72 65 20 77 65 20 63 61 6c 6c 20 74 ......;;.This.is.where.we.call.t
15f60 68 65 20 75 73 65 72 20 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b he.user.handler................;
15f80 3b 20 54 4f 44 4f 3a 20 74 68 69 73 20 6e 65 65 64 73 20 65 72 72 6f 72 20 70 72 6f 74 65 63 74 ;.TODO:.this.needs.error.protect
15fa0 69 6f 6e 20 73 6f 20 77 65 20 63 61 6e 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 3f 0a 20 ion.so.we.can.return.an.error?..
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20 20 ..............(unwind-protect...
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 ..................(condition-cas
16000 65 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.signal-value..................
16020 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 61 6e 64 6c 65 72 2d 63 61 6c 6c 20 68 61 6e .......(elnode--handler-call.han
16040 64 6c 65 72 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dler.process)...................
16060 20 20 20 20 28 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 20 3b 20 73 65 65 20 65 6c 6e 6f 64 65 2d ....('elnode-defer.;.see.elnode-
16080 64 65 66 65 72 2d 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 defer-now.......................
160a0 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20 64 65 66 65 72 20 63 61 .(elnode-error."filter:.defer.ca
160c0 75 67 68 74 20 6f 6e 20 25 73 22 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 ught.on.%s".process)............
160e0 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 68 65 63 6b 20 74 68 65 20 74 69 6d 65 72 2c 20 ............;;.Check.the.timer,.
16100 74 68 69 73 20 69 73 20 70 72 6f 62 61 62 6c 79 20 73 70 75 72 69 6f 75 73 20 62 75 74 0a 20 20 this.is.probably.spurious.but...
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 75 73 65 66 75 6c 20 22 .....................;;.useful."
16140 66 6f 72 20 6e 6f 77 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 for.now"........................
16160 28 75 6e 6c 65 73 73 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6f 6e 0a 20 20 20 20 20 20 20 20 (unless.elnode-defer-on.........
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 .................(elnode-error."
161a0 66 69 6c 74 65 72 3a 20 6e 6f 20 64 65 66 65 72 20 74 69 6d 65 72 20 66 6f 72 20 25 73 22 20 70 filter:.no.defer.timer.for.%s".p
161c0 72 6f 63 65 73 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 rocess))........................
161e0 28 63 61 73 65 20 28 65 6c 6e 6f 64 65 2d 2d 67 65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 0a 20 (case.(elnode--get-server-prop..
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f .............................pro
16220 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 20 cess.:elnode-defer-mode)........
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3a 6d 61 6e 61 67 65 64 20 27 6d 61 ..................((:managed.'ma
16260 6e 61 67 65 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 naged)..........................
16280 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 64 65 .(process-put.process.:elnode-de
162a0 66 65 72 72 65 64 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ferred.t).......................
162c0 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 61 64 64 0a 20 20 20 20 20 20 ....(elnode--deferred-add.......
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 0a 20 20 20 .....................process....
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20 63 ........................;;.the.c
16320 64 72 20 6f 66 20 74 68 65 20 73 69 67 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 66 75 6e 63 0a dr.of.the.sig.value.is.the.func.
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 ...........................(cdr.
16360 73 69 67 6e 61 6c 2d 76 61 6c 75 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 signal-value))).................
16380 20 20 20 20 20 20 20 20 20 28 28 3a 69 6d 6d 65 64 69 61 74 65 20 27 69 6d 6d 65 64 69 61 74 65 .........((:immediate.'immediate
163a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e )...........................(eln
163c0 6f 64 65 2d 65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20 69 6d 6d 65 64 69 61 74 65 20 64 65 66 ode-error."filter:.immediate.def
163e0 65 72 20 6f 6e 20 25 73 22 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 er.on.%s".process)..............
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 28 63 64 72 20 73 69 67 6e 61 .............(funcall.(cdr.signa
16420 6c 2d 76 61 6c 75 65 29 20 70 72 6f 63 65 73 73 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 l-value).process))))............
16440 20 20 20 20 20 20 20 20 20 20 20 28 27 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........('t..................
16460 20 20 20 20 20 20 3b 3b 20 46 49 58 4d 45 3a 20 77 65 20 6e 65 65 64 20 73 6f 6d 65 20 73 6f 72 ......;;.FIXME:.we.need.some.sor
16480 74 20 6f 66 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 20 20 20 20 20 20 20 t.of.check.to.see.if.the........
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 68 65 61 64 65 72 20 68 61 73 20 62 65 ................;;.header.has.be
164c0 65 6e 20 77 72 69 74 74 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 en.written......................
164e0 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..(elnode-error.................
16500 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 3a 20 64 65 66 61 75 6c 74 ........"elnode--filter:.default
16520 20 68 61 6e 64 6c 69 6e 67 20 25 53 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .handling.%S"...................
16540 20 20 20 20 20 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ......signal-value).............
16560 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 0a ...........(process-send-string.
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 0a ........................process.
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d ........................(elnode-
165c0 2d 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e 73 65 20 35 30 30 29 29 29 29 0a 20 20 20 20 20 20 20 -format-response.500))))........
165e0 20 20 20 20 20 20 20 20 20 20 3b 3b 20 48 61 6e 64 6c 65 20 75 6e 77 69 6e 64 20 65 72 72 6f 72 ..........;;.Handle.unwind.error
16600 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 0a 20 20 20 20 20 20 20 s..................(when........
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ..............(and..............
16640 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 65 .........(not.(process-get.proce
16660 73 73 20 3a 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 ss.:elnode-deferred))...........
16680 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 ............(not.(process-get.pr
166a0 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 65 64 29 29 0a 20 20 20 ocess.:elnode-http-started))....
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 70 72 6f 63 65 73 73 ...................(not.(process
166e0 2d 67 65 74 20 70 72 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 -get.process.:elnode-child-proce
16700 73 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 ss)))....................(elnode
16720 2d 65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20 63 61 75 67 68 74 20 61 6e 20 65 72 72 6f 72 20 -error."filter:.caught.an.error.
16740 69 6e 20 74 68 65 20 68 61 6e 64 6c 69 6e 67 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 in.the.handling")...............
16760 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 .....(process-send-string.......
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 ..............process...........
167a0 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e ..........(elnode--format-respon
167c0 73 65 20 35 30 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c se.500))....................(del
167e0 65 74 65 2d 70 72 6f 63 65 73 73 20 70 72 6f 63 65 73 73 29 29 29 29 29 29 29 29 29 29 29 0a 0a ete-process.process)))))))))))..
16800 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 69 70 2d 61 64 64 72 2d 3e 73 74 72 69 6e 67 20 .(defun.elnode--ip-addr->string.
16820 28 69 70 2d 61 64 64 72 29 0a 20 20 22 54 75 72 6e 20 61 20 76 65 63 74 6f 72 20 49 50 2d 41 44 (ip-addr)..."Turn.a.vector.IP-AD
16840 44 52 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 2e 0a 0a 54 68 65 20 76 65 63 74 DR.into.a.string.form...The.vect
16860 6f 72 20 66 6f 72 6d 20 69 73 20 70 72 6f 64 75 63 65 64 20 62 79 20 60 70 72 6f 63 65 73 73 2d or.form.is.produced.by.`process-
16880 63 6f 6e 74 61 63 74 27 20 61 6e 64 20 69 6e 63 6c 75 64 65 73 20 74 68 65 0a 70 6f 72 74 20 6e contact'.and.includes.the.port.n
168a0 75 6d 62 65 72 2e 22 0a 20 20 28 64 65 73 74 72 75 63 74 75 72 69 6e 67 2d 62 69 6e 64 20 28 61 umber."...(destructuring-bind.(a
168c0 20 62 20 63 20 64 20 70 6f 72 74 29 0a 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 27 69 64 65 6e .b.c.d.port).......(mapcar.'iden
168e0 74 69 74 79 20 69 70 2d 61 64 64 72 29 0a 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 2e 25 73 tity.ip-addr).....(format."%s.%s
16900 2e 25 73 2e 25 73 3a 25 73 22 20 61 20 62 20 63 20 64 20 70 6f 72 74 29 29 29 0a 0a 28 64 65 66 .%s.%s:%s".a.b.c.d.port)))..(def
16920 75 6e 20 65 6c 6e 6f 64 65 2d 67 65 74 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72 20 28 68 74 74 un.elnode-get-remote-ipaddr.(htt
16940 70 63 6f 6e 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 72 65 6d 6f 74 65 20 49 50 20 61 64 pcon)..."Return.the.remote.IP.ad
16960 64 72 65 73 73 20 66 72 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 52 65 74 75 72 6e 65 dress.from.the.HTTPCON...Returne
16980 64 20 61 73 20 61 20 64 6f 74 74 65 64 20 69 70 20 61 64 64 72 65 73 73 20 66 6f 6c 6c 6f 77 65 d.as.a.dotted.ip.address.followe
169a0 64 20 62 79 20 61 20 63 6f 6c 6f 6e 20 73 65 70 61 72 61 74 65 64 0a 70 6f 72 74 20 6e 75 6d 62 d.by.a.colon.separated.port.numb
169c0 65 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 5c 22 31 32 37 2e 30 2e 30 2e 31 3a 38 30 er...For.example:.\"127.0.0.1:80
169e0 38 30 5c 22 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 6d 6f 74 65 20 28 70 6c 69 73 74 2d 67 80\"."...(let*.((remote.(plist-g
16a00 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 63 6f et...................(process-co
16a20 6e 74 61 63 74 20 68 74 74 70 63 6f 6e 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ntact.httpcon.t)................
16a40 20 20 20 3a 72 65 6d 6f 74 65 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 69 70 2d 61 64 ...:remote))).....(elnode--ip-ad
16a60 64 72 2d 3e 73 74 72 69 6e 67 20 72 65 6d 6f 74 65 29 29 29 0a 0a 28 64 65 66 61 6c 69 61 73 20 dr->string.remote)))..(defalias.
16a80 27 65 6c 6e 6f 64 65 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72 20 27 65 6c 6e 6f 64 65 2d 67 65 'elnode-remote-ipaddr.'elnode-ge
16aa0 74 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d t-remote-ipaddr)..(defun.elnode-
16ac0 73 65 72 76 65 72 2d 69 6e 66 6f 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 52 65 74 75 72 6e 73 server-info.(httpcon)..."Returns
16ae0 20 61 20 73 74 72 69 6e 67 20 61 64 72 65 73 73 20 6f 66 20 74 68 65 20 73 65 72 76 65 72 20 68 .a.string.adress.of.the.server.h
16b00 6f 73 74 20 61 6e 64 20 70 6f 72 74 20 66 6f 72 20 48 54 54 50 43 4f 4e 2e 0a 0a 46 6f 72 20 65 ost.and.port.for.HTTPCON...For.e
16b20 78 61 6d 70 6c 65 3a 20 5c 22 31 32 37 2e 30 2e 30 2e 31 3a 38 30 30 30 5c 22 20 2d 20 6c 6f 63 xample:.\"127.0.0.1:8000\".-.loc
16b40 61 6c 68 6f 73 74 20 6f 6e 20 70 6f 72 74 20 38 30 30 30 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d alhost.on.port.8000."...(elnode-
16b60 2d 69 70 2d 61 64 64 72 2d 3e 73 74 72 69 6e 67 0a 20 20 20 28 70 6c 69 73 74 2d 67 65 74 0a 20 -ip-addr->string....(plist-get..
16b80 20 20 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 ...(process-contact.(process-get
16ba0 20 68 74 74 70 63 6f 6e 20 3a 73 65 72 76 65 72 29 20 74 29 0a 20 20 20 20 3a 6c 6f 63 61 6c 29 .httpcon.:server).t).....:local)
16bc0 29 29 0a 0a 0a 3b 3b 3b 20 54 65 73 74 69 6e 67 20 73 74 75 66 66 0a 0a 28 64 65 66 76 61 72 20 ))...;;;.Testing.stuff..(defvar.
16be0 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 20 6e 69 6c 0a 20 20 22 43 6f 6f 6b elnode--cookie-store.nil..."Cook
16c00 69 65 20 73 74 6f 72 65 20 66 6f 72 20 74 65 73 74 20 73 65 72 76 65 72 73 2e 0a 0a 54 68 69 73 ie.store.for.test.servers...This
16c20 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 64 65 66 76 61 72 20 66 6f 72 20 64 79 6e 61 6d 69 63 .is.a.special.defvar.for.dynamic
16c40 20 6f 76 65 72 72 69 64 69 6e 67 20 62 79 0a 60 77 69 74 68 2d 65 6c 6e 6f 64 65 2d 6d 6f 63 6b .overriding.by.`with-elnode-mock
16c60 2d 73 65 72 76 65 72 27 2e 22 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 77 69 74 68 2d 65 6c 6e 6f -server'.")..(defmacro.with-elno
16c80 64 65 2d 6d 6f 63 6b 2d 73 65 72 76 65 72 20 28 68 61 6e 64 6c 65 72 20 26 72 65 73 74 20 62 6f de-mock-server.(handler.&rest.bo
16ca0 64 79 29 0a 20 20 22 45 78 65 63 75 74 65 20 42 4f 44 59 20 77 69 74 68 20 61 20 66 61 6b 65 20 dy)..."Execute.BODY.with.a.fake.
16cc0 73 65 72 76 65 72 20 77 68 69 63 68 20 69 73 20 62 6f 75 6e 64 20 74 6f 20 48 41 4e 44 4c 45 52 server.which.is.bound.to.HANDLER
16ce0 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 64 6f 69 6e 67 20 65 6e 64 20 ...This.is.useful.for.doing.end.
16d00 74 6f 20 65 6e 64 20 63 6c 69 65 6e 74 20 74 65 73 74 69 6e 67 3a 0a 0a 20 28 65 72 74 2d 64 65 to.end.client.testing:...(ert-de
16d20 66 74 65 73 74 20 65 6c 6e 6f 64 65 2d 73 6f 6d 65 2d 70 61 67 65 20 28 29 0a 20 20 28 77 69 74 ftest.elnode-some-page.()...(wit
16d40 68 2d 65 6c 6e 6f 64 65 2d 6d 6f 63 6b 2d 73 65 72 76 65 72 20 27 65 6c 6e 6f 64 65 2d 68 6f 73 h-elnode-mock-server.'elnode-hos
16d60 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 28 65 6c 6e 6f 64 tpath-default-handler.....(elnod
16d80 65 2d 74 65 73 74 2d 63 61 6c 6c 20 5c 22 2f 73 6f 6d 65 74 68 69 6e 67 2f 74 65 73 74 5c 22 29 e-test-call.\"/something/test\")
16da0 29 29 0a 0a 54 68 65 20 74 65 73 74 20 63 61 6c 6c 20 77 69 74 68 20 62 65 20 70 61 73 73 65 64 ))..The.test.call.with.be.passed
16dc0 20 74 6f 20 74 68 65 0a 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 .to.the.`elnode-hostpath-default
16de0 2d 68 61 6e 64 6c 65 72 27 20 76 69 61 20 74 68 65 20 6e 6f 72 6d 61 6c 20 48 54 54 50 20 70 61 -handler'.via.the.normal.HTTP.pa
16e00 72 73 69 6e 67 0a 72 6f 75 74 69 6e 65 73 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 rsing.routines."...(declare....(
16e20 69 6e 64 65 6e 74 20 31 29 0a 20 20 20 28 64 65 62 75 67 20 74 29 29 0a 20 20 60 28 6c 65 74 20 indent.1)....(debug.t))...`(let.
16e40 28 28 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 20 28 6d 61 6b 65 2d 68 61 73 ((elnode--cookie-store.(make-has
16e60 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65 71 75 61 6c 29 29 29 0a 20 20 20 20 20 28 6e 6f h-table.:test.'equal)))......(no
16e80 66 6c 65 74 20 28 28 65 6c 6e 6f 64 65 2d 2d 67 65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 20 28 flet.((elnode--get-server-prop.(
16ea0 70 72 6f 63 20 6b 65 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a proc.key).................(cond.
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 65 71 20 6b 65 79 20 3a 65 6c 6e 6f ..................((eq.key.:elno
16ee0 64 65 2d 68 74 74 70 2d 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 de-http-handler)................
16f00 20 20 20 20 2c 68 61 6e 64 6c 65 72 29 29 29 29 0a 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 ....,handler))))........,@body))
16f20 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 74 2d 74 6f 2d 71 75 65 72 79 )..(defun.elnode--alist-to-query
16f40 20 28 61 6c 69 73 74 29 0a 20 20 22 54 75 72 6e 20 61 6e 20 61 6c 69 73 74 20 69 6e 74 6f 20 61 .(alist)..."Turn.an.alist.into.a
16f60 20 66 6f 72 6d 64 61 74 61 2f 71 75 65 72 79 20 73 74 72 69 6e 67 2e 22 0a 20 20 28 6e 6f 66 6c .formdata/query.string."...(nofl
16f80 65 74 20 28 28 77 65 62 2d 2d 6b 65 79 2d 76 61 6c 75 65 2d 65 6e 63 6f 64 65 20 28 6b 65 79 20 et.((web--key-value-encode.(key.
16fa0 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 6e 63 6f 64 65 20 61 20 4b 45 value).............."Encode.a.KE
16fc0 59 20 61 6e 64 20 56 41 4c 55 45 20 66 6f 72 20 75 72 6c 20 65 6e 63 6f 64 69 6e 67 2e 22 0a 20 Y.and.VALUE.for.url.encoding."..
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............(cond...............
17000 20 28 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 75 6d 62 65 72 70 20 .((or..................(numberp.
17020 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 70 value)..................(stringp
17040 20 76 61 6c 75 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 .value)).................(format
17060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 3d 25 73 22 0a 20 20 20 20 20 20 .................."%s=%s".......
17080 20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 28 66 ...........(url-hexify-string.(f
170a0 6f 72 6d 61 74 20 22 25 73 22 20 6b 65 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ormat."%s".key))................
170c0 20 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73 ..(url-hexify-string.(format."%s
170e0 22 20 76 61 6c 75 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 0a 20 20 ".value))))................(t...
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 28 75 72 6c 2d ..............(format."%s".(url-
17120 68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 6b 65 79 29 29 hexify-string.(format."%s".key))
17140 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 77 65 62 2d 2d 74 6f 2d 71 75 65 72 79 2d 73 ))))............(web--to-query-s
17160 74 72 69 6e 67 20 28 6f 62 6a 65 63 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e tring.(object).............."Con
17180 76 65 72 74 20 4f 42 4a 45 43 54 20 28 61 20 68 61 73 68 2d 74 61 62 6c 65 20 6f 72 20 61 6c 69 vert.OBJECT.(a.hash-table.or.ali
171a0 73 74 29 20 74 6f 20 61 6e 20 48 54 54 50 20 71 75 65 72 79 20 73 74 72 69 6e 67 2e 22 0a 20 20 st).to.an.HTTP.query.string."...
171c0 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 53 74 6f 6c 65 6e 20 66 72 6f 6d 20 77 65 62 0a 20 20 ...........;;.Stolen.from.web...
171e0 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 ...........(mapconcat...........
17200 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 61 69 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....(lambda.(pair)..............
17220 20 20 20 28 77 65 62 2d 2d 6b 65 79 2d 76 61 6c 75 65 2d 65 6e 63 6f 64 65 20 28 63 61 72 20 70 ...(web--key-value-encode.(car.p
17240 61 69 72 29 20 28 63 64 72 20 70 61 69 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 air).(cdr.pair)))...............
17260 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 68 61 73 68 2d 74 61 62 (cond.................((hash-tab
17280 6c 65 2d 70 20 6f 62 6a 65 63 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c le-p.object)..................(l
172a0 65 74 20 28 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 et.(result)....................(
172c0 6d 61 70 68 61 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d maphash.....................(lam
172e0 62 64 61 20 28 6b 65 79 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bda.(key.value).................
17300 20 20 20 20 28 73 65 74 71 20 72 65 73 75 6c 74 20 28 61 70 70 65 6e 64 20 28 6c 69 73 74 20 28 ....(setq.result.(append.(list.(
17320 63 6f 6e 73 20 6b 65 79 20 76 61 6c 75 65 29 29 20 72 65 73 75 6c 74 29 29 29 0a 20 20 20 20 20 cons.key.value)).result)))......
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 29 0a 20 20 20 20 20 20 20 20 20 ...............object)..........
17360 20 20 20 20 20 20 20 20 20 20 28 72 65 76 65 72 73 65 20 72 65 73 75 6c 74 29 29 29 0a 20 20 20 ..........(reverse.result)))....
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6c 69 73 74 70 20 6f 62 6a 65 63 74 29 0a 20 20 20 .............((listp.object)....
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 29 29 0a 20 20 20 20 20 20 20 20 20 ..............object))..........
173c0 20 20 20 20 20 22 26 22 29 29 29 0a 20 20 20 20 28 77 65 62 2d 2d 74 6f 2d 71 75 65 72 79 2d 73 ....."&"))).....(web--to-query-s
173e0 74 72 69 6e 67 20 61 6c 69 73 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d tring.alist)))..(defun.elnode--m
17400 61 6b 65 2d 74 65 73 74 2d 63 61 6c 6c 20 28 70 61 74 68 20 6d 65 74 68 6f 64 20 70 61 72 61 6d ake-test-call.(path.method.param
17420 65 74 65 72 73 20 68 65 61 64 65 72 73 29 0a 20 20 22 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 eters.headers)..."Construct.the.
17440 48 54 54 50 20 72 65 71 75 65 73 74 20 66 6f 72 20 61 20 74 65 73 74 20 63 61 6c 6c 2e 0a 0a 54 HTTP.request.for.a.test.call...T
17460 68 69 73 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62 65 20 6d 65 72 67 65 64 20 77 69 his.should.probably.be.merged.wi
17480 74 68 20 74 68 65 20 73 74 75 66 66 20 69 6e 20 74 68 65 20 60 77 65 62 27 0a 6d 6f 64 75 6c 65 th.the.stuff.in.the.`web'.module
174a0 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 71 75 65 72 79 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 ."...(let*.((query...........(if
174c0 20 28 61 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 28 65 71 75 61 6c 20 6d 65 74 68 6f 64 20 22 .(and.parameters.(equal.method."
174e0 47 45 54 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 GET"))...............(format....
17500 20 20 20 20 20 20 20 20 20 20 20 20 22 3f 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............"?%s"...............
17520 20 28 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 74 2d 74 6f 2d 71 75 65 72 79 20 70 61 72 61 6d 65 74 .(elnode--alist-to-query.paramet
17540 65 72 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 29 29 0a 20 20 20 20 20 20 20 ers))...............""))........
17560 20 20 28 68 74 74 70 2d 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 ..(http-path...........(if.(equa
17580 6c 20 71 75 65 72 79 20 22 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 0a 20 l.query."")...............path..
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 25 73 22 20 70 61 74 68 .............(format."%s%s".path
175c0 20 71 75 65 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 68 74 74 70 2d 62 6f 64 79 0a 20 20 .query)))..........(http-body...
175e0 20 20 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 6d 65 74 68 6f 64 20 22 47 45 54 22 29 ........(if.(equal.method."GET")
17600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...............nil..............
17620 20 28 6c 65 74 20 28 28 70 61 72 61 6d 2d 64 61 74 61 20 28 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 .(let.((param-data.(elnode--alis
17640 74 2d 74 6f 2d 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 73 29 29 29 0a 20 20 20 20 20 20 20 t-to-query.parameters)))........
17660 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 68 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 .........(setq.headers..........
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 .............(append............
176a0 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............(list...............
176c0 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 0a 20 ..........(cons."Content-Type"..
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 ............................."ap
17700 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 77 77 77 2d 66 6f 72 6d 2d 75 72 6c 65 6e 63 6f 64 65 64 22 plication/x-www-form-urlencoded"
17720 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 ).........................(cons.
17740 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 "Content-Length"................
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 64 22 20 28 6c 65 6e ...............(format."%d".(len
17780 67 74 68 20 70 61 72 61 6d 2d 64 61 74 61 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 gth.param-data))))..............
177a0 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..........headers)).............
177c0 20 20 20 20 70 61 72 61 6d 2d 64 61 74 61 29 29 29 29 0a 20 20 20 20 28 61 70 70 6c 79 0a 20 20 ....param-data)))).....(apply...
177e0 20 20 20 27 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 6b 65 2d 68 64 72 0a 20 20 20 20 20 60 ...'elnode--http-make-hdr......`
17800 28 2c 6d 65 74 68 6f 64 0a 20 20 20 20 20 20 20 2c 68 74 74 70 2d 70 61 74 68 0a 20 20 20 20 20 (,method........,http-path......
17820 20 20 2c 40 68 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 28 62 6f 64 79 20 2e 20 2c 68 74 74 70 ..,@headers........(body...,http
17840 2d 62 6f 64 79 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 72 65 73 70 6f -body)))))..(defun.elnode--respo
17860 6e 73 65 2d 68 65 61 64 65 72 2d 74 6f 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 20 28 72 65 73 70 nse-header-to-cookie-store.(resp
17880 6f 6e 73 65 29 0a 20 20 22 41 64 64 20 53 65 74 2d 43 6f 6f 6b 69 65 20 68 65 61 64 65 72 73 20 onse)..."Add.Set-Cookie.headers.
178a0 66 72 6f 6d 20 52 45 53 50 4f 4e 53 45 20 74 6f 20 74 68 65 20 63 6f 6f 6b 69 65 20 73 74 6f 72 from.RESPONSE.to.the.cookie.stor
178c0 65 2e 22 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f 6b 69 65 2d 73 65 74 20 28 61 73 73 6f 63 20 22 e."...(let.((cookie-set.(assoc."
178e0 53 65 74 2d 43 6f 6f 6b 69 65 22 20 72 65 73 70 6f 6e 73 65 29 29 29 0a 20 20 20 20 28 77 68 65 Set-Cookie".response))).....(whe
17900 6e 20 63 6f 6f 6b 69 65 2d 73 65 74 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 63 6f 6f 6b 69 n.cookie-set.......(let*.((cooki
17920 65 2d 76 61 6c 75 65 20 28 63 61 72 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 28 63 64 72 20 e-value.(car.(split-string.(cdr.
17940 63 6f 6f 6b 69 65 2d 73 65 74 29 20 22 3b 22 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 61 70 70 cookie-set).";")))).........(app
17960 6c 79 0a 20 20 20 20 20 20 20 20 20 27 70 75 74 68 61 73 68 0a 20 20 20 20 20 20 20 20 20 28 61 ly..........'puthash..........(a
17980 70 70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 63 6f ppend...........(split-string.co
179a0 6f 6b 69 65 2d 76 61 6c 75 65 20 22 3d 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 okie-value."=")...........(list.
179c0 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 29 29 29 29 29 29 0a 20 20 65 6c 6e elnode--cookie-store))))))...eln
179e0 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 ode--cookie-store)..(defun.elnod
17a00 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 2d 74 6f 2d 68 65 61 64 65 72 2d 76 61 6c 75 65 20 e--cookie-store-to-header-value.
17a20 28 29 0a 20 20 22 54 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6f 6b 69 65 20 73 74 ()..."Turn.the.current.cookie.st
17a40 6f 72 65 20 69 6e 74 6f 20 61 20 68 65 61 64 65 72 2e 0a 0a 54 68 65 20 63 6f 6f 6b 69 65 73 20 ore.into.a.header...The.cookies.
17a60 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 72 65 20 73 6f 72 74 65 64 20 61 6c 70 68 61 62 65 in.the.header.are.sorted.alphabe
17a80 74 69 63 61 6c 6c 79 20 2d 20 6d 61 6b 65 73 0a 74 65 73 74 69 6e 67 20 65 61 73 69 65 72 2e 22 tically.-.makes.testing.easier."
17aa0 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 ...(let.((cookie-value..........
17ac0 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f (mapconcat...........(lambda.(co
17ae0 6f 6b 69 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 3d 25 73 okie).............(format."%s=%s
17b00 22 20 28 63 61 72 20 63 6f 6f 6b 69 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".(car.cookie)..................
17b20 20 20 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 28 63 64 72 20 63 6f 6f 6b 69 ...(url-hexify-string.(cdr.cooki
17b40 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6b 76 61 6c 69 73 74 2d 73 6f 72 74 0a 20 20 e))))...........(kvalist-sort...
17b60 20 20 20 20 20 20 20 20 20 28 6b 76 68 61 73 68 2d 3e 61 6c 69 73 74 20 65 6c 6e 6f 64 65 2d 2d .........(kvhash->alist.elnode--
17b80 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 27 73 74 72 69 6e 67 cookie-store)............'string
17ba0 2d 6c 65 73 73 70 29 0a 20 20 20 20 20 20 20 20 20 20 22 3b 20 22 29 29 29 0a 20 20 20 20 28 75 -lessp)...........";."))).....(u
17bc0 6e 6c 65 73 73 20 28 65 71 75 61 6c 20 22 22 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 29 0a 20 20 nless.(equal."".cookie-value)...
17be0 20 20 20 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e ....cookie-value)))..(defun*.eln
17c00 6f 64 65 2d 74 65 73 74 2d 63 61 6c 6c 20 28 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 ode-test-call.(path.............
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ..............&key..............
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 65 74 68 6f 64 20 22 47 45 54 22 29 0a 20 20 20 20 .............(method."GET").....
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 61 72 61 6d 65 74 65 72 ......................(parameter
17c80 73 20 27 28 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.'())..........................
17ca0 20 28 68 65 61 64 65 72 73 20 27 28 29 29 29 0a 20 20 22 46 61 6b 65 20 61 20 63 61 6c 6c 20 74 .(headers.'()))..."Fake.a.call.t
17cc0 6f 20 65 6c 6e 6f 64 65 20 77 69 74 68 20 74 68 65 20 50 41 54 48 2e 0a 0a 49 6e 20 61 64 64 69 o.elnode.with.the.PATH...In.addi
17ce0 74 69 6f 6e 20 79 6f 75 20 63 61 6e 20 73 70 65 63 69 66 79 20 73 6f 6d 65 20 65 78 74 72 61 20 tion.you.can.specify.some.extra.
17d00 48 54 54 50 20 73 74 75 66 66 3a 0a 0a 20 3a 6d 65 74 68 6f 64 20 20 6f 6e 65 20 6f 66 20 47 45 HTTP.stuff:...:method..one.of.GE
17d20 54 2c 20 50 4f 53 54 2c 20 44 45 4c 45 54 45 2c 20 65 74 63 2e 2e 2e 0a 20 3a 70 61 72 61 6d 65 T,.POST,.DELETE,.etc.....:parame
17d40 74 65 72 73 20 50 4f 53 54 20 70 61 72 61 6d 65 74 65 72 73 2c 20 77 69 6c 6c 20 62 65 20 74 75 ters.POST.parameters,.will.be.tu
17d60 72 6e 65 64 20 69 6e 74 6f 20 61 20 50 4f 53 54 20 62 6f 64 79 0a 20 3a 68 65 61 64 65 72 73 20 rned.into.a.POST.body..:headers.
17d80 61 6e 79 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65 72 73 20 79 6f 75 20 72 65 71 75 69 72 65 any.specific.headers.you.require
17da0 2c 20 79 6f 75 20 6d 61 79 20 6f 76 65 72 72 69 64 65 0a 20 20 20 74 65 73 74 2d 63 61 6c 6c 20 ,.you.may.override....test-call.
17dc0 68 65 61 64 65 72 73 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 20 28 65 6c 6e 6f 64 65 headers...For.example:...(elnode
17de0 2d 74 65 73 74 2d 63 61 6c 6c 20 5c 22 2f 77 69 6b 69 2f 74 65 73 74 5c 22 29 0a 0a 6f 72 3a 0a -test-call.\"/wiki/test\")..or:.
17e00 0a 20 28 65 6c 6e 6f 64 65 2d 74 65 73 74 2d 63 61 6c 6c 20 5c 22 2f 77 69 6b 69 2f 74 65 73 74 ..(elnode-test-call.\"/wiki/test
17e20 5c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 6d 65 74 68 6f 64 20 5c 22 \"....................:method.\"
17e40 50 4f 53 54 5c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 70 61 72 61 6d POST\"....................:param
17e60 65 74 65 72 73 20 27 28 28 5c 22 61 5c 22 20 2e 20 31 30 29 29 29 0a 0a 46 6f 72 20 68 65 61 64 eters.'((\"a\"...10)))..For.head
17e80 65 72 20 61 6e 64 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 73 2c 20 73 74 72 69 6e 67 73 20 er.and.parameter.names,.strings.
17ea0 4d 55 53 54 20 62 65 20 75 73 65 64 20 63 75 72 72 65 6e 74 6c 79 2e 0a 0a 44 75 72 69 6e 67 20 MUST.be.used.currently...During.
17ec0 74 68 65 20 74 65 73 74 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 60 65 6c 6e 6f 64 65 2d 77 65 the.test.the.variable.`elnode-we
17ee0 62 73 65 72 76 65 72 2d 76 69 73 69 74 2d 66 69 6c 65 27 20 69 73 20 73 65 74 0a 74 6f 20 60 74 bserver-visit-file'.is.set.to.`t
17f00 27 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 45 6c 6e 6f 64 65 20 64 6f 65 73 20 6e 6f 74 '.to.ensure.that.Elnode.does.not
17f20 20 70 61 73 73 20 66 61 6b 65 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 74 6f 20 65 .pass.fake.HTTP.connections.to.e
17f40 78 74 65 72 6e 61 6c 20 70 72 6f 63 65 73 73 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 72 65 73 75 xternal.processes."...(let.(resu
17f60 6c 74 0a 20 20 20 20 20 20 20 20 28 66 61 6b 69 72 2d 6d 6f 63 6b 2d 70 72 6f 63 65 73 73 2d 72 lt.........(fakir-mock-process-r
17f80 65 71 75 69 72 65 2d 73 70 65 63 69 66 69 65 64 2d 62 75 66 66 65 72 20 74 29 29 0a 20 20 20 20 equire-specified-buffer.t)).....
17fa0 28 66 61 6b 69 72 2d 6d 6f 63 6b 2d 70 72 6f 63 65 73 73 20 3a 68 74 74 70 63 6f 6e 20 28 29 0a (fakir-mock-process.:httpcon.().
17fc0 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 71 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 74 ......(let.((req.(elnode--make-t
17fe0 65 73 74 2d 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20 est-call...................path.
18000 6d 65 74 68 6f 64 20 70 61 72 61 6d 65 74 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 method.parameters...............
18020 20 20 20 20 28 61 70 70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 ....(append....................h
18040 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 eaders....................(let.(
18060 28 63 6f 6f 6b 69 65 73 20 28 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 2d 74 (cookies.(elnode--cookie-store-t
18080 6f 2d 68 65 61 64 65 72 2d 76 61 6c 75 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 o-header-value)))...............
180a0 20 20 20 20 20 20 20 28 77 68 65 6e 20 63 6f 6f 6b 69 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 .......(when.cookies............
180c0 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 28 63 6f 6e 73 20 22 43 6f 6f 6b 69 65 22 ............(list.(cons."Cookie"
180e0 20 63 6f 6f 6b 69 65 73 29 29 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 .cookies))))))).............(htt
18100 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 3a 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 p-connection.:httpcon)).........
18120 3b 3b 20 43 61 70 74 75 72 65 20 74 68 65 20 72 65 61 6c 20 65 6f 66 2d 66 75 6e 63 20 61 6e 64 ;;.Capture.the.real.eof-func.and
18140 20 74 68 65 6e 20 6f 76 65 72 72 69 64 65 20 69 74 20 74 6f 20 64 6f 20 66 61 6b 65 20 65 6e 64 .then.override.it.to.do.fake.end
18160 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 6f 66 2d 66 75 6e 63 20 28 65 6c ing..........(let.((eof-func.(el
18180 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d 65 6f 66 29 29 0a 20 20 20 20 20 20 20 20 20 20 node--make-send-eof))...........
181a0 20 20 20 20 28 6d 61 69 6e 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 66 75 ....(main-send-string.(symbol-fu
181c0 6e 63 74 69 6f 6e 20 27 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 29 nction.'elnode-http-send-string)
181e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e )...............(send-string-fun
18200 63 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d 73 74 72 69 6e 67 29 29 0a 20 20 c.(elnode--make-send-string))...
18220 20 20 20 20 20 20 20 20 20 20 20 20 28 74 68 65 2d 65 6e 64 20 30 29 0a 20 20 20 20 20 20 20 20 ............(the-end.0).........
18240 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 76 69 73 69 74 2d 66 69 ......(elnode-webserver-visit-fi
18260 6c 65 20 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6e 6f 66 6c 65 74 0a 20 20 20 20 20 20 20 le.t))...........(noflet........
18280 20 20 20 20 20 20 20 28 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 .......((elnode-http-send-string
182a0 20 28 68 74 74 70 63 6f 6e 20 73 74 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(httpcon.str)..................
182c0 28 66 75 6e 63 61 6c 6c 20 6d 61 69 6e 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f (funcall.main-send-string.httpco
182e0 6e 20 73 74 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d n.str))................(elnode--
18300 6d 61 6b 65 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 make-send-string.().............
18320 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 20 73 74 72 29 0a 20 20 20 20 20 .....(lambda.(httpcon.str)......
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 6e 64 2d 73 74 72 69 ..............(funcall.send-stri
18360 6e 67 2d 66 75 6e 63 20 68 74 74 70 63 6f 6e 20 73 74 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 ng-func.httpcon.str)))..........
18380 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d 65 6f 66 20 28 29 0a ......(elnode--make-send-eof.().
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f .................(lambda.(httpco
183c0 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 46 6c 65 74 20 65 76 n)....................;;.Flet.ev
183e0 65 72 79 74 68 69 6e 67 20 69 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 0a 20 20 20 erything.in.elnode--http-end....
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 2e 2e 2e 20 66 69 72 73 74 20 73 69 67 ................;;.....first.sig
18420 6e 61 6c 69 6e 67 20 74 68 65 20 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 naling.the.end..................
18440 20 20 28 6e 6f 66 6c 65 74 20 28 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 28 70 72 ..(noflet.((process-send-eof.(pr
18460 6f 63 29 20 28 73 65 74 71 20 74 68 65 2d 65 6e 64 20 27 74 29 29 0a 20 20 20 20 20 20 20 20 20 oc).(setq.the-end.'t))..........
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 44 6f 20 6e 6f 74 68 69 6e 67 ...................;;.Do.nothing
184a0 20 2d 20 77 65 20 77 61 6e 74 20 74 68 65 20 74 65 73 74 20 70 72 6f 63 0a 20 20 20 20 20 20 20 .-.we.want.the.test.proc........
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f .....................(delete-pro
184e0 63 65 73 73 20 28 70 72 6f 63 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 cess.(proc))....................
18500 20 20 20 20 20 20 20 20 20 3b 3b 20 41 67 61 69 6e 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 77 .........;;.Again,.do.nothing,.w
18520 65 20 77 61 6e 74 20 74 68 69 73 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.want.this.buffer..............
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 62 75 66 ...............(kill-buffer.(buf
18560 66 65 72 29 20 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b fer).t))......................;;
18580 20 4e 6f 77 20 63 61 6c 6c 20 74 68 65 20 63 61 70 74 75 72 65 64 20 65 6f 66 2d 66 75 6e 63 0a .Now.call.the.captured.eof-func.
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 65 6f .....................(funcall.eo
185c0 66 2d 66 75 6e 63 20 68 74 74 70 63 6f 6e 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 f-func.httpcon))))).............
185e0 3b 3b 20 46 49 58 4d 45 20 2d 20 77 65 20 73 68 6f 75 6c 64 20 75 6e 77 69 6e 64 20 70 72 6f 74 ;;.FIXME.-.we.should.unwind.prot
18600 65 63 74 20 74 68 69 73 3f 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 66 ect.this?.............(elnode--f
18620 69 6c 74 65 72 20 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 29 0a 20 20 20 20 20 ilter.http-connection.req)......
18640 20 20 20 20 20 20 20 3b 3b 20 4e 6f 77 20 77 65 20 73 6c 65 65 70 20 74 69 6c 6c 20 74 68 65 2d .......;;.Now.we.sleep.till.the-
18660 65 6e 64 20 69 73 20 74 72 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 end.is.true.............(while.(
18680 6e 6f 74 20 74 68 65 2d 65 6e 64 29 20 28 73 69 74 2d 66 6f 72 20 30 2e 31 29 29 0a 20 20 20 20 not.the-end).(sit-for.0.1)).....
186a0 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 74 68 65 2d 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 ........(when.the-end...........
186c0 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 72 65 73 70 6f 6e 73 65 2d 68 65 61 64 65 72 2d 74 6f 2d ....(elnode--response-header-to-
186e0 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f cookie-store................(pro
18700 63 65 73 73 2d 67 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 2d 63 6f cess-get.................http-co
18720 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 nnection.................:elnode
18740 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 2d 68 65 61 64 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 -httpresponse-header))..........
18760 20 20 20 20 20 3b 3b 20 41 64 64 20 74 6f 20 74 68 65 20 63 6f 6f 6b 69 65 20 73 74 6f 72 65 3f .....;;.Add.to.the.cookie.store?
18780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 72 65 73 75 6c 74 0a 20 20 20 20 ...............(setq.result.....
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 ................(list...........
187c0 20 20 20 20 20 20 20 20 20 20 20 3a 72 65 73 75 6c 74 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 ...........:result-string.......
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 ...............(with-current-buf
18800 66 65 72 20 28 66 61 6b 69 72 2d 67 65 74 2d 6f 75 74 70 75 74 2d 62 75 66 66 65 72 29 0a 20 20 fer.(fakir-get-output-buffer)...
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 .....................(buffer-sub
18840 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 string-no-properties.(point-min)
18860 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(point-max)))..................
18880 20 20 20 20 3a 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ....:buffer.....................
188a0 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e .(process-buffer.http-connection
188c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 73 65 20 )......................;;.These.
188e0 70 72 6f 70 65 72 74 69 65 73 20 61 72 65 20 73 65 74 20 62 79 20 65 6c 6e 6f 64 65 2d 68 74 74 properties.are.set.by.elnode-htt
18900 70 2d 73 74 61 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73 74 p-start......................:st
18920 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 atus......................(proce
18940 73 73 2d 67 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 ss-get.......................htt
18960 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p-connection....................
18980 20 20 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 2d 73 74 61 74 75 73 29 0a ...:elnode-httpresponse-status).
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 68 65 61 64 65 72 0a 20 20 20 .....................:header....
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 0a 20 ..................(process-get..
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 2d 63 6f 6e 6e 65 63 .....................http-connec
18a00 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f tion.......................:elno
18a20 64 65 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 2d 68 65 61 64 65 72 29 29 29 29 29 29 29 29 0a 20 de-httpresponse-header))))))))..
18a40 20 20 20 3b 3b 20 46 69 6e 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 0a ...;;.Finally.return.the.result.
18a60 20 20 20 20 72 65 73 75 6c 74 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 2a 20 73 68 6f 75 6c 64 2d ....result))..(defmacro*.should-
18a80 65 6c 6e 6f 64 65 2d 72 65 73 70 6f 6e 73 65 20 28 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 20 20 elnode-response.(call...........
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 .........................&key...
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
18ae0 20 73 74 61 74 75 73 2d 63 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .status-code....................
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 2d 6e 61 6d 65 0a 20 20 20 20 ................header-name.....
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 ...............................h
18b40 65 61 64 65 72 2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 eader-value.....................
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 2d 6c 69 73 74 0a 20 20 20 20 20 ...............header-list......
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 ..............................he
18ba0 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ader-list-match.................
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 2d 6d 61 74 63 68 29 0a 20 ...................body-match)..
18be0 20 22 41 73 73 65 72 74 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 52 45 53 50 4f 4e 53 ."Assert.on.the.supplied.RESPONS
18c00 45 2e 0a 0a 43 41 4c 4c 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 60 65 6c 6e 6f 64 65 2d 74 65 E...CALL.should.be.an.`elnode-te
18c20 73 74 2d 63 61 6c 6c 27 2c 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 63 61 6e 20 6d 61 6b st-call',.something.that.can.mak
18c40 65 20 61 0a 72 65 73 70 6f 6e 73 65 2e 20 20 41 73 73 65 72 74 69 6f 6e 73 20 61 72 65 20 64 6f e.a.response...Assertions.are.do
18c60 6e 65 20 62 79 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 6c ne.by.checking.the.specified.val
18c80 75 65 73 0a 6f 66 20 74 68 65 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 ues.of.the.other.parameters.to.t
18ca0 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 49 66 20 53 54 41 54 55 53 2d 43 4f 44 45 20 69 73 his.function...If.STATUS-CODE.is
18cc0 20 6e 6f 74 20 6e 69 6c 20 77 65 20 61 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 52 45 53 50 .not.nil.we.assert.that.the.RESP
18ce0 4f 4e 53 45 20 73 74 61 74 75 73 2d 63 6f 64 65 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 ONSE.status-code.is.equal.to.the
18d00 20 53 54 41 54 55 53 2d 43 4f 44 45 2e 0a 0a 49 66 20 48 45 41 44 45 52 2d 4e 41 4d 45 20 69 73 .STATUS-CODE...If.HEADER-NAME.is
18d20 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 77 65 20 61 73 73 65 72 74 20 74 68 61 74 20 74 68 65 .present.then.we.assert.that.the
18d40 20 52 45 53 50 4f 4e 53 45 20 68 61 73 0a 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 74 68 61 .RESPONSE.has.the.header.and.tha
18d60 74 20 69 74 73 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 48 t.its.value.is.the.same.as.the.H
18d80 45 41 44 45 52 2d 56 41 4c 55 45 2e 0a 49 66 20 48 45 41 44 45 52 2d 56 41 4c 55 45 20 69 73 20 EADER-VALUE..If.HEADER-VALUE.is.
18da0 60 6e 69 6c 27 20 74 68 65 6e 20 77 65 20 61 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 48 45 `nil'.then.we.assert.that.the.HE
18dc0 41 44 45 52 2d 4e 41 4d 45 20 69 73 0a 4e 4f 54 20 70 72 65 73 65 6e 74 2e 0a 0a 49 66 20 48 45 ADER-NAME.is.NOT.present...If.HE
18de0 41 44 45 52 2d 4c 49 53 54 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 77 65 20 61 73 73 ADER-LIST.is.present.then.we.ass
18e00 65 72 74 20 74 68 61 74 20 61 6c 6c 20 74 68 6f 73 65 20 68 65 61 64 65 72 73 0a 61 72 65 20 70 ert.that.all.those.headers.are.p
18e20 72 65 73 65 6e 74 20 61 6e 64 20 60 65 71 75 61 6c 27 20 74 6f 20 74 68 65 20 76 61 6c 75 65 2e resent.and.`equal'.to.the.value.
18e40 0a 0a 49 66 20 48 45 41 44 45 52 2d 4c 49 53 54 2d 4d 41 54 43 48 20 69 73 20 70 72 65 73 65 6e ..If.HEADER-LIST-MATCH.is.presen
18e60 74 20 74 68 65 6e 20 77 65 20 61 73 73 65 72 74 20 74 68 61 74 20 61 6c 6c 20 74 68 6f 73 65 0a t.then.we.assert.that.all.those.
18e80 68 65 61 64 65 72 73 20 61 72 65 20 70 72 65 73 65 6e 74 20 61 6e 64 20 60 65 71 75 61 6c 27 20 headers.are.present.and.`equal'.
18ea0 74 6f 20 74 68 65 20 76 61 6c 75 65 2e 0a 0a 49 66 20 42 4f 44 59 2d 4d 41 54 43 48 20 69 73 20 to.the.value...If.BODY-MATCH.is.
18ec0 70 72 65 73 65 6e 74 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 65 78 20 75 73 65 64 20 present.then.it.is.a.regex.used.
18ee0 74 6f 20 6d 61 74 63 68 20 74 68 65 0a 77 68 6f 6c 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20 52 to.match.the.whole.body.of.the.R
18f00 45 53 50 4f 4e 53 45 2e 22 0a 20 20 28 6c 65 74 20 28 28 73 74 61 74 75 73 2d 63 6f 64 65 76 20 ESPONSE."...(let.((status-codev.
18f20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 73 74 61 74 75 73 2d 63 6f 64 65 76 22 29 29 0a 20 20 (make-symbol."status-codev"))...
18f40 20 20 20 20 20 20 28 68 65 61 64 65 72 2d 6e 61 6d 65 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c ......(header-namev.(make-symbol
18f60 20 22 68 65 61 64 65 72 2d 6e 61 6d 65 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 68 65 61 64 65 ."header-namev")).........(heade
18f80 72 2d 76 61 6c 75 65 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 65 61 64 65 72 2d 76 61 r-valuev.(make-symbol."header-va
18fa0 6c 75 65 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 2d 6c 69 73 74 76 20 28 6d luev")).........(header-listv.(m
18fc0 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 65 61 64 65 72 2d 6c 69 73 74 76 22 29 29 0a 20 20 20 20 ake-symbol."header-listv")).....
18fe0 20 20 20 20 28 68 65 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 76 20 28 6d 61 6b 65 2d 73 79 ....(header-list-matchv.(make-sy
19000 6d 62 6f 6c 20 22 68 65 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 22 29 29 0a 20 20 20 20 20 mbol."header-list-match"))......
19020 20 20 20 28 62 6f 64 79 2d 6d 61 74 63 68 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 62 6f ...(body-matchv.(make-symbol."bo
19040 64 79 2d 6d 61 74 63 68 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 72 65 73 70 6f 6e 73 65 76 20 dy-matchv")).........(responsev.
19060 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 72 65 73 70 6f 6e 73 65 76 22 29 29 29 0a 20 20 20 20 (make-symbol."responsev"))).....
19080 60 28 6c 65 74 20 28 28 2c 72 65 73 70 6f 6e 73 65 76 20 2c 63 61 6c 6c 29 0a 20 20 20 20 20 20 `(let.((,responsev.,call).......
190a0 20 20 20 20 20 28 2c 73 74 61 74 75 73 2d 63 6f 64 65 76 20 2c 73 74 61 74 75 73 2d 63 6f 64 65 .....(,status-codev.,status-code
190c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 2c 68 65 61 64 65 72 2d 6e 61 6d 65 76 20 2c 68 65 61 )............(,header-namev.,hea
190e0 64 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 2c 68 65 61 64 65 72 2d 76 61 der-name)............(,header-va
19100 6c 75 65 76 20 2c 68 65 61 64 65 72 2d 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 luev.,header-value)............(
19120 2c 68 65 61 64 65 72 2d 6c 69 73 74 76 20 2c 68 65 61 64 65 72 2d 6c 69 73 74 29 0a 20 20 20 20 ,header-listv.,header-list).....
19140 20 20 20 20 20 20 20 28 2c 68 65 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 76 20 2c 68 65 61 .......(,header-list-matchv.,hea
19160 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 2c 62 6f 64 der-list-match)............(,bod
19180 79 2d 6d 61 74 63 68 76 20 2c 62 6f 64 79 2d 6d 61 74 63 68 29 29 0a 20 20 20 20 20 20 20 28 77 y-matchv.,body-match))........(w
191a0 68 65 6e 20 2c 73 74 61 74 75 73 2d 63 6f 64 65 76 0a 20 20 20 20 20 20 20 20 20 28 73 68 6f 75 hen.,status-codev..........(shou
191c0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 28 65 71 75 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 2c ld...........(equal............,
191e0 73 74 61 74 75 73 2d 63 6f 64 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 status-codev............(plist-g
19200 65 74 20 2c 72 65 73 70 6f 6e 73 65 76 20 3a 73 74 61 74 75 73 29 29 29 29 0a 20 20 20 20 20 20 et.,responsev.:status)))).......
19220 20 28 77 68 65 6e 20 28 6f 72 20 2c 68 65 61 64 65 72 2d 6e 61 6d 65 76 20 2c 68 65 61 64 65 72 .(when.(or.,header-namev.,header
19240 2d 6c 69 73 74 76 20 2c 68 65 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 76 29 0a 20 20 20 20 -listv.,header-list-matchv).....
19260 20 20 20 20 20 28 6c 65 74 20 28 28 68 64 72 20 28 70 6c 69 73 74 2d 67 65 74 20 2c 72 65 73 70 .....(let.((hdr.(plist-get.,resp
19280 6f 6e 73 65 76 20 3a 68 65 61 64 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 onsev.:header)))............(whe
192a0 6e 20 2c 68 65 61 64 65 72 2d 6e 61 6d 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 n.,header-namev..............(if
192c0 20 2c 68 65 61 64 65 72 2d 76 61 6c 75 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .,header-valuev.................
192e0 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 71 75 61 .(should...................(equa
19300 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 68 65 61 64 65 72 2d 76 61 6c l....................,header-val
19320 75 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 2d 64 65 uev....................(assoc-de
19340 66 61 75 6c 74 20 2c 68 65 61 64 65 72 2d 6e 61 6d 65 76 20 68 64 72 29 29 29 0a 20 20 20 20 20 fault.,header-namev.hdr)))......
19360 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 77 65 20 77 61 6e 74 20 74 6f 20 65 ............;;.Else.we.want.to.e
19380 6e 73 75 72 65 20 74 68 65 20 68 65 61 64 65 72 20 69 73 6e 27 74 20 74 68 65 72 65 0a 20 20 20 nsure.the.header.isn't.there....
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 20 20 20 20 ..............(should...........
193c0 20 20 20 20 20 20 20 20 28 65 71 20 6e 69 6c 20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 2c ........(eq.nil.(assoc-default.,
193e0 68 65 61 64 65 72 2d 6e 61 6d 65 76 20 68 64 72 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 header-namev.hdr)))))...........
19400 20 28 77 68 65 6e 20 2c 68 65 61 64 65 72 2d 6c 69 73 74 76 0a 20 20 20 20 20 20 20 20 20 20 20 .(when.,header-listv............
19420 20 20 28 6c 6f 6f 70 20 66 6f 72 20 72 65 71 64 2d 68 64 72 20 69 6e 20 2c 68 65 61 64 65 72 2d ..(loop.for.reqd-hdr.in.,header-
19440 6c 69 73 74 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20 28 73 68 6f 75 6c 64 listv.................do.(should
19460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 71 75 61 6c 0a 20 20 20 20 .....................(equal.....
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 .................(assoc-default.
194a0 28 63 61 72 20 72 65 71 64 2d 68 64 72 29 20 68 64 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 (car.reqd-hdr).hdr).............
194c0 20 20 20 20 20 20 20 20 20 28 63 64 72 20 72 65 71 64 2d 68 64 72 29 29 29 29 29 0a 20 20 20 20 .........(cdr.reqd-hdr))))).....
194e0 20 20 20 20 20 20 20 28 77 68 65 6e 20 2c 68 65 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 76 .......(when.,header-list-matchv
19500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 72 65 71 64 2d 68 64 72 ..............(loop.for.reqd-hdr
19520 20 69 6e 20 2c 68 65 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 76 0a 20 20 20 20 20 20 20 20 .in.,header-list-matchv.........
19540 20 20 20 20 20 20 20 20 64 6f 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ........do.(should..............
19560 20 20 20 20 20 20 20 28 3e 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .......(>=......................
19580 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (string-match...................
195a0 20 20 20 20 28 63 64 72 20 72 65 71 64 2d 68 64 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....(cdr.reqd-hdr)..............
195c0 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 28 63 61 72 20 72 65 71 .........(assoc-default.(car.req
195e0 64 2d 68 64 72 29 20 68 64 72 29 29 20 30 29 29 29 29 29 29 0a 20 20 20 20 20 20 20 28 77 68 65 d-hdr).hdr)).0))))))........(whe
19600 6e 20 2c 62 6f 64 79 2d 6d 61 74 63 68 76 0a 20 20 20 20 20 20 20 20 20 28 73 68 6f 75 6c 64 2d n.,body-matchv..........(should-
19620 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20 2c 62 6f 64 79 2d 6d 61 74 63 68 76 0a 20 20 20 match...........,body-matchv....
19640 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 65 74 20 2c 72 65 73 70 6f 6e 73 65 76 20 3a 72 65 .......(plist-get.,responsev.:re
19660 73 75 6c 74 2d 73 74 72 69 6e 67 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 sult-string))))))..(defun.elnode
19680 2d 2d 6c 6f 67 2d 66 6e 20 28 73 65 72 76 65 72 20 63 6f 6e 20 6d 73 67 29 0a 20 20 22 4c 6f 67 --log-fn.(server.con.msg)..."Log
196a0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 65 6c 6e 6f 64 65 2e 0a 0a 53 65 72 76 65 73 20 6f 6e .function.for.elnode...Serves.on
196c0 6c 79 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 ly.to.connect.the.server.process
196e0 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 20 70 72 6f 63 65 73 73 65 73 22 0a 20 20 28 70 72 6f .to.the.client.processes"...(pro
19700 63 65 73 73 2d 70 75 74 20 63 6f 6e 20 3a 73 65 72 76 65 72 20 73 65 72 76 65 72 29 29 0a 0a 28 cess-put.con.:server.server))..(
19720 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 68 61 6e 64 6c 65 72 2d 68 69 73 74 6f 72 79 20 27 28 defvar.elnode-handler-history.'(
19740 29 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79 20 6f 66 20 68 61 6e 64 6c 65 72 73 20 62 6f 75 )..."The.history.of.handlers.bou
19760 6e 64 20 74 6f 20 73 65 72 76 65 72 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 nd.to.servers.")..(defvar.elnode
19780 2d 70 6f 72 74 2d 68 69 73 74 6f 72 79 20 27 28 29 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79 -port-history.'()..."The.history
197a0 20 6f 66 20 70 6f 72 74 73 20 74 68 61 74 20 73 65 72 76 65 72 73 20 61 72 65 20 73 74 61 72 74 .of.ports.that.servers.are.start
197c0 65 64 20 6f 6e 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 68 6f 73 74 2d 68 69 ed.on.")..(defvar.elnode-host-hi
197e0 73 74 6f 72 79 20 27 28 29 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79 20 6f 66 20 68 6f 73 74 story.'()..."The.history.of.host
19800 73 20 74 68 61 74 20 73 65 72 76 65 72 73 20 61 72 65 20 73 74 61 72 74 65 64 20 6f 6e 2e 22 29 s.that.servers.are.started.on.")
19820 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 70 6f 72 74 73 20 28 29 0a 20 20 22 4c 69 73 74 ..(defun.elnode-ports.()..."List
19840 20 6f 66 20 61 6c 6c 20 70 6f 72 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 62 .of.all.ports.currently.in.use.b
19860 79 20 65 6c 6e 6f 64 65 2e 22 0a 20 20 28 6d 61 70 63 61 72 20 27 63 61 72 20 65 6c 6e 6f 64 65 y.elnode."...(mapcar.'car.elnode
19880 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2f -server-socket))..(defun.elnode/
198a0 6d 61 6b 65 2d 73 65 72 76 69 63 65 20 28 68 6f 73 74 20 70 6f 72 74 20 73 65 72 76 69 63 65 2d make-service.(host.port.service-
198c0 6d 61 70 70 69 6e 67 73 20 72 65 71 75 65 73 74 2d 68 61 6e 64 6c 65 72 20 64 65 66 65 72 2d 6d mappings.request-handler.defer-m
198e0 6f 64 65 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20 61 63 74 75 61 6c 20 54 43 50 20 73 65 72 76 65 ode)..."Make.an.actual.TCP.serve
19900 72 2e 22 0a 20 20 28 6c 65 74 20 28 28 61 6e 2d 62 75 66 20 28 67 65 74 2d 62 75 66 66 65 72 2d r."...(let.((an-buf.(get-buffer-
19920 63 72 65 61 74 65 20 22 2a 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2a 22 29 29 29 0a 20 create."*elnode-webserver*")))..
19940 20 20 20 28 6d 61 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 0a 20 20 20 20 20 3a 6e ...(make-network-process......:n
19960 61 6d 65 20 22 2a 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 70 72 6f 63 2a 22 0a 20 20 ame."*elnode-webserver-proc*"...
19980 20 20 20 3a 62 75 66 66 65 72 20 61 6e 2d 62 75 66 0a 20 20 20 20 20 3a 73 65 72 76 65 72 20 74 ...:buffer.an-buf......:server.t
199a0 0a 20 20 20 20 20 3a 6e 6f 77 61 69 74 20 28 3c 20 65 6d 61 63 73 2d 6d 61 6a 6f 72 2d 76 65 72 ......:nowait.(<.emacs-major-ver
199c0 73 69 6f 6e 20 32 36 29 0a 20 20 20 20 20 3a 68 6f 73 74 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 sion.26)......:host.(cond.......
199e0 20 20 20 20 20 20 20 28 28 65 71 75 61 6c 20 68 6f 73 74 20 22 6c 6f 63 61 6c 68 6f 73 74 22 29 .......((equal.host."localhost")
19a00 20 27 6c 6f 63 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 65 71 75 61 6c 20 68 6f .'local)..............((equal.ho
19a20 73 74 20 22 2a 22 29 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 20 68 6f 73 st."*").nil)..............(t.hos
19a40 74 29 29 0a 20 20 20 20 20 3a 73 65 72 76 69 63 65 20 70 6f 72 74 0a 20 20 20 20 20 3a 63 6f 64 t))......:service.port......:cod
19a60 69 6e 67 20 27 28 72 61 77 2d 74 65 78 74 2d 75 6e 69 78 20 2e 20 72 61 77 2d 74 65 78 74 2d 75 ing.'(raw-text-unix...raw-text-u
19a80 6e 69 78 29 0a 20 20 20 20 20 3a 66 61 6d 69 6c 79 20 27 69 70 76 34 0a 20 20 20 20 20 3a 66 69 nix)......:family.'ipv4......:fi
19aa0 6c 74 65 72 20 27 65 6c 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 0a 20 20 20 20 20 3a 73 65 6e 74 69 lter.'elnode--filter......:senti
19ac0 6e 65 6c 20 27 65 6c 6e 6f 64 65 2d 2d 73 65 6e 74 69 6e 65 6c 0a 20 20 20 20 20 3a 6c 6f 67 20 nel.'elnode--sentinel......:log.
19ae0 27 65 6c 6e 6f 64 65 2d 2d 6c 6f 67 2d 66 6e 0a 20 20 20 20 20 3a 70 6c 69 73 74 20 28 6c 69 73 'elnode--log-fn......:plist.(lis
19b00 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 73 65 72 76 69 63 65 2d 6d t..............:elnode-service-m
19b20 61 70 20 73 65 72 76 69 63 65 2d 6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 ap.service-mappings.............
19b40 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 61 6e 64 6c 65 72 20 72 65 71 75 65 73 74 2d 68 61 .:elnode-http-handler.request-ha
19b60 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 64 65 66 65 72 ndler..............:elnode-defer
19b80 2d 6d 6f 64 65 20 64 65 66 65 72 2d 6d 6f 64 65 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f -mode.defer-mode))))..;;;###auto
19ba0 6c 6f 61 64 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 73 74 61 72 74 20 28 72 65 71 75 65 load.(defun*.elnode-start.(reque
19bc0 73 74 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 st-handler......................
19be0 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 72 74 .&key.......................port
19c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 6f 73 74 20 22 6c 6f .......................(host."lo
19c20 63 61 6c 68 6f 73 74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 calhost").......................
19c40 28 64 65 66 65 72 2d 6d 6f 64 65 20 3a 6d 61 6e 61 67 65 64 29 0a 20 20 20 20 20 20 20 20 20 20 (defer-mode.:managed)...........
19c60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 72 76 69 63 65 2d 6d 61 70 70 69 6e 67 73 29 0a 20 20 ............service-mappings)...
19c80 22 53 74 61 72 74 20 61 20 73 65 72 76 65 72 20 75 73 69 6e 67 20 52 45 51 55 45 53 54 2d 48 41 "Start.a.server.using.REQUEST-HA
19ca0 4e 44 4c 45 52 2e 0a 0a 52 45 51 55 45 53 54 2d 48 41 4e 44 4c 45 52 20 77 69 6c 6c 20 68 61 6e NDLER...REQUEST-HANDLER.will.han
19cc0 64 6c 65 20 72 65 71 75 65 73 74 73 20 6f 6e 20 50 4f 52 54 20 6f 6e 20 48 4f 53 54 20 28 77 68 dle.requests.on.PORT.on.HOST.(wh
19ce0 69 63 68 20 69 73 0a 27 6c 6f 63 61 6c 68 6f 73 74 27 20 62 79 20 64 65 66 61 75 6c 74 29 2e 0a ich.is.'localhost'.by.default)..
19d00 0a 52 45 51 55 45 53 54 2d 48 41 4e 44 4c 45 52 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 .REQUEST-HANDLER.is.a.function.w
19d20 68 69 63 68 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 72 65 71 75 65 73 74 2e hich.is.called.with.the.request.
19d40 0a 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 6f 6e 65 .The.function.is.called.with.one
19d60 20 61 72 67 75 6d 65 6e 74 2c 20 77 68 69 63 68 20 69 73 20 74 68 65 0a 68 74 74 70 2d 63 6f 6e .argument,.which.is.the.http-con
19d80 6e 65 63 74 69 6f 6e 2e 0a 0a 59 6f 75 20 63 61 6e 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 nection...You.can.use.functions.
19da0 73 75 63 68 20 61 73 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 27 20 61 6e 64 0a such.as.`elnode-http-start'.and.
19dc0 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 62 6f 64 79 27 20 74 6f 20 73 65 6e 64 20 `elnode-http-send-body'.to.send.
19de0 74 68 65 20 68 74 74 70 20 72 65 73 70 6f 6e 73 65 2e 0a 0a 45 78 61 6d 70 6c 65 3a 0a 0a 20 20 the.http.response...Example:....
19e00 28 64 65 66 75 6e 20 6e 69 63 2d 73 65 72 76 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 (defun.nic-server.(httpcon).....
19e20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 20 27 (elnode-http-start.httpcon.200.'
19e40 28 5c 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 5c 22 20 2e 20 5c 22 74 65 78 74 2f 68 74 6d 6c 5c (\"Content-Type\"...\"text/html\
19e60 22 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70 ")).....(elnode-http-return.http
19e80 63 6f 6e 20 5c 22 3c 68 74 6d 6c 3e 3c 62 3e 42 49 47 21 3c 2f 62 3e 3c 2f 68 74 6d 6c 3e 5c 22 con.\"<html><b>BIG!</b></html>\"
19ea0 29 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 74 61 72 74 20 27 6e 69 63 2d 73 65 72 76 65 72 29 0a ))...(elnode-start.'nic-server).
19ec0 0a 4e 6f 77 20 76 69 73 69 74 20 68 74 74 70 3a 2f 2f 31 32 37 2e 30 2e 30 2e 31 3a 38 30 30 30 .Now.visit.http://127.0.0.1:8000
19ee0 0a 0a 49 66 20 50 4f 52 54 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 74 68 65 6e 20 72 75 6e 20 73 ..If.PORT.is.non-nil,.then.run.s
19f00 65 72 76 65 72 20 6f 6e 20 50 4f 52 54 2c 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 61 75 6c 74 erver.on.PORT,.otherwise.default
19f20 20 74 6f 0a 38 30 30 30 2e 0a 0a 49 66 20 48 4f 53 54 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 74 .to.8000...If.HOST.is.non-nil,.t
19f40 68 65 6e 20 72 75 6e 20 74 68 65 20 73 65 72 76 65 72 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 hen.run.the.server.on.the.specif
19f60 69 65 64 20 6c 6f 63 61 6c 20 49 50 0a 61 64 64 72 65 73 73 2c 20 6f 74 68 65 72 77 69 73 65 20 ied.local.IP.address,.otherwise.
19f80 75 73 65 20 6c 6f 63 61 6c 68 6f 73 74 2e 20 20 41 20 66 65 77 20 6e 61 6d 65 73 20 61 72 65 20 use.localhost...A.few.names.are.
19fa0 70 72 65 64 65 66 69 6e 65 64 3a 0a 0a 20 20 5c 22 6c 6f 63 61 6c 68 6f 73 74 5c 22 20 69 73 20 predefined:....\"localhost\".is.
19fc0 31 32 37 2e 30 2e 30 2e 31 0a 20 20 5c 22 2a 5c 22 20 69 73 20 30 2e 30 2e 30 2e 30 0a 0a 41 64 127.0.0.1...\"*\".is.0.0.0.0..Ad
19fe0 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 79 6f 75 20 6d 61 79 20 73 70 65 63 69 66 69 79 20 61 6e 20 ditionally,.you.may.specifiy.an.
1a000 49 50 20 61 64 64 72 65 73 73 2c 20 65 2e 67 20 5c 22 31 2e 32 2e 33 2e 34 5c 22 0a 0a 4e 6f 74 IP.address,.e.g.\"1.2.3.4\"..Not
1a020 65 20 74 68 61 74 20 61 6c 74 68 6f 75 67 68 20 48 4f 53 54 20 6d 61 79 20 62 65 20 73 70 65 63 e.that.although.HOST.may.be.spec
1a040 69 66 69 65 64 2c 20 65 6c 6e 6f 64 65 20 64 6f 65 73 20 6e 6f 74 0a 64 69 73 61 6d 62 69 67 75 ified,.elnode.does.not.disambigu
1a060 61 74 65 20 6f 6e 20 72 75 6e 6e 69 6e 67 20 73 65 72 76 65 72 73 20 62 79 20 48 4f 53 54 2e 20 ate.on.running.servers.by.HOST..
1a080 20 53 6f 20 79 6f 75 20 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 74 77 6f 0a 65 6c 6e 6f 64 65 20 .So.you.cannot.start.two.elnode.
1a0a0 73 65 72 76 65 72 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 6f 72 74 20 6f 6e 20 64 69 66 66 servers.on.the.same.port.on.diff
1a0c0 65 72 65 6e 74 20 68 6f 73 74 73 2e 0a 0a 44 45 46 45 52 2d 4d 4f 44 45 20 6d 61 79 20 62 65 20 erent.hosts...DEFER-MODE.may.be.
1a0e0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 68 6f 77 20 64 65 66 65 72 72 65 64 20 68 61 6e used.to.control.how.deferred.han
1a100 64 6c 65 72 73 20 61 72 65 0a 6d 61 6e 61 67 65 64 20 66 6f 72 20 74 68 69 73 20 73 65 72 76 65 dlers.are.managed.for.this.serve
1a120 72 2e 0a 0a 53 45 52 56 49 43 45 2d 4d 41 50 50 49 4e 47 53 20 69 73 20 61 6e 20 61 6c 69 73 74 r...SERVICE-MAPPINGS.is.an.alist
1a140 20 6f 66 20 73 65 72 76 69 63 65 20 72 65 73 6f 75 72 63 65 20 73 79 6d 62 6f 6c 73 20 6d 61 70 .of.service.resource.symbols.map
1a160 70 65 64 0a 74 6f 20 69 6e 74 65 67 65 72 20 70 6f 72 74 20 6e 75 6d 62 65 72 73 2e 20 20 54 68 ped.to.integer.port.numbers...Th
1a180 69 73 20 63 61 6e 20 62 65 20 73 75 70 70 6c 69 65 64 20 74 6f 20 65 6c 6e 6f 64 65 2d 73 74 61 is.can.be.supplied.to.elnode-sta
1a1a0 72 74 20 74 6f 0a 61 6c 6c 6f 77 20 69 74 20 74 6f 20 6d 61 70 20 73 65 72 76 69 63 65 20 72 65 rt.to.allow.it.to.map.service.re
1a1c0 73 6f 75 72 63 65 73 20 64 65 66 69 6e 65 64 20 62 79 20 68 61 6e 64 6c 65 72 73 20 74 6f 0a 64 sources.defined.by.handlers.to.d
1a1e0 69 66 66 65 72 65 6e 74 20 54 43 50 20 70 6f 72 74 73 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65 ifferent.TCP.ports.and.therefore
1a200 20 64 69 66 66 65 72 65 6e 74 20 45 6d 61 63 73 20 69 6e 73 74 61 6e 63 65 73 2e 0a 0a 54 68 65 .different.Emacs.instances...The
1a220 20 6c 69 73 74 20 6f 66 20 53 45 52 56 49 43 45 2d 4d 41 50 50 49 4e 47 53 20 69 73 20 61 6c 73 .list.of.SERVICE-MAPPINGS.is.als
1a240 6f 20 75 73 65 64 20 74 6f 20 73 74 61 72 74 20 61 6e 63 69 6c 6c 69 61 72 79 0a 70 6f 72 74 20 o.used.to.start.ancilliary.port.
1a260 73 65 72 76 65 72 73 2e 20 20 41 6e 63 69 6c 6c 69 61 72 79 20 70 6f 72 74 20 73 65 72 76 65 72 servers...Ancilliary.port.server
1a280 73 20 73 68 6f 75 6c 64 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 73 74 6f 70 70 65 s.should.be.automatically.stoppe
1a2a0 64 20 77 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 73 65 72 76 65 72 20 69 73 20 73 74 6f 70 70 65 d.when.the.main.server.is.stoppe
1a2c0 64 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20 20 28 6c 65 74 20 28 28 68 61 6e d."...(interactive....(let.((han
1a2e0 64 6c 65 72 20 28 63 6f 6d 70 6c 65 74 69 6e 67 2d 72 65 61 64 20 22 48 61 6e 64 6c 65 72 20 66 dler.(completing-read."Handler.f
1a300 75 6e 63 74 69 6f 6e 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 unction:."......................
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 61 72 72 61 79 20 27 66 62 6f 75 6e 64 70 20 74 ..............obarray.'fboundp.t
1a340 20 6e 69 6c 20 6e 69 6c 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 6f 72 74 20 28 72 65 61 64 2d .nil.nil))..........(port.(read-
1a360 6e 75 6d 62 65 72 20 22 50 6f 72 74 3a 20 22 20 38 30 30 30 29 29 0a 20 20 20 20 20 20 20 20 20 number."Port:.".8000))..........
1a380 28 68 6f 73 74 20 28 72 65 61 64 2d 73 74 72 69 6e 67 20 22 48 6f 73 74 3a 20 22 20 22 6c 6f 63 (host.(read-string."Host:."."loc
1a3a0 61 6c 68 6f 73 74 22 20 27 65 6c 6e 6f 64 65 2d 68 6f 73 74 2d 68 69 73 74 6f 72 79 29 29 29 0a alhost".'elnode-host-history))).
1a3c0 20 20 20 20 20 28 6c 69 73 74 20 28 69 6e 74 65 72 6e 20 68 61 6e 64 6c 65 72 29 20 3a 70 6f 72 .....(list.(intern.handler).:por
1a3e0 74 20 70 6f 72 74 20 3a 68 6f 73 74 20 68 6f 73 74 29 29 29 0a 20 20 28 6c 65 74 20 28 28 70 6f t.port.:host.host)))...(let.((po
1a400 72 74 20 28 6f 72 20 70 6f 72 74 20 38 30 30 30 29 29 0a 20 20 20 20 20 20 20 20 28 68 6f 73 74 rt.(or.port.8000)).........(host
1a420 20 28 6f 72 20 68 6f 73 74 20 22 6c 6f 63 61 6c 68 6f 73 74 22 29 29 29 0a 20 20 20 20 28 75 6e .(or.host."localhost"))).....(un
1a440 6c 65 73 73 20 28 61 73 73 6f 63 20 70 6f 72 74 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 less.(assoc.port.elnode-server-s
1a460 6f 63 6b 65 74 29 0a 20 20 20 20 20 20 3b 3b 20 41 64 64 20 61 20 6e 65 77 20 73 65 72 76 65 72 ocket).......;;.Add.a.new.server
1a480 20 73 6f 63 6b 65 74 20 74 6f 20 74 68 65 20 6c 69 73 74 0a 20 20 20 20 20 20 28 73 65 74 71 20 .socket.to.the.list.......(setq.
1a4a0 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 elnode-server-socket............
1a4c0 20 28 63 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 70 6f 72 74 0a 20 .(cons..............(cons.port..
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 62 75 66 20 28 67 65 ..................(let.((buf.(ge
1a500 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 t-buffer-create."*elnode-webserv
1a520 65 72 2a 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 er*"))..........................
1a540 28 61 6e 63 69 6c 6c 69 61 72 79 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (ancilliarys....................
1a560 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 28 72 65 73 6f 75 72 63 65 20 2e 20 70 6f 72 .......(loop.for.(resource...por
1a580 74 29 20 69 6e 20 73 65 72 76 69 63 65 2d 6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 t).in.service-mappings..........
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 ....................collect.....
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f ...........................(elno
1a5e0 64 65 2f 6d 61 6b 65 2d 73 65 72 76 69 63 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 de/make-service.................
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 6f 73 74 20 70 6f 72 74 20 73 65 72 76 69 63 ................host.port.servic
1a620 65 2d 6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e-mappings......................
1a640 20 20 20 20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 2d 68 61 6e 64 6c 65 72 20 64 65 66 65 72 ...........request-handler.defer
1a660 2d 6d 6f 64 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -mode)))........................
1a680 20 20 28 6d 61 69 6e 20 28 65 6c 6e 6f 64 65 2f 6d 61 6b 65 2d 73 65 72 76 69 63 65 0a 20 20 20 ..(main.(elnode/make-service....
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 6f 73 .............................hos
1a6c0 74 20 70 6f 72 74 20 73 65 72 76 69 63 65 2d 6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 20 t.port.service-mappings.........
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 2d ........................request-
1a700 68 61 6e 64 6c 65 72 20 64 65 66 65 72 2d 6d 6f 64 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 handler.defer-mode)))...........
1a720 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 41 64 64 20 74 68 65 20 6c 69 6e 6b 20 62 65 74 77 65 ...........;;.Add.the.link.betwe
1a740 65 6e 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 68 65 20 61 6e 63 69 6c 6c 69 61 72 79 73 0a en.the.main.and.the.ancilliarys.
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 .....................(process-pu
1a780 74 20 6d 61 69 6e 20 3a 65 6c 6e 6f 64 65 2d 61 6e 63 69 6c 6c 69 61 72 79 73 20 61 6e 63 69 6c t.main.:elnode-ancilliarys.ancil
1a7a0 6c 69 61 72 79 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 liarys)......................mai
1a7c0 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 n))..............elnode-server-s
1a7e0 6f 63 6b 65 74 29 29 29 29 29 0a 0a 3b 3b 20 54 4f 44 4f 3a 20 6d 61 6b 65 20 74 68 69 73 20 74 ocket)))))..;;.TODO:.make.this.t
1a800 61 6b 65 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 65 0a 28 64 65 66 75 6e 20 65 ake.an.argument.for.the.(defun.e
1a820 6c 6e 6f 64 65 2d 73 74 6f 70 20 28 70 6f 72 74 29 0a 20 20 22 53 74 6f 70 20 74 68 65 20 65 6c lnode-stop.(port)..."Stop.the.el
1a840 6e 6f 64 65 20 73 65 72 76 65 72 20 61 74 74 61 63 68 65 64 20 74 6f 20 50 4f 52 54 2e 22 0a 20 node.server.attached.to.PORT."..
1a860 20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20 20 28 6c 65 74 20 28 28 70 72 74 0a 20 20 20 20 .(interactive....(let.((prt.....
1a880 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 ......(string-to-number.........
1a8a0 20 20 20 28 63 6f 6d 70 6c 65 74 69 6e 67 2d 72 65 61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 ...(completing-read.............
1a8c0 22 50 6f 72 74 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61 "Port:.".............(mapcar.(la
1a8e0 6d 62 64 61 20 28 6e 29 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 6e 29 29 0a 20 20 20 20 20 20 mbda.(n).(format."%s".n)).......
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 70 6f 72 74 73 29 29 29 29 29 ..............(elnode-ports)))))
1a920 29 0a 20 20 20 20 20 28 6c 69 73 74 20 70 72 74 29 29 29 0a 20 20 28 6c 65 74 2a 20 28 28 73 65 )......(list.prt)))...(let*.((se
1a940 72 76 65 72 0a 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 61 73 73 6f 63 20 70 6f 72 74 20 65 rver...........(or.(assoc.port.e
1a960 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 lnode-server-socket)............
1a980 20 20 20 28 61 73 73 6f 63 20 28 66 6f 72 6d 61 74 20 22 25 64 22 20 70 6f 72 74 29 20 65 6c 6e ...(assoc.(format."%d".port).eln
1a9a0 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 ode-server-socket)))..........(p
1a9c0 6f 72 74 2d 74 6f 2d 6b 69 6c 6c 20 28 63 61 72 2d 73 61 66 65 20 73 65 72 76 65 72 29 29 29 0a ort-to-kill.(car-safe.server))).
1a9e0 20 20 20 20 28 77 68 65 6e 20 73 65 72 76 65 72 0a 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 ....(when.server.......(message.
1aa00 22 64 65 6c 65 74 69 6e 67 20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 22 29 0a 20 20 20 20 20 "deleting.server.process")......
1aa20 20 28 6c 6f 6f 70 20 66 6f 72 20 61 6e 63 69 6c 6c 69 61 72 79 0a 20 20 20 20 20 20 20 20 20 69 .(loop.for.ancilliary..........i
1aa40 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 28 63 64 72 20 73 65 72 76 65 72 29 20 3a 65 6c 6e n.(process-get.(cdr.server).:eln
1aa60 6f 64 65 2d 61 6e 63 69 6c 6c 69 61 72 79 73 29 0a 20 20 20 20 20 20 20 20 20 64 6f 20 28 64 65 ode-ancilliarys)..........do.(de
1aa80 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 61 6e 63 69 6c 6c 69 61 72 79 29 29 0a 20 20 20 20 20 20 lete-process.ancilliary)).......
1aaa0 3b 3b 20 4e 6f 77 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 0a 20 20 20 20 20 20 28 64 65 6c 65 74 ;;.Now.the.main.one.......(delet
1aac0 65 2d 70 72 6f 63 65 73 73 20 28 63 64 72 20 73 65 72 76 65 72 29 29 0a 20 20 20 20 20 20 28 73 e-process.(cdr.server)).......(s
1aae0 65 74 71 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 0a 20 20 20 20 20 20 20 etq.elnode-server-socket........
1ab00 20 20 20 20 20 3b 3b 20 72 65 6d 6f 76 65 2d 69 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c .....;;.remove-if.............(l
1ab20 65 74 20 28 28 74 65 73 74 20 28 6c 61 6d 62 64 61 20 28 65 6c 65 6d 29 0a 20 20 20 20 20 20 20 et.((test.(lambda.(elem)........
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 71 75 61 6c 20 28 63 61 72 20 65 ...................(equal.(car.e
1ab60 6c 65 6d 29 20 70 6f 72 74 2d 74 6f 2d 6b 69 6c 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 lem).port-to-kill)))............
1ab80 20 20 20 20 20 20 20 28 6c 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 0a .......(l.elnode-server-socket).
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 ..................result).......
1abc0 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 63 61 72 20 6c 29 0a 20 20 20 20 20 20 20 20 20 ........(while.(car.l)..........
1abe0 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 20 28 70 6f 70 20 6c 29 29 0a 20 20 20 20 20 20 20 .......(let.((p.(pop.l))........
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 20 28 63 64 72 20 6c 29 29 29 0a 20 20 20 20 ...............(r.(cdr.l))).....
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 66 75 6e 63 61 6c 6c 20 ..............(if.(not.(funcall.
1ac40 74 65 73 74 20 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 test.p)).......................(
1ac60 73 65 74 71 20 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 70 20 72 65 73 75 6c 74 29 29 29 29 29 0a setq.result.(cons.p.result))))).
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 29 29 29 29 0a 0a 28 64 65 66 75 ..............result)))))..(defu
1aca0 6e 20 65 6c 6e 6f 64 65 2d 66 69 6e 64 2d 66 72 65 65 2d 73 65 72 76 69 63 65 20 28 29 0a 20 20 n.elnode-find-free-service.()...
1acc0 22 52 65 74 75 72 6e 20 61 20 66 72 65 65 20 28 75 6e 75 73 65 64 29 20 54 43 50 20 70 6f 72 74 "Return.a.free.(unused).TCP.port
1ace0 2e 0a 0a 54 68 65 20 70 6f 72 74 20 69 73 20 63 68 6f 73 65 6e 20 72 61 6e 64 6f 6d 6c 79 20 66 ...The.port.is.chosen.randomly.f
1ad00 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 70 6f 72 74 73 2e 20 22 0a 20 20 28 6c 65 rom.the.ephemeral.ports.."...(le
1ad20 74 20 28 6d 79 73 65 72 76 65 72 0a 20 20 20 20 20 20 20 20 28 70 6f 72 74 20 35 30 30 30 30 29 t.(myserver.........(port.50000)
1ad40 29 20 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 65 70 68 65 6d 65 72 61 6c 20 62 61 73 ).;.this.should.be.ephemeral.bas
1ad60 65 0a 20 20 20 20 28 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20 28 6e 6f 74 0a 20 20 20 20 20 20 e.....(while.........(not.......
1ad80 20 20 20 28 70 72 6f 63 65 73 73 70 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f ...(processp...........(conditio
1ada0 6e 2d 63 61 73 65 20 73 69 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 6d n-case.sig...............(setq.m
1adc0 79 73 65 72 76 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b yserver.....................(mak
1ade0 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e-network-process...............
1ae00 20 20 20 20 20 20 20 3a 6e 61 6d 65 20 22 2a 74 65 73 74 2d 70 72 6f 63 2a 22 0a 20 20 20 20 20 .......:name."*test-proc*"......
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73 65 72 76 65 72 20 74 0a 20 20 20 20 20 20 ................:server.t.......
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 6e 6f 77 61 69 74 20 28 3c 20 65 6d 61 63 73 2d ...............:nowait.(<.emacs-
1ae60 6d 61 6a 6f 72 2d 76 65 72 73 69 6f 6e 20 32 36 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 major-version.26)...............
1ae80 20 20 20 20 20 20 20 3a 68 6f 73 74 20 27 6c 6f 63 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 .......:host.'local.............
1aea0 20 20 20 20 20 20 20 20 20 3a 73 65 72 76 69 63 65 20 70 6f 72 74 0a 20 20 20 20 20 20 20 20 20 .........:service.port..........
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 3a 66 61 6d 69 6c 79 20 27 69 70 76 34 29 29 0a 20 20 20 20 ............:family.'ipv4)).....
1aee0 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 ........(file-error.............
1af00 20 28 69 66 20 28 65 71 75 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 .(if.(equal..................."C
1af20 61 6e 6e 6f 74 20 62 69 6e 64 20 73 65 72 76 65 72 20 73 6f 63 6b 65 74 20 61 64 64 72 65 73 73 annot.bind.server.socket.address
1af40 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .already.in.use"................
1af60 20 20 20 28 6d 61 70 63 6f 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 63 64 72 20 73 69 67 ...(mapconcat.'identity.(cdr.sig
1af80 29 20 22 20 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 70 )."."))..................(setq.p
1afa0 6f 72 74 20 28 2b 20 35 30 30 30 30 20 28 72 61 6e 64 6f 6d 20 35 30 30 30 29 29 29 29 29 29 29 ort.(+.50000.(random.5000)))))))
1afc0 29 29 0a 20 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 6d 79 73 65 72 76 65 72 29 )).....(delete-process.myserver)
1afe0 0a 20 20 20 20 70 6f 72 74 29 29 0a 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6c 69 73 74 .....port))...(defun.elnode-list
1b000 2d 62 75 66 66 65 72 73 20 28 29 0a 20 20 22 4c 69 73 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 -buffers.()..."List.the.current.
1b020 62 75 66 66 65 72 73 20 62 65 69 6e 67 20 6d 61 6e 61 67 65 64 20 62 79 20 45 6c 6e 6f 64 65 2e buffers.being.managed.by.Elnode.
1b040 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e "...(interactive)...(with-curren
1b060 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 65 6c t-buffer.(get-buffer-create."*el
1b080 6e 6f 64 65 2d 62 75 66 66 65 72 73 2a 22 29 0a 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 66 65 node-buffers*").....(erase-buffe
1b0a0 72 29 0a 20 20 20 20 28 6d 61 70 63 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 62 29 0a 20 20 r).....(mapc......(lambda.(b)...
1b0c0 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 28 69 .....(save-excursion..........(i
1b0e0 66 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 20 5c 5c 2a 65 6c 6e 6f 64 65 2d 2e 2a 22 20 f.(string-match.".\\*elnode-.*".
1b100 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 62 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 (buffer-name.b))..............(i
1b120 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 25 73 5c 6e 22 20 62 29 29 29 0a 20 20 20 20 20 20 nsert.(format."%s\n".b))).......
1b140 20 29 29 0a 20 20 20 20 20 28 73 6f 72 74 20 28 62 75 66 66 65 72 2d 6c 69 73 74 29 0a 20 20 20 .))......(sort.(buffer-list)....
1b160 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29 0a 20 20 20 20 20 20 20 20 20 20 ........(lambda.(a.b)...........
1b180 20 20 20 28 73 74 72 69 6e 67 2d 6c 65 73 73 70 20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 62 29 ...(string-lessp.(buffer-name.b)
1b1a0 20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 61 29 29 29 29 29 29 0a 20 20 28 64 69 73 70 6c 61 79 .(buffer-name.a))))))...(display
1b1c0 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72 20 22 2a 65 6c 6e 6f 64 65 2d 62 75 66 -buffer.(get-buffer."*elnode-buf
1b1e0 66 65 72 73 2a 22 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 74 69 6d 65 2d 65 6e fers*")))..(defun.elnode-time-en
1b200 63 6f 64 65 20 28 74 69 6d 65 2d 73 74 72 29 0a 20 20 22 42 61 73 69 63 20 54 49 4d 45 2d 53 54 code.(time-str)..."Basic.TIME-ST
1b220 52 20 74 6f 20 74 69 6d 65 20 65 6e 63 6f 64 69 6e 67 2e 22 0a 20 20 28 61 70 70 6c 79 20 27 65 R.to.time.encoding."...(apply.'e
1b240 6e 63 6f 64 65 2d 74 69 6d 65 20 28 70 61 72 73 65 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 74 69 ncode-time.(parse-time-string.ti
1b260 6d 65 2d 73 74 72 29 29 29 0a 0a 0a 3b 3b 20 48 54 54 50 20 41 50 49 20 6d 65 74 68 6f 64 73 0a me-str)))...;;.HTTP.API.methods.
1b280 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 68 64 72 20 28 68 74 74 70 63 6f .(defun.elnode--http-hdr.(httpco
1b2a0 6e 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6e 73 20 66 6f 72 n)..."Return.the.header.cons.for
1b2c0 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 54 68 65 20 73 74 61 74 75 73 2d 6c 69 6e 65 20 61 .the.HTTPCON...The.status-line.a
1b2e0 6e 64 20 74 68 65 20 68 65 61 64 65 72 20 61 6c 69 73 74 2e 22 0a 20 20 28 63 6f 6e 73 0a 20 20 nd.the.header.alist."...(cons...
1b300 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 .(process-get.httpcon.:elnode-ht
1b320 74 70 2d 73 74 61 74 75 73 29 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 tp-status)....(process-get.httpc
1b340 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 29 29 29 0a 0a 28 64 65 66 75 on.:elnode-http-header)))..(defu
1b360 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 73 20 28 68 74 74 70 63 6f 6e 29 0a n.elnode-http-headers.(httpcon).
1b380 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 61 6c 69 73 74 20 6f 66 20 68 65 61 64 65 72 73 20 66 .."Return.the.alist.of.headers.f
1b3a0 72 6f 6d 20 48 54 54 50 43 4f 4e 2e 22 0a 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 rom.HTTPCON."...(process-get.htt
1b3c0 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 29 29 0a 0a 28 64 65 66 pcon.:elnode-http-header))..(def
1b3e0 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 28 68 74 74 70 63 6f 6e 20 6e un.elnode-http-header.(httpcon.n
1b400 61 6d 65 20 26 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 76 65 72 74 29 0a 20 20 22 47 65 74 20 74 68 ame.&optional.convert)..."Get.th
1b420 65 20 68 65 61 64 65 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 4e 41 4d 45 20 66 72 6f 6d 20 e.header.specified.by.NAME.from.
1b440 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 48 45 41 44 45 52 20 6d 61 79 20 62 65 20 61 20 73 74 the.HTTPCON...HEADER.may.be.a.st
1b460 72 69 6e 67 20 6f 72 20 61 20 73 79 6d 62 6f 6c 2e 20 20 49 66 20 4e 41 4d 45 20 69 73 20 61 20 ring.or.a.symbol...If.NAME.is.a.
1b480 73 79 6d 62 6f 6c 20 69 74 20 69 73 0a 63 61 73 65 20 69 6e 73 65 6e 73 69 74 76 65 2e 0a 0a 49 symbol.it.is.case.insensitve...I
1b4a0 66 20 6f 70 74 69 6f 6e 61 6c 20 43 4f 4e 56 45 52 54 20 69 73 20 73 70 65 63 69 66 69 65 64 20 f.optional.CONVERT.is.specified.
1b4c0 69 74 20 6d 61 79 20 73 70 65 63 69 66 79 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e 2c 0a 63 75 72 it.may.specify.a.conversion,.cur
1b4e0 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 rently.supported.conversions.are
1b500 3a 0a 0a 20 3a 74 69 6d 65 20 2d 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 74 69 6d 65 20 76 61 :...:time.-.to.convert.a.time.va
1b520 6c 75 65 20 70 72 6f 70 65 72 6c 79 22 0a 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 20 28 69 66 20 lue.properly"...(let*.((key.(if.
1b540 28 73 79 6d 62 6f 6c 70 20 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (symbolp.name)..................
1b560 20 28 69 6e 74 65 72 6e 20 28 64 6f 77 6e 63 61 73 65 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 .(intern.(downcase.(symbol-name.
1b580 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 29 29 0a 20 name))).................name))..
1b5a0 20 20 20 20 20 20 20 20 28 68 64 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 0a 20 20 20 20 20 20 ........(hdr.(process-get.......
1b5c0 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........httpcon................
1b5e0 28 69 66 20 28 73 79 6d 62 6f 6c 70 20 6b 65 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (if.(symbolp.key)...............
1b600 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 2d 73 79 6d 73 0a 20 20 .....:elnode-http-header-syms...
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 ...............:elnode-http-head
1b640 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 76 61 6c 20 28 63 64 72 20 28 61 73 73 6f 63 20 er)))..........(val.(cdr.(assoc.
1b660 6b 65 79 20 68 64 72 29 29 29 29 0a 20 20 20 20 28 63 61 73 65 20 63 6f 6e 76 65 72 74 0a 20 20 key.hdr)))).....(case.convert...
1b680 20 20 20 20 28 3a 74 69 6d 65 0a 20 20 20 20 20 20 20 28 77 68 65 6e 20 76 61 6c 0a 20 20 20 20 ....(:time........(when.val.....
1b6a0 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 74 69 6d 65 2d 65 6e 63 6f 64 65 20 76 61 6c 29 29 29 0a .....(elnode-time-encode.val))).
1b6c0 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20 76 61 6c 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a ......(t........val))))..(defun*
1b6e0 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 6f 73 74 20 28 68 74 74 70 63 6f 6e 20 26 6b 65 79 20 .elnode-http-host.(httpcon.&key.
1b700 73 70 6c 69 74 20 6a 75 73 74 2d 68 6f 73 74 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 48 split.just-host)..."Return.the.H
1b720 54 54 50 20 60 68 6f 73 74 27 20 6e 61 6d 65 20 68 65 61 64 65 72 2e 0a 0a 57 69 74 68 20 53 50 TTP.`host'.name.header...With.SP
1b740 4c 49 54 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 20 68 6f 73 74 6e 61 6d LIT.return.a.list.of.the.hostnam
1b760 65 20 61 6e 64 20 61 6e 79 20 70 6f 72 74 20 70 61 72 74 20 28 74 68 65 0a 70 6f 72 74 20 70 61 e.and.any.port.part.(the.port.pa
1b780 72 74 20 6d 69 67 68 74 20 62 65 20 65 6d 70 74 79 20 69 66 20 6e 6f 74 20 73 70 65 63 69 66 69 rt.might.be.empty.if.not.specifi
1b7a0 63 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 29 2e 20 20 57 69 74 68 0a 4a 55 53 54 2d 48 4f 53 cally.specified)...With.JUST-HOS
1b7c0 54 20 72 65 74 75 72 6e 20 6a 75 73 74 20 74 68 65 20 68 6f 73 74 2d 6e 61 6d 65 20 70 61 72 74 T.return.just.the.host-name.part
1b7e0 2c 20 64 72 6f 70 70 69 6e 67 20 61 6e 79 20 70 6f 72 74 20 65 6e 74 69 72 65 6c 79 2e 22 0a 20 ,.dropping.any.port.entirely."..
1b800 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 .(let.((host.(elnode-http-header
1b820 20 68 74 74 70 63 6f 6e 20 22 48 6f 73 74 22 29 29 29 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 .httpcon."Host"))).....(cond....
1b840 20 20 20 28 73 70 6c 69 74 0a 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 ...(split........(string-match."
1b860 5c 5c 28 5b 5e 3a 5d 2b 5c 5c 29 5c 5c 28 3a 5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29 5c 5c 29 2a 22 \\([^:]+\\)\\(:\\([0-9]+\\)\\)*"
1b880 20 68 6f 73 74 29 0a 20 20 20 20 20 20 20 28 6c 69 73 74 20 28 6d 61 74 63 68 2d 73 74 72 69 6e .host)........(list.(match-strin
1b8a0 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20 31 20 68 6f 73 74 29 0a 20 20 20 20 20 20 20 20 g-no-properties.1.host).........
1b8c0 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 .....(match-string-no-properties
1b8e0 20 33 20 68 6f 73 74 29 29 29 0a 20 20 20 20 20 20 28 6a 75 73 74 2d 68 6f 73 74 0a 20 20 20 20 .3.host))).......(just-host.....
1b900 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5c 5c 28 5b 5e 3a 5d 2b 5c 5c 29 5c 5c 28 ...(string-match."\\([^:]+\\)\\(
1b920 3a 5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29 5c 5c 29 2a 22 20 68 6f 73 74 29 0a 20 20 20 20 20 20 20 :\\([0-9]+\\)\\)*".host)........
1b940 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20 31 20 68 6f (match-string-no-properties.1.ho
1b960 73 74 29 29 0a 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20 68 6f 73 74 29 29 29 29 0a 0a 28 st)).......(t........host))))..(
1b980 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 73 20 28 68 74 74 70 63 defun.elnode-http-cookies.(httpc
1b9a0 6f 6e 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6f 6b 69 65 on)..."Return.the.list.of.cookie
1b9c0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 48 54 54 50 43 4f 4e 2e 0a 0a 54 68 65 s.attached.to.this.HTTPCON...The
1b9e0 20 6c 69 73 74 20 6f 66 20 63 6f 6f 6b 69 65 73 20 69 73 20 61 6e 20 61 6c 69 73 74 2e 22 0a 20 .list.of.cookies.is.an.alist."..
1ba00 20 28 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c .(or....(process-get.httpcon.:el
1ba20 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6c 69 73 74 29 0a 20 20 20 28 6c 65 74 2a 20 node-http-cookie-list)....(let*.
1ba40 28 28 63 6f 6f 6b 69 65 2d 68 64 72 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 ((cookie-hdr.(elnode-http-header
1ba60 20 68 74 74 70 63 6f 6e 20 22 43 6f 6f 6b 69 65 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6c .httpcon."Cookie"))...........(l
1ba80 73 74 20 28 77 68 65 6e 20 63 6f 6f 6b 69 65 2d 68 64 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 st.(when.cookie-hdr.............
1baa0 20 20 20 20 20 28 6b 76 61 6c 69 73 74 2d 73 6f 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .....(kvalist-sort..............
1bac0 20 20 20 20 20 28 6d 61 70 63 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .....(mapcar....................
1bae0 28 6c 61 6d 62 64 61 20 28 70 61 69 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (lambda.(pair)..................
1bb00 20 20 20 20 28 63 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ....(cons.......................
1bb20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 28 63 61 72 20 70 61 69 72 29 29 0a 20 20 (url-unhex-string.(car.pair))...
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 ....................(url-unhex-s
1bb60 74 72 69 6e 67 20 28 63 64 72 20 70 61 69 72 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 tring.(cdr.pair)))).............
1bb80 20 20 20 20 20 20 20 28 75 72 6c 2d 70 61 72 73 65 2d 61 72 67 73 20 63 6f 6f 6b 69 65 2d 68 64 .......(url-parse-args.cookie-hd
1bba0 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73 74 72 69 6e 67 2d 6c 65 r))...................'string-le
1bbc0 73 73 70 29 29 29 29 0a 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f ssp))))......(process-put.httpco
1bbe0 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6c 69 73 74 20 6c 73 74 29 0a n.:elnode-http-cookie-list.lst).
1bc00 20 20 20 20 20 6c 73 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d .....lst)))..(defun.elnode-http-
1bc20 63 6f 6f 6b 69 65 20 28 68 74 74 70 63 6f 6e 20 6e 61 6d 65 20 26 6f 70 74 69 6f 6e 61 6c 20 63 cookie.(httpcon.name.&optional.c
1bc40 6f 6f 6b 69 65 2d 6b 65 79 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 63 6f 6f 6b 69 65 20 ookie-key)..."Return.the.cookie.
1bc60 76 61 6c 75 65 20 66 6f 72 20 48 54 54 50 43 4f 4e 20 73 70 65 63 69 66 69 65 64 20 62 79 20 4e value.for.HTTPCON.specified.by.N
1bc80 41 4d 45 2e 0a 0a 54 68 65 20 63 6f 6f 6b 69 65 20 69 73 20 61 20 63 6f 6e 73 3a 0a 0a 20 20 6e AME...The.cookie.is.a.cons:....n
1bca0 61 6d 65 20 2e 20 76 61 6c 75 65 0a 0a 49 66 20 43 4f 4f 4b 49 45 2d 4b 45 59 20 69 73 20 60 74 ame...value..If.COOKIE-KEY.is.`t
1bcc0 27 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 72 65 74 75 72 6e 65 '.then.only.the.value.is.returne
1bce0 64 2c 20 65 6c 73 65 20 74 68 65 0a 63 6f 6e 73 20 69 73 20 72 65 74 75 72 6e 65 64 2e 22 0a 20 d,.else.the.cons.is.returned."..
1bd00 20 28 6c 65 74 2a 20 28 28 63 6f 6f 6b 69 65 2d 6c 69 73 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 .(let*.((cookie-list.(elnode-htt
1bd20 70 2d 63 6f 6f 6b 69 65 73 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 6f p-cookies.httpcon))..........(co
1bd40 6f 6b 69 65 20 28 61 73 73 6f 63 2d 73 74 72 69 6e 67 20 6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6c okie.(assoc-string.name.cookie-l
1bd60 69 73 74 29 29 29 0a 20 20 20 20 28 69 66 20 63 6f 6f 6b 69 65 2d 6b 65 79 0a 20 20 20 20 20 20 ist))).....(if.cookie-key.......
1bd80 20 20 28 63 64 72 20 63 6f 6f 6b 69 65 29 0a 20 20 20 20 20 20 20 20 63 6f 6f 6b 69 65 29 29 29 ..(cdr.cookie).........cookie)))
1bda0 0a 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 73 74 61 ...(defun.elnode--http-parse-sta
1bdc0 74 75 73 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 29 tus.(httpcon.&optional.property)
1bde0 0a 20 20 22 50 61 72 73 65 20 74 68 65 20 73 74 61 74 75 73 20 6c 69 6e 65 20 6f 66 20 48 54 54 ..."Parse.the.status.line.of.HTT
1be00 50 43 4f 4e 2e 0a 0a 49 66 20 50 52 4f 50 45 52 54 59 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 74 PCON...If.PROPERTY.is.non-nil,.t
1be20 68 65 6e 20 72 65 74 75 72 6e 20 74 68 61 74 20 70 72 6f 70 65 72 74 79 2e 22 0a 20 20 28 6c 65 hen.return.that.property."...(le
1be40 74 2a 20 28 28 68 74 74 70 2d 6c 69 6e 65 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 t*.((http-line.(process-get.http
1be60 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 20 con.:elnode-http-status)).......
1be80 20 20 20 28 6d 65 74 68 6f 64 2d 72 65 67 65 78 20 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 20 ...(method-regex.(mapconcat.....
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 69 64 65 6e 74 69 74 79 0a 20 20 ....................'identity...
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 22 47 45 54 ......................(list."GET
1bee0 22 20 22 50 4f 53 54 22 20 22 48 45 41 44 22 20 22 44 45 4c 45 54 45 22 20 22 50 55 54 22 29 0a "."POST"."HEAD"."DELETE"."PUT").
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 7c 22 29 29 29 ........................"\\|")))
1bf20 0a 20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 20 20 28 73 74 72 .....(save-match-data.......(str
1bf40 69 6e 67 2d 6d 61 74 63 68 20 28 66 6f 72 6d 61 74 20 22 5c 5c 28 25 73 5c 5c 29 20 5c 5c 28 2e ing-match.(format."\\(%s\\).\\(.
1bf60 2a 5c 5c 29 20 48 54 54 50 2f 5c 5c 28 31 2e 5b 30 31 5d 5c 5c 29 22 0a 20 20 20 20 20 20 20 20 *\\).HTTP/\\(1.[01]\\)".........
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64 2d 72 65 67 65 78 ....................method-regex
1bfa0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 2d 6c 69 6e 65 29 ).....................http-line)
1bfc0 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e .......(process-put.httpcon.:eln
1bfe0 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 ode-http-method.(match-string.1.
1c000 68 74 74 70 2d 6c 69 6e 65 29 29 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 http-line)).......(process-put.h
1c020 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 73 6f 75 72 63 65 20 28 6d 61 ttpcon.:elnode-http-resource.(ma
1c040 74 63 68 2d 73 74 72 69 6e 67 20 32 20 68 74 74 70 2d 6c 69 6e 65 29 29 0a 20 20 20 20 20 20 28 tch-string.2.http-line)).......(
1c060 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 process-put.httpcon.:elnode-http
1c080 2d 76 65 72 73 69 6f 6e 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 33 20 68 74 74 70 2d 6c 69 -version.(match-string.3.http-li
1c0a0 6e 65 29 29 29 0a 20 20 20 20 28 69 66 20 70 72 6f 70 65 72 74 79 0a 20 20 20 20 20 20 20 20 28 ne))).....(if.property.........(
1c0c0 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 70 72 6f 70 65 72 74 79 29 29 29 29 process-get.httpcon.property))))
1c0e0 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 72 65 73 6f ..(defun.elnode--http-parse-reso
1c100 75 72 63 65 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 urce.(httpcon.&optional.property
1c120 29 0a 20 20 22 43 6f 6e 76 65 72 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 72 65 73 6f 75 )..."Convert.the.specified.resou
1c140 72 63 65 20 74 6f 20 61 20 70 61 74 68 20 61 6e 64 20 61 20 71 75 65 72 79 2e 22 0a 20 20 28 6c rce.to.a.path.and.a.query."...(l
1c160 65 74 20 28 28 72 65 73 6f 75 72 63 65 0a 20 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 et.((resource..........(or......
1c180 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 .....(process-get.httpcon.:elnod
1c1a0 65 2d 68 74 74 70 2d 72 65 73 6f 75 72 63 65 29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f e-http-resource)...........(elno
1c1c0 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 73 74 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 20 de--http-parse-status...........
1c1e0 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 73 6f 75 72 63 65 29 29 .httpcon.:elnode-http-resource))
1c200 29 29 0a 20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 20 20 28 69 )).....(save-match-data.......(i
1c220 66 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 72 6f 6f 74 20 70 61 74 74 65 72 6e f.(or............;;.root.pattern
1c240 20 77 69 74 68 20 0a 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 .with.............(string-match.
1c260 22 5e 5c 5c 28 2f 5c 5c 29 5c 5c 28 5c 5c 3f 2e 2a 5c 5c 29 2a 24 22 20 72 65 73 6f 75 72 63 65 "^\\(/\\)\\(\\?.*\\)*$".resource
1c280 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 2f 73 6f 6d 65 70 61 74 68 20 6f 72 20 2f 73 6f )............;;./somepath.or./so
1c2a0 6d 65 70 61 74 68 2f 73 6f 6d 65 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 mepath/somepath............(stri
1c2c0 6e 67 2d 6d 61 74 63 68 20 22 5e 5c 5c 28 2f 5b 5e 3f 5d 2b 5c 5c 29 5c 5c 28 5c 5c 3f 2e 2a 5c ng-match."^\\(/[^?]+\\)\\(\\?.*\
1c2e0 5c 29 2a 24 22 20 72 65 73 6f 75 72 63 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 \)*$".resource))...........(let.
1c300 28 28 70 61 74 68 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 28 6d 61 74 63 68 2d ((path.(url-unhex-string.(match-
1c320 73 74 72 69 6e 67 20 31 20 72 65 73 6f 75 72 63 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 string.1.resource))))...........
1c340 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 ..(process-put.httpcon.:elnode-h
1c360 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 ttp-pathinfo.path).............(
1c380 77 68 65 6e 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 32 20 72 65 73 6f 75 72 63 65 29 0a 20 when.(match-string.2.resource)..
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 71 75 65 72 79 20 28 6d 61 74 63 68 .............(let.((query.(match
1c3c0 2d 73 74 72 69 6e 67 20 32 20 72 65 73 6f 75 72 63 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 -string.2.resource)))...........
1c3e0 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5c 5c 3f 5c 5c 28 2e 2b 5c 5c 29 ......(string-match."\\?\\(.+\\)
1c400 22 20 71 75 65 72 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6d 61 ".query).................(if.(ma
1c420 74 63 68 2d 73 74 72 69 6e 67 20 31 20 71 75 65 72 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 tch-string.1.query).............
1c440 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 ........(process-put............
1c460 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........httpcon...............
1c480 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 71 75 65 72 79 0a 20 20 20 20 20 20 .......:elnode-http-query.......
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 71 ...............(match-string.1.q
1c4c0 75 65 72 79 29 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74 20 uery))))))...........;;.Else.it.
1c4e0 6d 69 67 68 74 20 62 65 20 61 20 6d 6f 72 65 20 65 78 6f 74 69 63 20 70 61 74 68 0a 20 20 20 20 might.be.a.more.exotic.path.....
1c500 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f ......(process-put.httpcon.:elno
1c520 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 72 65 73 6f 75 72 63 65 29 29 29 29 0a 20 20 de-http-pathinfo.resource))))...
1c540 28 69 66 20 70 72 6f 70 65 72 74 79 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 (if.property.......(process-get.
1c560 68 74 74 70 63 6f 6e 20 70 72 6f 70 65 72 74 79 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f httpcon.property)))..(defun.elno
1c580 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47 65 de-http-pathinfo.(httpcon)..."Ge
1c5a0 74 20 74 68 65 20 50 41 54 48 49 4e 46 4f 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a t.the.PATHINFO.of.the.request...
1c5c0 54 68 65 20 50 41 54 48 49 4e 46 4f 20 69 73 20 74 68 65 20 43 47 49 20 74 65 72 6d 20 66 6f 72 The.PATHINFO.is.the.CGI.term.for
1c5e0 20 74 68 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 61 74 68 20 74 68 61 74 20 69 73 20 6e 6f .the.part.of.the.path.that.is.no
1c600 74 0a 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 6f 72 20 74 68 65 20 71 75 65 72 79 3b 20 74 68 65 t.the.hostname.or.the.query;.the
1c620 20 70 61 72 74 20 74 68 61 74 20 72 65 6c 61 74 65 73 20 74 6f 20 74 68 65 20 70 61 74 68 2e 22 .part.that.relates.to.the.path."
1c640 0a 20 20 28 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a ...(or....(process-get.httpcon.:
1c660 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 29 0a 20 20 20 28 65 6c 6e 6f 64 65 elnode-http-pathinfo)....(elnode
1c680 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 72 65 73 6f 75 72 63 65 20 68 74 74 70 63 6f 6e 20 3a 65 --http-parse-resource.httpcon.:e
1c6a0 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 lnode-http-pathinfo)))..(defun.e
1c6c0 6c 6e 6f 64 65 2d 68 74 74 70 2d 71 75 65 72 79 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47 65 lnode-http-query.(httpcon)..."Ge
1c6e0 74 20 74 68 65 20 51 55 45 52 59 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 2e 22 0a 20 20 28 t.the.QUERY.of.the.request."...(
1c700 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f or....(process-get.httpcon.:elno
1c720 64 65 2d 68 74 74 70 2d 71 75 65 72 79 29 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d de-http-query)....(elnode--http-
1c740 70 61 72 73 65 2d 72 65 73 6f 75 72 63 65 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 parse-resource.httpcon.:elnode-h
1c760 74 74 70 2d 71 75 65 72 79 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 ttp-query)))..(defun.elnode--htt
1c780 70 2d 70 61 72 61 6d 2d 70 61 72 74 2d 64 65 63 6f 64 65 20 28 70 61 72 61 6d 2d 74 68 69 6e 67 p-param-part-decode.(param-thing
1c7a0 29 0a 20 20 22 44 65 63 6f 64 65 20 61 6e 20 48 54 54 50 20 55 52 4c 20 70 61 72 61 6d 65 74 65 )..."Decode.an.HTTP.URL.paramete
1c7c0 72 20 70 61 72 74 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 20 69 6e 3a 0a 0a 20 68 74 74 70 3a r.part...For.example.in:...http:
1c7e0 2f 2f 6e 69 63 2e 66 65 72 72 69 65 72 2e 6d 65 2e 75 6b 2f 62 6c 6f 67 2f 65 6c 6e 6f 64 65 2f //nic.ferrier.me.uk/blog/elnode/
1c800 3f 70 3d 31 30 26 61 2b 63 3d 32 30 26 64 3d 78 2b 79 26 7a 3d 74 68 69 73 25 32 30 69 73 25 30 ?p=10&a+c=20&d=x+y&z=this%20is%0
1c820 39 6d 65 2b 61 6e 64 25 32 30 74 68 69 73 0a 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 9me+and%20this..The.following.ar
1c840 65 20 70 61 72 61 6d 20 70 61 72 74 73 20 61 6e 64 20 74 68 65 20 64 65 63 6f 64 69 6e 67 20 74 e.param.parts.and.the.decoding.t
1c860 68 61 74 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a 77 69 6c 6c 20 64 6f 3a 0a 0a 20 5c 22 70 hat.this.function.will.do:...\"p
1c880 5c 22 20 2d 3e 20 20 5c 22 70 5c 22 0a 0a 20 5c 22 31 30 5c 22 20 2d 3e 20 5c 22 31 30 5c 22 0a \".->..\"p\"...\"10\".->.\"10\".
1c8a0 0a 20 5c 22 61 2b 63 5c 22 20 2d 3e 20 5c 22 61 20 63 5c 22 20 2d 20 61 6e 20 65 78 61 6d 70 6c ..\"a+c\".->.\"a.c\".-.an.exampl
1c8c0 65 20 6f 66 20 2b 20 65 6e 63 6f 64 69 6e 67 0a 0a 20 5c 22 64 5c 22 20 2d 3e 20 5c 22 64 5c 22 e.of.+.encoding...\"d\".->.\"d\"
1c8e0 0a 0a 20 5c 22 78 2b 79 5c 22 20 2d 3e 20 5c 22 78 20 79 5c 22 20 2d 20 61 6e 6f 74 68 65 72 20 ...\"x+y\".->.\"x.y\".-.another.
1c900 65 78 61 6d 70 6c 65 20 6f 66 20 2b 20 65 6e 63 6f 64 69 6e 67 2c 20 69 6e 20 61 20 70 61 72 61 example.of.+.encoding,.in.a.para
1c920 6d 65 74 65 72 20 6e 61 6d 65 0a 0a 20 5c 22 7a 5c 22 20 2d 3e 20 5c 22 7a 5c 22 0a 0a 20 5c 22 meter.name...\"z\".->.\"z\"...\"
1c940 74 68 69 73 25 32 30 69 73 25 30 39 6d 65 2b 61 6e 64 25 32 30 74 68 69 73 5c 22 20 2d 3e 20 5c this%20is%09me+and%20this\".->.\
1c960 22 74 68 69 73 20 69 73 5c 74 6d 65 20 61 6e 64 20 74 68 69 73 5c 22 20 2d 0a 20 70 65 72 63 65 "this.is\tme.and.this\".-..perce
1c980 6e 74 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64 20 70 6c 75 73 20 65 6e 63 6f 64 69 6e 67 22 0a 20 nt.encoding.and.plus.encoding"..
1c9a0 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 .(url-unhex-string.(replace-rege
1c9c0 78 70 2d 69 6e 2d 73 74 72 69 6e 67 20 22 5c 5c 2b 22 20 22 20 22 20 70 61 72 61 6d 2d 74 68 69 xp-in-string."\\+".".".param-thi
1c9e0 6e 67 29 20 27 74 29 0a 20 20 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 ng).'t)...)..(defun.elnode--http
1ca00 2d 71 75 65 72 79 2d 74 6f 2d 61 6c 69 73 74 20 28 71 75 65 72 79 29 0a 20 20 22 43 72 61 70 20 -query-to-alist.(query)..."Crap.
1ca20 70 61 72 73 65 72 20 66 6f 72 20 48 54 54 50 20 51 55 45 52 59 20 64 61 74 61 2e 0a 0a 52 65 74 parser.for.HTTP.QUERY.data...Ret
1ca40 75 72 6e 73 20 61 6e 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 6c 69 73 74 2e 22 0a 20 20 28 6c 65 urns.an.association.list."...(le
1ca60 74 20 28 28 61 6c 69 73 74 20 28 6d 61 70 63 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.((alist.(mapcar...............
1ca80 20 20 28 6c 61 6d 62 64 61 20 28 6e 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..(lambda.(nv)..................
1caa0 20 28 69 66 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5c 5c 28 5b 5e 3d 5d 2b 5c 5c 29 5c .(if.(string-match."\\([^=]+\\)\
1cac0 5c 28 3d 5c 5c 28 2e 2a 5c 5c 29 5c 5c 29 2a 22 20 6e 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 \(=\\(.*\\)\\)*".nv)............
1cae0 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........(cons................
1cb00 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 61 6d 2d 70 61 72 74 ........(elnode--http-param-part
1cb20 2d 64 65 63 6f 64 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 6e 76 29 29 0a 20 20 20 -decode.(match-string.1.nv))....
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6d 61 74 63 68 2d 73 ....................(if.(match-s
1cb60 74 72 69 6e 67 20 32 20 6e 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tring.2.nv).....................
1cb80 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 61 6d 2d 70 61 72 74 2d .......(elnode--http-param-part-
1cba0 64 65 63 6f 64 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 33 20 6e 76 29 29 0a 20 20 20 20 decode.(match-string.3.nv)).....
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c 29 29 29 29 0a 20 20 20 .....................nil))))....
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 71 75 65 72 79 .............(split-string.query
1cc00 20 22 26 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 29 0a 20 20 20 20 61 6c 69 ."&"))................)).....ali
1cc20 73 74 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 74 2d 6d 65 72 67 65 st))..(defun.elnode--alist-merge
1cc40 20 28 61 20 62 20 26 6f 70 74 69 6f 6e 61 6c 20 6f 70 65 72 61 74 6f 72 29 0a 20 20 22 4d 65 72 .(a.b.&optional.operator)..."Mer
1cc60 67 65 20 74 77 6f 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 6c 69 73 74 73 20 6e 6f 6e 2d 64 65 73 ge.two.association.lists.non-des
1cc80 74 72 75 63 74 69 76 65 6c 79 2e 0a 0a 41 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 tructively...A.is.considered.the
1cca0 20 70 72 69 6f 72 69 74 79 20 28 69 74 73 20 65 6c 65 6d 65 6e 74 73 20 67 6f 20 69 6e 20 66 69 .priority.(its.elements.go.in.fi
1ccc0 72 73 74 29 2e 22 0a 20 20 28 69 66 20 28 6e 6f 74 20 6f 70 65 72 61 74 6f 72 29 0a 20 20 20 20 rst)."...(if.(not.operator).....
1cce0 20 20 28 73 65 74 71 20 6f 70 65 72 61 74 6f 72 20 27 61 73 73 71 29 29 0a 20 20 28 6c 65 74 2a ..(setq.operator.'assq))...(let*
1cd00 20 28 28 72 65 73 20 27 28 29 29 29 0a 20 20 20 20 28 6c 65 74 20 28 28 6c 73 74 20 28 61 70 70 .((res.'())).....(let.((lst.(app
1cd20 65 6e 64 20 61 20 62 29 29 29 0a 20 20 20 20 20 20 28 77 68 69 6c 65 20 6c 73 74 0a 20 20 20 20 end.a.b))).......(while.lst.....
1cd40 20 20 20 20 28 6c 65 74 20 28 28 69 74 65 6d 20 28 63 61 72 2d 73 61 66 65 20 6c 73 74 29 29 29 ....(let.((item.(car-safe.lst)))
1cd60 0a 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 6c 73 74 20 28 63 64 72 2d 73 61 66 65 20 6c ...........(setq.lst.(cdr-safe.l
1cd80 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 20 28 63 61 72 20 st))...........(let*.((key.(car.
1cda0 69 74 65 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 76 61 6c 20 28 66 item))..................(aval.(f
1cdc0 75 6e 63 61 6c 6c 20 6f 70 65 72 61 74 6f 72 20 6b 65 79 20 61 29 29 0a 20 20 20 20 20 20 20 20 uncall.operator.key.a)).........
1cde0 20 20 20 20 20 20 20 20 20 28 62 76 61 6c 20 28 66 75 6e 63 61 6c 6c 20 6f 70 65 72 61 74 6f 72 .........(bval.(funcall.operator
1ce00 20 6b 65 79 20 62 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 .key.b))).............(if.(not.(
1ce20 66 75 6e 63 61 6c 6c 20 6f 70 65 72 61 74 6f 72 20 6b 65 79 20 72 65 73 29 29 0a 20 20 20 20 20 funcall.operator.key.res))......
1ce40 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 72 65 73 20 28 63 6f 6e 73 0a 20 20 20 20 20 ...........(setq.res.(cons......
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 61 ......................(if.(and.a
1ce80 76 61 6c 20 62 76 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 val.bval).......................
1cea0 20 20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20 69 74 65 6d 20 69 73 20 69 6e 20 62 6f 74 68 20 .........;;.the.item.is.in.both.
1cec0 6c 69 73 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lists...........................
1cee0 20 20 20 20 20 28 63 6f 6e 73 20 28 63 61 72 20 69 74 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 .....(cons.(car.item)...........
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 ...........................(list
1cf20 20 28 63 64 72 20 61 76 61 6c 29 20 28 63 64 72 20 62 76 61 6c 29 29 29 0a 20 20 20 20 20 20 20 .(cdr.aval).(cdr.bval)))........
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65 6d 29 0a 20 20 20 20 ......................item).....
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 29 29 29 29 29 29 .......................res))))))
1cf80 0a 20 20 20 20 20 20 20 20 72 65 73 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d .........res)))..(defun.elnode--
1cfa0 68 74 74 70 2d 6d 70 2d 66 69 6e 64 2d 62 6f 75 6e 64 61 72 79 20 28 62 6f 75 6e 64 61 72 79 29 http-mp-find-boundary.(boundary)
1cfc0 0a 20 20 22 46 69 6e 64 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 73 74 72 69 6e 67 20 66 72 6f ..."Find.the.boundary.string.fro
1cfe0 6d 20 70 6f 69 6e 74 2e 22 0a 20 20 28 6c 65 74 20 28 28 62 6f 75 6e 64 61 72 79 2d 72 78 0a 20 m.point."...(let.((boundary-rx..
1d000 20 20 20 20 20 20 20 20 28 72 78 2d 74 6f 2d 73 74 72 69 6e 67 20 60 28 73 65 71 20 22 5c 72 5c ........(rx-to-string.`(seq."\r\
1d020 6e 2d 2d 22 20 2c 62 6f 75 6e 64 61 72 79 29 29 29 29 0a 20 20 20 20 28 73 61 76 65 2d 6d 61 74 n--".,boundary)))).....(save-mat
1d040 63 68 2d 64 61 74 61 0a 20 20 20 20 20 20 28 77 68 65 6e 20 28 72 65 2d 73 65 61 72 63 68 2d 66 ch-data.......(when.(re-search-f
1d060 6f 72 77 61 72 64 20 62 6f 75 6e 64 61 72 79 2d 72 78 20 6e 69 6c 20 74 29 0a 20 20 20 20 20 20 orward.boundary-rx.nil.t).......
1d080 20 20 28 6c 65 74 20 28 28 6d 70 74 20 28 6d 61 74 63 68 2d 62 65 67 69 6e 6e 69 6e 67 20 30 29 ..(let.((mpt.(match-beginning.0)
1d0a0 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 52 65 74 75 72 6e 20 73 74 61 74 75 73 20 69 6e ))...........;;.Return.status.in
1d0c0 64 69 63 61 74 6f 72 20 61 6e 64 20 74 68 65 20 73 74 61 72 74 20 6d 61 74 63 68 20 70 6f 69 6e dicator.and.the.start.match.poin
1d0e0 74 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 t...........(list............(if
1d100 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(save-excursion................
1d120 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6c 69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f 73 ..(goto-char.(line-beginning-pos
1d140 69 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 6b 69 6e ition))..................(lookin
1d160 67 2d 61 74 20 28 72 78 2d 74 6f 2d 73 74 72 69 6e 67 20 60 28 73 65 71 20 62 6f 6c 20 22 2d 2d g-at.(rx-to-string.`(seq.bol."--
1d180 22 20 2c 62 6f 75 6e 64 61 72 79 20 22 2d 2d 22 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ".,boundary."--"))))............
1d1a0 20 20 20 20 3a 64 6f 6e 65 20 3a 63 6f 6e 74 69 6e 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 ....:done.:continue)............
1d1c0 28 70 72 6f 67 6e 20 28 67 6f 74 6f 2d 63 68 61 72 20 6d 70 74 29 20 6d 70 74 29 29 29 29 29 29 (progn.(goto-char.mpt).mpt))))))
1d1e0 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70 2d 64 65 63 6f 64 65 )..(defun.elnode--http-mp-decode
1d200 20 28 62 75 66 66 65 72 20 68 65 61 64 65 72 2d 65 6e 64 2d 70 74 20 62 6f 75 6e 64 61 72 79 29 .(buffer.header-end-pt.boundary)
1d220 0a 20 20 22 44 65 63 6f 64 65 20 61 20 6d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 61 74 61 ..."Decode.a.multipart/form-data
1d240 20 75 70 6c 6f 61 64 20 77 69 74 68 20 42 4f 55 4e 44 41 52 59 20 69 6e 20 42 55 46 46 45 52 2e .upload.with.BOUNDARY.in.BUFFER.
1d260 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 0a "...(with-current-buffer.buffer.
1d280 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 2d 20 68 65 61 64 65 72 2d 65 6e 64 2d 70 74 20 ....(goto-char.(-.header-end-pt.
1d2a0 32 29 29 20 3b 20 6d 6f 76 65 73 20 62 61 63 6b 20 6f 76 65 72 20 74 68 65 20 5c 72 5c 6e 0a 20 2)).;.moves.back.over.the.\r\n..
1d2c0 20 20 20 28 6c 6f 6f 70 20 77 68 69 6c 65 20 28 65 71 20 28 63 61 72 20 6e 65 78 74 2d 62 6f 75 ...(loop.while.(eq.(car.next-bou
1d2e0 6e 64 61 72 79 29 20 3a 63 6f 6e 74 69 6e 75 65 29 0a 20 20 20 20 20 20 20 77 69 74 68 20 6e 65 ndary).:continue)........with.ne
1d300 78 74 2d 62 6f 75 6e 64 61 72 79 20 3d 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70 2d 66 xt-boundary.=.(elnode--http-mp-f
1d320 69 6e 64 2d 62 6f 75 6e 64 61 72 79 20 62 6f 75 6e 64 61 72 79 29 0a 20 20 20 20 20 20 20 63 6f ind-boundary.boundary)........co
1d340 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 28 64 65 73 74 72 75 63 74 75 72 69 6e 67 2d 62 69 llect..........(destructuring-bi
1d360 6e 64 20 28 6c 65 61 64 65 72 20 61 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 nd.(leader.alist)..............(
1d380 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 68 65 61 64 65 72 20 28 63 75 72 72 65 elnode--http-parse-header.(curre
1d3a0 6e 74 2d 62 75 66 66 65 72 29 20 28 70 6f 69 6e 74 29 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 nt-buffer).(point).t)...........
1d3c0 20 28 6c 65 74 2a 20 28 28 63 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(let*.((cde....................
1d3e0 28 6d 61 69 6c 2d 68 65 61 64 65 72 2d 70 61 72 73 65 2d 63 6f 6e 74 65 6e 74 2d 64 69 73 70 6f (mail-header-parse-content-dispo
1d400 73 69 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6b 76 61 20 sition.....................(kva.
1d420 22 63 6f 6e 74 65 6e 74 2d 64 69 73 70 6f 73 69 74 69 6f 6e 22 20 61 6c 69 73 74 29 29 29 0a 20 "content-disposition".alist)))..
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 61 6d 65 20 28 61 6c 69 73 74 2d 67 65 .................(name.(alist-ge
1d460 74 20 27 6e 61 6d 65 20 28 63 64 72 20 63 64 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 t.'name.(cdr.cde))).............
1d480 20 20 20 20 20 20 28 66 69 6c 65 6e 61 6d 65 20 28 61 6c 69 73 74 2d 67 65 74 20 27 66 69 6c 65 ......(filename.(alist-get.'file
1d4a0 6e 61 6d 65 20 28 63 64 72 20 63 64 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 name.(cdr.cde)))................
1d4c0 20 20 20 28 70 74 20 28 70 6f 69 6e 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b ...(pt.(point)))..............;;
1d4e0 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 65 6e 64 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 .Find.the.next.end.point........
1d500 20 20 20 20 20 20 28 73 65 74 71 20 6e 65 78 74 2d 62 6f 75 6e 64 61 72 79 0a 20 20 20 20 20 20 ......(setq.next-boundary.......
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70 2d 66 69 .............(elnode--http-mp-fi
1d540 6e 64 2d 62 6f 75 6e 64 61 72 79 20 62 6f 75 6e 64 61 72 79 29 29 0a 20 20 20 20 20 20 20 20 20 nd-boundary.boundary))..........
1d560 20 20 20 20 28 6c 65 74 2a 20 28 28 6c 62 70 20 28 6c 69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d ....(let*.((lbp.(line-beginning-
1d580 70 6f 73 69 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 position)).....................(
1d5a0 63 6f 6e 74 65 6e 74 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 70 74 20 28 63 61 content.(buffer-substring.pt.(ca
1d5c0 64 72 20 6e 65 78 74 2d 62 6f 75 6e 64 61 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 dr.next-boundary))).............
1d5e0 20 20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e 74 2d 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 ........(content-data...........
1d600 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........(cond................
1d620 20 20 20 20 20 20 20 20 28 28 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 63 6f 6e 74 65 6e 74 29 ........((not.filename).content)
1d640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 20 28 70 72 6f 70 ........................(t.(prop
1d660 65 72 74 69 7a 65 20 63 6f 6e 74 65 6e 74 20 3a 65 6c 6e 6f 64 65 2d 66 69 6c 65 6e 61 6d 65 20 ertize.content.:elnode-filename.
1d680 66 69 6c 65 6e 61 6d 65 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f filename)))))................(co
1d6a0 6e 73 20 6e 61 6d 65 20 63 6f 6e 74 65 6e 74 2d 64 61 74 61 29 29 29 29 29 29 29 0a 0a 28 64 65 ns.name.content-data)))))))..(de
1d6c0 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 6f 73 74 2d 6d 70 2d 64 65 63 6f 64 65 20 fun.elnode--http-post-mp-decode.
1d6e0 28 68 74 74 70 63 6f 6e 20 70 61 72 73 65 64 2d 63 6f 6e 74 65 6e 74 2d 74 79 70 65 29 0a 20 20 (httpcon.parsed-content-type)...
1d700 22 44 65 63 6f 64 65 20 74 68 65 20 48 54 54 50 20 50 4f 53 54 20 6d 75 6c 74 69 70 61 72 74 20 "Decode.the.HTTP.POST.multipart.
1d720 74 68 69 6e 67 20 6f 6e 20 48 54 54 50 43 4f 4e 2e 22 0a 20 20 28 6c 65 74 20 28 28 62 6f 75 6e thing.on.HTTPCON."...(let.((boun
1d740 64 61 72 79 20 28 61 6c 69 73 74 2d 67 65 74 20 27 62 6f 75 6e 64 61 72 79 20 28 63 64 72 20 70 dary.(alist-get.'boundary.(cdr.p
1d760 61 72 73 65 64 2d 63 6f 6e 74 65 6e 74 2d 74 79 70 65 29 29 29 0a 20 20 20 20 20 20 20 20 28 62 arsed-content-type))).........(b
1d780 75 66 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 uf.(process-buffer.httpcon))....
1d7a0 20 20 20 20 20 28 68 64 72 2d 65 6e 64 2d 70 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 .....(hdr-end-pt.(process-get.ht
1d7c0 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 65 61 64 65 72 2d 65 6e 64 29 29 29 0a 20 20 20 20 tpcon.:elnode-header-end))).....
1d7e0 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70 2d 64 65 63 6f 64 65 20 62 75 66 20 68 64 72 2d (elnode--http-mp-decode.buf.hdr-
1d800 65 6e 64 2d 70 74 20 62 6f 75 6e 64 61 72 79 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 end-pt.boundary)))..(defun.elnod
1d820 65 2d 2d 68 74 74 70 2d 70 6f 73 74 2d 74 6f 2d 61 6c 69 73 74 20 28 68 74 74 70 63 6f 6e 29 0a e--http-post-to-alist.(httpcon).
1d840 20 20 22 50 61 72 73 65 20 74 68 65 20 50 4f 53 54 20 62 6f 64 79 2e 22 0a 20 20 3b 3b 20 46 49 .."Parse.the.POST.body."...;;.FI
1d860 58 4d 45 3a 20 74 68 69 73 20 69 73 20 4f 4e 4c 59 20 61 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 XME:.this.is.ONLY.a.content.leng
1d880 74 68 20 68 65 61 64 65 72 20 70 61 72 73 65 72 20 2d 2d 20 69 74 20 73 68 6f 75 6c 64 0a 20 20 th.header.parser.--.it.should...
1d8a0 3b 3b 20 61 6c 73 6f 20 63 6f 70 65 20 77 69 74 68 20 74 72 61 6e 73 66 65 72 20 65 6e 63 6f 64 ;;.also.cope.with.transfer.encod
1d8c0 69 6e 67 73 2e 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 74 65 6e 74 2d 74 79 70 65 20 28 65 6c ings....(let*.((content-type.(el
1d8e0 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 70 63 6f 6e 20 27 63 6f 6e 74 65 6e node-http-header.httpcon.'conten
1d900 74 2d 74 79 70 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 72 73 65 64 2d 74 79 70 65 0a 20 t-type))..........(parsed-type..
1d920 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 63 6f 6e 74 65 6e 74 2d 74 79 70 65 0a 20 20 20 20 .........(when.content-type.....
1d940 20 20 20 20 20 20 20 20 28 6d 61 69 6c 2d 68 65 61 64 65 72 2d 70 61 72 73 65 2d 63 6f 6e 74 65 ........(mail-header-parse-conte
1d960 6e 74 2d 74 79 70 65 20 63 6f 6e 74 65 6e 74 2d 74 79 70 65 29 29 29 29 0a 20 20 20 20 28 69 66 nt-type.content-type)))).....(if
1d980 20 28 65 71 75 61 6c 20 22 6d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 61 74 61 22 20 28 63 .(equal."multipart/form-data".(c
1d9a0 61 72 20 70 61 72 73 65 64 2d 74 79 70 65 29 29 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 ar.parsed-type)).........(elnode
1d9c0 2d 2d 68 74 74 70 2d 70 6f 73 74 2d 6d 70 2d 64 65 63 6f 64 65 20 68 74 74 70 63 6f 6e 20 70 61 --http-post-mp-decode.httpcon.pa
1d9e0 72 73 65 64 2d 74 79 70 65 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74 27 73 20 rsed-type).........;;.Else.it's.
1da00 61 20 6e 6f 6e 2d 6d 75 6c 74 69 70 61 72 74 20 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 a.non-multipart.request.........
1da20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 71 75 65 72 79 2d 74 6f 2d 61 6c 69 73 74 0a 20 20 20 (elnode--http-query-to-alist....
1da40 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 ......(with-current-buffer.(proc
1da60 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b ess-buffer.httpcon)............;
1da80 3b 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 ;.(buffer-substring.(point-min).
1daa0 28 70 6f 69 6e 74 2d 6d 61 78 29 29 20 3b 64 65 62 75 67 0a 20 20 20 20 20 20 20 20 20 20 20 28 (point-max)).;debug............(
1dac0 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 buffer-substring.............;;.
1dae0 77 65 20 6d 69 67 68 74 20 68 61 76 65 20 74 6f 20 61 64 64 20 32 20 74 6f 20 74 68 69 73 20 62 we.might.have.to.add.2.to.this.b
1db00 65 63 61 75 73 65 20 6f 66 20 74 72 61 69 6c 69 6e 67 20 5c 72 5c 6e 0a 20 20 20 20 20 20 20 20 ecause.of.trailing.\r\n.........
1db20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 ....(process-get.httpcon.:elnode
1db40 2d 68 65 61 64 65 72 2d 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6f 69 6e 74 2d -header-end).............(point-
1db60 6d 61 78 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 max)))))))..(defun.elnode-http-p
1db80 61 72 61 6d 73 20 28 68 74 74 70 63 6f 6e 20 26 72 65 73 74 20 6e 61 6d 65 73 29 0a 20 20 22 47 arams.(httpcon.&rest.names)..."G
1dba0 65 74 20 61 6e 20 61 6c 69 73 74 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e et.an.alist.of.the.parameters.in
1dbc0 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a 49 66 20 74 68 65 20 6d 65 74 68 6f 64 20 69 73 20 .the.request...If.the.method.is.
1dbe0 61 20 47 45 54 20 74 68 65 6e 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 66 72 a.GET.then.the.parameters.are.fr
1dc00 6f 6d 20 74 68 65 20 75 72 6c 2e 20 20 49 66 0a 74 68 65 20 6d 65 74 68 6f 64 20 69 73 20 61 20 om.the.url...If.the.method.is.a.
1dc20 50 4f 53 54 20 74 68 65 6e 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 6d 61 79 20 63 6f 6d POST.then.the.parameters.may.com
1dc40 65 20 66 72 6f 6d 20 65 69 74 68 65 72 20 74 68 65 0a 75 72 6c 20 6f 72 20 74 68 65 20 50 4f 53 e.from.either.the.url.or.the.POS
1dc60 54 20 62 6f 64 79 20 6f 72 20 62 6f 74 68 3a 0a 0a 20 50 4f 53 54 20 2f 70 61 74 68 3f 61 3d 62 T.body.or.both:...POST./path?a=b
1dc80 26 78 3d 79 0a 20 61 3d 63 0a 0a 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 3a 0a 0a 20 27 28 &x=y..a=c..would.result.in:...'(
1dca0 28 5c 22 61 5c 22 20 5c 22 62 5c 22 20 5c 22 63 5c 22 29 28 5c 22 78 5c 22 20 2e 20 5c 22 79 5c (\"a\".\"b\".\"c\")(\"x\"...\"y\
1dcc0 22 29 29 0a 0a 49 66 20 4e 41 4d 45 53 20 61 72 65 20 73 70 65 63 69 66 69 65 64 20 69 74 20 69 "))..If.NAMES.are.specified.it.i
1dce0 73 20 61 20 66 69 6c 74 65 72 20 6c 69 73 74 20 6f 66 20 73 79 6d 62 6f 6c 73 20 6f 72 20 73 74 s.a.filter.list.of.symbols.or.st
1dd00 72 69 6e 67 73 0a 77 68 69 63 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a 0a 46 rings.which.will.be.returned...F
1dd20 69 6c 65 20 75 70 6c 6f 61 64 20 77 69 74 68 20 4d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 ile.upload.with.Multipart/form-d
1dd40 61 74 61 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 45 6c 6e 6f 64 65 2e 0a 55 70 6c 6f ata.is.supported.by.Elnode..Uplo
1dd60 61 64 65 64 20 66 69 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 70 61 aded.files.are.present.in.the.pa
1dd80 72 61 6d 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 79 20 6f 74 68 65 72 0a 70 61 72 61 6d rams.the.same.as.any.other.param
1dda0 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 75 70 6c 6f 61 64 .except.for.the.fact.that.upload
1ddc0 65 64 20 66 69 6c 65 20 70 61 72 61 6d 73 20 68 61 76 65 20 61 20 74 65 78 74 0a 70 72 6f 70 65 ed.file.params.have.a.text.prope
1dde0 72 74 79 20 3a 65 6c 6e 6f 64 65 2d 66 69 6c 65 6e 61 6d 65 20 6f 6e 20 74 68 65 6d 3a 0a 0a 20 rty.:elnode-filename.on.them:...
1de00 20 28 67 65 74 2d 74 65 78 74 2d 70 72 6f 70 65 72 74 79 20 30 20 3a 65 6c 6e 6f 64 65 2d 66 69 .(get-text-property.0.:elnode-fi
1de20 6c 65 6e 61 6d 65 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 lename.....(elnode-http-param.ht
1de40 74 70 63 6f 6e 20 5c 22 6d 79 66 69 6c 65 5c 22 29 29 20 3d 3e 20 27 2f 73 6f 6d 65 66 69 6c 65 tpcon.\"myfile\")).=>.'/somefile
1de60 2e 74 78 74 27 0a 0a 54 68 65 20 76 61 6c 75 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 .txt'..The.value.comes.from.the.
1de80 5c 22 43 6f 6e 74 65 6e 74 2d 44 69 73 70 6f 73 69 74 69 6f 6e 5c 22 20 68 65 61 64 65 72 20 69 \"Content-Disposition\".header.i
1dea0 6e 20 74 68 65 0a 6d 75 6c 74 69 70 61 72 74 20 75 70 6c 6f 61 64 2e 22 0a 20 20 28 6c 6f 6f 70 n.the.multipart.upload."...(loop
1dec0 20 66 6f 72 20 70 61 69 72 20 69 6e 0a 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 .for.pair.in........(or.........
1dee0 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 (process-get.httpcon.:elnode-htt
1df00 70 2d 70 61 72 61 6d 73 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 71 75 65 72 79 20 28 p-params).........(let.((query.(
1df20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 71 75 65 72 79 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 elnode-http-query.httpcon)))....
1df40 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 61 6c 69 73 74 20 28 69 66 20 71 75 65 72 79 0a 20 20 .......(let.((alist.(if.query...
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 .........................(elnode
1df80 2d 2d 68 74 74 70 2d 71 75 65 72 79 2d 74 6f 2d 61 6c 69 73 74 20 71 75 65 72 79 29 0a 20 20 20 --http-query-to-alist.query)....
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 29 29 29 29 0a 20 ........................'())))..
1dfc0 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 22 50 4f 53 54 22 20 28 65 6c ...........(if.(equal."POST".(el
1dfe0 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 node-http-method.httpcon))......
1e000 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 77 65 27 72 65 20 61 20 50 4f 53 54 20 77 65 ...........;;.If.we're.a.POST.we
1e020 20 68 61 76 65 20 74 6f 20 6d 65 72 67 65 20 74 68 65 20 70 61 72 61 6d 73 0a 20 20 20 20 20 20 .have.to.merge.the.params.......
1e040 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........(progn................
1e060 20 20 20 28 73 65 74 71 20 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...(setq.alist..................
1e080 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 74 2d 6d 65 72 67 65 0a 20 20 20 20 .......(elnode--alist-merge.....
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 69 73 74 0a 20 20 20 20 20 .....................alist......
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 ....................(elnode--htt
1e0e0 70 2d 70 6f 73 74 2d 74 6f 2d 61 6c 69 73 74 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 p-post-to-alist.httpcon)........
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 61 73 73 6f 63 29 29 0a 20 20 20 20 20 ..................'assoc))......
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f .............(process-put.httpco
1e140 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 73 20 61 6c 69 73 74 29 0a 20 20 20 n.:elnode-http-params.alist)....
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 ...............alist)...........
1e180 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20 71 75 ......;;.Else.just.return.the.qu
1e1a0 65 72 79 20 70 61 72 61 6d 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 ery.params.................(proc
1e1c0 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 ess-put.httpcon.:elnode-http-par
1e1e0 61 6d 73 20 61 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 69 73 74 ams.alist).................alist
1e200 29 29 29 29 0a 20 20 20 20 20 69 66 20 28 6f 72 20 28 6e 6f 74 20 6e 61 6d 65 73 29 0a 20 20 20 ))))......if.(or.(not.names)....
1e220 20 20 20 20 20 20 20 20 20 28 6d 65 6d 71 20 28 69 6e 74 65 72 6e 20 28 63 61 72 20 70 61 69 72 .........(memq.(intern.(car.pair
1e240 29 29 20 6e 61 6d 65 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 65 6d 62 65 72 20 28 63 )).names).............(member.(c
1e260 61 72 20 70 61 69 72 29 20 6e 61 6d 65 73 29 29 0a 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 70 61 ar.pair).names))......collect.pa
1e280 69 72 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 28 ir))..(defun.elnode-http-param.(
1e2a0 68 74 74 70 63 6f 6e 20 6e 61 6d 65 20 26 6f 70 74 69 6f 6e 61 6c 20 64 65 66 61 75 6c 74 29 0a httpcon.name.&optional.default).
1e2c0 20 20 22 47 65 74 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 64 20 4e 41 4d 45 20 .."Get.the.parameter.named.NAME.
1e2e0 66 72 6f 6d 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a 49 66 20 74 68 65 20 70 61 72 61 6d 65 from.the.request...If.the.parame
1e300 74 65 72 20 63 61 6d 65 20 66 72 6f 6d 20 61 20 66 69 6c 65 20 75 70 6c 6f 61 64 20 69 74 20 68 ter.came.from.a.file.upload.it.h
1e320 61 73 20 61 20 74 65 78 74 20 70 72 6f 70 65 72 74 79 0a 69 6e 64 69 63 61 74 69 6e 67 20 74 68 as.a.text.property.indicating.th
1e340 65 20 66 69 6c 65 6e 61 6d 65 3a 0a 0a 20 20 28 67 65 74 2d 74 65 78 74 2d 70 72 6f 70 65 72 74 e.filename:....(get-text-propert
1e360 79 20 30 20 3a 65 6c 6e 6f 64 65 2d 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 28 65 6c 6e 6f 64 65 y.0.:elnode-filename.....(elnode
1e380 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 5c 22 6d 79 66 69 6c 65 5c 22 29 29 -http-param.httpcon.\"myfile\"))
1e3a0 20 3d 3e 20 27 2f 73 6f 6d 65 66 69 6c 65 2e 74 78 74 27 0a 0a 49 66 20 74 68 65 20 70 61 72 61 .=>.'/somefile.txt'..If.the.para
1e3c0 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 61 6e 64 20 44 45 46 41 55 4c 54 meter.is.not.present.and.DEFAULT
1e3e0 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 72 65 74 75 72 6e 20 44 45 46 41 55 4c 54 20 .is.present.then.return.DEFAULT.
1e400 69 6e 73 74 65 61 64 20 6f 66 20 60 6e 69 6c 27 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 70 61 72 instead.of.`nil'."...(let*.((par
1e420 61 6d 73 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 73 20 68 74 74 70 63 6f 6e 29 ams.(elnode-http-params.httpcon)
1e440 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 72 61 6d 2d 70 61 69 72 0a 20 20 20 20 20 20 20 20 20 )..........(param-pair..........
1e460 20 28 61 73 73 6f 63 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 73 79 6d 62 6f 6c 70 20 .(assoc............(if.(symbolp.
1e480 6e 61 6d 65 29 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 6e 61 6d 65 29 20 6e 61 6d 65 29 0a 20 name).(symbol-name.name).name)..
1e4a0 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d 73 29 29 29 0a 20 20 20 20 3b 3b 20 53 68 6f 75 6c ..........params))).....;;.Shoul
1e4c0 64 20 77 65 20 73 69 67 6e 61 6c 20 77 68 65 6e 20 77 65 20 64 6f 6e 27 74 20 68 61 76 65 20 61 d.we.signal.when.we.don't.have.a
1e4e0 20 70 61 72 61 6d 3f 0a 20 20 20 20 28 69 66 20 70 61 72 61 6d 2d 70 61 69 72 0a 20 20 20 20 20 .param?.....(if.param-pair......
1e500 20 20 20 28 63 64 72 20 70 61 72 61 6d 2d 70 61 69 72 29 0a 20 20 20 20 20 20 20 20 64 65 66 61 ...(cdr.param-pair).........defa
1e520 75 6c 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f ult)))..(defun.elnode-http-metho
1e540 64 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47 65 74 20 74 68 65 20 48 54 54 50 20 72 65 71 75 d.(httpcon)..."Get.the.HTTP.requ
1e560 65 73 74 20 6d 65 74 68 6f 64 20 28 47 45 54 2c 20 50 55 54 2c 20 65 74 63 2e 2e 2e 29 20 61 73 est.method.(GET,.PUT,.etc...).as
1e580 20 61 20 73 74 72 69 6e 67 2e 22 0a 20 20 28 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 .a.string."...(or....(process-ge
1e5a0 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 29 0a 20 t.httpcon.:elnode-http-method)..
1e5c0 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 73 74 61 74 75 73 20 68 74 74 ..(elnode--http-parse-status.htt
1e5e0 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 29 29 29 0a 0a 28 64 65 pcon.:elnode-http-method)))..(de
1e600 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 76 65 72 73 69 6f 6e 20 28 68 74 74 70 63 6f 6e fun.elnode-http-version.(httpcon
1e620 29 0a 20 20 22 47 65 74 20 74 68 65 20 50 41 54 48 49 4e 46 4f 20 6f 66 20 74 68 65 20 72 65 71 )..."Get.the.PATHINFO.of.the.req
1e640 75 65 73 74 2e 22 0a 20 20 28 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 uest."...(or....(process-get.htt
1e660 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 28 65 pcon.:elnode-http-version)....(e
1e680 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e lnode--http-parse-status.httpcon
1e6a0 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 76 65 72 73 69 6f 6e 29 29 29 0a 0a 28 64 65 66 75 6e .:elnode-http-version)))..(defun
1e6c0 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 68 74 74 70 63 6f .elnode-http-send-string.(httpco
1e6e0 6e 20 73 74 72 29 0a 20 20 22 53 65 6e 64 20 53 54 52 20 74 6f 20 48 54 54 50 43 4f 4e 2c 20 64 n.str)..."Send.STR.to.HTTPCON,.d
1e700 6f 69 6e 67 20 63 68 75 6e 6b 65 64 20 65 6e 63 6f 64 69 6e 67 2e 22 0a 20 20 28 69 66 20 65 6c oing.chunked.encoding."...(if.el
1e720 6e 6f 64 65 2d 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 2d 64 65 62 75 67 0a 20 20 20 node--http-send-string-debug....
1e740 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d ...(elnode-error........"elnode-
1e760 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 25 73 20 5b 5b 25 73 5d 5d 22 0a 20 20 20 20 http-send-string.%s.[[%s]]".....
1e780 20 20 20 68 74 74 70 63 6f 6e 20 28 65 6c 6e 6f 64 65 2d 74 72 75 6e 63 20 73 74 72 29 29 29 0a ...httpcon.(elnode-trunc.str))).
1e7a0 20 20 28 6c 65 74 20 28 28 6c 65 6e 20 28 73 74 72 69 6e 67 2d 62 79 74 65 73 20 73 74 72 29 29 ..(let.((len.(string-bytes.str))
1e7c0 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f ).....(process-put.httpcon.:elno
1e7e0 64 65 2d 62 79 74 65 73 2d 77 72 69 74 74 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 de-bytes-written................
1e800 20 20 28 2b 20 6c 65 6e 20 28 6f 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f ..(+.len.(or.(process-get.httpco
1e820 6e 20 3a 65 6c 6e 6f 64 65 2d 62 79 74 65 73 2d 77 72 69 74 74 65 6e 29 20 30 29 29 29 0a 20 20 n.:elnode-bytes-written).0)))...
1e840 20 20 3b 3b 20 46 49 58 4d 45 20 45 72 72 6f 72 73 20 63 61 6e 20 68 61 70 70 65 6e 20 68 65 72 ..;;.FIXME.Errors.can.happen.her
1e860 65 2c 20 62 65 63 61 75 73 65 20 74 68 65 20 73 6f 63 6b 65 74 20 67 6f 65 73 20 61 77 61 79 2e e,.because.the.socket.goes.away.
1e880 2e 20 69 74 0a 20 20 20 20 3b 3b 20 77 6f 75 6c 64 20 62 65 20 6e 69 63 65 20 74 6f 20 74 72 61 ..it.....;;.would.be.nice.to.tra
1e8a0 70 20 74 68 65 6d 20 61 6e 64 20 72 65 70 6f 72 74 20 61 6e 64 20 74 68 65 6e 20 72 65 2d 72 61 p.them.and.report.and.then.re-ra
1e8c0 69 73 65 20 74 68 65 6d 2e 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 ise.them......(process-send-stri
1e8e0 6e 67 20 68 74 74 70 63 6f 6e 20 28 66 6f 72 6d 61 74 20 22 25 78 5c 72 5c 6e 25 73 5c 72 5c 6e ng.httpcon.(format."%x\r\n%s\r\n
1e900 22 20 6c 65 6e 20 28 6f 72 20 73 74 72 20 22 22 29 29 29 29 29 0a 0a 28 64 65 66 63 6f 6e 73 74 ".len.(or.str."")))))..(defconst
1e920 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 64 65 73 2d 61 6c 69 73 74 0a 20 20 28 6c 6f 6f 70 .elnode-http-codes-alist...(loop
1e940 20 66 6f 72 20 70 20 69 6e 20 27 28 28 32 30 30 20 2e 20 22 4f 6b 22 29 0a 20 20 20 20 20 20 20 .for.p.in.'((200..."Ok")........
1e960 20 20 20 20 20 20 20 20 20 20 20 20 28 32 30 31 20 2e 20 22 43 72 65 61 74 65 64 22 29 0a 20 20 ............(201..."Created")...
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 33 30 32 20 2e 20 22 52 65 64 69 72 65 63 .................(302..."Redirec
1e9a0 74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 34 30 30 20 2e 20 22 42 t")....................(400..."B
1e9c0 61 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ad.Request")....................
1e9e0 28 34 30 31 20 2e 20 22 41 75 74 68 65 6e 74 69 63 61 74 65 22 29 0a 20 20 20 20 20 20 20 20 20 (401..."Authenticate")..........
1ea00 20 20 20 20 20 20 20 20 20 20 28 34 30 34 20 2e 20 22 4e 6f 74 20 46 6f 75 6e 64 22 29 0a 20 20 ..........(404..."Not.Found")...
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 35 30 30 20 2e 20 22 53 65 72 76 65 72 20 .................(500..."Server.
1ea40 45 72 72 6f 72 22 29 29 0a 20 20 20 20 20 3b 3b 20 61 64 64 20 61 6e 20 61 6c 69 73 74 20 65 6e Error"))......;;.add.an.alist.en
1ea60 74 72 79 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 20 20 20 20 20 63 6f 6c try.with.an.integer.key......col
1ea80 6c 65 63 74 20 70 0a 20 20 20 20 20 3b 3b 20 61 64 64 20 61 6e 20 61 6c 69 73 74 20 65 6e 74 72 lect.p......;;.add.an.alist.entr
1eaa0 79 20 77 69 74 68 20 61 20 73 74 72 69 6e 67 20 6b 65 79 0a 20 20 20 20 20 63 6f 6c 6c 65 63 74 y.with.a.string.key......collect
1eac0 0a 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6e 75 6d 62 65 72 2d 74 6f 2d 73 74 72 69 6e 67 20 ........(cons.(number-to-string.
1eae0 28 63 61 72 20 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 70 29 29 29 0a (car.p))..............(cdr.p))).
1eb00 20 20 22 48 54 54 50 20 63 6f 64 65 73 20 77 69 74 68 20 73 74 72 69 6e 67 20 6b 65 79 73 20 61 .."HTTP.codes.with.string.keys.a
1eb20 6e 64 20 69 6e 74 65 67 65 72 20 6b 65 79 73 2e 22 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f nd.integer.keys.")..(defun*.elno
1eb40 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 6b 65 20 28 6e 61 6d 65 20 64 61 74 61 20 26 de-http-cookie-make.(name.data.&
1eb60 6b 65 79 20 65 78 70 69 72 79 20 70 61 74 68 29 0a 20 20 22 4d 61 6b 65 20 61 20 73 65 74 2d 63 key.expiry.path)..."Make.a.set-c
1eb80 6f 6f 6b 69 65 20 68 65 61 64 65 72 20 70 61 69 72 20 66 72 6f 6d 20 4e 41 4d 45 20 61 6e 64 20 ookie.header.pair.from.NAME.and.
1eba0 44 41 54 41 2e 0a 0a 44 41 54 41 20 73 68 6f 75 6c 64 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 DATA...DATA.should.be.a.string.t
1ebc0 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f o.be.used.as.the.value.of.the.co
1ebe0 6f 6b 69 65 2e 0a 0a 4f 74 68 65 72 20 6b 65 79 20 76 61 6c 75 65 73 20 61 72 65 20 73 74 61 6e okie...Other.key.values.are.stan
1ec00 64 61 72 64 20 63 6f 6f 6b 69 65 20 61 74 74 72 69 62 75 74 65 73 2e 0a 0a 55 73 65 20 74 68 69 dard.cookie.attributes...Use.thi
1ec20 73 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 27 20 74 6f 20 6d 61 s.with.`elnode-http-start'.to.ma
1ec40 6b 65 20 63 6f 6f 6b 69 65 20 68 65 61 64 65 72 73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d 68 74 74 ke.cookie.headers:...(elnode-htt
1ec60 70 2d 73 74 61 72 74 0a 20 20 20 20 68 74 74 70 63 6f 6e 20 32 30 30 0a 20 20 20 20 27 28 63 6f p-start.....httpcon.200.....'(co
1ec80 6e 74 65 6e 74 2d 74 79 70 65 20 2e 20 5c 22 74 65 78 74 2f 68 74 6d 6c 5c 22 29 0a 20 20 20 20 ntent-type...\"text/html\").....
1eca0 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 6b 65 20 5c 22 70 69 5c 22 20 (elnode-http-cookie-make.\"pi\".
1ecc0 33 2e 31 34 35 37 39 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 3.14579).....(elnode-http-cookie
1ece0 2d 6d 61 6b 65 20 5c 22 65 5c 22 20 31 2e 35 39 0a 20 20 20 20 20 20 20 3a 65 78 70 69 72 79 20 -make.\"e\".1.59........:expiry.
1ed00 5c 22 4d 6f 6e 2c 20 46 65 62 20 32 37 20 32 30 31 32 20 32 32 3a 31 30 3a 32 31 20 47 4d 54 3b \"Mon,.Feb.27.2012.22:10:21.GMT;
1ed20 5c 22 29 0a 0a 54 68 69 73 20 77 69 6c 6c 20 73 65 6e 64 20 74 77 6f 20 53 65 74 2d 43 6f 6f 6b \")..This.will.send.two.Set-Cook
1ed40 69 65 20 68 65 61 64 65 72 73 20 73 65 74 74 69 6e 67 20 74 68 65 20 63 6f 6f 6b 69 65 73 20 27 ie.headers.setting.the.cookies.'
1ed60 70 69 27 0a 61 6e 64 20 27 65 27 2e 0a 0a 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 pi'.and.'e'...The.return.value.i
1ed80 73 20 61 20 63 6f 6e 73 20 70 61 69 72 2e 22 0a 20 20 28 63 6f 6e 73 0a 20 20 20 22 53 65 74 2d s.a.cons.pair."...(cons...."Set-
1eda0 43 6f 6f 6b 69 65 22 0a 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 3d 25 73 3b 25 73 22 0a 20 20 Cookie"....(format."%s=%s;%s"...
1edc0 20 20 20 20 20 20 20 20 20 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 .........name............data...
1ede0 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 6f 72 20 65 78 70 69 72 79 0a 20 20 20 .........(if.(not.(or.expiry....
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 29 29 0a 20 20 20 20 .....................path)).....
1ee20 20 20 20 20 20 20 20 20 20 20 20 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f ...........""................(lo
1ee40 6f 70 20 66 6f 72 20 70 20 69 6e 20 60 28 28 65 78 70 69 72 65 73 20 2e 20 2c 65 78 70 69 72 79 op.for.p.in.`((expires...,expiry
1ee60 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 )...............................
1ee80 20 20 28 70 61 74 68 20 2e 20 2c 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..(path...,path))...............
1eea0 20 20 20 20 69 66 20 28 63 64 72 20 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ....if.(cdr.p)..................
1eec0 20 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 .concat.....................(for
1eee0 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 25 73 3d 25 73 mat......................".%s=%s
1ef00 3b 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 70 69 74 61 6c ;"......................(capital
1ef20 69 7a 65 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 28 63 61 72 20 70 29 29 29 0a 20 20 20 20 20 ize.(symbol-name.(car.p)))......
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 70 29 29 29 29 29 29 29 0a 0a 28 ................(cdr.p)))))))..(
1ef60 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 2d 73 65 74 20 28 68 74 defun.elnode-http-header-set.(ht
1ef80 74 70 63 6f 6e 20 68 65 61 64 65 72 20 26 6f 70 74 69 6f 6e 61 6c 20 76 61 6c 75 65 29 0a 20 20 tpcon.header.&optional.value)...
1efa0 22 53 65 74 73 20 74 68 65 20 48 45 41 44 45 52 20 66 6f 72 20 6c 61 74 65 72 20 70 72 6f 63 65 "Sets.the.HEADER.for.later.proce
1efc0 73 73 69 6e 67 2e 0a 0a 48 45 41 44 45 52 20 6d 61 79 20 62 65 20 61 20 70 61 69 72 20 6f 66 20 ssing...HEADER.may.be.a.pair.of.
1efe0 60 6e 61 6d 65 27 20 61 6e 64 20 60 76 61 6c 75 65 27 20 6f 72 20 69 74 20 6d 61 79 20 6a 75 73 `name'.and.`value'.or.it.may.jus
1f000 74 20 62 65 20 61 0a 53 74 72 69 6e 67 2c 20 6f 72 20 61 20 53 79 6d 62 6f 6c 20 69 6e 20 77 68 t.be.a.String,.or.a.Symbol.in.wh
1f020 69 63 68 20 63 61 73 65 20 74 68 65 20 56 41 4c 55 45 20 6d 75 73 74 20 62 65 20 73 70 65 63 69 ich.case.the.VALUE.must.be.speci
1f040 66 69 65 64 2e 0a 0a 49 66 20 48 45 41 44 45 52 20 69 73 20 61 20 70 61 69 72 20 61 6e 64 20 56 fied...If.HEADER.is.a.pair.and.V
1f060 41 4c 55 45 20 69 73 20 61 6c 73 6f 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 56 41 4c 55 ALUE.is.also.specified.then.VALU
1f080 45 20 69 73 0a 69 67 6e 6f 72 65 64 2e 0a 0a 57 68 65 6e 20 74 68 65 20 48 54 54 50 20 72 65 73 E.is.ignored...When.the.HTTP.res
1f0a0 70 6f 6e 73 65 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 79 20 73 65 74 20 68 65 61 64 65 72 73 ponse.is.started.any.set.headers
1f0c0 20 77 69 6c 6c 20 62 65 20 6d 65 72 67 65 64 0a 77 69 74 68 20 61 6e 79 20 72 65 71 75 65 73 74 .will.be.merged.with.any.request
1f0e0 65 64 20 68 65 61 64 65 72 73 20 61 6e 64 20 73 65 6e 74 2e 0a 0a 49 66 20 74 68 65 20 72 65 73 ed.headers.and.sent...If.the.res
1f100 70 6f 6e 73 65 20 68 61 73 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 69 74 20 69 73 20 61 6e 20 ponse.has.been.started.it.is.an.
1f120 65 72 72 6f 72 20 74 6f 20 74 72 79 20 74 6f 20 73 65 74 20 61 0a 68 65 61 64 65 72 2e 20 20 54 error.to.try.to.set.a.header...T
1f140 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 6c 6f 67 20 74 68 65 20 65 72 72 6f 72 20 his.function.will.log.the.error.
1f160 61 6e 64 20 72 65 74 75 72 6e 20 60 6e 69 6c 27 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 68 and.return.`nil'...See.`elnode-h
1f180 74 74 70 2d 73 74 61 72 74 27 2e 22 0a 20 20 28 69 66 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 ttp-start'."...(if.(process-get.
1f1a0 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 65 64 29 0a 20 20 httpcon.:elnode-http-started)...
1f1c0 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 63 61 6e 27 74 20 73 65 74 20 68 65 61 ....(elnode-error."can't.set.hea
1f1e0 64 65 72 2c 20 48 54 54 50 20 61 6c 72 65 61 64 79 20 73 74 61 72 74 65 64 20 6f 6e 20 25 73 22 der,.HTTP.already.started.on.%s"
1f200 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 65 61 64 65 72 73 20 28 .httpcon).......(let.((headers.(
1f220 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 65 61 64 process-get.httpcon.:elnode-head
1f240 65 72 73 2d 74 6f 2d 73 65 74 29 29 29 0a 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 ers-to-set))).........(process-p
1f260 75 74 0a 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 3a 65 6c ut..........httpcon..........:el
1f280 6e 6f 64 65 2d 68 65 61 64 65 72 73 2d 74 6f 2d 73 65 74 0a 20 20 20 20 20 20 20 20 20 28 61 70 node-headers-to-set..........(ap
1f2a0 70 65 6e 64 20 68 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c pend.headers..................(l
1f2c0 69 73 74 20 28 69 66 20 28 63 6f 6e 73 70 20 68 65 61 64 65 72 29 0a 20 20 20 20 20 20 20 20 20 ist.(if.(consp.header)..........
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 ..................header........
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 68 65 61 64 65 72 ....................(cons.header
1f320 20 76 61 6c 75 65 29 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 68 .value))))))))..(defun*.elnode-h
1f340 74 74 70 2d 63 6f 6f 6b 69 65 2d 73 65 74 20 28 68 74 74 70 63 6f 6e 20 6e 61 6d 65 20 64 61 74 ttp-cookie-set.(httpcon.name.dat
1f360 61 20 26 6b 65 79 20 65 78 70 69 72 79 20 70 61 74 68 29 0a 20 20 22 4d 61 6b 65 20 61 20 63 6f a.&key.expiry.path)..."Make.a.co
1f380 6f 6b 69 65 20 61 6e 64 20 73 65 74 20 69 74 20 6f 6e 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a okie.and.set.it.on.the.HTTPCON..
1f3a0 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 6b 65 27 20 66 .See.`elnode-http-cookie-make'.f
1f3c0 6f 72 20 64 65 74 61 69 6c 73 20 61 62 6f 75 74 20 63 6f 6f 6b 69 65 20 6d 61 6b 69 6e 67 2e 22 or.details.about.cookie.making."
1f3e0 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f 6b 69 65 2d 63 6f 6e 73 20 28 65 6c 6e 6f 64 65 2d 68 74 ...(let.((cookie-cons.(elnode-ht
1f400 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 6b 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tp-cookie-make..................
1f420 20 20 20 20 20 6e 61 6d 65 20 64 61 74 61 20 3a 65 78 70 69 72 79 20 65 78 70 69 72 79 20 3a 70 .....name.data.:expiry.expiry.:p
1f440 61 74 68 20 70 61 74 68 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 ath.path))).....(elnode-http-hea
1f460 64 65 72 2d 73 65 74 20 68 74 74 70 63 6f 6e 20 28 63 61 72 20 63 6f 6f 6b 69 65 2d 63 6f 6e 73 der-set.httpcon.(car.cookie-cons
1f480 29 20 28 63 64 72 20 63 6f 6f 6b 69 65 2d 63 6f 6e 73 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 ).(cdr.cookie-cons))))..(defun.e
1f4a0 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 72 65 73 75 6c 74 2d 68 65 61 64 65 72 20 28 68 64 72 2d 61 lnode--http-result-header.(hdr-a
1f4c0 6c 69 73 74 29 0a 20 20 22 54 75 72 6e 20 74 68 65 20 48 44 52 2d 41 4c 49 53 54 20 69 6e 74 6f list)..."Turn.the.HDR-ALIST.into
1f4e0 20 61 20 72 65 73 75 6c 74 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 2e 0a 0a 54 68 65 20 48 44 .a.result.header.string...The.HD
1f500 52 2d 41 4c 49 53 54 20 69 73 20 61 6e 20 61 6c 69 73 74 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 72 R-ALIST.is.an.alist.of.symbol.or
1f520 20 73 74 72 69 6e 67 20 6b 65 79 73 20 77 68 69 63 68 20 61 72 65 0a 68 65 61 64 65 72 20 6e 61 .string.keys.which.are.header.na
1f540 6d 65 73 2c 20 61 67 61 69 6e 73 74 20 76 61 6c 75 65 73 20 77 68 69 63 68 20 73 68 6f 75 6c 64 mes,.against.values.which.should
1f560 20 62 65 20 73 74 72 69 6e 67 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 68 64 72 2d 70 61 69 72 73 .be.strings."...(let.((hdr-pairs
1f580 0a 20 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 ..........(append...........(lis
1f5a0 74 20 28 63 6f 6e 73 20 27 74 72 61 6e 73 66 65 72 2d 65 6e 63 6f 64 69 6e 67 20 22 63 68 75 6e t.(cons.'transfer-encoding."chun
1f5c0 6b 65 64 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 68 64 72 2d 61 6c 69 73 74 29 29 29 0a 20 20 ked"))...........hdr-alist)))...
1f5e0 20 20 28 6c 6f 6f 70 20 66 6f 72 20 70 20 69 6e 20 68 64 72 2d 70 61 69 72 73 0a 20 20 20 20 20 ..(loop.for.p.in.hdr-pairs......
1f600 20 20 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 ..concat..........(format.......
1f620 20 20 20 20 22 25 73 3a 20 25 73 5c 72 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 ...."%s:.%s\r\n"...........(let.
1f640 28 28 68 6e 61 6d 65 20 28 63 61 72 20 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 ((hname.(car.p))).............(c
1f660 61 70 69 74 61 6c 69 7a 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 apitalize..............(cond....
1f680 20 20 20 20 20 20 20 20 20 20 20 20 28 28 73 79 6d 62 6f 6c 70 20 68 6e 61 6d 65 29 0a 20 20 20 ............((symbolp.hname)....
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 68 6e 61 6d 65 29 .............(symbol-name.hname)
1f6c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 73 74 72 69 6e 67 70 20 68 6e 61 6d 65 )................((stringp.hname
1f6e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 ).................hname)........
1f700 20 20 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f ........(t.................(erro
1f720 72 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 68 65 61 64 65 72 20 74 79 70 65 22 29 29 29 29 29 r."unsupported.header.type")))))
1f740 0a 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 70 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 ...........(cdr.p)))))..(defun.e
1f760 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 28 68 74 74 70 63 6f 6e 20 73 74 61 74 75 73 lnode-http-start.(httpcon.status
1f780 20 26 72 65 73 74 20 68 65 61 64 65 72 29 0a 20 20 22 53 74 61 72 74 20 74 68 65 20 68 74 74 70 .&rest.header)..."Start.the.http
1f7a0 20 72 65 73 70 6f 6e 73 65 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 68 74 74 70 20 .response.on.the.specified.http.
1f7c0 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 48 54 54 50 43 4f 4e 20 69 73 20 74 68 65 20 48 54 54 50 connection...HTTPCON.is.the.HTTP
1f7e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 69 6e 67 20 68 61 6e 64 6c 65 64 2e 0a 0a 53 54 41 54 .connection.being.handled...STAT
1f800 55 53 20 69 73 20 74 68 65 20 48 54 54 50 20 73 74 61 74 75 73 2c 20 65 67 3a 20 32 30 30 20 6f US.is.the.HTTP.status,.eg:.200.o
1f820 72 20 34 30 34 3b 20 69 6e 74 65 67 65 72 73 20 6f 72 20 73 74 72 69 6e 67 73 0a 61 72 65 20 61 r.404;.integers.or.strings.are.a
1f840 63 63 65 70 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 0a 48 45 41 44 45 52 20 69 73 20 61 20 73 65 cceptable.types...HEADER.is.a.se
1f860 71 75 65 6e 63 65 20 6f 66 20 28 60 68 65 61 64 65 72 2d 6e 61 6d 65 27 20 2e 20 60 76 61 6c 75 quence.of.(`header-name'...`valu
1f880 65 27 29 20 70 61 69 72 73 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 20 28 65 6c 6e 6f e').pairs...For.example:...(elno
1f8a0 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 5c 22 32 30 30 5c 22 20 27 28 de-http-start.httpcon.\"200\".'(
1f8c0 5c 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 5c 22 20 2e 20 5c 22 74 65 78 74 2f 68 74 6d 6c 5c 22 \"Content-type\"...\"text/html\"
1f8e0 29 29 0a 0a 54 68 65 20 73 74 61 74 75 73 20 61 6e 64 20 74 68 65 20 68 65 61 64 65 72 20 61 72 ))..The.status.and.the.header.ar
1f900 65 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 61 73 20 e.also.stored.on.the.process.as.
1f920 6d 65 74 61 0a 64 61 74 61 2e 20 20 54 68 69 73 20 69 73 20 64 6f 6e 65 20 6d 61 69 6e 6c 79 20 meta.data...This.is.done.mainly.
1f940 66 6f 72 20 74 65 73 74 69 6e 67 20 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 2e 22 0a 20 20 28 for.testing.infrastructure."...(
1f960 69 66 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d if.(process-get.httpcon.:elnode-
1f980 68 74 74 70 2d 73 74 61 72 74 65 64 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f http-started).......(elnode-erro
1f9a0 72 20 22 48 74 74 70 20 61 6c 72 65 61 64 79 20 73 74 61 72 74 65 64 20 6f 6e 20 25 73 22 20 68 r."Http.already.started.on.%s".h
1f9c0 74 74 70 63 6f 6e 29 0a 20 20 20 20 3b 3b 20 53 65 6e 64 20 74 68 65 20 68 65 61 64 65 72 0a 20 ttpcon).....;;.Send.the.header..
1f9e0 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 73 74 61 72 74 69 6e 67 20 48 54 54 50 20 ...(elnode-error."starting.HTTP.
1fa00 72 65 73 70 6f 6e 73 65 20 6f 6e 20 25 73 22 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 6c 65 response.on.%s".httpcon).....(le
1fa20 74 20 28 28 68 65 61 64 65 72 2d 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70 t.((header-alist............(app
1fa40 65 6e 64 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 end.(process-get.httpcon.:elnode
1fa60 2d 68 65 61 64 65 72 73 2d 74 6f 2d 73 65 74 29 20 68 65 61 64 65 72 29 29 0a 20 20 20 20 20 20 -headers-to-set).header)).......
1fa80 20 20 20 20 28 73 74 61 74 75 73 2d 63 6f 64 65 20 28 69 66 20 28 73 74 72 69 6e 67 70 20 73 74 ....(status-code.(if.(stringp.st
1faa0 61 74 75 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 atus)...........................
1fac0 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 72 20 73 74 61 74 75 73 29 0a 20 20 20 20 20 .(string-to-number.status)......
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 75 73 29 29 29 0a ......................status))).
1fb00 20 20 20 20 20 20 3b 3b 20 53 74 6f 72 65 20 74 68 65 20 6d 65 74 61 20 64 61 74 61 20 61 62 6f ......;;.Store.the.meta.data.abo
1fb20 75 74 20 74 68 65 20 72 65 73 70 6f 6e 73 65 2e 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d ut.the.response........(process-
1fb40 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 put.httpcon.:elnode-httpresponse
1fb60 2d 73 74 61 74 75 73 20 73 74 61 74 75 73 2d 63 6f 64 65 29 0a 20 20 20 20 20 20 28 70 72 6f 63 -status.status-code).......(proc
1fb80 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 72 65 73 70 ess-put.httpcon.:elnode-httpresp
1fba0 6f 6e 73 65 2d 68 65 61 64 65 72 20 68 65 61 64 65 72 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 20 onse-header.header-alist).......
1fbc0 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 68 74 74 70 (process-send-string........http
1fbe0 63 6f 6e 0a 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 22 48 54 54 50 con........(format........."HTTP
1fc00 2f 31 2e 31 20 25 64 20 25 73 5c 72 5c 6e 25 73 5c 72 5c 6e 22 0a 20 20 20 20 20 20 20 20 73 74 /1.1.%d.%s\r\n%s\r\n".........st
1fc20 61 74 75 73 2d 63 6f 64 65 0a 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20 73 74 61 74 75 73 20 atus-code.........;;.The.status.
1fc40 74 65 78 74 0a 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 73 74 61 74 text.........(assoc-default.stat
1fc60 75 73 2d 63 6f 64 65 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 64 65 73 2d 61 6c 69 73 74 29 us-code.elnode-http-codes-alist)
1fc80 0a 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 28 .........;;.The.header.........(
1fca0 6f 72 0a 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 72 65 73 75 6c 74 or..........(elnode--http-result
1fcc0 2d 68 65 61 64 65 72 20 68 65 61 64 65 72 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 22 -header.header-alist).........."
1fce0 5c 72 5c 6e 22 29 29 29 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 \r\n"))).......(process-put.http
1fd00 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 65 64 20 27 74 29 29 29 29 0a con.:elnode-http-started.'t)))).
1fd20 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 28 68 74 74 70 63 6f .(defun.elnode--http-end.(httpco
1fd40 6e 29 0a 20 20 22 57 65 20 6e 65 65 64 20 61 20 73 70 65 63 69 61 6c 20 65 6e 64 20 66 75 6e 63 n)..."We.need.a.special.end.func
1fd60 74 69 6f 6e 20 74 6f 20 64 6f 20 74 68 65 20 65 6d 61 63 73 20 63 6c 65 61 72 20 75 70 2e 0a 0a tion.to.do.the.emacs.clear.up...
1fd80 54 68 69 73 20 6d 61 6b 65 73 20 61 63 63 65 73 73 20 6c 6f 67 20 66 69 6c 65 20 63 61 6c 6c 73 This.makes.access.log.file.calls
1fda0 20 69 66 20 74 68 65 20 73 6f 63 6b 65 74 20 68 61 73 20 61 20 70 72 6f 70 65 72 74 79 0a 60 3a .if.the.socket.has.a.property.`:
1fdc0 65 6c 6e 6f 64 65 2d 61 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 27 2e 20 20 54 68 65 20 70 72 elnode-access-log-name'...The.pr
1fde0 6f 70 65 72 74 79 20 69 73 20 74 61 6b 65 6e 20 74 6f 20 62 65 20 74 68 65 20 6e 61 6d 65 0a 6f operty.is.taken.to.be.the.name.o
1fe00 66 20 61 20 62 75 66 66 65 72 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 65 6c f.a.buffer."...(elnode-error."el
1fe20 6e 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 65 6e 64 69 6e 67 20 73 6f 63 6b 65 74 20 25 73 22 node--http-end.ending.socket.%s"
1fe40 20 68 74 74 70 63 6f 6e 29 0a 20 20 28 6c 65 74 20 28 28 61 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 .httpcon)...(let.((access-log-na
1fe60 6d 65 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d me.(process-get.httpcon.:elnode-
1fe80 61 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 77 68 65 6e 20 61 63 63 access-log-name))).....(when.acc
1fea0 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 0a 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 ess-log-name.......(condition-ca
1fec0 73 65 20 65 72 72 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 se.err...........(elnode-log-acc
1fee0 65 73 73 20 61 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 ess.access-log-name.httpcon)....
1ff00 20 20 20 20 20 28 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 0a 20 20 .....(error..........(message...
1ff20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f ........(concat............"elno
1ff40 64 65 2d 2d 68 74 74 70 2d 65 6e 64 3a 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 de--http-end:.an.error.occurred.
1ff60 22 0a 20 20 20 20 20 20 20 20 20 20 20 22 70 72 6f 63 65 73 73 69 6e 67 20 74 68 65 20 61 63 63 "............"processing.the.acc
1ff80 65 73 73 20 6c 6f 67 22 29 29 29 29 29 29 0a 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 ess.log"))))))...(condition-case
1ffa0 20 6e 69 6c 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 68 74 74 .nil.......(process-send-eof.htt
1ffc0 70 63 6f 6e 29 0a 20 20 20 20 28 65 72 72 6f 72 20 28 6d 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 pcon).....(error.(message."elnod
1ffe0 65 2d 2d 68 74 74 70 2d 65 6e 64 20 63 6f 75 6c 64 20 6e 6f 74 20 73 65 6e 64 20 45 4f 46 22 29 e--http-end.could.not.send.EOF")
20000 29 29 0a 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 ))...(delete-process.httpcon)...
20020 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 (kill-buffer.(process-buffer.htt
20040 70 63 6f 6e 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 pcon)))..(defun.elnode-http-retu
20060 72 6e 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 64 61 74 61 29 0a 20 20 22 45 rn.(httpcon.&optional.data)..."E
20080 6e 64 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 6f 6e 20 48 54 54 50 43 4f 4e 20 6f 70 74 69 6f nd.the.response.on.HTTPCON.optio
200a0 6e 61 6c 6c 79 20 73 65 6e 64 69 6e 67 20 44 41 54 41 20 66 69 72 73 74 2e 0a 0a 48 54 54 50 43 nally.sending.DATA.first...HTTPC
200c0 4f 4e 20 69 73 20 74 68 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20 ON.is.the.http.connection.which.
200e0 6d 75 73 74 20 68 61 76 65 20 68 61 64 20 74 68 65 20 68 65 61 64 65 72 73 0a 73 65 6e 74 20 77 must.have.had.the.headers.sent.w
20100 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 27 0a 0a 44 41 54 41 20 6d 75 ith.`elnode-http-start'..DATA.mu
20120 73 74 20 62 65 20 61 20 73 74 72 69 6e 67 2c 20 69 74 27 73 20 6a 75 73 74 20 70 61 73 73 65 64 st.be.a.string,.it's.just.passed
20140 20 74 6f 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 27 2e 22 0a 20 20 28 69 66 20 28 .to.`elnode-http-send'."...(if.(
20160 6e 6f 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 not.(process-get.httpcon.:elnode
20180 2d 68 74 74 70 2d 73 74 61 72 74 65 64 29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 -http-started)).......(elnode-er
201a0 72 6f 72 20 22 48 74 74 70 20 6e 6f 74 20 73 74 61 72 74 65 64 22 29 0a 20 20 20 20 28 70 72 6f ror."Http.not.started").....(pro
201c0 67 6e 0a 20 20 20 20 20 20 28 69 66 20 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e gn.......(if.data...........(eln
201e0 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 64 61 74 ode-http-send-string.httpcon.dat
20200 61 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 6f 66 2d 66 75 6e 63 20 28 70 72 6f 63 65 a)).......(let.((eof-func.(proce
20220 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f ss-get.httpcon.:send-eof-functio
20240 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 69 66 20 28 66 75 6e 63 74 69 6f 6e 70 20 65 6f 66 2d n))).........(if.(functionp.eof-
20260 66 75 6e 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 65 6f 66 2d 66 func).............(funcall.eof-f
20280 75 6e 63 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 4e 65 65 64 unc.httpcon).............;;.Need
202a0 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 63 68 75 6e 6b 65 64 20 65 6e 63 6f 64 69 6e 67 20 68 .to.close.the.chunked.encoding.h
202c0 65 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e ere.............(elnode-http-sen
202e0 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 22 22 29 29 29 29 29 29 0a 0a 28 64 65 66 75 d-string.httpcon.""))))))..(defu
20300 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 68 74 6d 6c 20 28 68 74 74 70 63 6f 6e 20 68 74 6d 6c n.elnode-send-html.(httpcon.html
20320 29 0a 20 20 22 53 69 6d 70 6c 65 20 73 65 6e 64 20 66 6f 72 20 48 54 4d 4c 2e 0a 0a 55 73 65 20 )..."Simple.send.for.HTML...Use.
20340 74 68 69 73 20 66 6f 72 20 73 69 6d 70 6c 65 20 73 65 6e 64 69 6e 67 20 6f 66 20 61 20 66 75 6c this.for.simple.sending.of.a.ful
20360 6c 20 48 54 4d 4c 20 72 65 73 70 6f 6e 73 65 3a 0a 0a 20 28 64 65 66 75 6e 20 6d 79 2d 68 61 6e l.HTML.response:...(defun.my-han
20380 64 6c 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 68 dler.(httpcon)....(elnode-send-h
203a0 74 6d 6c 20 68 74 74 70 63 6f 6e 20 5c 22 3c 68 74 6d 6c 3e 3c 68 31 3e 48 65 6c 6c 6f 21 3c 2f tml.httpcon.\"<html><h1>Hello!</
203c0 68 31 3e 3c 2f 68 74 6d 6c 3e 5c 22 29 29 0a 0a 54 68 65 20 64 61 74 61 20 69 73 20 73 65 6e 74 h1></html>\"))..The.data.is.sent
203e0 20 77 69 74 68 20 63 6f 6e 74 65 6e 74 20 74 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 2e 22 0a .with.content.type:.text/html.".
20400 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 ..(elnode-http-start.httpcon.200
20420 20 27 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 22 29 .'("Content-Type"..."text/html")
20440 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70 63 6f 6e 20 )...(elnode-http-return.httpcon.
20460 68 74 6d 6c 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6a 73 6f 6e 2d 66 69 78 20 28 html))..(defun.elnode-json-fix.(
20480 64 61 74 61 29 0a 20 20 22 46 69 78 20 4a 53 4f 4e 20 22 0a 20 20 28 6c 65 74 20 28 28 6a 73 6f data)..."Fix.JSON."...(let.((jso
204a0 6e 2d 74 6f 2d 73 65 6e 64 0a 20 20 20 20 20 20 20 20 20 28 6e 6f 66 6c 65 74 0a 20 20 20 20 20 n-to-send..........(noflet......
204c0 20 20 20 20 20 20 20 20 28 28 6a 73 6f 6e 2d 61 6c 69 73 74 2d 70 20 28 6c 69 73 74 29 0a 20 20 ........((json-alist-p.(list)...
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 6f 70 65 72 20 63 68 65 63 6b 20 66 6f 72 20 .............."Proper.check.for.
20500 41 4c 49 53 54 2e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 ALIST.".................(while.(
20520 63 6f 6e 73 70 20 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 consp.list)...................(s
20540 65 74 71 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 etq.list........................
20560 20 28 69 66 20 28 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(if.(and.......................
20580 20 20 20 20 20 20 20 28 63 6f 6e 73 70 20 28 63 61 72 20 6c 69 73 74 29 29 0a 20 20 20 20 20 20 .......(consp.(car.list)).......
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 63 6f 6e .......................(not.(con
205c0 73 70 20 28 63 61 61 72 20 6c 69 73 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 sp.(caar.list)))................
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 76 65 63 74 6f 72 70 20 28 63 61 61 ..............(not.(vectorp.(caa
20600 72 20 6c 69 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r.list))))......................
20620 20 20 20 20 20 20 20 28 63 64 72 20 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .......(cdr.list)...............
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 6e 6f 74 2d 61 6c 69 73 74 29 29 29 0a 20 20 20 20 ..............'not-alist))).....
20660 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 75 6c 6c 20 6c 69 73 74 29 29 29 0a 20 20 20 20 20 20 ............(null.list))).......
20680 20 20 20 20 20 28 6a 73 6f 6e 2d 65 6e 63 6f 64 65 20 64 61 74 61 29 29 29 29 20 6a 73 6f 6e 2d .....(json-encode.data)))).json-
206a0 74 6f 2d 73 65 6e 64 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 to-send))..(defun.elnode-send-re
206c0 70 6f 72 74 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 53 65 6e 64 20 62 61 63 6b 20 61 6e 20 48 port.(httpcon)..."Send.back.an.H
206e0 54 4d 4c 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a 54 68 69 73 TML.report.on.the.request...This
20700 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 22 .is.often.useful.for.debugging."
20720 0a 20 20 28 6e 6f 66 6c 65 74 20 28 28 61 6c 69 73 74 2d 3e 68 74 6d 6c 20 28 61 6c 69 73 74 29 ...(noflet.((alist->html.(alist)
20740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 ..............(mapconcat........
20760 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 64 72 2d 70 61 69 72 29 0a 20 20 20 20 20 20 .......(lambda.(hdr-pair).......
20780 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........(format...............
207a0 20 20 20 22 25 73 20 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 ..."%s.%s"..................(car
207c0 20 68 64 72 2d 70 61 69 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 .hdr-pair)..................(let
207e0 20 28 28 76 20 28 63 64 72 20 68 64 72 2d 70 61 69 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 .((v.(cdr.hdr-pair)))...........
20800 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 76 20 28 6e 6f 74 20 28 65 71 75 61 6c 20 .........(if.(and.v.(not.(equal.
20820 76 20 22 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 v."")))........................(
20840 66 6f 72 6d 61 74 20 22 25 53 22 20 76 29 20 22 22 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 format."%S".v).""))))...........
20860 20 20 20 20 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 6e 22 29 29 29 0a ....alist..............."\n"))).
20880 20 20 20 20 28 6c 65 74 2a 20 28 28 6d 65 74 68 6f 64 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d ....(let*.((method.(elnode-http-
208a0 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 61 72 method.httpcon))............(par
208c0 61 6d 74 65 72 73 20 28 61 6c 69 73 74 2d 3e 68 74 6d 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 amters.(alist->html.............
208e0 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 ...........(or.(elnode-http-para
20900 6d 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ms.httpcon).....................
20920 20 20 20 20 20 20 20 27 28 28 22 4e 6f 6e 65 22 2e 20 22 22 29 29 29 29 29 0a 20 20 20 20 20 20 .......'(("None"..""))))).......
20940 20 20 20 20 20 28 68 65 61 64 65 72 73 20 28 61 6c 69 73 74 2d 3e 68 74 6d 6c 20 28 65 6c 6e 6f .....(headers.(alist->html.(elno
20960 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 73 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 de-http-headers.httpcon)))......
20980 20 20 20 20 20 20 28 70 61 67 65 20 28 73 2d 6c 65 78 2d 66 6f 72 6d 61 74 20 22 3c 68 74 6d 6c ......(page.(s-lex-format."<html
209a0 3e 0a 3c 73 74 79 6c 65 3e 0a 62 6f 64 79 20 7b 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 73 61 >.<style>.body.{.font-family:.sa
209c0 6e 73 2d 73 65 72 69 66 3b 7d 0a 74 64 20 7b 0a 76 65 72 74 69 63 61 6c 2d 61 6c 69 67 6e 3a 20 ns-serif;}.td.{.vertical-align:.
209e0 74 6f 70 3b 0a 7d 0a 3c 2f 73 74 79 6c 65 3e 0a 3c 62 6f 64 79 3e 0a 3c 74 61 62 6c 65 3e 0a 3c top;.}.</style>.<body>.<table>.<
20a00 74 72 3e 3c 74 64 3e 6d 65 74 68 6f 64 3a 3c 2f 74 64 3e 3c 74 64 3e 24 7b 6d 65 74 68 6f 64 7d tr><td>method:</td><td>${method}
20a20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 70 61 72 61 6d 65 74 65 72 73 3a 3c 2f </td></tr>.<tr><td>parameters:</
20a40 74 64 3e 3c 74 64 3e 3c 70 72 65 3e 24 7b 70 61 72 61 6d 74 65 72 73 7d 3c 2f 70 72 65 3e 3c 2f td><td><pre>${paramters}</pre></
20a60 74 64 3e 3c 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 68 65 61 64 65 72 73 3a 3c 2f 74 64 3e 3c 74 64 td><tr>.<tr><td>headers:</td><td
20a80 3e 3c 70 72 65 3e 24 7b 68 65 61 64 65 72 73 7d 3c 2f 70 72 65 3e 3c 2f 74 64 3e 3c 74 72 3e 0a ><pre>${headers}</pre></td><tr>.
20aa0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 22 29 29 29 0a 20 20 20 </table>.</body>.</html>")))....
20ac0 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 68 74 6d 6c 20 68 74 74 70 63 6f 6e 20 70 61 67 ...(elnode-send-html.httpcon.pag
20ae0 65 29 29 29 29 0a 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 6a 73 6f 6e e))))...(defun*.elnode-send-json
20b00 20 28 68 74 74 70 63 6f 6e 20 64 61 74 61 20 26 6b 65 79 20 63 6f 6e 74 65 6e 74 2d 74 79 70 65 .(httpcon.data.&key.content-type
20b20 20 6a 73 6f 6e 70 29 0a 20 20 22 43 6f 6e 76 65 72 74 20 44 41 54 41 20 74 6f 20 4a 53 4f 4e 20 .jsonp)..."Convert.DATA.to.JSON.
20b40 61 6e 64 20 73 65 6e 64 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 20 77 69 74 68 20 61 20 32 and.send.to.the.HTTPCON.with.a.2
20b60 30 30 20 5c 22 4f 6b 5c 22 2e 0a 0a 44 41 54 41 20 69 73 20 73 6f 6d 65 20 6c 69 73 70 20 6f 62 00.\"Ok\"...DATA.is.some.lisp.ob
20b80 6a 65 63 74 2e 0a 0a 49 66 20 43 4f 4e 54 45 4e 54 2d 54 59 50 45 20 69 73 20 73 70 65 63 69 66 ject...If.CONTENT-TYPE.is.specif
20ba0 69 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 48 54 54 50 20 ied.then.it.is.used.as.the.HTTP.
20bc0 43 6f 6e 74 65 6e 74 0a 54 79 70 65 20 6f 66 20 74 68 65 20 72 65 73 70 6f 6e 73 65 2e 0a 0a 49 Content.Type.of.the.response...I
20be0 66 20 4a 53 4f 4e 50 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 f.JSONP.is.specified.the.content
20c00 20 69 73 20 73 65 6e 74 20 61 73 20 61 20 4a 53 4f 4e 2d 50 20 72 65 73 70 6f 6e 73 65 2e 0a 49 .is.sent.as.a.JSON-P.response..I
20c20 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 73 20 61 20 6e 61 6d 65 20 f.the.variable.specifies.a.name.
20c40 66 6f 72 20 74 68 65 20 4a 53 4f 4e 2d 50 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e for.the.JSON-P.callback.function
20c60 0a 74 68 61 74 20 74 68 61 74 20 69 73 20 75 73 65 64 2e 20 20 41 6c 74 65 72 6e 61 74 65 6c 79 .that.that.is.used...Alternately
20c80 2c 20 69 66 20 74 68 65 20 4a 53 4f 4e 50 20 70 61 72 61 6d 65 74 65 72 20 64 6f 65 73 20 6e 6f ,.if.the.JSONP.parameter.does.no
20ca0 74 0a 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65 2c 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 t.specify.a.name,.the.parameter.
20cc0 60 63 61 6c 6c 62 61 63 6b 27 20 69 73 20 6c 6f 6f 6b 65 64 20 75 70 20 6f 6e 20 74 68 65 0a 48 `callback'.is.looked.up.on.the.H
20ce0 54 54 50 43 4f 4e 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 75 73 65 TTPCON.and.the.value.of.that.use
20d00 64 2e 20 20 49 66 20 6e 65 69 74 68 65 72 20 74 68 65 20 4a 53 4f 4e 50 0a 70 61 72 61 6d 65 74 d...If.neither.the.JSONP.paramet
20d20 65 72 2c 20 6e 6f 74 20 74 68 65 20 48 54 54 50 20 70 61 72 61 6d 65 74 65 72 20 60 63 61 6c 6c er,.not.the.HTTP.parameter.`call
20d40 62 61 63 6b 27 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 0a 6e 61 6d 65 20 5c back'.is.present.that.the.name.\
20d60 22 63 61 6c 6c 62 61 63 6b 5c 22 20 69 73 20 75 73 65 64 2e 22 0a 20 20 28 6c 65 74 20 28 28 6a "callback\".is.used."...(let.((j
20d80 73 6f 6e 2d 74 6f 2d 73 65 6e 64 20 28 65 6c 6e 6f 64 65 2d 6a 73 6f 6e 2d 66 69 78 20 64 61 74 son-to-send.(elnode-json-fix.dat
20da0 61 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 0a 20 20 20 20 a))).....(elnode-http-start.....
20dc0 20 68 74 74 70 63 6f 6e 20 32 30 30 0a 20 20 20 20 20 60 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 .httpcon.200......`("Content-typ
20de0 65 22 20 2e 20 2c 28 6f 72 20 63 6f 6e 74 65 6e 74 2d 74 79 70 65 20 22 61 70 70 6c 69 63 61 74 e"...,(or.content-type."applicat
20e00 69 6f 6e 2f 6a 73 6f 6e 22 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 ion/json"))).....(elnode-http-re
20e20 74 75 72 6e 0a 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 28 69 66 20 6a 73 6f 6e 70 turn......httpcon......(if.jsonp
20e40 0a 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 28 ..........(format..........."%s(
20e60 25 73 29 3b 22 0a 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 77 68 65 6e 20 28 73 74 72 69 6e %s);"...........(or.(when.(strin
20e80 67 70 20 6a 73 6f 6e 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 73 6f 6e 70 29 gp.jsonp).................jsonp)
20ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 ...............(elnode-http-para
20ec0 6d 20 68 74 74 70 63 6f 6e 20 22 63 61 6c 6c 62 61 63 6b 22 29 0a 20 20 20 20 20 20 20 20 20 20 m.httpcon."callback")...........
20ee0 20 20 20 20 22 63 61 6c 6c 62 61 63 6b 22 29 0a 20 20 20 20 20 20 20 20 20 20 6a 73 6f 6e 2d 74 ...."callback")...........json-t
20f00 6f 2d 73 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 6a 73 6f 6e 2d 74 6f 2d 73 65 6e 64 29 29 29 o-send)..........json-to-send)))
20f20 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 73 20 28 68 74 )..(defun.elnode-send-status.(ht
20f40 74 70 63 6f 6e 20 73 74 61 74 75 73 20 26 6f 70 74 69 6f 6e 61 6c 20 6d 73 67 29 0a 20 20 22 41 tpcon.status.&optional.msg)..."A
20f60 20 67 65 6e 65 72 69 63 20 68 61 6e 64 6c 65 72 20 74 6f 20 73 65 6e 64 20 53 54 41 54 55 53 20 .generic.handler.to.send.STATUS.
20f80 74 6f 20 48 54 54 50 43 4f 4e 2e 0a 0a 53 65 6e 64 73 20 61 6e 20 48 54 54 50 20 72 65 73 70 6f to.HTTPCON...Sends.an.HTTP.respo
20fa0 6e 73 65 20 77 69 74 68 20 53 54 41 54 55 53 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 20 nse.with.STATUS.to.the.HTTPCON..
20fc0 20 41 6e 20 48 54 4d 4c 20 62 6f 64 79 0a 69 73 20 73 65 6e 74 20 62 79 20 6c 6f 6f 6b 69 6e 67 .An.HTML.body.is.sent.by.looking
20fe0 20 75 70 20 74 68 65 20 53 54 41 54 55 53 20 69 6e 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 64 65 .up.the.STATUS.in.the.`elnode-de
21000 66 61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 27 0a 74 61 62 6c 65 2e 0a 0a 4f 70 74 69 6f 6e 61 6c fault-response'.table...Optional
21020 6c 79 20 69 6e 63 6c 75 64 65 20 4d 53 47 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d ly.include.MSG."...(elnode-http-
21040 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 73 74 61 74 75 73 20 27 28 22 43 6f 6e 74 65 6e 74 2d start.httpcon.status.'("Content-
21060 74 79 70 65 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 22 29 29 0a 20 20 28 65 6c 6e 6f 64 65 2d type"..."text/html"))...(elnode-
21080 68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 http-return.httpcon.............
210a0 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e ..........(elnode--format-respon
210c0 73 65 20 73 74 61 74 75 73 20 6d 73 67 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d se.status.msg)))..(defun.elnode-
210e0 73 65 6e 64 2d 34 30 34 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 6d 73 67 29 send-404.(httpcon.&optional.msg)
21100 0a 20 20 22 53 65 6e 64 73 20 61 20 4e 6f 74 20 46 6f 75 6e 64 20 65 72 72 6f 72 20 74 6f 20 74 ..."Sends.a.Not.Found.error.to.t
21120 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 20 69 6e 63 6c 75 64 65 20 he.HTTPCON...Optionally.include.
21140 4d 53 47 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 73 20 68 74 74 70 MSG."...(elnode-send-status.http
21160 63 6f 6e 20 34 30 34 20 6d 73 67 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e con.404.msg))..(defun.elnode-sen
21180 64 2d 34 30 30 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 6d 73 67 29 0a 20 20 d-400.(httpcon.&optional.msg)...
211a0 22 53 65 6e 64 73 20 61 20 42 61 64 20 52 65 71 75 65 73 74 20 65 72 72 6f 72 20 74 6f 20 74 68 "Sends.a.Bad.Request.error.to.th
211c0 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 20 69 6e 63 6c 75 64 65 20 4d e.HTTPCON...Optionally.include.M
211e0 53 47 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 73 20 68 74 74 70 63 SG."...(elnode-send-status.httpc
21200 6f 6e 20 34 30 30 20 6d 73 67 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 on.400.msg))..(defun.elnode-send
21220 2d 35 30 30 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 6d 73 67 29 0a 20 20 22 -500.(httpcon.&optional.msg)..."
21240 53 65 6e 64 73 20 61 20 53 65 72 76 65 72 20 45 72 72 6f 72 20 74 6f 20 74 68 65 20 48 54 54 50 Sends.a.Server.Error.to.the.HTTP
21260 43 4f 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 20 69 6e 63 6c 75 64 65 20 4d 53 47 2e 22 0a 20 CON...Optionally.include.MSG."..
21280 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 20 35 30 30 .(elnode-send-status.httpcon.500
212a0 20 6d 73 67 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72 .msg))..(defun.elnode-send-redir
212c0 65 63 74 20 28 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 ect.(httpcon.location.&optional.
212e0 74 79 70 65 29 0a 20 20 22 53 65 6e 64 73 20 61 20 72 65 64 69 72 65 63 74 20 74 6f 20 4c 4f 43 type)..."Sends.a.redirect.to.LOC
21300 41 54 49 4f 4e 2e 0a 0a 49 66 20 54 59 50 45 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 75 73 65 20 ATION...If.TYPE.is.non-nil,.use.
21320 69 74 20 61 73 20 61 20 73 74 61 74 75 73 20 63 6f 64 65 2e 20 20 44 65 66 61 75 6c 74 73 20 74 it.as.a.status.code...Defaults.t
21340 6f 20 33 30 32 20 2d 0a 70 65 72 6d 61 6e 65 6e 74 20 72 65 64 69 72 65 63 74 2e 22 0a 20 20 28 o.302.-.permanent.redirect."...(
21360 6c 65 74 20 28 28 73 74 61 74 75 73 2d 63 6f 64 65 20 28 6f 72 20 74 79 70 65 20 33 30 32 29 29 let.((status-code.(or.type.302))
21380 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e ).....(elnode-http-start.httpcon
213a0 20 73 74 61 74 75 73 2d 63 6f 64 65 20 60 28 22 4c 6f 63 61 74 69 6f 6e 22 20 2e 20 2c 6c 6f 63 .status-code.`("Location"...,loc
213c0 61 74 69 6f 6e 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 0a ation)).....(elnode-http-return.
213e0 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 3c 68 31 3e 72 .....httpcon......(format."<h1>r
21400 65 64 69 72 65 63 74 69 6e 67 20 79 6f 75 20 74 6f 20 25 73 3c 2f 68 31 3e 5c 72 5c 6e 22 20 6c edirecting.you.to.%s</h1>\r\n".l
21420 6f 63 61 74 69 6f 6e 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6e 6f 72 6d 61 ocation))))..(defun.elnode-norma
21440 6c 69 7a 65 2d 70 61 74 68 20 28 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 22 41 lize-path.(httpcon.handler)..."A
21460 20 64 65 63 6f 72 61 74 6f 72 20 66 6f 72 20 48 41 4e 44 4c 45 52 20 74 68 61 74 20 6e 6f 72 6d .decorator.for.HANDLER.that.norm
21480 61 6c 69 7a 65 73 20 70 61 74 68 73 20 74 6f 20 68 61 76 65 20 61 20 74 72 61 69 6c 69 6e 67 20 alizes.paths.to.have.a.trailing.
214a0 73 6c 61 73 68 2e 0a 0a 54 68 69 73 20 63 68 65 63 6b 73 20 74 68 65 20 48 54 54 50 43 4f 4e 20 slash...This.checks.the.HTTPCON.
214c0 70 61 74 68 20 66 6f 72 20 61 20 74 72 61 69 6c 69 6e 67 20 73 6c 61 73 68 20 61 6e 64 20 73 65 path.for.a.trailing.slash.and.se
214e0 6e 64 73 20 61 20 33 30 32 0a 74 6f 20 74 68 65 20 73 6c 61 73 68 20 74 72 61 69 6c 65 64 20 75 nds.a.302.to.the.slash.trailed.u
21500 72 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 6e 65 2e 0a 0a 4f 74 68 65 72 77 69 73 65 20 rl.if.there.is.none...Otherwise.
21520 69 74 20 63 61 6c 6c 73 20 48 41 4e 44 4c 45 52 2e 22 0a 20 20 28 6c 65 74 20 28 28 65 6e 64 73 it.calls.HANDLER."...(let.((ends
21540 2d 69 6e 2d 73 6c 61 73 68 2d 6f 72 2d 65 78 74 65 6e 73 69 6f 6e 2d 72 65 67 65 78 20 22 2e 2a -in-slash-or-extension-regex.".*
21560 5c 5c 28 2f 5c 5c 7c 2e 2a 5c 5c 2e 5b 5e 2f 5d 2a 5c 5c 29 24 22 29 0a 20 20 20 20 20 20 20 20 \\(/\\|.*\\.[^/]*\\)$").........
21580 28 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 (path.(elnode-http-pathinfo.http
215a0 63 6f 6e 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 73 61 76 65 2d 6d 61 74 63 68 2d con))).....(if.(not.(save-match-
215c0 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 data................(string-matc
215e0 68 20 65 6e 64 73 2d 69 6e 2d 73 6c 61 73 68 2d 6f 72 2d 65 78 74 65 6e 73 69 6f 6e 2d 72 65 67 h.ends-in-slash-or-extension-reg
21600 65 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ex..............................
21620 70 61 74 68 29 29 29 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 path))).........(elnode-send-red
21640 69 72 65 63 74 0a 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 irect..........httpcon..........
21660 28 66 6f 72 6d 61 74 20 22 25 73 2f 22 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 28 66 75 6e 63 (format."%s/".path)).......(func
21680 61 6c 6c 20 68 61 6e 64 6c 65 72 20 68 74 74 70 63 6f 6e 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 all.handler.httpcon))))..(defun.
216a0 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 2d 6d 61 74 63 68 2d 66 75 6e 63 20 28 elnode--mapper-find-match-func.(
216c0 6d 61 74 63 68 2d 70 61 74 68 20 6d 61 74 63 68 2d 70 61 69 72 29 0a 20 20 22 46 75 6e 74 69 6f match-path.match-pair)..."Funtio
216e0 6e 20 74 6f 20 74 65 73 74 20 4d 41 54 43 48 2d 50 41 54 48 20 61 67 61 69 6e 73 74 20 4d 41 54 n.to.test.MATCH-PATH.against.MAT
21700 43 48 2d 50 41 49 52 2e 22 0a 20 20 28 6c 65 74 20 28 28 6d 20 28 73 74 72 69 6e 67 2d 6d 61 74 CH-PAIR."...(let.((m.(string-mat
21720 63 68 20 28 63 61 72 20 6d 61 74 63 68 2d 70 61 69 72 29 20 6d 61 74 63 68 2d 70 61 74 68 29 29 ch.(car.match-pair).match-path))
21740 29 0a 20 20 20 20 28 61 6e 64 20 6d 0a 20 20 20 20 20 20 20 20 20 28 6e 75 6d 62 65 72 70 20 6d ).....(and.m..........(numberp.m
21760 29 0a 20 20 20 20 20 20 20 20 20 28 3e 3d 20 6d 20 30 29 0a 20 20 20 20 20 20 20 20 20 6d 61 74 )..........(>=.m.0)..........mat
21780 63 68 2d 70 61 69 72 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 ch-pair)))..(defun.elnode--mappe
217a0 72 2d 66 69 6e 64 2d 6d 61 70 70 69 6e 67 20 28 6d 61 74 63 68 2d 70 61 74 68 20 6d 61 70 70 69 r-find-mapping.(match-path.mappi
217c0 6e 67 2d 74 61 62 6c 65 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 6d 61 70 70 69 6e 67 20 ng-table)..."Return.the.mapping.
217e0 74 68 61 74 20 6d 61 74 63 68 65 73 20 4d 41 54 43 48 2d 50 41 54 48 20 69 6e 20 4d 41 50 50 49 that.matches.MATCH-PATH.in.MAPPI
21800 4e 47 2d 54 41 42 4c 45 2e 22 0a 20 20 28 6c 6f 6f 70 20 66 6f 72 20 6d 61 70 70 69 6e 67 20 69 NG-TABLE."...(loop.for.mapping.i
21820 6e 20 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 20 20 20 20 69 66 20 28 65 6c 6e 6f 64 65 2d n.mapping-table......if.(elnode-
21840 2d 6d 61 70 70 65 72 2d 66 69 6e 64 2d 6d 61 74 63 68 2d 66 75 6e 63 20 6d 61 74 63 68 2d 70 61 -mapper-find-match-func.match-pa
21860 74 68 20 6d 61 70 70 69 6e 67 29 0a 20 20 20 20 20 72 65 74 75 72 6e 20 6d 61 70 70 69 6e 67 29 th.mapping)......return.mapping)
21880 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 20 28 68 )..(defun.elnode--mapper-find.(h
218a0 74 74 70 63 6f 6e 20 70 61 74 68 20 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 29 0a 20 20 22 54 72 ttpcon.path.mapping-table)..."Tr
218c0 79 20 61 6e 64 20 66 69 6e 64 20 74 68 65 20 50 41 54 48 20 69 6e 73 69 64 65 20 74 68 65 20 4d y.and.find.the.PATH.inside.the.M
218e0 41 50 50 49 4e 47 2d 54 41 42 4c 45 2e 0a 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 65 78 70 APPING-TABLE...This.function.exp
21900 6f 73 65 73 20 69 74 73 20 60 6d 61 74 63 68 2d 64 61 74 61 27 20 6f 6e 20 74 68 65 20 27 70 61 oses.its.`match-data'.on.the.'pa
21920 74 68 27 20 76 61 72 69 61 62 6c 65 20 73 6f 0a 74 68 61 74 20 79 6f 75 20 63 61 6e 20 61 63 63 th'.variable.so.that.you.can.acc
21940 65 73 73 20 74 68 61 74 20 69 6e 20 79 6f 75 72 20 68 61 6e 64 6c 65 72 20 77 69 74 68 20 73 6f ess.that.in.your.handler.with.so
21960 6d 65 74 68 69 6e 67 20 6c 69 6b 65 3a 0a 0a 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 mething.like:...(match-string.1.
21980 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a (elnode-http-pathinfo.httpcon)).
219a0 0a 52 65 74 75 72 6e 73 20 74 68 65 20 68 61 6e 64 6c 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 68 .Returns.the.handler.function.th
219c0 61 74 20 6d 61 70 70 65 64 2c 20 6f 72 20 60 6e 69 6c 27 2e 0a 0a 54 68 69 73 20 66 75 6e 63 74 at.mapped,.or.`nil'...This.funct
219e0 69 6f 6e 20 61 6c 73 6f 20 65 73 74 61 62 6c 69 73 68 65 73 20 74 68 65 20 60 3a 65 6c 6e 6f 64 ion.also.establishes.the.`:elnod
21a00 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 27 0a 70 72 6f 70 65 72 74 79 2c 20 61 64 64 69 6e 67 e-http-mapping'.property,.adding
21a20 20 69 74 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20 .it.to.the.HTTPCON.so.it.can.be.
21a40 61 63 63 65 73 73 65 64 20 66 72 6f 6d 0a 69 6e 73 69 64 65 20 79 6f 75 72 20 68 61 6e 64 6c 65 accessed.from.inside.your.handle
21a60 72 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 27 2e 22 0a 20 r.with.`elnode-http-mapping'."..
21a80 20 3b 3b 20 46 69 72 73 74 20 66 69 6e 64 20 74 68 65 20 6d 61 70 70 69 6e 67 20 69 6e 20 74 68 .;;.First.find.the.mapping.in.th
21aa0 65 20 6d 61 70 70 69 6e 67 20 74 61 62 6c 65 0a 20 20 28 6c 65 74 2a 20 28 28 70 61 69 72 20 28 e.mapping.table...(let*.((pair.(
21ac0 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 2d 6d 61 70 70 69 6e 67 20 70 61 74 68 elnode--mapper-find-mapping.path
21ae0 20 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 2d .mapping-table))..........(func-
21b00 69 74 65 6d 20 28 61 6e 64 20 70 61 69 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 item.(and.pair..................
21b20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 76 20 28 63 64 72 20 70 61 69 72 29 29 29 0a 20 ........(let*.((v.(cdr.pair)))..
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 61 ..........................(or.(a
21b60 6e 64 20 28 61 74 6f 6d 20 76 29 20 76 29 20 28 63 61 72 20 76 29 29 29 29 29 29 0a 20 20 20 20 nd.(atom.v).v).(car.v)))))).....
21b80 3b 3b 20 4e 6f 77 20 77 6f 72 6b 20 6f 75 74 20 69 66 20 77 65 20 66 6f 75 6e 64 20 6f 6e 65 20 ;;.Now.work.out.if.we.found.one.
21ba0 61 6e 64 20 77 68 61 74 20 69 74 20 77 61 73 20 6d 61 70 70 65 64 20 74 6f 0a 20 20 20 20 28 77 and.what.it.was.mapped.to.....(w
21bc0 68 65 6e 20 28 6f 72 20 28 66 75 6e 63 74 69 6f 6e 70 20 66 75 6e 63 2d 69 74 65 6d 29 0a 20 20 hen.(or.(functionp.func-item)...
21be0 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 70 20 28 61 6e 64 20 28 73 79 6d ............(functionp.(and.(sym
21c00 62 6f 6c 70 20 66 75 6e 63 2d 69 74 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bolp.func-item).................
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c 2d 76 61 6c 75 65 20 66 75 6e 63 ..............(symbol-value.func
21c40 2d 69 74 65 6d 29 29 29 29 0a 20 20 20 20 20 20 3b 3b 20 4d 61 6b 65 20 74 68 65 20 6d 61 74 63 -item)))).......;;.Make.the.matc
21c60 68 20 70 61 72 74 73 20 61 63 63 65 73 73 69 62 6c 65 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 h.parts.accessible.......(proces
21c80 73 2d 70 75 74 0a 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 3a 65 6c 6e s-put........httpcon........:eln
21ca0 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 0a 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 73 ode-http-mapping........(when.(s
21cc0 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 63 61 72 20 70 61 69 72 29 20 70 61 74 68 29 0a 20 20 20 tring-match.(car.pair).path)....
21ce0 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 28 2d 20 28 ......(loop.for.i.from.0.to.(-.(
21d00 2f 20 28 6c 65 6e 67 74 68 20 28 6d 61 74 63 68 2d 64 61 74 61 20 70 61 74 68 29 29 20 32 29 20 /.(length.(match-data.path)).2).
21d20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 6d 61 74 63 68 1)................collect.(match
21d40 2d 73 74 72 69 6e 67 20 69 20 70 61 74 68 29 29 29 29 0a 20 20 20 20 20 20 3b 3b 20 52 65 74 75 -string.i.path)))).......;;.Retu
21d60 72 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 66 75 6e 63 2d 69 74 65 6d 29 rn.the.function.......func-item)
21d80 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 2d ))..(defun.elnode--http-mapping-
21da0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 implementation.(httpcon.&optiona
21dc0 6c 20 70 61 72 74 29 0a 20 20 22 54 68 65 20 61 63 74 75 61 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 l.part)..."The.actual.implementa
21de0 74 69 6f 6e 20 6f 66 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 2e 27 0a 0a tion.of.`elnode-http-mapping.'..
21e00 54 68 69 73 20 69 73 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 79 6f 75 20 66 6c 65 74 20 60 65 This.is.here.so.that.you.flet.`e
21e20 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 27 20 61 6e 64 20 73 74 69 6c 6c 20 67 65 lnode-http-mapping'.and.still.ge
21e40 74 0a 61 74 20 74 68 65 20 72 65 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 22 0a 20 20 t.at.the.real.functionality."...
21e60 28 69 66 20 28 65 71 20 70 61 72 74 20 74 29 0a 20 20 20 20 20 20 28 6c 65 6e 67 74 68 20 28 70 (if.(eq.part.t).......(length.(p
21e80 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d rocess-get.httpcon.:elnode-http-
21ea0 6d 61 70 70 69 6e 67 29 29 0a 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74 27 73 20 61 20 73 mapping)).......;;.Else.it's.a.s
21ec0 70 65 63 69 66 69 63 20 70 61 72 74 0a 20 20 20 20 20 20 28 65 6c 74 0a 20 20 20 20 20 20 20 28 pecific.part.......(elt........(
21ee0 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 process-get.httpcon.:elnode-http
21f00 2d 6d 61 70 70 69 6e 67 29 0a 20 20 20 20 20 20 20 28 69 66 20 70 61 72 74 20 70 61 72 74 20 30 -mapping)........(if.part.part.0
21f20 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 ))))..(defun.elnode-http-mapping
21f40 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 70 61 72 74 29 0a 20 20 22 52 65 74 .(httpcon.&optional.part)..."Ret
21f60 75 72 6e 20 74 68 65 20 6d 61 74 63 68 20 6f 6e 20 74 68 65 20 48 54 54 50 43 4f 4e 20 74 68 61 urn.the.match.on.the.HTTPCON.tha
21f80 74 20 72 65 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 68 61 6e 64 6c 65 t.resulted.in.the.current.handle
21fa0 72 2e 0a 0a 57 69 74 68 20 50 41 52 54 20 69 74 20 72 65 74 75 72 6e 73 20 61 20 73 70 65 63 69 r...With.PART.it.returns.a.speci
21fc0 66 69 63 20 70 61 72 74 20 6f 66 20 74 68 65 20 6d 61 74 63 68 2c 20 62 79 20 64 65 66 61 75 6c fic.part.of.the.match,.by.defaul
21fe0 74 0a 50 41 52 54 20 69 73 20 30 2e 20 20 49 66 20 50 41 52 54 20 69 73 20 73 70 65 63 69 66 69 t.PART.is.0...If.PART.is.specifi
22000 65 64 20 61 73 20 60 74 27 20 74 68 65 6e 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 70 61 72 74 ed.as.`t'.then.the.count.of.part
22020 73 0a 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 54 68 69 73 20 72 65 73 75 6c 74 73 20 6f 6e 6c s.is.returned...This.results.onl
22040 79 20 66 72 6f 6d 20 61 20 63 61 6c 6c 20 76 69 61 20 60 65 6c 6e 6f 64 65 2d 64 69 73 70 61 74 y.from.a.call.via.`elnode-dispat
22060 63 68 65 72 27 2e 0a 0a 49 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 77 68 cher'...It.returns.the.string.wh
22080 69 63 68 20 6d 61 74 63 68 65 64 20 79 6f 75 72 20 75 72 6c 2d 6d 61 70 70 69 6e 67 2c 20 77 69 ich.matched.your.url-mapping,.wi
220a0 74 68 20 74 68 65 0a 6d 61 74 63 68 2d 64 61 74 61 20 61 74 74 61 63 68 65 64 2e 20 53 6f 20 67 th.the.match-data.attached..So.g
220c0 69 76 65 6e 20 74 68 65 20 6d 61 70 70 69 6e 67 3a 0a 0a 20 28 5c 22 2f 73 74 61 74 69 63 2f 5c iven.the.mapping:...(\"/static/\
220e0 5c 28 2e 2a 5c 5c 29 5c 22 20 2e 20 6d 79 2d 68 61 6e 64 6c 65 72 29 0a 0a 61 6e 64 20 74 68 65 \(.*\\)\"...my-handler)..and.the
22100 20 72 65 71 75 65 73 74 3a 0a 0a 20 2f 73 74 61 74 69 63 2f 73 6f 6d 65 64 69 72 2f 73 6f 6d 65 .request:.../static/somedir/some
22120 66 69 6c 65 2e 6a 70 67 0a 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 72 75 65 20 file.jpg..The.following.is.true.
22140 69 6e 73 69 64 65 20 74 68 65 20 68 61 6e 64 6c 65 72 3a 0a 0a 20 28 65 71 75 61 6c 20 5c 22 2f inside.the.handler:...(equal.\"/
22160 73 6f 6d 65 64 69 72 2f 73 6f 6d 65 66 69 6c 65 2e 6a 70 67 5c 22 0a 20 20 20 20 20 20 20 20 28 somedir/somefile.jpg\".........(
22180 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 match-string.1.(elnode-http-mapp
221a0 69 6e 67 20 68 74 74 70 63 6f 6e 29 29 29 0a 0a 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 65 6c ing.httpcon)))..The.function.`el
221c0 6e 6f 64 65 2d 74 65 73 74 2d 70 61 74 68 27 20 75 73 65 73 20 74 68 69 73 20 66 61 63 69 6c 69 node-test-path'.uses.this.facili
221e0 74 79 20 74 6f 20 77 6f 72 6b 20 6f 75 74 20 61 0a 74 61 72 67 65 74 20 70 61 74 68 2e 22 0a 20 ty.to.work.out.a.target.path."..
22200 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 2d 69 6d 70 6c 65 6d 65 6e 74 .(elnode--http-mapping-implement
22220 61 74 69 6f 6e 20 68 74 74 70 63 6f 6e 20 70 61 72 74 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e ation.httpcon.part))..(defun.eln
22240 6f 64 65 2d 2d 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 2d 73 6c 61 73 68 20 28 73 74 72 29 0a 20 ode--strip-leading-slash.(str)..
22260 20 22 53 74 72 69 70 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 73 6c 61 73 68 20 66 72 6f 6d 20 53 ."Strip.any.leading.slash.from.S
22280 54 52 2e 0a 0a 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6c 65 61 64 69 6e 67 20 73 6c 61 73 TR...If.there.is.no.leading.slas
222a0 68 20 74 68 65 6e 20 6a 75 73 74 20 72 65 74 75 72 6e 20 53 54 52 2e 22 0a 20 20 28 69 66 20 28 h.then.just.return.STR."...(if.(
222c0 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5e 2f 5c 5c 28 2e 2a 5c 5c 29 22 20 73 74 72 29 0a 20 string-match."^/\\(.*\\)".str)..
222e0 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 73 74 72 29 0a 20 20 20 20 20 20 .....(match-string.1.str).......
22300 73 74 72 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 67 65 74 2d 74 61 72 67 65 74 66 str))..(defun.elnode-get-targetf
22320 69 6c 65 20 28 68 74 74 70 63 6f 6e 20 64 6f 63 72 6f 6f 74 29 0a 20 20 22 47 65 74 20 74 68 65 ile.(httpcon.docroot)..."Get.the
22340 20 74 61 72 67 65 74 65 64 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 2e .targeted.file.from.the.HTTPCON.
22360 0a 0a 41 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 68 65 20 6d 61 74 63 68 65 ..Attempts.to.resolve.the.matche
22380 64 20 70 61 74 68 20 6f 66 20 74 68 65 20 48 54 54 50 43 4f 4e 20 61 67 61 69 6e 73 74 20 74 68 d.path.of.the.HTTPCON.against.th
223a0 65 0a 44 4f 43 52 4f 4f 54 2e 20 20 49 66 20 74 68 61 74 20 64 6f 65 73 6e 27 74 20 77 6f 72 6b e.DOCROOT...If.that.doesn't.work
223c0 20 74 68 65 6e 20 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 73 65 20 6a 75 73 74 20 74 68 .then.it.attempts.to.use.just.th
223e0 65 0a 70 61 74 68 69 6e 66 6f 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a 54 68 65 20 e.pathinfo.of.the.request...The.
22400 72 65 73 75 6c 74 69 6e 67 20 66 69 6c 65 20 69 73 20 4e 4f 54 20 63 68 65 63 6b 65 64 20 66 6f resulting.file.is.NOT.checked.fo
22420 72 20 65 78 69 73 74 65 6e 63 65 20 6f 72 20 73 61 66 65 74 79 2e 22 0a 20 20 28 6c 65 74 2a 20 r.existence.or.safety."...(let*.
22440 28 28 70 61 74 68 69 6e 66 6f 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f ((pathinfo.(elnode-http-pathinfo
22460 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 74 68 20 28 65 6c 6e 6f 64 .httpcon))..........(path.(elnod
22480 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 20 68 74 74 70 63 6f 6e 20 31 29 29 0a 20 20 20 20 20 e-http-mapping.httpcon.1))......
224a0 20 20 20 20 28 74 61 72 67 65 74 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 ....(targetfile...........(elnod
224c0 65 2d 6a 6f 69 6e 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e e-join............(expand-file-n
224e0 61 6d 65 20 64 6f 63 72 6f 6f 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d ame.docroot)............(elnode-
22500 2d 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 2d 73 6c 61 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 -strip-leading-slash............
22520 20 28 6f 72 20 70 61 74 68 20 70 61 74 68 69 6e 66 6f 29 29 29 29 29 0a 20 20 20 20 74 61 72 67 .(or.path.pathinfo))))).....targ
22540 65 74 66 69 6c 65 29 29 0a 0a 0a 3b 3b 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 63 6c 61 72 65 etfile))...;;.We.need.to.declare
22560 20 74 68 69 73 20 62 65 66 6f 72 65 20 74 68 65 20 64 69 73 70 61 74 63 68 65 72 20 73 74 75 66 .this.before.the.dispatcher.stuf
22580 66 2c 20 77 68 69 63 68 20 75 73 65 73 20 69 74 2e 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 f,.which.uses.it..(defvar.elnode
225a0 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2d 73 63 68 65 6d 65 73 --defined-authentication-schemes
225c0 0a 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65 71 75 61 6c ...(make-hash-table.:test.'equal
225e0 29 0a 20 20 22 54 68 65 20 68 61 73 68 20 6f 66 20 64 65 66 69 6e 65 64 20 61 75 74 68 65 6e 74 )..."The.hash.of.defined.authent
22600 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f ication.schemes.")..(defvar.elno
22620 64 65 2d 2d 64 6f 2d 61 63 63 65 73 73 2d 6c 6f 67 67 69 6e 67 2d 6f 6e 2d 64 69 73 70 61 74 63 de--do-access-logging-on-dispatc
22640 68 20 74 0a 20 20 22 4e 65 65 64 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 6c 6f 67 67 69 6e h.t..."Needed.to.suppress.loggin
22660 67 20 69 6e 20 74 65 73 74 69 6e 67 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d g.in.testing.")..(defun.elnode--
22680 61 75 74 68 2d 65 6e 74 72 79 2d 3e 64 69 73 70 61 74 63 68 2d 74 61 62 6c 65 20 28 61 75 74 68 auth-entry->dispatch-table.(auth
226a0 2d 73 63 68 65 6d 65 20 26 6f 70 74 69 6f 6e 61 6c 20 68 6f 73 74 70 61 74 68 29 0a 20 20 22 4d -scheme.&optional.hostpath)..."M
226c0 61 6b 65 20 61 20 64 69 73 70 61 74 63 68 20 74 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 41 55 ake.a.dispatch.table.from.the.AU
226e0 54 48 2d 53 43 48 45 4d 45 2e 0a 0a 49 66 20 48 4f 53 54 50 41 54 48 20 69 73 20 73 70 65 63 69 TH-SCHEME...If.HOSTPATH.is.speci
22700 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6d 61 74 63 68 20 73 70 fied.then.the.resulting.match.sp
22720 65 63 20 69 73 20 6f 66 20 74 68 65 0a 60 68 6f 73 74 70 61 74 68 27 20 74 79 70 65 20 66 6f 72 ec.is.of.the.`hostpath'.type.for
22740 20 75 73 65 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64 69 73 70 61 .use.with.`elnode-hostpath-dispa
22760 74 63 68 65 72 27 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 61 75 74 68 2d 73 63 68 65 6d 65 20 28 tcher'."...(let*.((auth-scheme.(
22780 67 65 74 68 61 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 gethash........................a
227a0 75 74 68 2d 73 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 uth-scheme......................
227c0 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e ..elnode--defined-authentication
227e0 2d 73 63 68 65 6d 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 28 72 65 64 69 72 65 63 74 20 28 70 -schemes))..........(redirect.(p
22800 6c 69 73 74 2d 67 65 74 20 61 75 74 68 2d 73 63 68 65 6d 65 20 3a 72 65 64 69 72 65 63 74 29 29 list-get.auth-scheme.:redirect))
22820 0a 20 20 20 20 20 20 20 20 20 28 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 20 28 70 6c 69 73 74 2d ..........(login-handler.(plist-
22840 67 65 74 20 61 75 74 68 2d 73 63 68 65 6d 65 20 3a 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 29 29 get.auth-scheme.:login-handler))
22860 29 0a 20 20 20 20 28 77 68 65 6e 20 72 65 64 69 72 65 63 74 0a 20 20 20 20 20 20 28 6c 69 73 74 ).....(when.redirect.......(list
22880 0a 20 20 20 20 20 20 20 28 63 6f 6e 73 0a 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 28 69 ........(cons.........(concat.(i
228a0 66 20 68 6f 73 74 70 61 74 68 20 22 5e 2e 2a 2f 22 20 22 5e 22 29 20 72 65 64 69 72 65 63 74 20 f.hostpath."^.*/"."^").redirect.
228c0 22 24 22 29 0a 20 20 20 20 20 20 20 20 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 29 29 29 29 29 0a "$").........login-handler))))).
228e0 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 2d 64 69 73 70 61 74 63 68 2d 70 72 6f 63 20 28 .(defun*.elnode--dispatch-proc.(
22900 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 httpcon.........................
22920 20 20 20 20 20 20 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ......path......................
22940 20 20 20 20 20 20 20 20 20 75 72 6c 2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 20 20 20 20 .........url-mapping-table......
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 .........................&key...
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e ............................(fun
229a0 63 74 69 6f 6e 2d 34 30 34 20 27 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 29 0a 20 20 20 20 ction-404.'elnode-send-404).....
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 2d 6e ..........................(log-n
229e0 61 6d 65 20 22 65 6c 6e 6f 64 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ame."elnode")...................
22a00 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 72 61 2d 74 61 62 6c 65 29 0a 20 20 22 44 69 73 70 ............extra-table)..."Disp
22a20 61 74 63 68 20 74 6f 20 74 68 65 20 6d 61 74 63 68 65 64 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 atch.to.the.matched.handler.for.
22a40 74 68 65 20 50 41 54 48 20 6f 6e 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 54 68 65 20 68 61 6e the.PATH.on.the.HTTPCON..The.han
22a60 64 6c 65 72 20 66 6f 72 20 50 41 54 48 20 69 73 20 6d 61 74 63 68 65 64 20 69 6e 20 74 68 65 20 dler.for.PATH.is.matched.in.the.
22a80 55 52 4c 2d 4d 41 50 50 49 4e 47 2d 54 41 42 4c 45 20 76 69 61 0a 60 65 6c 6e 6f 64 65 2d 2d 6d URL-MAPPING-TABLE.via.`elnode--m
22aa0 61 70 70 65 72 2d 66 69 6e 64 27 2e 0a 0a 49 66 20 6e 6f 20 68 61 6e 64 6c 65 72 20 69 73 20 66 apper-find'...If.no.handler.is.f
22ac0 6f 75 6e 64 20 74 68 65 6e 20 61 20 34 30 34 20 69 73 20 61 74 74 65 6d 70 74 65 64 20 76 69 61 ound.then.a.404.is.attempted.via
22ae0 20 46 55 4e 43 54 49 4f 4e 2d 34 30 34 2c 0a 69 66 20 69 74 27 73 20 66 6f 75 6e 64 20 74 6f 20 .FUNCTION-404,.if.it's.found.to.
22b00 62 65 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 6f 72 20 61 73 20 61 20 6c 61 73 74 20 72 65 73 6f be.a.function,.or.as.a.last.reso
22b20 72 74 0a 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 27 2e 0a 0a 54 68 65 20 66 75 6e 63 74 rt.`elnode-send-404'...The.funct
22b40 69 6f 6e 20 61 6c 73 6f 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 73 65 61 72 63 68 69 6e 67 20 ion.also.supports.the.searching.
22b60 6f 66 20 74 68 65 20 6d 61 70 20 70 72 6f 76 69 64 65 64 20 62 79 0a 61 6e 20 45 58 54 52 41 2d of.the.map.provided.by.an.EXTRA-
22b80 54 41 42 4c 45 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 61 75 74 68 65 TABLE...This.is.useful.for.authe
22ba0 6e 74 69 63 61 74 69 6f 6e 20 61 6e 64 20 6f 74 68 65 72 0a 77 72 61 70 70 65 72 73 2e 20 20 49 ntication.and.other.wrappers...I
22bc0 66 20 69 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20 69 74 20 69 73 20 73 65 61 72 63 68 65 64 f.it.is.specified.it.is.searched
22be0 20 66 69 72 73 74 2e 22 0a 20 20 28 6c 65 74 20 28 28 68 61 6e 64 6c 65 72 2d 66 75 6e 63 0a 20 .first."...(let.((handler-func..
22c00 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 45 69 74 68 65 72 20 ........(or...........;;.Either.
22c20 61 20 6d 61 74 63 68 20 66 72 6f 6d 20 65 78 74 72 61 2d 74 61 62 6c 65 20 2e 2e 2e 0a 20 20 20 a.match.from.extra-table........
22c40 20 20 20 20 20 20 20 28 61 6e 64 20 65 78 74 72 61 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 .......(and.extra-table.........
22c60 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 0a 20 20 20 20 .......(elnode--mapper-find.....
22c80 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 70 61 74 68 20 65 78 74 72 61 2d 74 ............httpcon.path.extra-t
22ca0 61 62 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 2e 2e 2e 20 6f 72 20 66 72 6f 6d 20 able))...........;;.....or.from.
22cc0 74 68 65 20 73 74 61 6e 64 61 72 64 20 75 72 6c 2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 the.standard.url-mapping-table..
22ce0 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 0a 20 20 .........(elnode--mapper-find...
22d00 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 70 61 74 68 20 75 72 6c 2d 6d 61 70 70 69 6e .........httpcon.path.url-mappin
22d20 67 2d 74 61 62 6c 65 29 29 29 29 0a 20 20 20 20 28 77 68 65 6e 20 65 6c 6e 6f 64 65 2d 2d 64 6f g-table)))).....(when.elnode--do
22d40 2d 61 63 63 65 73 73 2d 6c 6f 67 67 69 6e 67 2d 6f 6e 2d 64 69 73 70 61 74 63 68 0a 20 20 20 20 -access-logging-on-dispatch.....
22d60 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 61 ..(process-put.httpcon.:elnode-a
22d80 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 20 6c 6f 67 2d 6e 61 6d 65 29 29 0a 20 20 20 20 28 63 ccess-log-name.log-name)).....(c
22da0 6f 6e 64 0a 20 20 20 20 20 3b 3b 20 49 66 20 77 65 20 68 61 76 65 20 61 20 68 61 6e 64 6c 65 72 ond......;;.If.we.have.a.handler
22dc0 2c 20 75 73 65 20 69 74 2e 0a 20 20 20 20 20 28 28 66 75 6e 63 74 69 6f 6e 70 20 68 61 6e 64 6c ,.use.it.......((functionp.handl
22de0 65 72 2d 66 75 6e 63 29 0a 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65 72 2d er-func).......(funcall.handler-
22e00 66 75 6e 63 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 28 66 75 func.httpcon))......(t.......(fu
22e20 6e 63 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 2d 34 30 34 20 68 74 74 70 63 6f 6e 29 29 29 29 29 0a ncall.function-404.httpcon))))).
22e40 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 64 69 73 70 61 74 63 68 65 72 20 28 68 74 74 70 .(defun*.elnode-dispatcher.(http
22e60 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 con............................u
22e80 72 6c 2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 rl-mapping-table................
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............&key................
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 2d 34 30 34 20 27 65 6c 6e 6f 64 ............(function-404.'elnod
22ee0 65 2d 73 65 6e 64 2d 34 30 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e-send-404).....................
22f00 20 20 20 20 20 20 20 61 75 74 68 2d 73 63 68 65 6d 65 29 0a 20 20 22 44 69 73 70 61 74 63 68 20 .......auth-scheme)..."Dispatch.
22f20 48 54 54 50 43 4f 4e 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6d 61 70 70 65 64 20 69 HTTPCON.to.the.function.mapped.i
22f40 6e 20 55 52 4c 2d 4d 41 50 50 49 4e 47 2d 54 41 42 4c 45 2e 0a 0a 55 52 4c 2d 4d 41 50 50 49 4e n.URL-MAPPING-TABLE...URL-MAPPIN
22f60 47 2d 54 41 42 4c 45 20 69 73 20 61 6e 20 61 6c 69 73 74 20 6f 66 3a 0a 0a 20 28 75 72 6c 2d 72 G-TABLE.is.an.alist.of:...(url-r
22f80 65 67 65 78 20 2e 20 66 75 6e 63 74 69 6f 6e 2d 74 6f 2d 64 69 73 70 61 74 63 68 29 0a 0a 54 6f egex...function-to-dispatch)..To
22fa0 20 6d 61 70 20 74 68 65 20 72 6f 6f 74 20 75 72 6c 20 79 6f 75 20 73 68 6f 75 6c 64 20 75 73 65 .map.the.root.url.you.should.use
22fc0 3a 0a 0a 20 20 5c 22 5e 2f 24 5c 22 0a 0a 54 6f 20 65 6e 73 75 72 65 20 70 61 74 68 73 20 65 6e :....\"^/$\"..To.ensure.paths.en
22fe0 64 20 69 6e 20 2f 2c 20 60 65 6c 6e 6f 64 65 2d 64 69 73 70 61 74 63 68 65 72 27 20 75 73 65 73 d.in./,.`elnode-dispatcher'.uses
23000 0a 60 65 6c 6e 6f 64 65 2d 6e 6f 72 6d 61 6c 69 7a 65 2d 70 61 74 68 27 2e 20 20 54 6f 20 6d 61 .`elnode-normalize-path'...To.ma
23020 70 20 61 6e 6f 74 68 65 72 20 75 72 6c 20 79 6f 75 20 73 68 6f 75 6c 64 20 75 73 65 3a 0a 0a 20 p.another.url.you.should.use:...
23040 20 5c 22 5e 2f 70 61 74 68 2f 24 5c 22 20 6f 72 20 5c 22 5e 2f 70 61 74 68 2f 73 75 62 2d 70 61 .\"^/path/$\".or.\"^/path/sub-pa
23060 74 68 2f 24 5c 22 0a 0a 41 6e 20 65 78 61 6d 70 6c 65 20 73 65 72 76 65 72 20 73 65 74 75 70 3a th/$\"..An.example.server.setup:
23080 0a 0a 20 20 28 64 65 66 75 6e 20 6d 79 2d 73 65 72 76 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20 ....(defun.my-server.(httpcon)..
230a0 20 20 20 28 65 6c 6e 6f 64 65 2d 64 69 73 70 61 74 63 68 65 72 0a 20 20 20 20 20 68 74 74 70 63 ...(elnode-dispatcher......httpc
230c0 6f 6e 0a 20 20 20 20 20 27 28 28 5c 22 5e 2f 24 5c 22 20 2e 20 72 6f 6f 74 2d 76 69 65 77 29 0a on......'((\"^/$\"...root-view).
230e0 20 20 20 20 20 20 20 28 5c 22 5e 2f 31 2f 24 5c 22 20 2e 20 76 69 65 77 2d 31 29 29 29 29 0a 0a .......(\"^/1/$\"...view-1))))..
23100 49 66 20 46 55 4e 43 54 49 4f 4e 2d 34 30 34 20 69 73 20 73 70 65 63 69 66 69 65 64 20 69 74 20 If.FUNCTION-404.is.specified.it.
23120 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 6e 6f 20 72 65 67 65 78 70 20 69 73 0a 6d 61 74 63 is.called.when.no.regexp.is.matc
23140 68 65 64 2c 20 6f 74 68 65 72 77 69 73 65 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 27 hed,.otherwise.`elnode-send-404'
23160 20 69 73 20 75 73 65 64 2e 0a 0a 41 55 54 48 2d 53 43 48 45 4d 45 20 69 73 20 61 6e 20 6f 70 74 .is.used...AUTH-SCHEME.is.an.opt
23180 69 6f 6e 61 6c 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 2c 20 64 65 66 ional.authentication.scheme,.def
231a0 69 6e 65 64 20 77 69 74 68 0a 60 65 6c 6e 6f 64 65 2d 64 65 66 61 75 74 68 27 2c 20 77 68 69 63 ined.with.`elnode-defauth',.whic
231c0 68 20 73 70 65 63 69 66 69 65 73 20 61 20 72 65 64 69 72 65 63 74 20 6d 61 70 70 69 6e 67 20 66 h.specifies.a.redirect.mapping.f
231e0 6f 72 0a 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 73 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 6e or.authentications."...(elnode-n
23200 6f 72 6d 61 6c 69 7a 65 2d 70 61 74 68 0a 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 28 6c 61 6d ormalize-path....httpcon....(lam
23220 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 3b 3b 20 47 65 74 20 70 61 74 68 69 6e bda.(httpcon)......;;.Get.pathin
23240 66 6f 20 61 67 61 69 6e 20 62 65 63 61 75 73 65 20 77 65 20 6d 61 79 20 68 61 76 65 20 72 65 64 fo.again.because.we.may.have.red
23260 69 72 65 63 74 65 64 2e 0a 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 74 68 69 6e 66 6f 20 28 65 irected.......(let.((pathinfo.(e
23280 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 lnode-http-pathinfo.httpcon))...
232a0 20 20 20 20 20 20 20 20 20 28 65 78 74 72 61 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 .........(extra-table...........
232c0 20 20 28 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d 65 6e 74 72 79 2d 3e 64 69 73 70 61 74 63 68 2d ..(elnode--auth-entry->dispatch-
232e0 74 61 62 6c 65 20 61 75 74 68 2d 73 63 68 65 6d 65 29 29 29 0a 20 20 20 20 20 20 20 28 65 6c 6e table.auth-scheme)))........(eln
23300 6f 64 65 2d 2d 64 69 73 70 61 74 63 68 2d 70 72 6f 63 0a 20 20 20 20 20 20 20 20 68 74 74 70 63 ode--dispatch-proc.........httpc
23320 6f 6e 0a 20 20 20 20 20 20 20 20 70 61 74 68 69 6e 66 6f 0a 20 20 20 20 20 20 20 20 75 72 6c 2d on.........pathinfo.........url-
23340 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 3a 66 75 6e 63 74 69 6f 6e 2d mapping-table.........:function-
23360 34 30 34 20 66 75 6e 63 74 69 6f 6e 2d 34 30 34 0a 20 20 20 20 20 20 20 20 3a 65 78 74 72 61 2d 404.function-404.........:extra-
23380 74 61 62 6c 65 20 65 78 74 72 61 2d 74 61 62 6c 65 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 table.extra-table)))))..(defun.e
233a0 6c 6e 6f 64 65 2d 2d 68 6f 73 74 70 61 74 68 20 28 68 6f 73 74 20 70 61 74 68 29 0a 20 20 22 54 lnode--hostpath.(host.path)..."T
233c0 75 72 6e 20 74 68 65 20 68 6f 73 74 20 61 6e 64 20 70 61 74 68 20 69 6e 74 6f 20 61 20 68 6f 73 urn.the.host.and.path.into.a.hos
233e0 74 70 61 74 68 2e 22 0a 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 22 25 73 2f 25 73 22 0a 20 20 20 tpath."...(format...."%s/%s"....
23400 28 6c 65 74 20 28 28 68 6f 73 74 2d 6e 61 6d 65 20 28 6f 72 20 68 6f 73 74 20 22 22 29 29 29 0a (let.((host-name.(or.host.""))).
23420 20 20 20 20 20 3b 3b 20 53 65 70 61 72 61 74 65 20 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 66 72 .....;;.Separate.the.hostname.fr
23440 6f 6d 20 61 6e 79 20 70 6f 72 74 20 69 6e 20 74 68 65 20 68 6f 73 74 20 68 65 61 64 65 72 0a 20 om.any.port.in.the.host.header..
23460 20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 20 20 20 28 69 66 20 ....(save-match-data........(if.
23480 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5c 5c 28 5b 5e 3a 5d 2b 5c 5c 29 5c 5c 28 3a 5b 30 (string-match."\\([^:]+\\)\\(:[0
234a0 2d 39 5d 2b 2e 2a 5c 5c 29 2a 22 20 68 6f 73 74 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 -9]+.*\\)*".host-name)..........
234c0 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 68 6f 73 74 2d 6e 61 6d 65 29 0a 20 20 20 ..(match-string.1.host-name)....
234e0 20 20 20 20 20 20 20 20 22 22 29 29 29 0a 20 20 20 70 61 74 68 29 29 0a 0a 28 64 65 66 75 6e 2a ........"")))....path))..(defun*
23500 20 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64 69 73 70 61 74 63 68 65 72 20 28 68 74 74 .elnode-hostpath-dispatcher.(htt
23520 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 pcon............................
23540 20 20 20 20 20 20 20 20 68 6f 73 74 70 61 74 68 2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 ........hostpath-mapping-table..
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
23580 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..&key..........................
235a0 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 2d 34 30 34 20 27 65 6c 6e 6f 64 65 2d ..........(function-404.'elnode-
235c0 73 65 6e 64 2d 34 30 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 send-404).......................
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 22 29 .............(log-name."elnode")
23600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
23620 20 20 20 20 61 75 74 68 2d 73 63 68 65 6d 65 29 0a 20 20 22 44 69 73 70 61 74 63 68 20 48 54 54 ....auth-scheme)..."Dispatch.HTT
23640 50 43 4f 4e 20 74 6f 20 61 20 68 61 6e 64 6c 65 72 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 48 PCON.to.a.handler.based.on.the.H
23660 4f 53 54 50 41 54 48 2d 4d 41 50 50 49 4e 47 2d 54 41 42 4c 45 2e 0a 0a 48 4f 53 54 50 41 54 48 OSTPATH-MAPPING-TABLE...HOSTPATH
23680 2d 4d 41 50 50 49 4e 47 2d 54 41 42 4c 45 20 68 61 73 20 72 65 67 65 78 73 20 6f 66 20 74 68 65 -MAPPING-TABLE.has.regexs.of.the
236a0 20 68 6f 73 74 20 61 6e 64 20 74 68 65 20 70 61 74 68 20 64 6f 75 62 6c 65 0a 73 6c 61 73 68 20 .host.and.the.path.double.slash.
236c0 73 65 70 61 72 61 74 65 64 2c 20 74 68 75 73 3a 0a 0a 20 28 5c 22 5e 6c 6f 63 61 6c 68 6f 73 74 separated,.thus:...(\"^localhost
236e0 2f 2f 70 61 73 74 65 62 69 6e 2e 2a 5c 22 20 2e 20 70 61 73 74 65 62 69 6e 2d 68 61 6e 64 6c 65 //pastebin.*\"...pastebin-handle
23700 72 29 0a 0a 46 55 4e 43 54 49 4f 4e 2d 34 30 34 20 73 68 6f 75 6c 64 20 62 65 20 61 20 34 30 34 r)..FUNCTION-404.should.be.a.404
23720 20 68 61 6e 64 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 62 79 20 64 65 66 61 75 6c 74 20 69 .handling.function,.by.default.i
23740 74 27 73 0a 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 27 2e 0a 0a 4c 4f 47 2d 4e 41 4d 45 t's.`elnode-send-404'...LOG-NAME
23760 20 69 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 6c 6f 67 2d 6e 61 6d 65 2e 0a 0a 41 55 54 48 2d .is.an.optional.log-name...AUTH-
23780 53 43 48 45 4d 45 20 69 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 61 75 74 68 65 6e 74 69 63 61 SCHEME.is.an.optional.authentica
237a0 74 69 6f 6e 20 73 63 68 65 6d 65 2c 20 64 65 66 69 6e 65 64 20 77 69 74 68 0a 60 65 6c 6e 6f 64 tion.scheme,.defined.with.`elnod
237c0 65 2d 64 65 66 61 75 74 68 27 2c 20 77 68 69 63 68 20 73 70 65 63 69 66 69 65 73 20 61 20 72 65 e-defauth',.which.specifies.a.re
237e0 64 69 72 65 63 74 20 6d 61 70 70 69 6e 67 20 66 6f 72 0a 61 75 74 68 65 6e 74 69 63 61 74 69 6f direct.mapping.for.authenticatio
23800 6e 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 68 6f 73 74 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d 2d ns."...(let.((hostpath.(elnode--
23820 68 6f 73 74 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e hostpath....................(eln
23840 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 70 63 6f 6e 20 22 48 6f 73 74 22 29 0a ode-http-header.httpcon."Host").
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d ...................(elnode-http-
23880 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 65 78 74 pathinfo.httpcon))).........(ext
238a0 72 61 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 4d 61 6b 65 20 73 75 72 65 20 69 ra-table..........;;.Make.sure.i
238c0 74 27 73 20 61 20 68 6f 73 74 70 61 74 68 20 74 79 70 65 0a 20 20 20 20 20 20 20 20 20 28 65 6c t's.a.hostpath.type..........(el
238e0 6e 6f 64 65 2d 2d 61 75 74 68 2d 65 6e 74 72 79 2d 3e 64 69 73 70 61 74 63 68 2d 74 61 62 6c 65 node--auth-entry->dispatch-table
23900 20 61 75 74 68 2d 73 63 68 65 6d 65 20 74 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 .auth-scheme.t))).....(elnode--d
23920 69 73 70 61 74 63 68 2d 70 72 6f 63 0a 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 68 ispatch-proc......httpcon......h
23940 6f 73 74 70 61 74 68 0a 20 20 20 20 20 68 6f 73 74 70 61 74 68 2d 6d 61 70 70 69 6e 67 2d 74 61 ostpath......hostpath-mapping-ta
23960 62 6c 65 0a 20 20 20 20 20 3a 66 75 6e 63 74 69 6f 6e 2d 34 30 34 20 66 75 6e 63 74 69 6f 6e 2d ble......:function-404.function-
23980 34 30 34 0a 20 20 20 20 20 3a 6c 6f 67 2d 6e 61 6d 65 20 6c 6f 67 2d 6e 61 6d 65 0a 20 20 20 20 404......:log-name.log-name.....
239a0 20 3a 65 78 74 72 61 2d 74 61 62 6c 65 20 65 78 74 72 61 2d 74 61 62 6c 65 29 29 29 0a 0a 3b 3b .:extra-table.extra-table)))..;;
239c0 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 68 ;###autoload.(defcustom.elnode-h
239e0 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 74 61 62 6c 65 0a 20 20 27 28 28 22 5b 5e 2f 5d ostpath-default-table...'(("[^/]
23a00 2b 2f 2f 77 69 6b 69 2f 5c 5c 28 2e 2a 5c 5c 29 22 20 2e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 +//wiki/\\(.*\\)"...elnode-wikis
23a20 65 72 76 65 72 29 0a 20 20 20 20 28 22 5b 5e 2f 5d 2b 2f 2f 5c 5c 28 2e 2a 5c 5c 29 22 20 2e 20 erver).....("[^/]+//\\(.*\\)"...
23a40 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 29 29 0a 20 20 22 44 65 66 69 6e 65 73 20 6d 61 elnode-webserver))..."Defines.ma
23a60 70 70 69 6e 67 73 20 66 6f 72 20 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 ppings.for.`elnode-hostpath-defa
23a80 75 6c 74 2d 68 61 6e 64 6c 65 72 27 2e 0a 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 ult-handler'...This.is.the.defau
23aa0 6c 74 20 6d 61 70 70 69 6e 67 20 74 61 62 6c 65 20 66 6f 72 20 45 6c 6e 6f 64 65 2c 20 6f 75 74 lt.mapping.table.for.Elnode,.out
23ac0 20 6f 66 20 74 68 65 20 62 6f 78 2e 20 49 66 0a 79 6f 75 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 .of.the.box..If.you.customize.th
23ae0 69 73 20 74 68 65 6e 20 65 6c 6e 6f 64 65 20 77 69 6c 6c 20 73 65 72 76 65 20 74 68 65 73 65 20 is.then.elnode.will.serve.these.
23b00 68 6f 73 74 70 61 74 68 20 6d 61 70 70 69 6e 67 73 0a 62 79 20 6a 75 73 74 20 6c 6f 61 64 69 6e hostpath.mappings.by.just.loadin
23b20 67 20 45 6c 6e 6f 64 65 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 74 61 62 6c 65 20 g.Elnode...By.default.the.table.
23b40 6d 61 70 73 20 65 76 65 72 79 74 68 69 6e 67 20 74 6f 0a 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65 maps.everything.to.`elnode-webse
23b60 72 76 65 72 27 2e 20 55 6e 6c 65 73 73 20 79 6f 75 27 72 65 20 68 61 70 70 79 20 77 69 74 68 20 rver'..Unless.you're.happy.with.
23b80 74 68 65 20 64 65 66 61 75 6c 74 20 79 6f 75 0a 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 the.default.you.should.probably.
23ba0 67 65 74 20 72 69 64 20 6f 66 20 74 68 65 20 65 76 65 72 79 74 68 69 6e 67 20 70 61 74 68 20 62 get.rid.of.the.everything.path.b
23bc0 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c 0a 69 6e 74 65 72 66 65 72 65 20 77 69 74 68 20 61 6e ecause.it.will.interfere.with.an
23be0 79 20 6f 74 68 65 72 20 6d 61 70 70 69 6e 67 73 20 79 6f 75 20 61 64 64 2e 22 0a 20 20 3a 67 72 y.other.mappings.you.add."...:gr
23c00 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 61 6c 69 73 74 20 3a 6b 65 79 oup.'elnode...:type.'(alist.:key
23c20 2d 74 79 70 65 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 76 61 -type.string.................:va
23c40 6c 75 65 2d 74 79 70 65 20 73 79 6d 62 6f 6c 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 lue-type.symbol))..(defun.elnode
23c60 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 -hostpath-default-handler.(httpc
23c80 6f 6e 29 0a 20 20 22 41 20 64 65 66 61 75 6c 74 20 68 6f 73 74 70 61 74 68 20 68 61 6e 64 6c 65 on)..."A.default.hostpath.handle
23ca0 72 2e 0a 0a 54 68 69 73 20 75 73 65 73 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 r...This.uses.the.`elnode-hostpa
23cc0 74 68 2d 64 65 66 61 75 6c 74 2d 74 61 62 6c 65 27 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 0a th-default-table'.for.the.match.
23ce0 74 61 62 6c 65 2e 20 20 49 74 20 63 61 6c 6c 73 20 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 table...It.calls.`elnode-hostpat
23d00 68 2d 64 69 73 70 61 74 63 68 65 72 27 20 77 69 74 68 0a 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 h-dispatcher'.with.`elnode-hostp
23d20 61 74 68 2d 64 65 66 61 75 6c 74 2d 74 61 62 6c 65 27 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 ath-default-table'."...(elnode-h
23d40 6f 73 74 70 61 74 68 2d 64 69 73 70 61 74 63 68 65 72 20 68 74 74 70 63 6f 6e 20 65 6c 6e 6f 64 ostpath-dispatcher.httpcon.elnod
23d60 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 74 61 62 6c 65 29 29 0a 0a 0a 3b 3b 20 e-hostpath-default-table))...;;.
23d80 41 73 79 6e 63 20 68 61 6e 64 6c 69 6e 67 20 73 74 75 66 66 0a 0a 28 64 65 66 6d 61 63 72 6f 20 Async.handling.stuff..(defmacro.
23da0 77 69 74 68 2d 73 74 64 6f 75 74 2d 74 6f 2d 65 6c 6e 6f 64 65 20 28 68 74 74 70 63 6f 6e 20 26 with-stdout-to-elnode.(httpcon.&
23dc0 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 45 78 65 63 75 74 65 20 42 4f 44 59 20 73 6f 20 74 68 rest.body)..."Execute.BODY.so.th
23de0 61 74 20 61 6e 79 20 6f 75 74 70 75 74 20 67 65 74 73 20 73 65 6e 74 20 74 6f 20 48 54 54 50 43 at.any.output.gets.sent.to.HTTPC
23e00 4f 4e 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 ON."...(declare....(debug.(sexp.
23e20 26 72 65 73 74 20 66 6f 72 6d 29 29 0a 20 20 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 29 0a &rest.form))....(indent.defun)).
23e40 20 20 28 6c 65 74 20 28 28 68 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74 74 70 63 6f ..(let.((hv.(make-symbol."httpco
23e60 6e 76 61 72 22 29 29 0a 20 20 20 20 20 20 20 20 28 76 61 6c 20 28 6d 61 6b 65 2d 73 79 6d 62 6f nvar")).........(val.(make-symbo
23e80 6c 20 22 76 61 6c 75 65 22 29 29 29 0a 20 20 20 20 60 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 l."value"))).....`(with-temp-buf
23ea0 66 65 72 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 2c 68 76 20 2c 68 74 74 70 63 6f 6e 29 0a fer........(let.((,hv.,httpcon).
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 20 28 63 .............(standard-output.(c
23ee0 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 urrent-buffer)))..........(let.(
23f00 28 2c 76 61 6c 20 28 70 72 6f 67 6e 20 2c 40 62 6f 64 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 (,val.(progn.,@body)))..........
23f20 20 20 3b 3b 20 46 49 58 4d 45 20 2d 20 4e 65 65 64 20 61 20 6c 6f 6f 70 20 68 65 72 65 0a 20 20 ..;;.FIXME.-.Need.a.loop.here...
23f40 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e .........(elnode-http-send-strin
23f60 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 2c 68 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 62 g.............,hv.............(b
23f80 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 uffer-substring.(point-min).(poi
23fa0 6e 74 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 nt-max)))............(elnode-htt
23fc0 70 2d 72 65 74 75 72 6e 20 2c 68 76 29 29 29 29 29 29 0a 0a 0a 3b 3b 20 45 6c 6e 6f 64 65 20 63 p-return.,hv))))))...;;.Elnode.c
23fe0 68 69 6c 64 20 70 72 6f 63 65 73 73 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66 63 75 73 74 hild.process.functions..(defcust
24000 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 6e 69 6c 0a 20 om.elnode-log-worker-elisp.nil..
24020 20 22 49 66 20 74 72 75 65 20 74 68 65 6e 20 77 6f 72 6b 65 72 20 45 6c 69 73 70 20 28 45 6c 69 ."If.true.then.worker.Elisp.(Eli
24040 73 70 20 72 75 6e 20 69 6e 20 61 20 63 68 69 6c 64 2d 45 6d 61 63 73 20 70 72 6f 63 65 73 73 29 sp.run.in.a.child-Emacs.process)
24060 20 69 73 20 6c 6f 67 67 65 64 2e 0a 0a 54 68 65 20 62 75 66 66 65 72 20 27 2a 20 65 6c 6e 6f 64 .is.logged...The.buffer.'*.elnod
24080 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 2a 27 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 e-worker-elisp.*'.is.used.for.th
240a0 65 20 6c 6f 67 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 e.log."...:group.'elnode...:type
240c0 20 27 28 62 6f 6f 6c 65 61 6e 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d .'(boolean))..(defcustom.elnode-
240e0 6c 6f 67 2d 77 6f 72 6b 65 72 2d 72 65 73 70 6f 6e 73 65 73 20 6e 69 6c 0a 20 20 22 49 66 20 74 log-worker-responses.nil..."If.t
24100 72 75 65 20 74 68 65 6e 20 77 6f 72 6b 65 72 20 45 6c 69 73 70 20 6c 6f 67 73 20 72 65 73 70 6f rue.then.worker.Elisp.logs.respo
24120 6e 73 65 73 20 69 6e 20 61 20 62 75 66 66 65 72 2e 0a 0a 54 68 65 20 62 75 66 66 65 72 20 27 2a nses.in.a.buffer...The.buffer.'*
24140 20 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 72 65 73 70 6f 6e 73 65 20 2a 27 20 69 73 20 75 73 .elnode-worker-response.*'.is.us
24160 65 64 20 66 6f 72 20 74 68 65 20 6c 6f 67 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 ed.for.the.log."...:group.'elnod
24180 65 0a 20 20 3a 74 79 70 65 20 27 28 62 6f 6f 6c 65 61 6e 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c e...:type.'(boolean))..(defun.el
241a0 6e 6f 64 65 2d 2d 77 6f 72 6b 65 72 2d 66 69 6c 74 65 72 2d 68 65 6c 70 65 72 20 28 70 72 6f 63 node--worker-filter-helper.(proc
241c0 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ess.............................
241e0 20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........data...................
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 69 6c 64 2d 6c 69 73 70 0a 20 20 ...................child-lisp...
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
24240 20 20 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a 20 20 22 41 20 68 65 6c 70 65 72 20 66 75 6e 63 74 ...out-stream)..."A.helper.funct
24260 69 6f 6e 20 66 6f 72 20 60 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 27 2e 0a 0a ion.for.`elnode-worker-elisp'...
24280 53 65 6e 64 73 20 44 41 54 41 20 62 65 69 6e 67 20 73 65 6e 74 20 66 72 6f 6d 20 50 52 4f 43 45 Sends.DATA.being.sent.from.PROCE
242a0 53 53 20 74 6f 20 4f 55 54 2d 53 54 52 45 41 4d 2e 0a 0a 43 48 49 4c 44 2d 4c 49 53 50 20 69 73 SS.to.OUT-STREAM...CHILD-LISP.is
242c0 20 73 65 6e 74 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 45 6d 61 63 73 27 20 71 75 65 72 .sent.in.response.to.Emacs'.quer
242e0 79 20 66 6f 72 20 74 68 65 20 4c 69 73 70 20 6f 6e 20 73 74 64 69 6e 2e 22 0a 20 20 28 69 66 20 y.for.the.Lisp.on.stdin."...(if.
24300 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 6f 72 6b 65 72 2d 72 65 73 70 6f 6e 73 65 73 0a 20 20 20 20 elnode-log-worker-responses.....
24320 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 ..(with-current-buffer..........
24340 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 20 65 6c 6e 6f 64 65 2d 77 6f .(get-buffer-create."*.elnode-wo
24360 72 6b 65 72 2d 72 65 73 70 6f 6e 73 65 20 2a 22 29 0a 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d rker-response.*").........(goto-
24380 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 char.(point-max)).........(inser
243a0 74 20 64 61 74 61 29 29 29 0a 0a 20 20 3b 3b 20 53 70 69 74 20 6f 75 74 20 61 20 62 69 74 20 6f t.data)))....;;.Spit.out.a.bit.o
243c0 66 20 74 68 65 20 64 61 74 61 20 28 74 72 75 6e 63 61 74 65 64 29 0a 20 20 28 65 6c 6e 6f 64 65 f.the.data.(truncated)...(elnode
243e0 2d 65 72 72 6f 72 0a 20 20 20 22 65 6c 6e 6f 64 65 2d 2d 77 6f 72 6b 65 72 2d 66 69 6c 74 65 72 -error...."elnode--worker-filter
24400 2d 68 65 6c 70 65 72 20 64 61 74 61 20 25 73 2e 2e 2e 20 25 73 22 0a 20 20 20 28 65 6c 6e 6f 64 -helper.data.%s....%s"....(elnod
24420 65 2d 74 72 75 6e 63 20 64 61 74 61 29 0a 20 20 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a 0a 20 20 e-trunc.data)....out-stream)....
24440 3b 3b 20 57 65 20 67 65 74 20 74 68 69 73 20 61 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 72 65 ;;.We.get.this.as.a.signal.to.re
24460 61 64 20 61 20 6c 69 73 70 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 28 69 66 20 28 65 71 75 61 ad.a.lisp.expression...(if.(equa
24480 6c 20 64 61 74 61 20 22 4c 69 73 70 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 22 29 0a 20 20 20 20 l.data."Lisp.expression:.").....
244a0 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 70 72 6f 63 65 73 73 20 63 ..(process-send-string.process.c
244c0 68 69 6c 64 2d 6c 69 73 70 29 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 28 28 62 75 66 66 hild-lisp).....(cond......((buff
244e0 65 72 70 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 erp.out-stream).......(with-curr
24500 65 6e 74 2d 62 75 66 66 65 72 20 6f 75 74 2d 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 28 69 ent-buffer.out-stream.........(i
24520 6e 73 65 72 74 20 64 61 74 61 29 29 29 0a 20 20 20 20 20 28 28 66 75 6e 63 74 69 6f 6e 70 20 6f nsert.data)))......((functionp.o
24540 75 74 2d 73 74 72 65 61 6d 29 0a 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 6f 75 74 2d 73 74 ut-stream).......(funcall.out-st
24560 72 65 61 6d 20 70 72 6f 63 65 73 73 20 64 61 74 61 29 29 0a 20 20 20 20 20 28 28 70 72 6f 63 65 ream.process.data))......((proce
24580 73 73 70 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 ssp.out-stream).......(if.(not.(
245a0 65 71 75 61 6c 20 22 63 6c 6f 73 65 64 22 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 70 equal."closed".(process-status.p
245c0 72 6f 63 65 73 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 0a 20 20 20 rocess)))...........(funcall....
245e0 20 20 20 20 20 20 20 20 3b 3b 20 44 6f 65 73 20 74 68 65 20 6f 75 74 70 75 74 2d 73 74 72 65 61 ........;;.Does.the.output-strea
24600 6d 20 68 61 76 65 20 61 20 73 70 65 63 69 66 69 63 20 66 75 6e 63 74 69 6f 6e 3f 0a 20 20 20 20 m.have.a.specific.function?.....
24620 20 20 20 20 20 20 20 28 6f 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 6f 75 74 2d 73 74 72 65 .......(or.(process-get.out-stre
24640 61 6d 20 3a 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e 63 74 69 6f 6e 29 0a 20 20 20 20 20 20 am.:send-string-function).......
24660 20 20 20 20 20 20 20 20 20 27 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 29 0a 20 .........'process-send-string)..
24680 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20 64 61 74 61 20 74 6f 20 73 65 6e 74 20 74 6f ..........;;.The.data.to.sent.to
246a0 20 74 68 65 20 6f 75 74 70 75 74 2d 73 74 72 65 61 6d 20 70 72 6f 63 65 73 73 0a 20 20 20 20 20 .the.output-stream.process......
246c0 20 20 20 20 20 20 6f 75 74 2d 73 74 72 65 61 6d 20 64 61 74 61 29 29 29 29 29 29 0a 0a 28 64 65 ......out-stream.data))))))..(de
246e0 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 77 6f 72 6b 65 72 2d 6c 69 73 70 2d 68 65 6c 70 65 72 20 28 fun.elnode--worker-lisp-helper.(
24700 63 68 69 6c 64 2d 6c 69 73 70 29 0a 20 20 22 43 61 6c 6c 65 64 20 77 69 74 68 20 43 48 49 4c 44 child-lisp)..."Called.with.CHILD
24720 2d 4c 49 53 50 20 69 74 20 72 65 74 75 72 6e 73 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 43 48 -LISP.it.returns.a.version.of.CH
24740 49 4c 44 2d 4c 49 53 50 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20 66 75 6e 63 74 ILD-LISP...By.default.this.funct
24760 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 65 78 63 65 70 74 20 72 65 74 75 72 6e 20 69 ion.does.nothing.except.return.i
24780 74 27 73 20 61 72 67 75 6d 65 6e 74 2e 0a 0a 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73 t's.argument...The.function.exis
247a0 74 73 20 73 6f 20 74 68 61 74 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 43 41 4e 20 66 ts.so.that.other.functions.CAN.f
247c0 6c 65 74 20 69 74 20 61 6e 64 20 74 68 75 73 0a 6f 76 65 72 72 69 64 65 20 74 68 65 20 4c 69 73 let.it.and.thus.override.the.Lis
247e0 70 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 63 68 69 6c 64 20 45 6d 61 63 p.being.passed.to.the.child.Emac
24800 73 2e 22 0a 20 20 63 68 69 6c 64 2d 6c 69 73 70 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 65 6c 6e s."...child-lisp)..(defmacro.eln
24820 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 28 6f 75 74 70 75 74 2d 73 74 72 65 61 6d 20 ode-worker-elisp.(output-stream.
24840 62 69 6e 64 69 6e 67 73 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 45 76 61 6c 75 61 74 65 bindings.&rest.body)..."Evaluate
24860 20 74 68 65 20 42 4f 44 59 20 69 6e 20 61 20 63 68 69 6c 64 20 45 6d 61 63 73 20 63 6f 6e 6e 65 .the.BODY.in.a.child.Emacs.conne
24880 63 74 65 64 20 74 6f 20 4f 55 54 50 55 54 2d 53 54 52 45 41 4d 2e 0a 0a 54 68 65 20 42 49 4e 44 cted.to.OUTPUT-STREAM...The.BIND
248a0 49 4e 47 53 20 61 72 65 20 6c 65 74 2d 66 6f 72 6d 20 76 61 72 69 61 62 6c 65 20 61 73 73 69 67 INGS.are.let-form.variable.assig
248c0 6e 6d 65 6e 74 73 20 77 68 69 63 68 20 61 72 65 0a 73 65 72 69 61 6c 69 7a 65 64 20 66 6f 72 20 nments.which.are.serialized.for.
248e0 74 68 65 20 63 68 69 6c 64 20 45 6d 61 63 73 2e 20 20 55 6e 6c 65 73 73 20 61 20 76 61 72 69 61 the.child.Emacs...Unless.a.varia
24900 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 70 61 72 65 6e 74 20 69 73 20 65 78 70 6c 69 63 69 74 6c ble.from.the.parent.is.explicitl
24920 79 20 73 74 61 74 65 64 20 68 65 72 65 20 69 74 20 77 69 6c 6c 20 4e 4f 54 20 62 65 20 61 63 63 y.stated.here.it.will.NOT.be.acc
24940 65 73 73 69 62 6c 65 20 69 6e 20 74 68 65 0a 63 68 69 6c 64 20 45 6d 61 63 73 2e 0a 0a 54 68 65 essible.in.the.child.Emacs...The
24960 20 63 68 69 6c 64 20 45 6d 61 63 73 20 68 61 73 20 61 20 60 6c 6f 61 64 2d 70 61 74 68 27 20 65 .child.Emacs.has.a.`load-path'.e
24980 78 61 63 74 6c 79 20 61 73 20 74 68 65 20 60 6c 6f 61 64 2d 70 61 74 68 27 20 6f 66 0a 74 68 65 xactly.as.the.`load-path'.of.the
249a0 20 70 61 72 65 6e 74 20 45 6d 61 63 73 20 61 74 20 65 78 65 63 75 74 69 6f 6e 2e 0a 0a 54 68 65 .parent.Emacs.at.execution...The
249c0 20 63 72 65 61 74 65 64 20 63 68 69 6c 64 20 45 6d 61 63 73 20 70 72 6f 63 65 73 73 20 69 73 20 .created.child.Emacs.process.is.
249e0 72 65 74 75 72 6e 65 64 2e 20 20 49 74 27 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 0a 6b 69 6c 6c returned...It's.possible.to.kill
24a00 20 74 68 65 20 63 68 69 6c 64 20 45 6d 61 63 73 20 70 72 6f 63 65 73 73 20 6f 72 20 64 6f 20 6f .the.child.Emacs.process.or.do.o
24a20 74 68 65 72 20 74 68 69 6e 67 73 20 74 6f 20 69 74 20 64 69 72 65 63 74 6c 79 2e 0a 54 68 69 73 ther.things.to.it.directly..This
24a40 20 63 6f 75 6c 64 20 62 65 20 76 65 72 79 20 64 61 6e 67 65 72 6f 75 73 20 68 6f 77 65 76 65 72 .could.be.very.dangerous.however
24a60 2c 20 79 6f 75 20 73 68 6f 75 6c 64 20 6b 6e 6f 77 20 77 68 61 74 20 79 6f 75 0a 61 72 65 20 64 ,.you.should.know.what.you.are.d
24a80 6f 69 6e 67 20 62 65 66 6f 72 65 20 61 74 74 65 6d 70 74 69 6e 67 20 69 74 2e 0a 0a 54 68 65 20 oing.before.attempting.it...The.
24aa0 4f 55 54 50 55 54 2d 53 54 52 45 41 4d 20 63 6f 75 6c 64 20 62 65 20 61 20 62 75 66 66 65 72 2c OUTPUT-STREAM.could.be.a.buffer,
24ac0 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 61 6e 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 2e 0a .a.function.or.another.process..
24ae0 0a 49 66 20 74 68 65 20 4f 55 54 50 55 54 2d 53 54 52 45 41 4d 20 69 73 20 61 6e 6f 74 68 65 72 .If.the.OUTPUT-STREAM.is.another
24b00 20 70 72 6f 63 65 73 73 20 69 74 20 6d 61 79 20 68 61 76 65 20 61 20 70 72 6f 63 65 73 73 0a 70 .process.it.may.have.a.process.p
24b20 72 6f 70 65 72 74 79 20 60 3a 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e 63 74 69 6f 6e 27 20 roperty.`:send-string-function'.
24b40 65 76 61 6c 75 61 74 69 6e 67 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65 6e 64 evaluating.to.a.function.to.send
24b60 0a 64 61 74 61 20 74 6f 20 74 68 61 74 20 70 72 6f 63 65 73 73 2e 20 20 54 68 65 20 66 75 6e 63 .data.to.that.process...The.func
24b80 74 69 6f 6e 20 73 68 6f 75 6c 64 20 74 61 6b 65 20 74 68 65 20 73 61 6d 65 0a 61 72 67 75 6d 65 tion.should.take.the.same.argume
24ba0 6e 74 73 20 61 73 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 45 6d 61 63 73 20 4c 69 73 70 20 60 nts.as.the.standard.Emacs.Lisp.`
24bc0 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 27 2e 0a 0a 46 75 72 74 68 65 72 6d 6f process-send-string'...Furthermo
24be0 72 65 2c 20 69 66 20 74 68 65 20 4f 55 54 50 55 54 2d 53 54 52 45 41 4d 20 69 73 20 61 6e 6f 74 re,.if.the.OUTPUT-STREAM.is.anot
24c00 68 65 72 20 70 72 6f 63 65 73 73 2c 20 77 68 65 6e 20 74 68 65 0a 63 68 69 6c 64 20 45 6d 61 63 her.process,.when.the.child.Emac
24c20 73 20 66 69 6e 69 73 68 65 73 20 61 6e 20 45 4f 46 20 69 73 20 73 65 6e 74 20 74 6f 20 74 68 61 s.finishes.an.EOF.is.sent.to.tha
24c40 74 20 70 72 6f 63 65 73 73 2e 20 20 49 66 20 74 68 65 0a 4f 55 54 50 55 54 2d 53 54 52 45 41 4d t.process...If.the.OUTPUT-STREAM
24c60 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 70 72 6f 63 65 73 73 20 70 72 6f 70 65 72 74 79 20 .process.has.a.process.property.
24c80 60 3a 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f 6e 27 0a 74 68 65 6e 20 74 68 61 74 20 69 `:send-eof-function'.then.that.i
24ca0 73 20 75 73 65 64 20 74 6f 20 73 65 6e 64 20 74 68 65 20 45 4f 46 2e 20 20 54 68 65 20 66 75 6e s.used.to.send.the.EOF...The.fun
24cc0 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 74 61 6b 65 20 74 68 65 0a 73 61 6d 65 20 61 72 67 75 6d ction.should.take.the.same.argum
24ce0 65 6e 74 73 20 61 73 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 45 6d 61 63 73 20 4c 69 73 70 20 ents.as.the.standard.Emacs.Lisp.
24d00 60 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 27 2e 0a 0a 41 6e 20 65 78 61 6d 70 6c 65 3a `process-send-eof'...An.example:
24d20 0a 0a 20 28 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 68 74 74 70 2d 63 6f 6e ...(elnode-worker-elisp.http-con
24d40 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 nection.......................((
24d60 70 61 74 68 20 28 70 61 74 68 2d 66 75 6e 63 74 69 6f 6e 29 29 29 0a 20 20 20 28 72 65 71 75 69 path.(path-function)))....(requi
24d80 72 65 20 27 63 72 65 6f 6c 65 29 0a 20 20 20 28 63 72 65 6f 6c 65 2d 77 69 6b 69 20 70 61 74 68 re.'creole)....(creole-wiki.path
24da0 29 29 0a 0a 50 72 65 73 75 6d 69 6e 67 20 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 ))..Presuming.http-connection.is
24dc0 20 61 20 70 72 6f 63 65 73 73 20 28 69 6e 20 74 68 65 20 6d 61 6e 6e 65 72 20 6f 66 20 45 6c 6e .a.process.(in.the.manner.of.Eln
24de0 6f 64 65 2c 0a 66 6f 72 20 65 78 61 6d 70 6c 65 29 20 74 68 69 73 20 77 69 6c 6c 20 63 61 75 73 ode,.for.example).this.will.caus
24e00 65 20 61 20 63 68 69 6c 64 20 45 6d 61 63 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 2c 20 77 e.a.child.Emacs.to.be.created,.w
24e20 69 74 68 69 6e 0a 77 68 69 63 68 20 60 70 61 74 68 27 20 28 77 68 69 63 68 20 69 73 20 73 65 72 ithin.which.`path'.(which.is.ser
24e40 69 61 6c 69 7a 65 64 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61 ialized.from.the.value.of.the.pa
24e60 72 65 6e 74 0a 45 6d 61 63 73 27 20 60 70 61 74 68 2d 66 75 6e 63 74 69 6f 6e 27 29 20 77 69 6c rent.Emacs'.`path-function').wil
24e80 6c 20 62 65 20 6c 6f 61 64 65 64 20 61 6e 64 20 63 6f 6e 76 65 72 74 65 64 20 66 72 6f 6d 0a 57 l.be.loaded.and.converted.from.W
24ea0 69 6b 69 43 72 65 6f 6c 65 20 74 6f 20 48 54 4d 4c 20 61 6e 64 20 74 68 65 6e 20 73 65 6e 74 20 ikiCreole.to.HTML.and.then.sent.
24ec0 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 73 74 72 65 61 6d 2e 0a 54 to.the.standard.output.stream..T
24ee0 68 65 20 63 68 69 6c 64 27 73 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 73 74 72 65 61 he.child's.standard.output.strea
24f00 6d 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 0a 60 m.is.connected.directly.to.the.`
24f20 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 27 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c http-connection'...In.this.case,
24f40 20 70 72 65 73 75 6d 61 62 6c 79 20 74 68 65 0a 60 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e .presumably.the.`http-connection
24f60 27 20 77 6f 75 6c 64 20 68 61 76 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 '.would.have.functions.attached.
24f80 74 6f 20 74 68 65 20 70 72 6f 70 65 72 74 69 65 73 0a 60 3a 73 65 6e 64 2d 73 74 72 69 6e 67 2d to.the.properties.`:send-string-
24fa0 66 75 6e 63 74 69 6f 6e 27 20 61 6e 64 20 60 3a 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f function'.and.`:send-eof-functio
24fc0 6e 27 20 74 6f 20 64 6f 20 48 54 54 50 0a 63 68 75 6e 6b 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64 n'.to.do.HTTP.chunk.encoding.and
24fe0 20 74 6f 20 65 6e 64 20 74 68 65 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 72 72 .to.end.the.HTTP.connection.corr
25000 65 63 74 6c 79 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 69 6e 64 65 6e 74 20 32 29 ectly."...(declare....(indent.2)
25020 0a 20 20 20 28 64 65 62 75 67 0a 20 20 20 20 28 73 65 78 70 0a 20 20 20 20 20 28 26 72 65 73 74 ....(debug.....(sexp......(&rest
25040 0a 20 20 20 20 20 20 26 6f 72 20 73 79 6d 62 6f 6c 70 20 28 67 61 74 65 20 73 79 6d 62 6f 6c 70 .......&or.symbolp.(gate.symbolp
25060 20 26 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 6d 29 29 0a 20 20 20 20 20 26 72 65 73 74 20 66 6f 72 .&optional.form))......&rest.for
25080 6d 29 29 29 0a 20 20 28 6c 65 74 20 28 28 6c 6f 61 64 70 61 74 68 76 61 72 20 28 6d 61 6b 65 2d m)))...(let.((loadpathvar.(make-
250a0 73 79 6d 62 6f 6c 20 22 6c 6f 61 64 2d 70 61 74 68 2d 66 6f 72 6d 22 29 29 0a 20 20 20 20 20 20 symbol."load-path-form")).......
250c0 20 20 28 62 69 6e 64 69 6e 67 73 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 62 69 6e ..(bindingsvar.(make-symbol."bin
250e0 64 69 6e 67 73 22 29 29 0a 20 20 20 20 20 20 20 20 28 63 68 69 6c 64 6c 69 73 70 76 61 72 20 28 dings")).........(childlispvar.(
25100 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 63 68 69 6c 64 2d 6c 69 73 70 22 29 29 0a 20 20 20 20 20 make-symbol."child-lisp"))......
25120 20 20 20 28 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 ...(childlispfile.(make-symbol."
25140 63 68 69 6c 64 2d 6c 69 73 70 2d 66 69 6c 65 22 29 29 0a 20 20 20 20 20 20 20 20 28 66 69 6c 74 child-lisp-file")).........(filt
25160 65 72 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 66 69 6c 74 65 72 2d 66 75 6e 63 74 ervar.(make-symbol."filter-funct
25180 69 6f 6e 22 29 29 0a 20 20 20 20 20 20 20 20 28 63 6d 64 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d ion")).........(cmdvar.(make-sym
251a0 62 6f 6c 20 22 63 6f 6d 6d 61 6e 64 22 29 29 0a 20 20 20 20 20 20 20 20 28 70 72 6f 63 76 61 72 bol."command")).........(procvar
251c0 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 70 72 6f 63 65 73 73 22 29 29 0a 20 20 20 20 20 20 .(make-symbol."process")).......
251e0 20 20 28 6e 61 6d 65 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 70 72 6f 63 65 73 73 ..(namevar.(make-symbol."process
25200 2d 6e 61 6d 65 22 29 29 0a 20 20 20 20 20 20 20 20 28 62 75 66 76 61 72 20 28 6d 61 6b 65 2d 73 -name")).........(bufvar.(make-s
25220 79 6d 62 6f 6c 20 22 62 75 66 66 65 72 22 29 29 0a 20 20 20 20 20 20 20 20 28 6f 75 74 76 61 72 ymbol."buffer")).........(outvar
25240 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 6f 75 74 70 75 74 2d 73 74 72 65 61 6d 22 29 29 29 .(make-symbol."output-stream")))
25260 0a 20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c 6f 75 74 76 61 72 20 2c 6f 75 74 70 75 74 2d 73 74 .....`(let*.((,outvar.,output-st
25280 72 65 61 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 63 68 69 6c 64 6c 69 73 70 76 61 72 ream).............(,childlispvar
252a0 20 20 3b 20 74 68 65 20 6c 69 73 70 20 74 6f 20 72 75 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..;.the.lisp.to.run.............
252c0 20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 72 65 20 .(concat...............;;.There.
252e0 69 73 20 61 20 76 65 72 79 20 73 74 72 61 6e 67 65 20 74 68 69 6e 67 20 77 69 74 68 20 73 65 6e is.a.very.strange.thing.with.sen
25300 64 69 6e 67 20 6c 69 73 70 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 28 72 ding.lisp.to...............;;.(r
25320 65 61 64 29 20 6f 76 65 72 20 61 20 70 69 70 65 64 20 73 74 72 65 61 6d 2e 2e 2e 20 28 72 65 61 ead).over.a.piped.stream....(rea
25340 64 29 20 63 61 6e 27 74 20 63 6f 70 65 20 77 69 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d).can't.cope.with..............
25360 20 3b 3b 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 3b 20 73 6f 20 77 65 20 65 6e 63 6f 64 65 .;;.multiple.lines;.so.we.encode
25380 20 6e 65 77 6c 69 6e 65 20 68 65 72 65 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 .newline.here................(re
253a0 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 place-regexp-in-string..........
253c0 20 20 20 20 20 20 22 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 5c 5c 6e ......"\n"................"\\\\n
253e0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 28 70 72 6f 67 6e "................(format."(progn
25400 20 28 73 65 74 71 20 6c 6f 61 64 2d 70 61 74 68 20 28 71 75 6f 74 65 20 25 53 29 29 20 28 6c 65 .(setq.load-path.(quote.%S)).(le
25420 74 20 25 53 20 25 53 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.%S.%S))"......................
25440 20 20 6c 6f 61 64 2d 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..load-path.....................
25460 20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...(list........................
25480 20 2c 40 28 6c 6f 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .,@(loop........................
254a0 20 20 20 20 66 6f 72 20 66 20 69 6e 20 62 69 6e 64 69 6e 67 73 20 63 6f 6c 6c 65 63 74 0a 20 20 ....for.f.in.bindings.collect...
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 27 .........................(list.'
254e0 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 list............................
25500 20 20 20 20 20 20 60 28 71 75 6f 74 65 20 2c 28 63 61 72 20 66 29 29 0a 20 20 20 20 20 20 20 20 ......`(quote.,(car.f)).........
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28 66 6f 72 6d 61 .........................`(forma
25540 74 20 22 25 73 22 20 2c 28 63 61 64 72 20 66 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 t."%s".,(cadr.f)))))............
25560 20 20 20 20 20 20 20 20 20 20 20 20 27 28 70 72 6f 67 6e 20 2c 40 28 65 6c 6e 6f 64 65 2d 2d 77 ............'(progn.,@(elnode--w
25580 6f 72 6b 65 72 2d 6c 69 73 70 2d 68 65 6c 70 65 72 20 62 6f 64 79 29 29 29 29 0a 20 20 20 20 20 orker-lisp-helper.body))))......
255a0 20 20 20 20 20 20 20 20 20 22 5c 6e 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 63 68 ........."\n")).............(,ch
255c0 69 6c 64 6c 69 73 70 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 ildlispfile..............(let.((
255e0 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 20 28 6d 61 6b 65 2d 74 65 6d 70 2d 66 69 6c 65 20 22 ,childlispfile.(make-temp-file."
25600 65 6c 6e 6f 64 65 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d elnode")))................(with-
25620 74 65 6d 70 2d 66 69 6c 65 20 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 0a 20 20 20 20 20 20 20 temp-file.,childlispfile........
25640 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 2c 63 68 69 6c 64 6c 69 73 70 76 61 72 29 ..........(insert.,childlispvar)
25660 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 29 )................,childlispfile)
25680 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 63 6d 64 76 61 72 0a 20 20 20 20 20 20 20 20 20 ).............(,cmdvar..........
256a0 20 20 20 20 28 63 6f 6e 63 61 74 20 22 65 6d 61 63 73 20 2d 71 20 2d 62 61 74 63 68 20 22 0a 20 ....(concat."emacs.-q.-batch."..
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 73 63 72 69 70 74 20 22 20 ...................."--script.".
256e0 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,childlispfile..................
25700 20 20 20 20 29 29 3b 3b 22 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 22 29 29 0a 20 20 20 20 20 20 ....));;".2>./dev/null")).......
25720 20 20 20 20 20 20 28 2c 6e 61 6d 65 76 61 72 20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 ......(,namevar.(concat.........
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 75 6d 62 65 72 2d 74 6f 2d 73 74 72 69 6e 67 ...............(number-to-string
25760 20 28 72 61 6e 64 6f 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .(random))......................
25780 20 20 28 6e 75 6d 62 65 72 2d 74 6f 2d 73 74 72 69 6e 67 20 28 66 6c 6f 61 74 2d 74 69 6d 65 29 ..(number-to-string.(float-time)
257a0 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 57 65 20 68 61 76 65 20 74 6f 20 6d 61 ))).............;;.We.have.to.ma
257c0 6b 65 20 61 20 62 75 66 66 65 72 20 75 6e 6c 65 73 73 20 74 68 65 20 6f 75 74 70 75 74 2d 73 74 ke.a.buffer.unless.the.output-st
257e0 72 65 61 6d 20 69 73 20 61 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 62 ream.is.a.buffer.............(,b
25800 75 66 76 61 72 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ufvar.(cond.....................
25820 20 20 28 28 62 75 66 66 65 72 70 20 2c 6f 75 74 76 61 72 29 20 2c 6f 75 74 76 61 72 29 0a 20 20 ..((bufferp.,outvar).,outvar)...
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20 20 20 ....................(t..........
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 ..............(get-buffer-create
25880 20 28 66 6f 72 6d 61 74 20 22 2a 20 25 73 20 2a 22 20 2c 6e 61 6d 65 76 61 72 29 29 29 29 29 0a .(format."*.%s.*".,namevar))))).
258a0 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 70 72 6f 63 76 61 72 20 28 73 74 61 72 74 2d 70 72 6f ............(,procvar.(start-pro
258c0 63 65 73 73 2d 73 68 65 6c 6c 2d 63 6f 6d 6d 61 6e 64 20 2c 6e 61 6d 65 76 61 72 20 2c 62 75 66 cess-shell-command.,namevar.,buf
258e0 76 61 72 20 2c 63 6d 64 76 61 72 29 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 4c 6f 67 20 74 68 65 var.,cmdvar)))........;;.Log.the
25900 20 6c 69 73 70 0a 20 20 20 20 20 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 6f 72 6b .lisp........(if.elnode-log-work
25920 65 72 2d 65 6c 69 73 70 0a 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e er-elisp............(with-curren
25940 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 20 65 t-buffer.(get-buffer-create."*.e
25960 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 2a 22 29 0a 20 20 20 20 20 20 20 20 20 lnode-worker-elisp.*")..........
25980 20 20 20 20 28 69 6e 73 65 72 74 20 2c 63 68 69 6c 64 6c 69 73 70 76 61 72 29 29 29 0a 20 20 20 ....(insert.,childlispvar)))....
259a0 20 20 20 20 3b 3b 20 53 65 74 75 70 20 61 20 66 69 6c 74 65 72 20 66 75 6e 63 69 6f 6e 20 6f 6e ....;;.Setup.a.filter.funcion.on
259c0 20 74 68 65 20 63 68 69 6c 64 20 6c 69 73 70 20 74 6f 20 6d 61 70 20 6f 75 74 70 75 74 20 62 61 .the.child.lisp.to.map.output.ba
259e0 63 6b 0a 20 20 20 20 20 20 20 3b 3b 20 74 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 6f 75 74 ck........;;.to.whatever.the.out
25a00 70 75 74 20 69 73 0a 20 20 20 20 20 20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 2d 66 69 6c 74 65 put.is........(set-process-filte
25a20 72 0a 20 20 20 20 20 20 20 20 2c 70 72 6f 63 76 61 72 0a 20 20 20 20 20 20 20 20 28 6c 61 6d 62 r.........,procvar.........(lamb
25a40 64 61 20 28 70 72 6f 63 65 73 73 20 64 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e da.(process.data)...........(eln
25a60 6f 64 65 2d 2d 77 6f 72 6b 65 72 2d 66 69 6c 74 65 72 2d 68 65 6c 70 65 72 0a 20 20 20 20 20 20 ode--worker-filter-helper.......
25a80 20 20 20 20 20 70 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 20 .....process............data....
25aa0 20 20 20 20 20 20 20 20 2c 63 68 69 6c 64 6c 69 73 70 76 61 72 0a 20 20 20 20 20 20 20 20 20 20 ........,childlispvar...........
25ac0 20 2c 6f 75 74 76 61 72 29 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 4e 6f 77 20 73 65 74 75 70 20 .,outvar)))........;;.Now.setup.
25ae0 74 68 65 20 73 65 6e 74 69 6e 65 6c 0a 20 20 20 20 20 20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 the.sentinel........(set-process
25b00 2d 73 65 6e 74 69 6e 65 6c 0a 20 20 20 20 20 20 20 20 2c 70 72 6f 63 76 61 72 0a 20 20 20 20 20 -sentinel.........,procvar......
25b20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 72 6f 63 65 73 73 20 73 74 61 74 75 73 29 0a 20 20 20 20 ...(lambda.(process.status).....
25b40 20 20 20 20 20 20 3b 3b 20 43 68 6f 6f 73 65 20 6f 72 20 66 61 6b 65 20 61 20 73 65 6e 64 2d 65 ......;;.Choose.or.fake.a.send-e
25b60 6f 66 20 66 75 6e 63 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 of.func...........(elnode-error.
25b80 22 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 73 65 6e 74 69 6e 65 6c 20 66 6f "elnode-worker-elisp.sentinel.fo
25ba0 72 20 25 73 22 20 2c 6e 61 6d 65 76 61 72 29 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 r.%s".,namevar)...........(let.(
25bc0 28 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (send-eof-function..............
25be0 20 20 20 20 28 6f 72 20 28 61 6e 64 20 28 70 72 6f 63 65 73 73 70 20 2c 6f 75 74 76 61 72 29 0a ....(or.(and.(processp.,outvar).
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 70 ..........................(or.(p
25c20 72 6f 63 65 73 73 2d 67 65 74 20 2c 6f 75 74 76 61 72 20 3a 73 65 6e 64 2d 65 6f 66 2d 66 75 6e rocess-get.,outvar.:send-eof-fun
25c40 63 74 69 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ction)..........................
25c60 20 20 20 20 20 27 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 29 29 0a 20 20 20 20 20 20 20 .....'process-send-eof))........
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f 6e 29 0a 20 20 20 20 ..............(lambda.(con).....
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 ...................(elnode-error
25cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 ........................."elnode
25ce0 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 66 61 6b 65 20 65 6f 66 20 66 75 6e 63 20 25 73 22 0a -worker-elisp.fake.eof.func.%s".
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 6e 61 6d 65 76 61 72 ........................,namevar
25d20 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 ))))).............(cond.........
25d40 20 20 20 20 20 3b 3b 20 4e 6f 72 6d 61 6c 20 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .....;;.Normal.end..............
25d60 28 28 65 71 75 61 6c 20 73 74 61 74 75 73 20 22 66 69 6e 69 73 68 65 64 5c 6e 22 29 0a 20 20 20 ((equal.status."finished\n")....
25d80 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 ...........(elnode-error........
25da0 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 25 73 20 ........"elnode-worker-elisp.%s.
25dc0 63 6f 6d 70 6c 65 74 65 64 20 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 6e 61 completed.%s"................,na
25de0 6d 65 76 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 6f 75 74 76 61 72 29 0a 20 20 mevar................,outvar)...
25e00 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 6e 64 2d 65 6f 66 2d 66 75 ............(funcall.send-eof-fu
25e20 6e 63 74 69 6f 6e 20 2c 6f 75 74 76 61 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b nction.,outvar))..............;;
25e40 20 45 72 72 6f 72 20 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 73 74 72 69 6e 67 .Error.end..............((string
25e60 2d 6d 61 74 63 68 20 22 65 78 69 74 65 64 20 61 62 6e 6f 72 6d 61 6c 6c 79 20 77 69 74 68 20 63 -match."exited.abnormally.with.c
25e80 6f 64 65 20 5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29 5c 6e 22 20 73 74 61 74 75 73 29 0a 20 20 20 20 ode.\\([0-9]+\\)\n".status).....
25ea0 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 ..........(elnode-error.........
25ec0 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 25 73 20 63 ......."elnode-worker-elisp.%s.c
25ee0 6f 6d 70 6c 65 74 65 64 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 3a 20 25 73 22 0a 20 20 20 20 ompleted.with.an.error:.%s".....
25f00 20 20 20 20 20 20 20 20 20 20 20 2c 6e 61 6d 65 76 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 ...........,namevar.............
25f20 20 20 20 73 74 61 74 75 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c ...status)...............(funcal
25f40 6c 20 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f 6e 20 2c 6f 75 74 76 61 72 29 0a 20 20 20 l.send-eof-function.,outvar)....
25f60 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 70 72 6f 63 65 ...........(delete-process.proce
25f80 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 62 75 66 66 65 ss)...............(unless.(buffe
25fa0 72 70 20 2c 6f 75 74 76 61 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6b 69 6c rp.,outvar).................(kil
25fc0 6c 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 l-buffer.(process-buffer.process
25fe0 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 41 6e 79 20 6f 74 68 65 72 20 73 ))))..............;;.Any.other.s
26000 69 67 6e 61 6c 20 73 74 61 74 75 73 20 69 73 20 69 67 6e 6f 72 65 64 0a 20 20 20 20 20 20 20 20 ignal.status.is.ignored.........
26020 20 20 20 20 20 28 74 29 29 29 29 29 0a 20 20 20 20 20 20 20 2c 70 72 6f 63 76 61 72 29 29 29 0a .....(t)))))........,procvar))).
26040 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 61 69 74 2d 66 6f 72 2d 65 78 69 74 20 28 70 72 .(defun.elnode-wait-for-exit.(pr
26060 6f 63 65 73 73 29 0a 20 20 22 57 61 69 74 20 66 6f 72 20 50 52 4f 43 45 53 53 20 73 74 61 74 75 ocess)..."Wait.for.PROCESS.statu
26080 73 20 74 6f 20 67 6f 20 74 6f 20 27 65 78 69 74 2e 22 0a 20 20 28 77 68 69 6c 65 20 28 6e 6f 74 s.to.go.to.'exit."...(while.(not
260a0 20 28 65 71 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 70 72 6f 63 65 73 73 29 20 27 65 .(eq.(process-status.process).'e
260c0 78 69 74 29 29 0a 20 20 20 20 28 73 6c 65 65 70 2d 66 6f 72 20 31 29 29 29 0a 0a 0a 3b 3b 20 54 xit)).....(sleep-for.1)))...;;.T
260e0 4f 44 4f 3a 20 68 61 6e 64 6c 65 20 65 72 72 6f 72 73 20 62 65 74 74 65 72 20 74 68 61 6e 20 6d ODO:.handle.errors.better.than.m
26100 65 73 73 61 67 69 6e 67 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 63 68 69 6c 64 2d 70 72 essaging.(defun.elnode--child-pr
26120 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 20 28 70 72 6f 63 65 73 73 20 73 74 61 74 75 73 29 0a ocess-sentinel.(process.status).
26140 20 20 22 41 20 73 65 6e 74 69 6e 65 6c 20 66 6f 72 20 45 6c 6e 6f 64 65 20 63 68 69 6c 64 20 50 .."A.sentinel.for.Elnode.child.P
26160 52 4f 43 45 53 53 2e 0a 0a 45 6c 6e 6f 64 65 20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 65 73 20 ROCESS...Elnode.child.processes.
26180 61 72 65 20 6a 75 73 74 20 45 6d 61 63 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 70 72 6f 63 are.just.Emacs.asynchronous.proc
261a0 65 73 73 65 73 20 74 68 61 74 0a 73 65 6e 64 20 74 68 65 69 72 20 6f 75 74 70 75 74 20 74 6f 20 esses.that.send.their.output.to.
261c0 61 6e 20 45 6c 6e 6f 64 65 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 54 68 65 20 an.Elnode.HTTP.connection...The.
261e0 6d 61 69 6e 20 6a 6f 62 20 6f 66 20 74 68 69 73 20 73 65 6e 74 69 6e 65 6c 20 69 73 20 74 6f 20 main.job.of.this.sentinel.is.to.
26200 6d 6f 6e 69 74 6f 72 20 77 68 65 6e 20 74 68 65 20 53 54 41 54 55 53 20 6f 66 0a 50 52 4f 43 45 monitor.when.the.STATUS.of.PROCE
26220 53 53 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 50 52 4f 43 SS.indicates.the.end.of.the.PROC
26240 45 53 53 20 61 6e 64 20 74 6f 20 64 6f 0a 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 65 6e 64 27 20 ESS.and.to.do.`elnode-http-end'.
26260 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f on.the.associated.HTTP.connectio
26280 6e 20 77 68 65 6e 20 74 68 61 74 0a 68 61 70 70 65 6e 73 2e 22 0a 20 20 28 63 6f 6e 64 0a 20 20 n.when.that.happens."...(cond...
262a0 20 28 28 65 71 75 61 6c 20 73 74 61 74 75 73 20 22 66 69 6e 69 73 68 65 64 5c 6e 22 29 0a 20 20 .((equal.status."finished\n")...
262c0 20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 ..(let.((httpcon.(process-get.pr
262e0 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 28 ocess.:elnode-httpcon))).......(
26300 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 22 45 6c 6e 6f 64 65 2d 63 68 69 6c elnode-error........"Elnode-chil
26320 64 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 20 53 74 61 74 75 73 20 40 20 66 69 6e 69 d-process-sentinel.Status.@.fini
26340 73 68 65 64 3a 20 25 73 20 2d 3e 20 25 73 20 6f 6e 20 25 73 22 0a 20 20 20 20 20 20 20 28 70 72 shed:.%s.->.%s.on.%s"........(pr
26360 6f 63 65 73 73 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 28 70 72 ocess-status.httpcon)........(pr
26380 6f 63 65 73 73 2d 73 74 61 74 75 73 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 20 20 20 68 74 74 ocess-status.process)........htt
263a0 70 63 6f 6e 29 0a 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 71 20 27 63 6c 6f 73 65 64 pcon).......(if.(not.(eq.'closed
263c0 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 .(process-status.httpcon))).....
263e0 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 ......(progn.............(elnode
26400 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 20 22 22 29 0a 20 -http-send-string.httpcon.."")..
26420 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 ...........(process-send-string.
26440 68 74 74 70 63 6f 6e 20 22 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e httpcon."\r\n").............(eln
26460 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 68 74 74 70 63 6f 6e 29 29 29 29 29 0a 20 20 20 28 28 ode--http-end.httpcon)))))....((
26480 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 65 78 69 74 65 64 20 61 62 6e 6f 72 6d 61 6c 6c 79 20 string-match."exited.abnormally.
264a0 77 69 74 68 20 63 6f 64 65 20 5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29 5c 6e 22 20 73 74 61 74 75 73 with.code.\\([0-9]+\\)\n".status
264c0 29 0a 20 20 20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 ).....(let.((httpcon.(process-ge
264e0 74 20 70 72 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 t.process.:elnode-httpcon)))....
26500 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 ...(elnode-error."Elnode-child-p
26520 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 3a 20 25 73 20 6f 6e 20 25 73 22 20 73 74 61 74 75 rocess-sentinel:.%s.on.%s".statu
26540 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 71 20 27 63 s.httpcon).......(if.(not.(eq.'c
26560 6c 6f 73 65 64 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 29 29 losed.(process-status.httpcon)))
26580 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 ...........(progn.............(e
265a0 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 22 lnode-http-send-string.httpcon."
265c0 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 ").............(process-send-str
265e0 69 6e 67 20 68 74 74 70 63 6f 6e 20 22 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ing.httpcon."\r\n").............
26600 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 (elnode--http-end.httpcon)))....
26620 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 ...(delete-process.process).....
26640 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 70 ..(kill-buffer.(process-buffer.p
26660 72 6f 63 65 73 73 29 29 29 29 0a 20 20 20 28 74 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 rocess))))....(t.....(elnode-err
26680 6f 72 20 22 45 6c 6e 6f 64 65 2d 63 68 6c 69 6c 64 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e or."Elnode-chlild-process-sentin
266a0 65 6c 3a 20 25 73 20 6f 6e 20 25 73 22 20 73 74 61 74 75 73 20 70 72 6f 63 65 73 73 29 29 29 29 el:.%s.on.%s".status.process))))
266c0 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 2d 66 ..(defun.elnode--child-process-f
266e0 69 6c 74 65 72 20 28 70 72 6f 63 65 73 73 20 64 61 74 61 29 0a 20 20 22 41 20 67 65 6e 65 72 69 ilter.(process.data)..."A.generi
26700 63 20 66 69 6c 74 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 65 6c 6e 6f 64 65 20 63 68 69 c.filter.function.for.elnode.chi
26720 6c 64 20 70 72 6f 63 65 73 73 65 73 2e 0a 0a 65 6c 6e 6f 64 65 20 63 68 69 6c 64 20 70 72 6f 63 ld.processes...elnode.child.proc
26740 65 73 73 65 73 20 61 72 65 20 6a 75 73 74 20 65 6d 61 63 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 esses.are.just.emacs.asynchronou
26760 73 20 70 72 6f 63 65 73 73 65 73 20 74 68 61 74 0a 73 65 6e 64 20 74 68 65 69 72 20 6f 75 74 70 s.processes.that.send.their.outp
26780 75 74 20 74 6f 20 61 6e 20 65 6c 6e 6f 64 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e ut.to.an.elnode.http.connection.
267a0 0a 0a 54 68 69 73 20 66 69 6c 74 65 72 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65 20 ..This.filter.function.does.the.
267c0 6a 6f 62 20 6f 66 20 74 61 6b 69 6e 67 20 74 68 65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 job.of.taking.the.output.from.th
267e0 65 0a 61 73 79 6e 63 20 70 72 6f 63 65 73 73 20 61 6e 64 20 66 69 6e 64 69 6e 67 20 74 68 65 20 e.async.process.and.finding.the.
26800 61 73 73 6f 63 69 61 74 65 64 20 65 6c 6e 6f 64 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f associated.elnode.http.connectio
26820 6e 0a 61 6e 64 20 73 65 6e 64 69 6e 67 20 74 68 65 20 64 61 74 61 20 74 68 65 72 65 2e 22 0a 20 n.and.sending.the.data.there."..
26840 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f .(let.((httpcon.(process-get.pro
26860 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 28 65 6c 6e cess.:elnode-httpcon))).....(eln
26880 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 22 45 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f ode-error......"Elnode-child-pro
268a0 63 65 73 73 2d 66 69 6c 74 65 72 20 68 74 74 70 20 73 74 61 74 65 3a 20 25 73 20 64 61 74 61 20 cess-filter.http.state:.%s.data.
268c0 6c 65 6e 67 74 68 3a 20 25 73 20 6f 6e 20 25 73 22 0a 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d length:.%s.on.%s"......(process-
268e0 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 28 6c 65 6e 67 74 68 20 64 61 74 status.httpcon)......(length.dat
26900 61 29 0a 20 20 20 20 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 a)......httpcon).....(if.(not.(e
26920 71 20 27 63 6c 6f 73 65 64 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f q.'closed.(process-status.httpco
26940 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 n))).........(elnode-http-send-s
26960 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 64 61 74 61 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 tring.httpcon.data))))..(defun.e
26980 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 20 28 68 74 74 70 63 6f 6e 20 70 72 6f lnode-child-process.(httpcon.pro
269a0 67 72 61 6d 20 26 72 65 73 74 20 61 72 67 73 29 0a 20 20 22 52 75 6e 20 74 68 65 20 73 70 65 63 gram.&rest.args)..."Run.the.spec
269c0 69 66 69 65 64 20 50 52 4f 47 52 41 4d 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 73 65 6e ified.PROGRAM.asynchronously.sen
269e0 64 69 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 48 54 54 50 43 4f 4e 2e 0a 0a 50 52 4f 47 52 41 4d ding.output.to.HTTPCON...PROGRAM
26a00 20 69 73 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 70 72 6f 67 72 61 6d 20 74 6f 20 72 .is.the.path.to.the.program.to.r
26a20 75 6e 2c 20 74 6f 20 62 65 20 72 65 73 6f 6c 76 65 64 20 62 79 0a 60 73 74 61 72 74 2d 70 72 6f un,.to.be.resolved.by.`start-pro
26a40 63 65 73 73 27 20 69 6e 20 74 68 65 20 75 73 75 61 6c 20 77 61 79 2e 0a 0a 41 52 47 53 20 69 73 cess'.in.the.usual.way...ARGS.is
26a60 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20 .a.list.of.arguments.to.pass.to.
26a80 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 0a 49 74 20 69 73 20 4e 4f 54 20 50 4f 53 53 49 42 4c 45 the.program...It.is.NOT.POSSIBLE
26aa0 20 74 6f 20 72 75 6e 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 70 72 6f 63 65 73 73 20 61 74 .to.run.more.than.one.process.at
26ac0 20 61 20 74 69 6d 65 0a 64 69 72 65 63 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 68 74 74 .a.time.directed.at.the.same.htt
26ae0 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 61 72 67 73 0a 20 20 p.connection."...(let*.((args...
26b00 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 ........(append............(list
26b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 2d 25 73 22 20 28 70 72 .............(format."%s-%s".(pr
26b40 6f 63 65 73 73 2d 6e 61 6d 65 20 68 74 74 70 63 6f 6e 29 20 70 72 6f 67 72 61 6d 29 0a 20 20 20 ocess-name.httpcon).program)....
26b60 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 20 25 73 2d 25 73 22 20 28 70 72 6f 63 65 .........(format.".%s-%s".(proce
26b80 73 73 2d 6e 61 6d 65 20 68 74 74 70 63 6f 6e 29 20 70 72 6f 67 72 61 6d 29 0a 20 20 20 20 20 20 ss-name.httpcon).program).......
26ba0 20 20 20 20 20 20 70 72 6f 67 72 61 6d 29 20 61 72 67 73 29 29 0a 20 20 20 20 20 20 20 20 20 28 ......program).args))..........(
26bc0 70 20 28 6c 65 74 20 28 28 70 72 6f 63 65 73 73 2d 63 6f 6e 6e 65 63 74 69 6f 6e 2d 74 79 70 65 p.(let.((process-connection-type
26be0 20 6e 69 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70 6c 79 20 27 73 74 61 .nil))...............(apply.'sta
26c00 72 74 2d 70 72 6f 63 65 73 73 20 61 72 67 73 29 29 29 29 0a 20 20 20 20 28 73 65 74 2d 70 72 6f rt-process.args)))).....(set-pro
26c20 63 65 73 73 2d 63 6f 64 69 6e 67 2d 73 79 73 74 65 6d 20 70 20 27 72 61 77 2d 74 65 78 74 2d 75 cess-coding-system.p.'raw-text-u
26c40 6e 69 78 29 0a 20 20 20 20 3b 3b 20 42 69 6e 64 20 74 68 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 nix).....;;.Bind.the.http.connec
26c60 74 69 6f 6e 20 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 0a 20 20 20 20 28 70 72 6f 63 65 73 73 tion.to.the.process.....(process
26c80 2d 70 75 74 20 70 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 20 68 74 74 70 63 6f 6e 29 0a -put.p.:elnode-httpcon.httpcon).
26ca0 20 20 20 20 3b 3b 20 42 69 6e 64 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f 20 74 68 65 20 68 ....;;.Bind.the.process.to.the.h
26cc0 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 3b 3b 0a 20 20 20 20 3b 3b 20 57 41 52 ttp.connection.....;;.....;;.WAR
26ce0 4e 49 4e 47 3a 20 74 68 69 73 20 6d 65 61 6e 73 20 79 6f 75 20 63 61 6e 20 6f 6e 6c 79 20 68 61 NING:.this.means.you.can.only.ha
26d00 76 65 20 31 20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 20 61 74 20 61 20 74 69 6d 65 0a 20 20 20 ve.1.child.process.at.a.time....
26d20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 63 68 .(process-put.httpcon.:elnode-ch
26d40 69 6c 64 2d 70 72 6f 63 65 73 73 20 70 29 0a 20 20 20 20 3b 3b 20 53 65 74 75 70 20 74 68 65 20 ild-process.p).....;;.Setup.the.
26d60 66 69 6c 74 65 72 20 61 6e 64 20 74 68 65 20 73 65 6e 74 69 6e 65 6c 20 74 6f 20 64 6f 20 74 68 filter.and.the.sentinel.to.do.th
26d80 65 20 72 69 67 68 74 20 74 68 69 6e 67 20 77 69 74 68 0a 20 20 20 20 3b 3b 20 69 6e 63 6f 6d 6d e.right.thing.with.....;;.incomm
26da0 69 6e 67 20 64 61 74 61 20 61 6e 64 20 73 69 67 6e 61 6c 73 0a 20 20 20 20 28 73 65 74 2d 70 72 ing.data.and.signals.....(set-pr
26dc0 6f 63 65 73 73 2d 66 69 6c 74 65 72 20 70 20 27 65 6c 6e 6f 64 65 2d 2d 63 68 69 6c 64 2d 70 72 ocess-filter.p.'elnode--child-pr
26de0 6f 63 65 73 73 2d 66 69 6c 74 65 72 29 0a 20 20 20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 2d 73 ocess-filter).....(set-process-s
26e00 65 6e 74 69 6e 65 6c 20 70 20 27 65 6c 6e 6f 64 65 2d 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 entinel.p.'elnode--child-process
26e20 2d 73 65 6e 74 69 6e 65 6c 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c -sentinel).....(elnode-error."El
26e40 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 20 69 6e 69 74 20 25 73 22 20 68 74 74 70 node-child-process.init.%s".http
26e60 63 6f 6e 29 29 29 0a 0a 0a 3b 3b 20 46 69 6c 65 20 6d 61 6e 61 67 65 6d 65 6e 74 0a 0a 28 64 65 con)))...;;.File.management..(de
26e80 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 2d 70 72 6f 67 72 61 6d fcustom.elnode-send-file-program
26ea0 20 22 2f 62 69 6e 2f 63 61 74 22 0a 20 20 22 54 68 65 20 70 72 6f 67 72 61 6d 20 74 6f 20 75 73 ."/bin/cat"..."The.program.to.us
26ec0 65 20 66 6f 72 20 73 65 6e 64 69 6e 67 20 66 69 6c 65 73 2e 0a 0a 41 6c 74 65 72 69 6e 67 20 74 e.for.sending.files...Altering.t
26ee0 68 69 73 20 69 73 20 6e 6f 74 20 72 65 63 6f 6d 65 6e 64 65 64 20 62 75 74 20 69 74 20 6d 61 79 his.is.not.recomended.but.it.may
26f00 20 62 65 20 61 20 67 6f 6f 64 20 68 6f 6f 6b 20 66 6f 72 0a 63 65 72 74 61 69 6e 20 74 79 70 65 .be.a.good.hook.for.certain.type
26f20 73 20 6f 66 20 64 65 62 75 67 67 69 6e 67 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 s.of.debugging."...:group.'elnod
26f40 65 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c e...:type.'(string))..(defvar.el
26f60 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 6e 20 22 3c 21 23 23 45 node-replacements-pattern."<!##E
26f80 20 5c 5c 28 2e 2a 3f 5c 5c 29 20 45 23 23 21 3e 22 0a 20 20 22 54 68 65 20 72 65 67 65 78 20 75 .\\(.*?\\).E##!>"..."The.regex.u
26fa0 73 65 64 20 66 6f 72 20 72 65 70 6c 61 63 69 6e 67 20 74 68 69 6e 67 73 2e 0a 0a 54 68 65 20 64 sed.for.replacing.things...The.d
26fc0 65 66 61 75 6c 74 20 72 65 67 65 78 20 69 73 20 72 61 74 68 65 72 20 62 61 72 6f 71 75 65 2e 20 efault.regex.is.rather.baroque..
26fe0 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 69 74 20 6e 65 65 64 73 20 74 6f 0a 62 65 20 .This.is.because.it.needs.to.be.
27000 71 75 69 74 65 20 75 6e 69 71 75 65 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 61 20 6c 6f 74 quite.unique.and.there.are.a.lot
27020 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 73 6f 72 74 73 20 6f 66 20 74 68 69 6e 67 73 0a 6c 69 .of.different.sorts.of.things.li
27040 6b 65 20 74 68 69 73 20 74 6f 20 62 65 20 75 6e 69 71 75 65 20 66 72 6f 6d 2e 22 29 0a 0a 28 64 ke.this.to.be.unique.from.")..(d
27060 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 62 75 66 66 65 72 2d 74 65 6d 70 6c 61 74 65 20 28 66 69 efun.elnode--buffer-template.(fi
27080 6c 65 2d 62 75 66 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 29 0a 20 20 22 54 65 6d 70 6c 61 74 65 le-buf.replacements)..."Template
270a0 20 72 65 6e 64 65 72 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 63 6f .render.a.buffer.and.return.a.co
270c0 70 79 2e 0a 0a 46 49 4c 45 2d 42 55 46 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 62 75 66 66 py...FILE-BUF.is.the.source.buff
270e0 65 72 20 74 6f 20 75 73 65 2c 20 74 65 6d 70 6c 61 74 65 20 73 65 63 74 69 6f 6e 73 20 6d 61 72 er.to.use,.template.sections.mar
27100 6b 65 64 20 75 70 20 6c 69 6b 65 3a 0a 0a 20 3c 21 23 23 45 20 5c 5c 28 2e 2a 3f 5c 5c 29 20 45 ked.up.like:...<!##E.\\(.*?\\).E
27120 23 23 21 3e 0a 0a 77 69 6c 6c 20 62 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61 20 76 61 ##!>..will.be.replaced.with.a.va
27140 6c 75 65 20 6c 6f 6f 6b 65 64 20 75 70 20 69 6e 20 52 45 50 4c 41 43 45 4d 45 4e 54 53 2e 0a 0a lue.looked.up.in.REPLACEMENTS...
27160 52 45 50 4c 41 43 45 4d 45 4e 54 53 20 69 73 20 65 69 74 68 65 72 20 61 20 68 61 73 68 74 61 62 REPLACEMENTS.is.either.a.hashtab
27180 6c 65 20 6f 72 20 61 6e 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 6c 69 73 74 2e 0a 0a 46 6f 72 20 le.or.an.association.list...For.
271a0 65 78 61 6d 70 6c 65 3a 0a 0a 20 3c 74 69 74 6c 65 3e 3c 21 23 23 45 20 6d 79 2d 74 69 74 6c 65 example:...<title><!##E.my-title
271c0 20 45 23 23 21 3e 3c 2f 74 69 74 6c 65 3e 0a 20 3c 70 3e 42 79 20 3c 21 23 23 45 20 6d 79 2d 6e .E##!></title>..<p>By.<!##E.my-n
271e0 61 6d 65 20 45 23 23 21 3e 2e 3c 2f 70 3e 0a 0a 77 69 74 68 20 74 68 65 20 52 45 50 4c 41 43 45 ame.E##!>.</p>..with.the.REPLACE
27200 4d 45 4e 54 53 20 62 65 69 6e 67 3a 0a 0a 20 20 6d 79 2d 74 69 74 6c 65 20 3d 3e 20 41 6c 6c 20 MENTS.being:....my-title.=>.All.
27220 74 68 69 6e 67 73 20 45 6c 6e 6f 64 65 21 0a 20 20 6d 79 2d 6e 61 6d 65 20 3d 3e 20 4e 69 63 20 things.Elnode!...my-name.=>.Nic.
27240 46 65 72 72 69 65 72 0a 0a 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 74 68 65 20 73 74 72 Ferrier..would.result.in.the.str
27260 69 6e 67 3a 0a 0a 20 20 3c 74 69 74 6c 65 3e 41 6c 6c 20 74 68 69 6e 67 73 20 45 6c 6e 6f 64 65 ing:....<title>All.things.Elnode
27280 21 3c 2f 74 69 74 6c 65 3e 0a 20 20 3c 70 3e 42 79 20 4e 69 63 20 46 65 72 72 69 65 72 3c 2f 70 !</title>...<p>By.Nic.Ferrier</p
272a0 3e 0a 0a 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 >..being.returned."...(with-curr
272c0 65 6e 74 2d 62 75 66 66 65 72 20 66 69 6c 65 2d 62 75 66 0a 20 20 20 20 28 72 65 70 6c 61 63 65 ent-buffer.file-buf.....(replace
272e0 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 65 6c 6e 6f 64 65 2d 72 65 -regexp-in-string......elnode-re
27300 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 6e 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 placements-pattern......(lambda.
27320 28 6d 61 74 63 68 65 64 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 6d 61 74 63 68 2d 76 61 (matched)........(let.((match-va
27340 72 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20 31 20 r.(match-string-no-properties.1.
27360 6d 61 74 63 68 65 64 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 matched)))..........(cond.......
27380 20 20 20 20 20 28 28 68 61 73 68 2d 74 61 62 6c 65 2d 70 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 .....((hash-table-p.replacements
273a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 68 61 73 68 20 6d 61 74 63 68 2d 76 61 72 ).............(gethash.match-var
273c0 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 20 22 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 74 .replacements.""))............(t
273e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 50 72 65 73 75 6d 65 20 69 74 27 73 20 61 6e 20 .............;;.Presume.it's.an.
27400 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 alist.............(or...........
27420 20 20 20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 6d 61 74 63 68 2d 76 61 72 20 72 65 70 6c ...(assoc-default.match-var.repl
27440 61 63 65 6d 65 6e 74 73 20 6e 69 6c 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 29 acements.nil.t).............."")
27460 29 29 29 29 0a 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 ))))......(buffer-substring-no-p
27480 72 6f 70 65 72 74 69 65 73 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 28 70 6f 69 6e 74 2d 6d 61 78 29 roperties.(point-min)(point-max)
274a0 29 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 ))))..(defcustom.elnode-webserve
274c0 72 2d 76 69 73 69 74 2d 66 69 6c 65 20 28 65 71 20 73 79 73 74 65 6d 2d 74 79 70 65 20 27 77 69 r-visit-file.(eq.system-type.'wi
274e0 6e 64 6f 77 73 2d 6e 74 29 0a 20 20 22 57 68 65 74 68 65 72 20 74 68 65 20 77 65 62 73 65 72 76 ndows-nt)..."Whether.the.webserv
27500 65 72 20 72 65 61 64 73 20 66 69 6c 65 73 20 62 79 20 76 69 73 69 74 69 6e 67 20 62 75 66 66 65 er.reads.files.by.visiting.buffe
27520 72 73 20 6f 72 20 6e 6f 74 2e 0a 0a 57 68 65 6e 20 73 65 74 20 74 6f 20 60 74 27 20 66 69 6c 65 rs.or.not...When.set.to.`t'.file
27540 73 20 74 6f 20 62 65 20 73 65 6e 74 20 77 69 74 68 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 73 65 s.to.be.sent.with.the.`elnode-se
27560 6e 64 2d 66 69 6c 65 27 20 61 72 65 0a 72 65 61 64 20 69 6e 74 6f 20 45 6d 61 63 73 20 75 73 69 nd-file'.are.read.into.Emacs.usi
27580 6e 67 20 60 66 69 6e 64 2d 66 69 6c 65 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 ng.`find-file'."...:group.'elnod
275a0 65 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e e...:type.'boolean)..(defvar.eln
275c0 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 68 74 74 70 63 6f 6e 20 6e 69 6c 0a 20 20 22 ode-replacements-httpcon.nil..."
275e0 54 68 69 73 20 69 73 20 62 6f 75 6e 64 20 62 79 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 This.is.bound.by.`elnode-send-fi
27600 6c 65 27 20 77 68 65 6e 20 64 6f 69 6e 67 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 2e 0a 0a 49 74 le'.when.doing.replacements...It
27620 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 22 29 .should.not.be.used.otherwise.")
27640 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 74 61 ..(defvar.elnode-replacements-ta
27660 72 67 65 74 66 69 6c 65 20 6e 69 6c 0a 20 20 22 54 68 69 73 20 69 73 20 62 6f 75 6e 64 20 62 79 rgetfile.nil..."This.is.bound.by
27680 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 27 20 77 68 65 6e 20 64 6f 69 6e 67 20 72 .`elnode-send-file'.when.doing.r
276a0 65 70 6c 61 63 65 6d 65 6e 74 73 2e 0a 0a 49 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 eplacements...It.should.not.be.u
276c0 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d sed.otherwise.")..(defun.elnode-
276e0 2d 72 66 63 31 31 32 33 2d 64 61 74 65 20 28 74 69 6d 65 29 0a 20 20 22 52 65 74 75 72 6e 20 54 -rfc1123-date.(time)..."Return.T
27700 49 4d 45 20 69 6e 20 52 46 43 31 31 32 33 20 66 6f 72 6d 61 74 2c 20 73 75 69 74 61 62 6c 65 20 IME.in.RFC1123.format,.suitable.
27720 66 6f 72 20 48 54 54 50 20 64 61 74 65 73 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 64 61 79 2d 6e for.HTTP.dates."...(let*.((day-n
27740 61 6d 65 73 20 27 28 22 53 75 6e 22 20 22 4d 6f 6e 22 20 22 54 75 65 22 20 22 57 65 64 22 20 22 ames.'("Sun"."Mon"."Tue"."Wed"."
27760 54 68 75 22 20 22 46 72 69 22 20 22 53 61 74 22 29 29 0a 09 20 28 6d 6f 6e 74 68 2d 6e 61 6d 65 Thu"."Fri"."Sat"))...(month-name
27780 73 20 27 28 22 4a 61 6e 22 20 22 46 65 62 22 20 22 4d 61 72 22 20 22 41 70 72 22 20 22 4d 61 79 s.'("Jan"."Feb"."Mar"."Apr"."May
277a0 22 20 22 4a 75 6e 22 0a 09 09 09 22 4a 75 6c 22 20 22 41 75 67 22 20 22 53 65 70 22 20 22 4f 63 "."Jun"...."Jul"."Aug"."Sep"."Oc
277c0 74 22 20 22 4e 6f 76 22 20 22 44 65 63 22 29 29 0a 09 20 28 64 65 63 6f 64 65 64 2d 74 69 6d 65 t"."Nov"."Dec"))...(decoded-time
277e0 20 28 64 65 63 6f 64 65 2d 74 69 6d 65 20 74 69 6d 65 29 29 0a 09 20 28 64 61 79 20 28 6e 74 68 .(decode-time.time))...(day.(nth
27800 20 28 6e 74 68 20 36 20 64 65 63 6f 64 65 64 2d 74 69 6d 65 29 20 64 61 79 2d 6e 61 6d 65 73 29 .(nth.6.decoded-time).day-names)
27820 29 0a 09 20 28 6d 6f 6e 74 68 20 28 6e 74 68 20 28 2d 20 28 6e 74 68 20 34 20 64 65 63 6f 64 65 )...(month.(nth.(-.(nth.4.decode
27840 64 2d 74 69 6d 65 29 20 31 29 20 6d 6f 6e 74 68 2d 6e 61 6d 65 73 29 29 29 0a 20 20 20 20 28 66 d-time).1).month-names))).....(f
27860 6f 72 6d 61 74 20 22 25 73 2c 20 25 73 20 25 73 20 25 73 22 0a 09 20 20 20 20 64 61 79 0a 09 20 ormat."%s,.%s.%s.%s"......day...
27880 20 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 22 25 64 22 20 74 69 6d 65 ...(format-time-string."%d".time
278a0 20 74 29 0a 09 20 20 20 20 6d 6f 6e 74 68 0a 09 20 20 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 .t)......month......(format-time
278c0 2d 73 74 72 69 6e 67 20 22 25 59 20 25 48 3a 25 4d 3a 25 53 20 47 4d 54 22 20 74 69 6d 65 20 74 -string."%Y.%H:%M:%S.GMT".time.t
278e0 29 29 29 29 0a 0a 28 64 65 66 61 6c 69 61 73 20 27 65 6c 6e 6f 64 65 2d 72 66 63 31 31 32 33 2d ))))..(defalias.'elnode-rfc1123-
27900 64 61 74 65 20 27 65 6c 6e 6f 64 65 2d 2d 72 66 63 31 31 32 33 2d 64 61 74 65 29 0a 0a 28 64 65 date.'elnode--rfc1123-date)..(de
27920 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65 2d 6d 6f 64 69 66 69 65 64 2d 74 69 6d 65 20 28 fun.elnode--file-modified-time.(
27940 66 69 6c 65 29 0a 20 20 22 47 65 74 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74 69 6d 65 20 66 file)..."Get.modification.time.f
27960 6f 72 20 46 49 4c 45 2e 22 0a 20 20 28 6e 74 68 20 35 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 or.FILE."...(nth.5.(file-attribu
27980 74 65 73 20 66 69 6c 65 29 29 29 0a 0a 28 64 65 66 61 6c 69 61 73 20 27 65 6c 6e 6f 64 65 2d 66 tes.file)))..(defalias.'elnode-f
279a0 69 6c 65 2d 6d 6f 64 69 66 69 65 64 2d 74 69 6d 65 20 27 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65 2d ile-modified-time.'elnode--file-
279c0 6d 6f 64 69 66 69 65 64 2d 74 69 6d 65 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 73 modified-time)..(defun*.elnode-s
279e0 65 6e 64 2d 66 69 6c 65 20 28 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 66 69 6c 65 0a 20 20 20 end-file.(httpcon.targetfile....
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 ...............................&
27a20 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 key.............................
27a40 20 20 20 20 20 20 70 72 65 61 6d 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ......preamble..................
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 69 6d 65 2d 74 79 70 65 73 0a 20 20 20 20 .................mime-types.....
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 ..............................re
27aa0 70 6c 61 63 65 6d 65 6e 74 73 29 0a 20 20 22 53 65 6e 64 20 74 68 65 20 54 41 52 47 45 54 46 49 placements)..."Send.the.TARGETFI
27ac0 4c 45 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 49 66 20 74 68 65 20 54 41 52 47 45 LE.to.the.HTTPCON...If.the.TARGE
27ae0 54 46 49 4c 45 20 69 73 20 72 65 6c 61 74 69 76 65 20 74 68 65 6e 20 72 65 73 6f 6c 76 65 20 69 TFILE.is.relative.then.resolve.i
27b00 74 20 76 69 61 20 74 68 65 20 63 75 72 72 65 6e 74 0a 60 6c 6f 61 64 2d 66 69 6c 65 2d 6e 61 6d t.via.the.current.`load-file-nam
27b20 65 27 20 6f 72 20 60 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 27 20 6f 72 20 60 64 65 66 e'.or.`buffer-file-name'.or.`def
27b40 61 75 6c 74 2d 64 69 72 65 63 74 6f 72 79 27 2e 0a 0a 57 41 52 4e 49 4e 47 3a 20 74 68 69 73 20 ault-directory'...WARNING:.this.
27b60 72 65 73 6f 6c 75 74 69 6f 6e 20 6f 72 64 65 72 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 63 68 resolution.order.is.likely.to.ch
27b80 61 6e 67 65 20 62 65 63 61 75 73 65 2c 0a 65 73 70 65 63 69 61 6c 6c 79 20 77 68 65 6e 20 64 65 ange.because,.especially.when.de
27ba0 76 65 6c 6f 70 69 6e 67 20 60 64 65 66 61 75 6c 74 2d 64 69 72 65 63 74 6f 72 79 27 20 63 61 6e veloping.`default-directory'.can
27bc0 20 62 65 20 71 75 69 74 65 0a 72 61 6e 64 6f 6d 20 28 63 68 61 6e 67 65 20 62 75 66 66 65 72 2c .be.quite.random.(change.buffer,
27be0 20 63 68 61 6e 67 65 20 60 64 65 66 61 75 6c 74 2d 64 69 72 65 63 74 6f 72 79 27 29 2e 0a 0a 4f .change.`default-directory')...O
27c00 70 74 69 6f 6e 61 6c 6c 79 20 79 6f 75 20 6d 61 79 20 73 70 65 63 69 66 79 20 65 78 74 72 61 20 ptionally.you.may.specify.extra.
27c20 6b 65 79 77 6f 72 64 20 61 72 67 75 6d 65 6e 74 73 3a 74 0a 0a 3a 50 52 45 41 4d 42 4c 45 20 61 keyword.arguments:t..:PREAMBLE.a
27c40 20 73 74 72 69 6e 67 20 6f 66 20 64 61 74 61 20 74 6f 20 73 65 6e 64 20 62 65 66 6f 72 65 20 74 .string.of.data.to.send.before.t
27c60 68 65 20 66 69 6c 65 2e 0a 0a 3a 50 52 45 41 4d 42 4c 45 20 69 73 20 6d 6f 73 74 20 75 73 65 66 he.file...:PREAMBLE.is.most.usef
27c80 75 6c 20 66 6f 72 20 70 72 65 66 69 78 69 6e 67 20 73 79 6e 74 61 78 20 74 6f 20 73 6f 6d 65 20 ul.for.prefixing.syntax.to.some.
27ca0 6f 74 68 65 72 20 66 69 6c 65 2c 0a 66 6f 72 20 65 78 61 6d 70 6c 65 20 79 6f 75 20 63 6f 75 6c other.file,.for.example.you.coul
27cc0 64 20 70 72 65 66 69 78 20 61 6e 20 58 4d 4c 20 66 69 6c 65 20 77 69 74 68 20 58 53 4c 20 74 72 d.prefix.an.XML.file.with.XSL.tr
27ce0 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20 73 6f 20 61 20 63 6f 6d ansformation.statements.so.a.com
27d00 70 6c 69 61 6e 74 20 75 73 65 72 2d 61 67 65 6e 74 20 77 69 6c 6c 20 74 72 61 6e 73 66 6f 72 6d pliant.user-agent.will.transform
27d20 20 74 68 65 20 58 4d 4c 2e 0a 0a 3a 4d 49 4d 45 2d 54 59 50 45 53 20 69 73 20 61 6e 20 6f 70 74 .the.XML...:MIME-TYPES.is.an.opt
27d40 69 6f 6e 61 6c 20 61 6c 69 73 74 20 6f 66 20 4d 49 4d 45 20 74 79 70 65 20 6d 61 70 70 69 6e 67 ional.alist.of.MIME.type.mapping
27d60 73 20 74 6f 20 68 65 6c 70 0a 72 65 73 6f 6c 76 65 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 s.to.help.resolve.the.type.of.a.
27d80 66 69 6c 65 2e 0a 0a 49 66 20 3a 52 45 50 4c 41 43 45 4d 45 4e 54 53 20 69 73 20 73 70 65 63 69 file...If.:REPLACEMENTS.is.speci
27da0 66 69 65 64 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 61 20 68 61 73 68 2d 74 61 62 6c 65 20 6f fied.it.should.be.a.hash-table.o
27dc0 72 20 61 6e 0a 61 73 73 6f 63 69 61 74 69 6f 6e 20 6c 69 73 74 20 75 73 65 64 20 74 6f 20 73 75 r.an.association.list.used.to.su
27de0 70 70 6c 79 20 76 61 6c 75 65 73 20 66 6f 72 20 74 65 6d 70 6c 61 74 69 6e 67 2e 20 20 57 68 65 pply.values.for.templating...Whe
27e00 6e 0a 74 65 6d 70 6c 61 74 69 6e 67 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 20 74 61 n.templating.is.specified.the.ta
27e20 72 67 65 74 66 69 6c 65 20 69 73 20 6e 6f 74 20 73 65 6e 74 20 64 69 72 65 63 74 6c 79 20 62 75 rgetfile.is.not.sent.directly.bu
27e40 74 0a 6f 70 65 6e 65 64 20 69 6e 20 45 6d 61 63 73 20 61 73 20 61 20 62 75 66 66 65 72 20 61 6e t.opened.in.Emacs.as.a.buffer.an
27e60 64 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 74 68 72 6f 75 67 68 20 74 68 65 0a 74 65 6d 70 6c 61 d.transformed.through.the.templa
27e80 74 69 6e 67 20 73 79 73 74 65 6d 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 73 65 6e 74 2e 20 20 ting.system.before.being.sent...
27ea0 53 65 65 0a 60 65 6c 6e 6f 64 65 2d 2d 62 75 66 66 65 72 2d 74 65 6d 70 6c 61 74 65 27 20 66 6f See.`elnode--buffer-template'.fo
27ec0 72 20 64 65 74 61 69 6c 73 20 6f 66 20 74 65 6d 70 6c 61 74 69 6e 67 2e 0a 0a 52 45 50 4c 41 43 r.details.of.templating...REPLAC
27ee0 45 4d 45 4e 54 53 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 61 20 66 75 6e 63 74 EMENTS.can.optionally.be.a.funct
27f00 69 6f 6e 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 0a 72 65 74 75 72 6e 20 76 61 6c ion.in.which.case.the.return.val
27f20 75 65 20 69 73 20 65 78 70 65 63 74 65 64 20 74 6f 20 62 65 20 74 68 65 20 68 61 73 68 2d 74 61 ue.is.expected.to.be.the.hash-ta
27f40 62 6c 65 20 6f 72 20 61 6c 69 73 74 20 66 6f 72 20 74 68 65 0a 76 61 72 69 61 62 6c 65 73 2e 20 ble.or.alist.for.the.variables..
27f60 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 68 61 76 65 20 6e 6f 20 61 72 67 .The.function.should.have.no.arg
27f80 75 6d 65 6e 74 73 20 62 75 74 20 74 77 6f 0a 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 62 6f 75 uments.but.two.variables.are.bou
27fa0 6e 64 20 64 75 72 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 27 73 20 65 78 65 63 75 74 69 nd.during.the.function's.executi
27fc0 6f 6e 0a 60 65 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 68 74 74 70 63 6f 6e 27 on.`elnode-replacements-httpcon'
27fe0 20 69 73 20 74 68 65 20 60 68 74 74 70 63 6f 6e 27 20 61 6e 64 0a 60 65 6c 6e 6f 64 65 2d 72 65 .is.the.`httpcon'.and.`elnode-re
28000 70 6c 61 63 65 6d 65 6e 74 73 2d 74 61 72 67 65 74 66 69 6c 65 27 20 69 73 20 74 68 65 20 74 61 placements-targetfile'.is.the.ta
28020 72 67 65 74 66 69 6c 65 20 74 6f 20 62 65 0a 64 65 6c 69 76 65 72 65 64 2e 22 0a 20 20 28 6c 65 rgetfile.to.be.delivered."...(le
28040 74 20 28 28 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 t.((filename..........(if.(not.(
28060 66 69 6c 65 2d 6e 61 6d 65 2d 61 62 73 6f 6c 75 74 65 2d 70 20 74 61 72 67 65 74 66 69 6c 65 29 file-name-absolute-p.targetfile)
28080 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 72 65 6c 61 74 69 76 65 2d 6e 61 )..............(file-relative-na
280a0 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61 72 67 65 74 66 69 6c 65 0a 20 20 20 20 me...............targetfile.....
280c0 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 64 69 72 20 28 6f 72 20 6c 6f 61 64 2d 66 69 ..........(let.((dir.(or.load-fi
280e0 6c 65 2d 6e 61 6d 65 20 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 le-name.buffer-file-name))).....
28100 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 64 69 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 ............(if.dir.............
28120 20 20 20 20 20 20 20 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 2d 6e 61 6d 65 20 64 69 72 ........(directory-file-name.dir
28140 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 2d 64 69 72 65 )...................default-dire
28160 63 74 6f 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 74 61 72 67 65 74 66 69 6c 65 29 29 ctory)))............targetfile))
28180 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 66 69 ).....(if.(not.(file-exists-p.fi
281a0 6c 65 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 46 49 58 4d 45 3a 20 54 68 69 73 20 lename)).........;;.FIXME:.This.
281c0 6e 65 65 64 73 20 69 6d 70 72 6f 76 69 6e 67 20 73 6f 20 77 65 20 63 61 6e 20 68 61 6e 64 6c 65 needs.improving.so.we.can.handle
281e0 20 74 68 65 20 34 30 34 0a 20 20 20 20 20 20 20 20 3b 3b 20 54 68 69 73 20 66 75 6e 63 74 69 6f .the.404.........;;.This.functio
28200 6e 20 73 68 6f 75 6c 64 20 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3f 0a 20 20 20 n.should.raise.an.exception?....
28220 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 20 68 74 74 70 63 6f 6e 29 0a 20 .....(elnode-send-404.httpcon)..
28240 20 20 20 20 20 28 6c 65 74 20 28 28 6d 69 6d 65 74 79 70 65 0a 20 20 20 20 20 20 20 20 20 20 20 .....(let.((mimetype............
28260 20 20 28 6f 72 20 28 77 68 65 6e 20 28 6c 69 73 74 70 20 6d 69 6d 65 2d 74 79 70 65 73 29 0a 20 ..(or.(when.(listp.mime-types)..
28280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 28 72 61 73 73 6f 63 0a 20 ..................(car.(rassoc..
282a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6e 61 ........................(file-na
282c0 6d 65 2d 65 78 74 65 6e 73 69 6f 6e 20 74 61 72 67 65 74 66 69 6c 65 29 0a 20 20 20 20 20 20 20 me-extension.targetfile)........
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 69 6d 65 2d 74 79 70 65 73 29 29 29 0a ..................mime-types))).
28300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6d 2d 64 65 66 61 75 6c 74 2d 66 69 6c .................(mm-default-fil
28320 65 2d 65 6e 63 6f 64 69 6e 67 20 74 61 72 67 65 74 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 e-encoding.targetfile)..........
28340 20 20 20 20 20 20 20 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 ........"application/octet-strea
28360 6d 22 29 29 29 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 m"))).........(elnode-http-start
28380 0a 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 32 30 30 0a 20 20 20 20 20 20 20 20 20 60 ..........httpcon.200..........`
283a0 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 22 20 2e 20 2c 6d 69 6d 65 74 79 70 65 29 0a 20 20 20 ("Content-type"...,mimetype)....
283c0 20 20 20 20 20 20 60 28 22 4c 61 73 74 2d 4d 6f 64 69 66 69 65 64 22 20 2e 20 2c 28 65 6c 6e 6f ......`("Last-Modified"...,(elno
283e0 64 65 2d 2d 72 66 63 31 31 32 33 2d 64 61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 de--rfc1123-date................
28400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65 2d 6d 6f ................(elnode--file-mo
28420 64 69 66 69 65 64 2d 74 69 6d 65 20 74 61 72 67 65 74 66 69 6c 65 29 29 29 29 0a 20 20 20 20 20 dified-time.targetfile))))......
28440 20 20 20 28 77 68 65 6e 20 70 72 65 61 6d 62 6c 65 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 ...(when.preamble.(elnode-http-s
28460 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 70 72 65 61 6d 62 6c 65 29 29 0a 20 20 end-string.httpcon.preamble))...
28480 20 20 20 20 20 20 28 69 66 20 28 6f 72 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 76 ......(if.(or.elnode-webserver-v
284a0 69 73 69 74 2d 66 69 6c 65 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 29 0a 20 20 20 20 20 20 20 20 isit-file.replacements).........
284c0 20 20 20 20 28 6c 65 74 20 28 28 66 69 6c 65 2d 62 75 66 20 28 66 69 6e 64 2d 66 69 6c 65 2d 6e ....(let.((file-buf.(find-file-n
284e0 6f 73 65 6c 65 63 74 20 66 69 6c 65 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 oselect.filename))).............
28500 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 ..(elnode-http-return...........
28520 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e .....httpcon................(eln
28540 6f 64 65 2d 2d 62 75 66 66 65 72 2d 74 65 6d 70 6c 61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 ode--buffer-template............
28560 20 20 20 20 20 66 69 6c 65 2d 62 75 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b .....file-buf.................;;
28580 20 52 65 70 6c 61 63 65 6d 65 6e 74 73 20 68 61 6e 64 6c 69 6e 67 0a 20 20 20 20 20 20 20 20 20 .Replacements.handling..........
285a0 20 20 20 20 20 20 20 28 69 66 20 28 66 75 6e 63 74 69 6f 6e 70 20 72 65 70 6c 61 63 65 6d 65 6e .......(if.(functionp.replacemen
285c0 74 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 ts).....................(let.((e
285e0 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 68 74 74 70 63 6f 6e 20 68 74 74 70 63 lnode-replacements-httpcon.httpc
28600 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 on)...........................(e
28620 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 74 61 72 67 65 74 66 69 6c 65 20 74 61 lnode-replacements-targetfile.ta
28640 72 67 65 74 66 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 rgetfile))......................
28660 20 28 66 75 6e 63 61 6c 6c 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 29 29 0a 20 20 20 20 20 20 20 .(funcall.replacements))........
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 29 29 29 29 0a 20 20 .............replacements))))...
286a0 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 0a ..........(elnode-child-process.
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 .............httpcon............
286e0 20 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 2d 70 72 6f 67 72 61 6d 0a 20 20 20 20 20 ..elnode-send-file-program......
28700 20 20 20 20 20 20 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 74 61 72 67 65 74 ........(expand-file-name.target
28720 66 69 6c 65 29 29 29 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 6d 65 file)))))))..(defmacro.elnode-me
28740 74 68 6f 64 20 28 68 74 74 70 63 6f 6e 20 26 72 65 73 74 20 6d 65 74 68 6f 64 2d 6d 61 70 70 69 thod.(httpcon.&rest.method-mappi
28760 6e 67 73 29 0a 20 20 22 4d 61 70 20 74 68 65 20 48 54 54 50 20 6d 65 74 68 6f 64 2e 0a 0a 57 72 ngs)..."Map.the.HTTP.method...Wr
28780 69 74 65 20 63 6f 64 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d 6d 65 ite.code.like.this:...(elnode-me
287a0 74 68 6f 64 0a 20 20 28 47 45 54 0a 20 20 20 28 63 6f 64 65 29 0a 20 20 20 28 6d 6f 72 65 20 63 thod...(GET....(code)....(more.c
287c0 6f 64 65 29 29 0a 20 20 28 50 4f 53 54 0a 20 20 20 28 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 ode))...(POST....(different.code
287e0 29 0a 20 20 20 28 65 76 65 6e 6d 6f 72 65 63 6f 64 65 29 29 29 22 0a 20 20 28 64 65 63 6c 61 72 )....(evenmorecode)))"...(declar
28800 65 0a 20 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 26 72 65 73 74 20 28 73 65 78 70 20 26 72 e....(debug.(sexp.&rest.(sexp.&r
28820 65 73 74 20 66 6f 72 6d 29 29 29 0a 20 20 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20 20 28 6c 65 est.form)))....(indent.1))...(le
28840 74 2a 20 28 28 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 76 22 29 29 0a 20 20 20 20 t*.((var.(make-symbol."v")).....
28860 20 20 20 20 20 28 63 6f 6e 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 63 6f 6e 22 29 29 29 .....(conv.(make-symbol."con")))
28880 0a 20 20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c 63 6f 6e 76 20 2c 68 74 74 70 63 6f 6e 29 0a 20 ......`(let*.((,conv.,httpcon)..
288a0 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 76 61 72 20 28 69 6e 74 65 72 6e 20 28 65 6c 6e 6f 64 ............(,var.(intern.(elnod
288c0 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 20 2c 63 6f 6e 76 29 29 29 29 0a 20 20 20 20 20 20 20 28 e-http-method.,conv))))........(
288e0 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 2c 40 28 6c 6f 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 cond.........,@(loop............
28900 66 6f 72 20 64 20 69 6e 20 6d 65 74 68 6f 64 2d 6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 for.d.in.method-mappings........
28920 20 20 20 20 75 6e 6c 65 73 73 20 28 65 71 20 28 63 61 72 20 64 29 20 74 29 0a 20 20 20 20 20 20 ....unless.(eq.(car.d).t).......
28940 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 60 28 28 65 71 20 2c 76 61 72 20 28 71 75 6f 74 65 20 2c .....collect.`((eq.,var.(quote.,
28960 28 63 61 72 20 64 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c (car.d)))......................,
28980 40 28 63 64 72 20 64 29 29 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 77 65 20 64 6f 6e 27 @(cdr.d))).........;;.If.we.don'
289a0 74 20 6d 61 70 20 74 68 65 6e 20 73 65 6e 64 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20 20 20 t.map.then.send.an.error........
289c0 20 3b 3b 0a 20 20 20 20 20 20 20 20 3b 3b 20 70 72 6f 62 61 62 6c 79 20 73 68 6f 75 6c 64 20 62 .;;.........;;.probably.should.b
289e0 65 20 34 30 35 0a 20 20 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20 20 20 2c 40 28 6f 72 20 e.405.........(t..........,@(or.
28a00 28 63 64 72 20 28 61 73 73 6f 63 20 74 20 6d 65 74 68 6f 64 2d 6d 61 70 70 69 6e 67 73 29 29 0a (cdr.(assoc.t.method-mappings)).
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 35 30 ...............`((elnode-send-50
28a40 30 20 2c 63 6f 6e 76 29 29 29 29 29 29 29 29 0a 0a 0a 3b 3b 20 4d 61 6b 65 20 73 69 6d 70 6c 65 0.,conv))))))))...;;.Make.simple
28a60 20 68 61 6e 64 6c 65 72 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 0a 28 64 65 66 75 6e 20 .handlers.automatically..(defun.
28a80 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 72 65 64 69 72 65 63 74 65 72 20 28 6c 6f 63 61 74 69 6f 6e elnode-make-redirecter.(location
28aa0 20 26 6f 70 74 69 6f 6e 61 6c 20 74 79 70 65 29 0a 20 20 22 4d 61 6b 65 20 61 20 68 61 6e 64 6c .&optional.type)..."Make.a.handl
28ac0 65 72 20 74 68 61 74 20 77 69 6c 6c 20 72 65 64 69 72 65 63 74 20 74 6f 20 4c 4f 43 41 54 49 4f er.that.will.redirect.to.LOCATIO
28ae0 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 N...Optionally,.use.the.specifie
28b00 64 20 54 59 50 45 20 61 73 20 74 68 65 20 73 74 61 74 75 73 20 63 6f 64 65 2c 20 65 67 3a 0a 0a d.TYPE.as.the.status.code,.eg:..
28b20 20 28 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 72 65 64 69 72 65 63 74 20 5c 22 68 74 74 70 3a 2f 2f .(elnode-make-redirect.\"http://
28b40 73 6f 6d 65 68 6f 73 74 2e 63 6f 6d 2f 5c 22 20 33 30 31 29 22 0a 20 20 28 6c 61 6d 62 64 61 20 somehost.com/\".301)"...(lambda.
28b60 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72 (httpcon).....(elnode-send-redir
28b80 65 63 74 20 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f 6e 20 74 79 70 65 29 29 29 0a 0a 28 64 ect.httpcon.location.type)))..(d
28ba0 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 73 65 6e 64 2d 66 69 6c 65 20 20 28 66 69 efun*.elnode-make-send-file..(fi
28bc0 6c 65 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lename..........................
28be0 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .......&key.....................
28c00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 61 6d 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 ............preamble............
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 69 6d 65 2d 74 79 70 65 73 0a .....................mime-types.
28c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
28c60 72 65 70 6c 61 63 65 6d 65 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 replacements....................
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 .............replacements-patter
28ca0 6e 29 0a 20 20 22 4d 61 6b 65 20 61 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77 69 6c 6c 20 73 n)..."Make.a.handler.that.will.s
28cc0 65 72 76 65 20 61 20 73 69 6e 67 6c 65 20 46 49 4c 45 4e 41 4d 45 2e 0a 0a 49 66 20 74 68 65 20 erve.a.single.FILENAME...If.the.
28ce0 46 49 4c 45 4e 41 4d 45 20 69 73 20 72 65 6c 61 74 69 76 65 20 74 68 65 6e 20 69 74 20 69 73 20 FILENAME.is.relative.then.it.is.
28d00 72 65 73 6f 6c 76 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 0a 70 61 63 6b 61 67 65 27 73 20 60 resolved.against.the.package's.`
28d20 6c 6f 61 64 2d 66 69 6c 65 2d 6e 61 6d 65 27 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 20 4d 49 4d load-file-name'...Optionally.MIM
28d40 45 2d 54 59 50 45 53 20 61 6e 64 20 6f 74 68 65 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 6b 65 79 E-TYPES.and.other.additional.key
28d60 77 6f 72 64 20 61 72 67 75 6d 65 6e 74 73 20 6d 61 79 20 62 65 0a 73 70 65 63 69 66 69 65 64 20 word.arguments.may.be.specified.
28d80 61 6e 64 20 61 72 65 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 2c 20 73 65 65 20 60 65 6c 6e and.are.passed.through,.see.`eln
28da0 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 27 20 66 6f 72 0a 64 65 74 61 69 6c 73 2e 0a 0a 54 68 65 ode-send-file'.for.details...The
28dc0 20 52 45 50 4c 41 43 45 4d 45 4e 54 53 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 .REPLACEMENTS.parameter.can.be.a
28de0 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 0a 68 61 73 68 2d 74 61 .function.that.returns.a.hash-ta
28e00 62 6c 65 20 6f 72 20 61 6c 69 73 74 2c 20 74 68 69 73 20 69 73 20 76 65 72 79 20 75 73 65 66 75 ble.or.alist,.this.is.very.usefu
28e20 6c 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a 62 65 63 61 75 73 65 20 69 74 20 61 l.for.this.function.because.it.a
28e40 6c 6c 6f 77 73 20 64 79 6e 61 6d 69 63 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 62 65 20 64 65 llows.dynamic.variables.to.be.de
28e60 66 69 6e 65 64 2e 20 20 41 67 61 69 6e 2c 20 73 65 65 0a 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d fined...Again,.see.`elnode-send-
28e80 66 69 6c 65 27 20 66 6f 72 20 66 75 6c 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 file'.for.full.documentation.of.
28ea0 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 0a 54 68 65 20 52 45 50 4c 41 43 45 4d 45 4e 54 53 2d this.feature...The.REPLACEMENTS-
28ec0 50 41 54 54 45 52 4e 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 72 PATTERN.can.be.used.to.set.the.r
28ee0 65 67 65 78 20 75 73 65 64 20 74 6f 0a 6d 61 74 63 68 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 2e egex.used.to.match.replacements.
28f00 20 20 53 65 65 20 60 65 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 ..See.`elnode-replacements-patte
28f20 72 6e 27 2e 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 6c rn'."...(lambda.(httpcon).....(l
28f40 65 74 20 28 28 65 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 6e et.((elnode-replacements-pattern
28f60 0a 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 ............(or.replacements-pat
28f80 74 65 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 72 65 70 6c 61 tern................elnode-repla
28fa0 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 6e 29 29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 cements-pattern))).......(elnode
28fc0 2d 73 65 6e 64 2d 66 69 6c 65 0a 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 -send-file........httpcon.......
28fe0 20 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 20 20 20 3a 6d 69 6d 65 2d 74 79 70 65 73 20 6d 69 6d .filename........:mime-types.mim
29000 65 2d 74 79 70 65 73 0a 20 20 20 20 20 20 20 3a 70 72 65 61 6d 62 6c 65 20 70 72 65 61 6d 62 6c e-types........:preamble.preambl
29020 65 0a 20 20 20 20 20 20 20 3a 72 65 70 6c 61 63 65 6d 65 6e 74 73 20 72 65 70 6c 61 63 65 6d 65 e........:replacements.replaceme
29040 6e 74 73 29 29 29 29 0a 0a 0a 3b 3b 20 44 6f 63 72 6f 6f 74 20 70 72 6f 74 65 63 74 69 6f 6e 0a nts))))...;;.Docroot.protection.
29060 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 75 6e 64 65 72 2d 64 6f 63 72 6f 6f 74 2d 70 20 .(defun.elnode--under-docroot-p.
29080 28 74 61 72 67 65 74 2d 66 69 6c 65 20 64 6f 63 2d 72 6f 6f 74 20 26 6f 70 74 69 6f 6e 61 6c 20 (target-file.doc-root.&optional.
290a0 69 67 6e 6f 72 65 2d 6d 69 73 73 69 6e 67 29 0a 20 20 22 49 73 20 74 68 65 20 54 41 52 47 45 54 ignore-missing)..."Is.the.TARGET
290c0 2d 46 49 4c 45 20 75 6e 64 65 72 20 74 68 65 20 44 4f 43 2d 52 4f 4f 54 3f 0a 4f 70 74 69 6f 6e -FILE.under.the.DOC-ROOT?.Option
290e0 61 6c 20 61 72 67 75 6d 65 6e 74 20 49 47 4e 4f 52 45 2d 4d 49 53 53 49 4e 47 20 77 69 6c 6c 20 al.argument.IGNORE-MISSING.will.
29100 69 6e 68 69 62 69 74 20 63 68 65 63 6b 73 20 66 6f 72 20 6d 69 73 73 69 6e 67 20 66 69 6c 65 73 inhibit.checks.for.missing.files
29120 2e 22 0a 20 20 28 6c 65 74 20 28 28 64 6f 63 72 6f 6f 74 0a 20 20 20 20 20 20 20 20 20 28 64 69 ."...(let.((docroot..........(di
29140 72 65 63 74 6f 72 79 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 28 65 78 70 rectory-file-name...........(exp
29160 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 64 6f 63 2d 72 6f 6f 74 29 29 29 29 0a 20 20 20 20 28 and-file-name.doc-root)))).....(
29180 61 6e 64 0a 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 0a 20 20 20 20 20 20 28 66 6f and......(string-match.......(fo
291a0 72 6d 61 74 20 22 5e 25 73 5c 5c 28 24 5c 5c 7c 2f 5c 5c 29 22 20 64 6f 63 72 6f 6f 74 29 0a 20 rmat."^%s\\($\\|/\\)".docroot)..
291c0 20 20 20 20 20 74 61 72 67 65 74 2d 66 69 6c 65 29 0a 20 20 20 20 20 28 6f 72 20 69 67 6e 6f 72 .....target-file)......(or.ignor
291e0 65 2d 6d 69 73 73 69 6e 67 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 74 61 72 67 65 74 2d e-missing.(file-exists-p.target-
29200 66 69 6c 65 29 29 29 29 29 0a 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6e 6f 74 2d 66 6f file)))))...(defun.elnode-not-fo
29220 75 6e 64 20 28 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d 66 69 6c 65 29 0a 20 20 22 60 65 6c und.(httpcon.target-file)..."`el
29240 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 27 20 63 61 6c 6c 73 20 74 68 69 73 20 77 68 65 node-docroot-for'.calls.this.whe
29260 6e 20 74 68 65 20 64 6f 63 20 77 61 73 20 6e 6f 74 20 66 6f 75 6e 64 2e 0a 0a 59 6f 75 20 63 61 n.the.doc.was.not.found...You.ca
29280 6e 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 69 6e 20 74 65 73 74 73 20 74 6f 20 68 61 76 65 n.override.this.in.tests.to.have
292a0 20 69 6e 74 65 72 65 73 74 69 6e 67 20 65 66 66 65 63 74 73 2e 20 20 42 79 0a 64 65 66 61 75 6c .interesting.effects...By.defaul
292c0 74 20 69 74 20 6a 75 73 74 20 63 61 6c 6c 73 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 t.it.just.calls.`elnode-send-404
292e0 27 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 20 68 74 74 70 63 6f 6e 29 29 '."...(elnode-send-404.httpcon))
29300 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 20 28 ..(defun.elnode-modified-since.(
29320 68 74 74 70 63 6f 6e 20 6d 6f 64 69 66 69 65 64 2d 74 69 6d 65 29 0a 20 20 22 49 6d 70 6c 65 6d httpcon.modified-time)..."Implem
29340 65 6e 74 20 74 68 65 20 48 54 54 50 20 49 66 2d 4d 6f 64 69 66 69 65 64 2d 53 69 6e 63 65 20 74 ent.the.HTTP.If-Modified-Since.t
29360 65 73 74 2e 0a 0a 4d 4f 44 49 46 49 45 44 2d 54 49 4d 45 20 69 73 20 74 68 65 20 74 69 6d 65 20 est...MODIFIED-TIME.is.the.time.
29380 74 68 65 20 72 65 73 6f 75 72 63 65 20 77 61 73 20 6d 6f 64 69 66 69 65 64 2c 20 66 6f 72 20 65 the.resource.was.modified,.for.e
293a0 78 61 6d 70 6c 65 0a 61 20 66 69 6c 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74 69 6d 65 2e xample.a.file.modification.time.
293c0 22 0a 20 20 28 6c 65 74 2a 20 28 28 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 0a 20 20 20 20 20 "...(let*.((modified-since......
293e0 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 .....(elnode-http-header........
29400 20 20 20 20 68 74 74 70 63 6f 6e 20 27 69 66 2d 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 20 3a ....httpcon.'if-modified-since.:
29420 74 69 6d 65 29 29 29 0a 20 20 20 20 28 61 6e 64 0a 20 20 20 20 20 6d 6f 64 69 66 69 65 64 2d 73 time))).....(and......modified-s
29440 69 6e 63 65 0a 20 20 20 20 20 28 74 69 6d 65 2d 6c 65 73 73 2d 70 20 6d 6f 64 69 66 69 65 64 2d ince......(time-less-p.modified-
29460 74 69 6d 65 20 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 time.modified-since))))..(defun.
29480 65 6c 6e 6f 64 65 2d 63 61 63 68 65 64 2d 70 20 28 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d elnode-cached-p.(httpcon.target-
294a0 66 69 6c 65 29 0a 20 20 22 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 54 41 52 47 45 54 file)..."Is.the.specified.TARGET
294c0 2d 46 49 4c 45 20 6f 6c 64 65 72 20 74 68 61 6e 20 74 68 65 20 48 54 54 50 43 4f 4e 3f 0a 0a 54 -FILE.older.than.the.HTTPCON?..T
294e0 68 69 73 20 75 73 65 73 20 60 65 6c 6e 6f 64 65 2d 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 27 his.uses.`elnode-modified-since'
29500 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 0a 20 20 20 68 ."...(elnode-modified-since....h
29520 74 74 70 63 6f 6e 20 28 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65 2d 6d 6f 64 69 66 69 65 64 2d 74 69 ttpcon.(elnode--file-modified-ti
29540 6d 65 20 74 61 72 67 65 74 2d 66 69 6c 65 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 me.target-file)))..(defun.elnode
29560 2d 63 61 63 68 65 64 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 60 65 6c 6e 6f 64 65 2d 64 6f 63 -cached.(httpcon)..."`elnode-doc
29580 72 6f 6f 74 2d 66 6f 72 27 20 63 61 6c 6c 73 20 74 68 69 73 20 77 68 65 6e 20 74 68 65 20 72 65 root-for'.calls.this.when.the.re
295a0 73 6f 75 72 63 65 73 20 77 61 73 20 63 61 63 68 65 64 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 sources.was.cached...By.default.
295c0 69 74 20 6a 75 73 74 20 63 61 6c 6c 73 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 it.just.calls.`elnode-send-statu
295e0 73 27 20 77 69 74 68 20 33 30 34 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 s'.with.304."...(elnode-send-sta
29600 74 75 73 20 68 74 74 70 63 6f 6e 20 33 30 34 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 tus.httpcon.304))..(defvar.elnod
29620 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 2d 6e 6f 2d 34 30 34 20 6e 69 6c 0a 20 20 22 57 68 65 6e e-docroot-for-no-404.nil..."When
29640 20 73 65 74 20 74 6f 20 74 72 75 65 20 60 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 .set.to.true.`elnode-docroot-for
29660 27 20 64 6f 65 73 6e 27 74 20 63 68 65 63 6b 20 66 6f 72 20 6d 69 73 73 69 6e 67 20 66 69 6c 65 '.doesn't.check.for.missing.file
29680 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 s.")..(defvar.elnode-docroot-for
296a0 2d 6e 6f 2d 63 61 63 68 65 20 6e 69 6c 0a 20 20 22 57 68 65 6e 20 73 65 74 20 74 6f 20 74 72 75 -no-cache.nil..."When.set.to.tru
296c0 65 20 60 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 27 20 64 6f 65 73 6e 27 74 20 63 e.`elnode-docroot-for'.doesn't.c
296e0 68 65 63 6b 20 66 6f 72 20 63 61 63 68 65 64 20 66 69 6c 65 73 2e 22 29 0a 0a 28 64 65 66 6d 61 heck.for.cached.files.")..(defma
29700 63 72 6f 20 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 20 28 64 6f 63 2d 72 6f 6f 74 cro.elnode-docroot-for.(doc-root
29720 20 77 69 74 68 20 74 61 72 67 65 74 2d 66 69 6c 65 2d 76 61 72 0a 20 20 20 20 20 20 20 20 20 20 .with.target-file-var...........
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 20 .............................on.
29760 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 httpcon.........................
29780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 20 26 72 65 73 74 20 68 61 6e 64 6c 69 6e 67 ...............do.&rest.handling
297a0 29 0a 20 20 22 44 6f 63 72 6f 6f 74 20 70 72 6f 74 65 63 74 69 6f 6e 20 66 6f 72 20 45 6c 6e 6f )..."Docroot.protection.for.Elno
297c0 64 65 20 68 61 6e 64 6c 65 72 73 2e 0a 0a 54 65 73 74 20 74 68 65 20 70 61 74 68 20 72 65 71 75 de.handlers...Test.the.path.requ
297e0 65 73 74 65 64 20 69 6e 20 48 54 54 50 43 4f 4e 20 69 73 20 73 61 66 65 6c 79 20 75 6e 64 65 72 ested.in.HTTPCON.is.safely.under
29800 20 74 68 65 20 44 4f 43 2d 52 4f 4f 54 0a 73 70 65 63 69 66 69 65 64 2c 20 62 69 6e 64 20 74 68 .the.DOC-ROOT.specified,.bind.th
29820 65 20 54 41 52 47 45 54 2d 46 49 4c 45 2d 56 41 52 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 e.TARGET-FILE-VAR.to.the.resulti
29840 6e 67 20 65 78 70 61 6e 64 65 64 0a 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 65 78 65 63 75 74 ng.expanded.file.name.and.execut
29860 65 20 74 68 65 20 48 41 4e 44 4c 49 4e 47 20 63 6f 64 65 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c e.the.HANDLING.code...For.exampl
29880 65 3a 0a 0a 20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 0a 20 20 20 20 20 20 e:....(elnode-docroot-for.......
298a0 20 20 5c 22 7e 2f 77 6f 72 6b 5c 22 0a 20 20 20 20 20 20 20 20 77 69 74 68 20 66 69 6c 65 2d 76 ..\"~/work\".........with.file-v
298c0 61 72 0a 20 20 20 20 20 20 20 20 6f 6e 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 64 6f ar.........on.httpcon.........do
298e0 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 20 68 74 74 70 63 .........(elnode-send-file.httpc
29900 6f 6e 20 66 69 6c 65 2d 76 61 72 29 29 0a 0a 63 68 65 63 6b 73 20 61 6e 79 20 72 65 73 6f 75 72 on.file-var))..checks.any.resour
29920 63 65 20 72 65 71 75 65 73 74 65 64 20 69 6e 20 48 54 54 50 43 4f 4e 20 69 73 20 61 20 66 69 6c ce.requested.in.HTTPCON.is.a.fil
29940 65 20 75 6e 64 65 72 20 74 68 65 0a 64 6f 63 2d 72 6f 6f 74 20 5c 22 7e 2f 77 6f 72 6b 5c 22 20 e.under.the.doc-root.\"~/work\".
29960 61 6e 64 20 69 66 20 69 74 20 69 73 2c 20 62 69 6e 64 73 20 74 68 65 20 72 65 73 75 6c 74 69 6e and.if.it.is,.binds.the.resultin
29980 67 20 66 69 6c 65 20 6e 61 6d 65 0a 74 6f 20 46 49 4c 45 2d 56 41 52 20 61 6e 64 20 63 61 6c 6c g.file.name.to.FILE-VAR.and.call
299a0 73 20 74 68 65 20 63 6f 64 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 20 28 77 68 69 63 68 20 73 s.the.code.following.DO.(which.s
299c0 65 6e 64 73 20 74 68 65 20 66 69 6c 65 0a 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 29 2e 0a 0a ends.the.file.to.the.HTTPCON)...
299e0 57 68 65 6e 20 61 20 66 69 6c 65 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 20 28 6f 72 20 6e 6f 74 When.a.file.is.not.found.(or.not
29a00 20 73 61 66 65 20 74 6f 20 72 65 74 75 72 6e 29 20 60 65 6c 6e 6f 64 65 2d 6e 6f 74 2d 66 6f 75 .safe.to.return).`elnode-not-fou
29a20 6e 64 27 20 69 73 20 63 61 6c 6c 65 64 2e 0a 0a 57 68 65 6e 20 61 20 66 69 6c 65 20 69 73 20 63 nd'.is.called...When.a.file.is.c
29a40 61 63 68 65 64 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 28 77 68 65 6e 20 61 20 63 6c 69 65 ached.on.the.client.(when.a.clie
29a60 6e 74 20 73 65 6e 64 73 20 61 0a 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 47 45 54 20 66 6f 72 20 74 nt.sends.a.conditional.GET.for.t
29a80 68 65 20 66 69 6c 65 20 74 68 61 74 20 73 68 6f 77 73 20 74 68 65 20 63 6c 69 65 6e 74 20 68 61 he.file.that.shows.the.client.ha
29aa0 73 20 61 6e 20 75 70 20 74 6f 0a 64 61 74 65 20 63 6f 70 79 29 20 74 68 65 6e 20 60 65 6c 6e 6f s.an.up.to.date.copy).then.`elno
29ac0 64 65 2d 63 61 63 68 65 64 27 20 69 73 20 63 61 6c 6c 65 64 2e 22 0a 20 20 28 64 65 63 6c 61 72 de-cached'.is.called."...(declar
29ae0 65 0a 20 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 22 77 69 74 68 22 20 73 65 78 70 20 22 6f e....(debug.(sexp."with".sexp."o
29b00 6e 22 20 73 65 78 70 20 22 64 6f 22 20 26 72 65 73 74 20 66 6f 72 6d 29 29 0a 20 20 20 28 69 6e n".sexp."do".&rest.form))....(in
29b20 64 65 6e 74 20 64 65 66 75 6e 29 29 0a 20 20 28 6c 65 74 20 28 28 64 72 20 28 6d 61 6b 65 2d 73 dent.defun))...(let.((dr.(make-s
29b40 79 6d 62 6f 6c 20 22 64 6f 63 72 6f 6f 74 22 29 29 0a 20 20 20 20 20 20 20 20 28 63 6f 6e 20 28 ymbol."docroot")).........(con.(
29b60 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74 74 70 63 6f 6e 22 29 29 29 0a 20 20 20 20 28 61 73 make-symbol."httpcon"))).....(as
29b80 73 65 72 74 20 28 6f 72 20 28 65 71 20 77 69 74 68 20 27 77 69 74 68 29 20 28 65 71 20 77 69 74 sert.(or.(eq.with.'with).(eq.wit
29ba0 68 20 3a 77 69 74 68 29 29 29 0a 20 20 20 20 28 61 73 73 65 72 74 20 28 6f 72 20 28 65 71 20 6f h.:with))).....(assert.(or.(eq.o
29bc0 6e 20 27 6f 6e 29 20 20 20 20 20 28 65 71 20 6f 6e 20 3a 6f 6e 29 29 29 0a 20 20 20 20 28 61 73 n.'on).....(eq.on.:on))).....(as
29be0 73 65 72 74 20 28 6f 72 20 28 65 71 20 64 6f 20 27 64 6f 29 20 20 20 20 20 28 65 71 20 64 6f 20 sert.(or.(eq.do.'do).....(eq.do.
29c00 3a 64 6f 29 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 28 2c 64 72 20 2c 64 6f 63 2d 72 6f 6f 74 :do))).....`(let.((,dr.,doc-root
29c20 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 2c 63 6f 6e 20 2c 68 74 74 70 63 6f 6e 29 29 0a 20 20 )............(,con.,httpcon))...
29c40 20 20 20 20 20 28 6c 65 74 20 28 28 2c 74 61 72 67 65 74 2d 66 69 6c 65 2d 76 61 72 20 28 65 6c .....(let.((,target-file-var.(el
29c60 6e 6f 64 65 2d 67 65 74 2d 74 61 72 67 65 74 66 69 6c 65 20 2c 63 6f 6e 20 2c 64 72 29 29 29 0a node-get-targetfile.,con.,dr))).
29c80 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 6c 6e 6f 64 65 2d 2d 75 6e 64 65 72 .........(if.(not.(elnode--under
29ca0 2d 64 6f 63 72 6f 6f 74 2d 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 74 -docroot-p....................,t
29cc0 61 72 67 65 74 2d 66 69 6c 65 2d 76 61 72 20 2c 64 72 20 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f arget-file-var.,dr.elnode-docroo
29ce0 74 2d 66 6f 72 2d 6e 6f 2d 34 30 34 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e t-for-no-404))..............(eln
29d00 6f 64 65 2d 6e 6f 74 2d 66 6f 75 6e 64 20 2c 63 6f 6e 20 2c 74 61 72 67 65 74 2d 66 69 6c 65 2d ode-not-found.,con.,target-file-
29d20 76 61 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 65 6c var)............(if.(and.(not.el
29d40 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 2d 6e 6f 2d 63 61 63 68 65 29 0a 20 20 20 20 20 node-docroot-for-no-cache)......
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 63 61 63 68 65 64 2d 70 20 ...............(elnode-cached-p.
29d80 2c 63 6f 6e 20 2c 74 61 72 67 65 74 2d 66 69 6c 65 2d 76 61 72 29 29 0a 20 20 20 20 20 20 20 20 ,con.,target-file-var)).........
29da0 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 63 61 63 68 65 64 20 2c 63 6f 6e 29 0a 20 20 20 20 .......(elnode-cached.,con).....
29dc0 20 20 20 20 20 20 20 20 20 2c 40 68 61 6e 64 6c 69 6e 67 29 29 29 29 29 29 0a 0a 0a 3b 3b 20 57 .........,@handling))))))...;;.W
29de0 65 62 73 65 72 76 65 72 20 73 74 75 66 66 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 ebserver.stuff..;;;###autoload.(
29e00 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 defconst.elnode-config-directory
29e20 0a 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 75 73 65 ...(expand-file-name.(concat.use
29e40 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 20 22 65 6c 6e 6f 64 65 2f 22 29 29 0a 20 20 r-emacs-directory."elnode/"))...
29e60 22 54 68 65 20 63 6f 6e 66 69 67 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 65 6c 6e 6f 64 65 "The.config.directory.for.elnode
29e80 20 74 6f 20 73 74 6f 72 65 20 70 65 72 69 70 68 65 72 61 6c 20 66 69 6c 65 73 2e 0a 0a 54 68 69 .to.store.peripheral.files...Thi
29ea0 73 20 69 73 20 75 73 65 64 20 61 73 20 61 20 62 61 73 65 20 66 6f 72 20 6f 74 68 65 72 20 63 6f s.is.used.as.a.base.for.other.co
29ec0 6e 73 74 61 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 72 20 66 69 6c 65 0a 6e 61 6d 65 73 20 28 nstant.directory.or.file.names.(
29ee0 74 68 65 20 65 6c 6e 6f 64 65 20 61 75 74 68 20 64 61 74 61 62 61 73 65 20 69 73 20 61 20 66 69 the.elnode.auth.database.is.a.fi
29f00 6c 65 20 69 6e 20 74 68 69 73 20 64 69 72 65 63 74 6f 72 79 2c 20 74 68 65 0a 65 6c 6e 6f 64 65 le.in.this.directory,.the.elnode
29f20 20 77 65 62 73 65 72 76 65 72 20 68 61 73 20 61 20 64 6f 63 72 6f 6f 74 20 64 69 72 65 63 74 6f .webserver.has.a.docroot.directo
29f40 72 79 20 69 6e 20 74 68 69 73 20 64 69 72 65 63 74 6f 72 79 29 2e 0a 0a 49 74 20 69 73 20 62 61 ry.in.this.directory)...It.is.ba
29f60 73 65 64 20 6f 6e 20 74 68 65 20 60 75 73 65 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 sed.on.the.`user-emacs-directory
29f80 27 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 73 65 65 6d 73 20 74 6f 0a 62 65 20 73 65 74 2c 20 '.which.always.seems.to.be.set,.
29fa0 65 76 65 6e 20 77 68 65 6e 20 65 6d 61 63 73 20 69 73 20 73 74 61 72 74 65 64 20 77 69 74 68 20 even.when.emacs.is.started.with.
29fc0 2d 51 2e 22 29 0a 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 -Q.")..(defconst.elnode-webserve
29fe0 72 2d 64 6f 63 72 6f 6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 r-docroot-default...(expand-file
2a000 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 65 6c 6e 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 69 72 65 -name.(concat.elnode-config-dire
2a020 63 74 6f 72 79 20 22 70 75 62 6c 69 63 5f 68 74 6d 6c 2f 22 29 29 0a 20 20 22 54 68 65 20 64 65 ctory."public_html/"))..."The.de
2a040 66 61 75 6c 74 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 77 65 62 73 69 74 65 2e 0a 0a fault.location.of.the.website...
2a060 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 74 68 65 72 20 65 This.is.used.to.detect.whether.e
2a080 6c 6e 6f 64 65 20 6e 65 65 64 73 20 74 6f 20 63 72 65 61 74 65 20 74 68 69 73 0a 64 69 72 65 63 lnode.needs.to.create.this.direc
2a0a0 74 6f 72 79 20 6f 72 20 6e 6f 74 2e 22 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 tory.or.not.")..(defcustom.elnod
2a0c0 65 2d 77 65 62 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 0a 20 20 65 6c 6e 6f 64 65 2d 77 65 62 e-webserver-docroot...elnode-web
2a0e0 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 22 54 68 65 20 64 6f server-docroot-default..."The.do
2a100 63 75 6d 65 6e 74 20 72 6f 6f 74 20 6f 66 20 74 68 65 20 77 65 62 73 65 72 76 65 72 2e 0a 0a 57 cument.root.of.the.webserver...W
2a120 65 62 73 65 72 76 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 72 65 65 20 74 6f 20 75 ebserver.functions.are.free.to.u
2a140 73 65 20 74 68 69 73 20 6f 72 20 6e 6f 74 2e 20 20 54 68 65 0a 60 65 6c 6e 6f 64 65 2d 77 65 62 se.this.or.not...The.`elnode-web
2a160 73 65 72 76 65 72 27 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 75 73 65 20 69 74 2e 22 0a 20 server'.function.does.use.it."..
2a180 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 66 69 6c 65 29 0a 0a .:group.'elnode...:type.'file)..
2a1a0 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 65 78 74 72 (defcustom.elnode-webserver-extr
2a1c0 61 2d 6d 69 6d 65 74 79 70 65 73 0a 20 20 27 28 28 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 2e 20 a-mimetypes...'(("text/plain"...
2a1e0 22 63 72 65 6f 6c 65 22 29 0a 20 20 20 20 28 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 2e 20 22 65 "creole").....("text/plain"..."e
2a200 6c 22 29 29 0a 20 20 22 45 78 74 72 61 20 6d 69 6d 65 20 74 79 70 65 73 20 74 6f 20 69 64 65 6e l"))..."Extra.mime.types.to.iden
2a220 74 69 66 79 20 73 70 65 63 69 61 6c 20 66 69 6c 65 20 74 79 70 65 73 2e 0a 0a 54 68 69 73 20 69 tify.special.file.types...This.i
2a240 73 20 6a 75 73 74 20 61 20 77 61 79 20 6f 66 20 68 61 63 6b 69 6e 67 20 74 68 65 20 6d 69 6d 65 s.just.a.way.of.hacking.the.mime
2a260 20 74 79 70 65 20 64 69 73 63 6f 76 65 72 79 20 73 6f 20 77 65 20 63 61 6e 0a 61 64 64 20 6d 6f .type.discovery.so.we.can.add.mo
2a280 72 65 20 66 69 6c 65 20 6d 61 70 70 69 6e 67 73 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 74 68 61 re.file.mappings.more.easily.tha
2a2a0 6e 20 65 64 69 74 69 6e 67 20 60 2f 65 74 63 2f 6d 69 6d 65 2e 74 79 70 65 73 27 2e 22 0a 20 20 n.editing.`/etc/mime.types'."...
2a2c0 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 61 6c 69 73 74 20 3a :group.'elnode...:type.'(alist.:
2a2e0 6b 65 79 2d 74 79 70 65 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 key-type.string.................
2a300 3a 76 61 6c 75 65 2d 74 79 70 65 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d :value-type.string))..(defcustom
2a320 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 20 27 28 22 69 6e 64 65 78 .elnode-webserver-index.'("index
2a340 2e 68 74 6d 6c 22 20 22 69 6e 64 65 78 2e 68 74 6d 22 29 0a 20 20 22 41 20 6c 69 73 74 20 6f 66 .html"."index.htm")..."A.list.of
2a360 20 70 6f 73 73 69 62 6c 65 20 69 6e 64 65 78 20 66 69 6c 65 6e 61 6d 65 73 2e 0a 0a 41 6e 79 6f .possible.index.filenames...Anyo
2a380 6e 65 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 69 73 20 6c 69 73 74 20 6d 61 ne.of.the.values.of.this.list.ma
2a3a0 79 20 62 65 20 70 69 63 6b 65 64 20 61 73 20 74 68 65 20 69 6e 64 65 78 20 70 61 67 65 0a 66 6f y.be.picked.as.the.index.page.fo
2a3c0 72 20 61 20 64 69 72 65 63 74 6f 72 79 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 r.a.directory."...:group.'elnode
2a3e0 0a 20 20 3a 74 79 70 65 20 27 28 72 65 70 65 61 74 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 ...:type.'(repeat.string))..(def
2a400 75 6e 20 65 6c 6e 6f 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 73 65 74 75 70 20 28 29 0a 20 20 un.elnode--webserver-setup.()...
2a420 22 53 65 74 75 70 20 74 68 65 20 45 6c 6e 6f 64 65 20 77 65 62 73 65 72 76 65 72 20 62 79 20 6d "Setup.the.Elnode.webserver.by.m
2a440 61 6b 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 70 75 62 6c 69 63 5f 68 74 6d 6c 20 64 69 72 2e aking.a.default.public_html.dir.
2a460 0a 0a 54 68 65 20 73 65 72 76 65 72 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 60 74 65 73 74 2e ..The.server.has.a.single.`test.
2a480 68 74 6d 6c 27 20 66 69 6c 65 2c 20 74 68 69 73 20 69 73 20 73 6f 20 77 65 20 63 61 6e 20 73 68 html'.file,.this.is.so.we.can.sh
2a4a0 6f 77 0a 6f 66 66 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 77 65 62 73 65 72 76 65 72 20 69 6e ow.off.the.standard.webserver.in
2a4c0 64 65 78 69 6e 67 20 69 6e 20 65 6c 6e 6f 64 65 27 73 20 77 65 62 73 65 72 76 65 72 2e 22 0a 20 dexing.in.elnode's.webserver."..
2a4e0 20 28 65 6c 6e 6f 64 65 2d 2d 64 69 72 2d 73 65 74 75 70 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 .(elnode--dir-setup.elnode-webse
2a500 72 76 65 72 2d 64 6f 63 72 6f 6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 rver-docroot....................
2a520 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 2d 64 65 66 61 75 ..elnode-webserver-docroot-defau
2a540 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 66 61 75 6c 74 lt......................"default
2a560 2d 77 65 62 73 65 72 76 65 72 2d 74 65 73 74 2e 68 74 6d 6c 22 0a 20 20 20 20 20 20 20 20 20 20 -webserver-test.html"...........
2a580 20 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74 2e 68 74 6d 6c 22 0a 20 20 20 20 20 20 20 20 20 ..........."test.html"..........
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 66 61 75 6c 74 2d 77 65 62 73 65 72 76 65 72 2d 69 ............"default-webserver-i
2a5c0 6d 61 67 65 2e 70 6e 67 22 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 75 72 6c 2d 65 mage.png"))..(defun.elnode-url-e
2a5e0 6e 63 6f 64 65 2d 70 61 74 68 20 28 70 61 74 68 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 75 72 ncode-path.(path)..."Return.a.ur
2a600 6c 20 65 6e 63 6f 64 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 50 41 54 48 2e 0a 0a 54 68 69 73 l.encoded.version.of.PATH...This
2a620 20 69 73 20 6c 69 6b 65 20 60 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 69 6e 67 27 20 62 75 74 .is.like.`url-hexify-string'.but
2a640 20 69 74 20 68 61 6e 64 6c 65 73 20 74 68 65 20 70 61 72 74 73 20 6f 66 20 74 68 65 0a 50 41 54 .it.handles.the.parts.of.the.PAT
2a660 48 20 70 72 6f 70 65 72 6c 79 2e 20 20 49 74 20 61 6c 73 6f 20 68 65 78 69 66 69 65 73 20 73 69 H.properly...It.also.hexifies.si
2a680 6e 67 6c 65 20 71 75 6f 74 65 2e 22 0a 20 20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 ngle.quote."...(replace-regexp-i
2a6a0 6e 2d 73 74 72 69 6e 67 0a 20 20 20 22 27 22 20 22 25 32 37 22 0a 20 20 20 28 6d 61 70 63 6f 6e n-string...."'"."%27"....(mapcon
2a6c0 63 61 74 0a 20 20 20 20 27 69 64 65 6e 74 69 74 79 0a 20 20 20 20 28 6c 6f 6f 70 0a 20 20 20 20 cat.....'identity.....(loop.....
2a6e0 20 20 20 66 6f 72 20 70 61 72 74 20 69 6e 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 70 61 74 ...for.part.in.(split-string.pat
2a700 68 20 22 2f 22 29 0a 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 28 h."/")........collect..........(
2a720 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 concat...........(url-hexify-str
2a740 69 6e 67 20 70 61 72 74 29 29 29 0a 20 20 20 20 22 2f 22 29 29 29 0a 0a 28 64 65 66 63 75 73 74 ing.part)))....."/")))..(defcust
2a760 6f 6d 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 2d 70 61 67 65 2d 74 om.elnode-webserver-index-page-t
2a780 65 6d 70 6c 61 74 65 20 22 3c 68 74 6d 6c 3e 0a 20 3c 68 65 61 64 3e 0a 20 20 3c 74 69 74 6c 65 emplate."<html>..<head>...<title
2a7a0 3e 25 73 3c 2f 74 69 74 6c 65 3e 0a 20 3c 2f 68 65 61 64 3e 0a 20 3c 62 6f 64 79 3e 0a 20 20 3c >%s</title>..</head>..<body>...<
2a7c0 68 31 3e 25 73 3c 2f 68 31 3e 0a 20 20 3c 64 69 76 3e 25 73 3c 2f 64 69 76 3e 0a 20 3c 2f 62 6f h1>%s</h1>...<div>%s</div>..</bo
2a7e0 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 0a 22 0a 20 20 22 54 68 65 20 70 61 67 65 20 74 65 6d 70 6c 61 dy>.</html>."..."The.page.templa
2a800 74 65 20 75 73 65 64 20 74 6f 20 72 65 6e 64 65 72 20 61 6e 20 69 6e 64 65 78 20 70 61 67 65 2e te.used.to.render.an.index.page.
2a820 0a 0a 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 69 73 3a ..The.order.of.the.variables.is:
2a840 0a 0a 2d 20 74 68 65 20 74 69 74 6c 65 20 6f 66 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 0a 2d 20 ..-.the.title.of.the.document.-.
2a860 74 68 65 20 74 69 74 6c 65 20 6f 66 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 0a 2d 20 74 68 65 20 the.title.of.the.document.-.the.
2a880 48 54 4d 4c 20 66 6f 72 6d 61 74 74 65 64 20 6c 69 73 74 20 6f 66 20 66 69 6c 65 73 2e 22 0a 20 HTML.formatted.list.of.files."..
2a8a0 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 .:group.'elnode...:type.'(string
2a8c0 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d ))..(defcustom.elnode-webserver-
2a8e0 69 6e 64 65 78 2d 66 69 6c 65 2d 74 65 6d 70 6c 61 74 65 20 22 3c 61 20 68 72 65 66 3d 27 25 73 index-file-template."<a.href='%s
2a900 27 3e 25 73 3c 2f 61 3e 3c 62 72 2f 3e 5c 72 5c 6e 22 0a 20 20 22 54 68 65 20 74 65 6d 70 6c 61 '>%s</a><br/>\r\n"..."The.templa
2a920 74 65 20 66 6f 72 20 65 61 63 68 20 66 69 6c 65 20 69 6e 20 74 68 65 20 77 65 62 73 65 72 76 65 te.for.each.file.in.the.webserve
2a940 72 20 69 6e 64 65 78 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 69 73 70 6c 61 r.index...This.is.used.to.displa
2a960 79 20 65 61 63 68 20 66 69 6c 65 20 69 6e 20 61 6e 20 61 75 74 6f 6d 61 74 65 64 20 64 69 72 65 y.each.file.in.an.automated.dire
2a980 63 74 6f 72 79 20 69 6e 64 65 78 2e 0a 0a 49 74 20 69 73 20 65 78 70 65 63 74 65 64 20 74 68 65 ctory.index...It.is.expected.the
2a9a0 20 74 65 6d 70 6c 61 74 65 20 68 61 73 20 32 20 25 73 20 76 61 72 69 61 62 6c 65 73 20 69 6e 20 .template.has.2.%s.variables.in.
2a9c0 69 74 2c 20 74 68 65 20 66 69 72 73 74 0a 69 73 20 74 68 65 20 75 72 6c 20 74 6f 20 6c 69 6e 6b it,.the.first.is.the.url.to.link
2a9e0 20 74 6f 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e .to.and.the.second.is.the.conten
2aa00 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 t.of.the.link."...:group.'elnode
2aa20 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f ...:type.'(string))..(defun.elno
2aa40 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 20 28 64 6f 63 72 6f 6f 74 20 74 61 72 de--webserver-index.(docroot.tar
2aa60 67 65 74 66 69 6c 65 20 70 61 74 68 69 6e 66 6f 20 26 6f 70 74 69 6f 6e 61 6c 20 6d 61 74 63 68 getfile.pathinfo.&optional.match
2aa80 29 0a 20 20 22 43 6f 6e 73 74 72 75 63 74 73 20 69 6e 64 65 78 20 64 6f 63 75 6d 65 6e 74 73 2e )..."Constructs.index.documents.
2aaa0 0a 0a 54 68 65 20 69 6e 64 65 78 20 69 73 20 6d 61 64 65 20 66 6f 72 20 74 68 65 20 44 4f 43 52 ..The.index.is.made.for.the.DOCR
2aac0 4f 4f 54 20 61 6e 64 20 54 41 52 47 45 54 46 49 4c 45 2e 20 54 68 65 20 77 65 62 20 70 61 74 68 OOT.and.TARGETFILE..The.web.path
2aae0 20 69 73 0a 50 41 54 48 49 4e 46 4f 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 20 4d 41 54 43 48 20 69 73 .is.PATHINFO...Optional.MATCH.is
2ab00 20 70 61 73 73 65 64 20 64 69 72 65 63 74 6c 79 20 74 68 72 6f 75 67 68 20 74 6f 0a 60 64 69 72 .passed.directly.through.to.`dir
2ab20 65 63 74 6f 72 79 2d 66 69 6c 65 73 2d 61 6e 64 2d 61 74 74 72 69 62 75 74 65 73 27 2e 22 0a 20 ectory-files-and-attributes'."..
2ab40 20 3b 3b 20 54 4f 44 4f 20 6d 61 6b 65 20 74 68 69 73 20 75 73 61 62 6c 65 20 62 79 20 70 65 6f .;;.TODO.make.this.usable.by.peo
2ab60 70 6c 65 20 67 65 6e 65 72 61 6c 6c 79 0a 20 20 28 6c 65 74 20 28 28 64 69 72 6c 69 73 74 20 28 ple.generally...(let.((dirlist.(
2ab80 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 73 2d 61 6e 64 2d 61 74 74 72 69 62 75 74 65 73 20 74 directory-files-and-attributes.t
2aba0 61 72 67 65 74 66 69 6c 65 20 6e 69 6c 20 6d 61 74 63 68 29 29 29 0a 20 20 20 20 3b 3b 20 54 4f argetfile.nil.match))).....;;.TO
2abc0 44 4f 20 6d 61 6b 65 20 73 6f 6d 65 20 74 65 6d 70 6c 61 74 69 6e 67 20 68 65 72 65 20 73 6f 20 DO.make.some.templating.here.so.
2abe0 70 65 6f 70 6c 65 20 63 61 6e 20 63 68 61 6e 67 65 20 74 68 69 73 0a 20 20 20 20 28 66 6f 72 6d people.can.change.this.....(form
2ac00 61 74 0a 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 2d 70 at......elnode-webserver-index-p
2ac20 61 67 65 2d 74 65 6d 70 6c 61 74 65 0a 20 20 20 20 20 70 61 74 68 69 6e 66 6f 0a 20 20 20 20 20 age-template......pathinfo......
2ac40 70 61 74 68 69 6e 66 6f 0a 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 64 69 72 2d 65 6e 74 72 pathinfo......(loop.for.dir-entr
2ac60 79 20 69 6e 20 64 69 72 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 63 61 74 0a 20 y.in.dirlist............concat..
2ac80 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 6e 74 72 79 0a 20 20 20 20 20 20 20 20 20 ..........(let.((entry..........
2aca0 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........(format................
2acc0 20 20 20 20 22 25 73 2f 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ...."%s/%s"....................(
2ace0 69 66 20 28 65 71 75 61 6c 20 70 61 74 68 69 6e 66 6f 20 22 2f 22 29 20 20 22 22 20 70 61 74 68 if.(equal.pathinfo."/").."".path
2ad00 69 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 64 69 info)....................(car.di
2ad20 72 2d 65 6e 74 72 79 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 r-entry))))..............(format
2ad40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d ...............elnode-webserver-
2ad60 69 6e 64 65 78 2d 66 69 6c 65 2d 74 65 6d 70 6c 61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 index-file-template.............
2ad80 20 20 28 65 6c 6e 6f 64 65 2d 75 72 6c 2d 65 6e 63 6f 64 65 2d 70 61 74 68 20 65 6e 74 72 79 29 ..(elnode-url-encode-path.entry)
2ada0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 64 69 72 2d 65 6e 74 72 79 29 29 29 ...............(car.dir-entry)))
2adc0 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f ))))..;;;###autoload.(defun.elno
2ade0 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 70 72 6f 63 20 28 68 74 74 70 de--webserver-handler-proc.(http
2ae00 63 6f 6e 20 64 6f 63 72 6f 6f 74 20 6d 69 6d 65 2d 74 79 70 65 73 29 0a 20 20 22 41 63 74 75 61 con.docroot.mime-types)..."Actua
2ae20 6c 20 77 65 62 73 65 72 76 65 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 0a 44 6f 20 l.webserver.implementation...Do.
2ae40 77 65 62 73 65 72 76 69 6e 67 20 74 6f 20 48 54 54 50 43 4f 4e 20 66 72 6f 6d 20 74 68 65 20 44 webserving.to.HTTPCON.from.the.D
2ae60 4f 43 52 4f 4f 54 20 75 73 69 6e 67 20 74 68 65 20 4d 49 4d 45 2d 54 59 50 45 53 0a 66 6f 72 20 OCROOT.using.the.MIME-TYPES.for.
2ae80 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 54 68 69 73 20 69 73 20 6e 6f 74 20 61 meta.information...This.is.not.a
2aea0 20 72 65 61 6c 20 68 61 6e 64 6c 65 72 20 28 62 65 63 61 75 73 65 20 69 74 20 74 61 6b 65 73 20 .real.handler.(because.it.takes.
2aec0 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a 48 54 54 50 43 4f 4e 29 20 62 75 74 20 69 74 20 69 73 more.than.the.HTTPCON).but.it.is
2aee0 20 63 61 6c 6c 65 64 20 64 69 72 65 63 74 6c 79 20 62 79 20 74 68 65 20 72 65 61 6c 20 77 65 62 .called.directly.by.the.real.web
2af00 73 65 72 76 65 72 0a 68 61 6e 64 6c 65 72 73 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 server.handlers."...(elnode-docr
2af20 6f 6f 74 2d 66 6f 72 20 64 6f 63 72 6f 6f 74 0a 20 20 20 20 77 69 74 68 20 74 61 72 67 65 74 66 oot-for.docroot.....with.targetf
2af40 69 6c 65 0a 20 20 20 20 6f 6e 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 64 6f 0a 20 20 20 20 28 6c ile.....on.httpcon.....do.....(l
2af60 65 74 20 28 28 70 61 74 68 69 6e 66 6f 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 et.((pathinfo.(elnode-http-pathi
2af80 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 64 nfo.httpcon))).......(if.(file-d
2afa0 69 72 65 63 74 6f 72 79 2d 70 20 74 61 72 67 65 74 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 irectory-p.targetfile)..........
2afc0 20 3b 3b 20 55 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 66 69 6c 65 20 6f .;;.Use.an.existing.index.file.o
2afe0 72 20 73 65 6e 64 20 61 20 64 69 72 65 63 74 6f 72 79 20 69 6e 64 65 78 0a 20 20 20 20 20 20 20 r.send.a.directory.index........
2b000 20 20 20 28 6c 65 74 2a 20 28 28 69 6e 64 65 78 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 ...(let*.((indexfile............
2b020 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 69 20 69 6e 20 65 6c 6e 6f 64 65 2d 77 65 62 .......(loop.for.i.in.elnode-web
2b040 73 65 72 76 65 72 2d 69 6e 64 65 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 server-index....................
2b060 20 20 20 20 20 69 66 20 28 6d 65 6d 62 65 72 20 69 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c .....if.(member.i.(directory-fil
2b080 65 73 20 74 61 72 67 65 74 66 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 es.targetfile)).................
2b0a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ........return.i))).............
2b0c0 28 69 66 20 69 6e 64 65 78 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 (if.indexfile.................(e
2b0e0 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 20 68 74 74 70 63 6f 6e 20 28 63 6f 6e 63 61 74 20 lnode-send-file.httpcon.(concat.
2b100 74 61 72 67 65 74 66 69 6c 65 20 22 2f 22 20 69 6e 64 65 78 66 69 6c 65 29 29 0a 20 20 20 20 20 targetfile."/".indexfile))......
2b120 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 69 6e 64 65 78 20 28 65 6c 6e 6f 64 65 2d 2d 77 .........(let.((index.(elnode--w
2b140 65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ebserver-index..................
2b160 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 72 6f 6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........docroot..............
2b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61 72 67 65 74 66 69 6c 65 0a 20 20 20 20 20 20 ...............targetfile.......
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 69 6e 66 6f 29 29 ......................pathinfo))
2b1c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 ).................(elnode-http-s
2b1e0 74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 20 27 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 tart.httpcon.200.'("Content-type
2b200 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 "..."text/html"))...............
2b220 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70 63 6f 6e 20 69 6e ..(elnode-http-return.httpcon.in
2b240 64 65 78 29 29 29 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 53 65 6e 64 20 61 20 66 69 6c 65 2e 0a dex)))).........;;.Send.a.file..
2b260 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 0a 20 20 20 20 20 20 ........(elnode-send-file.......
2b280 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 74 61 72 67 65 74 66 69 6c 65 0a 20 ...httpcon..........targetfile..
2b2a0 20 20 20 20 20 20 20 20 3a 6d 69 6d 65 2d 74 79 70 65 73 20 6d 69 6d 65 2d 74 79 70 65 73 29 29 ........:mime-types.mime-types))
2b2c0 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e )))..(defun.elnode-webserver-han
2b2e0 64 6c 65 72 2d 6d 61 6b 65 72 20 28 26 6f 70 74 69 6f 6e 61 6c 20 64 6f 63 72 6f 6f 74 20 65 78 dler-maker.(&optional.docroot.ex
2b300 74 72 61 2d 6d 69 6d 65 2d 74 79 70 65 73 29 0a 20 20 22 4d 61 6b 65 20 61 20 77 65 62 73 65 72 tra-mime-types)..."Make.a.webser
2b320 76 65 72 20 68 61 6e 64 6c 65 72 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20 74 68 65 20 44 4f ver.handler.possibly.with.the.DO
2b340 43 52 4f 4f 54 20 61 6e 64 20 45 58 54 52 41 2d 4d 49 4d 45 2d 54 59 50 45 53 2e 0a 0a 52 65 74 CROOT.and.EXTRA-MIME-TYPES...Ret
2b360 75 72 6e 73 20 61 20 70 72 6f 63 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68 61 6e 64 6c 65 72 urns.a.proc.which.is.the.handler
2b380 2e 20 54 68 65 20 68 61 6e 64 6c 65 72 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 6f 75 74 0a 6f ..The.handler.serves.files.out.o
2b3a0 66 20 74 68 65 20 64 6f 63 72 6f 6f 74 20 61 6e 64 20 6d 61 72 6b 73 20 74 68 65 6d 20 77 69 74 f.the.docroot.and.marks.them.wit
2b3c0 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 74 79 70 65 73 20 74 68 61 74 20 45 6d 61 63 73 0a 6b h.the.content.types.that.Emacs.k
2b3e0 6e 6f 77 73 20 61 62 6f 75 74 2e 20 59 6f 75 20 63 61 6e 20 61 64 64 20 65 78 74 72 61 20 63 6f nows.about..You.can.add.extra.co
2b400 6e 74 65 6e 74 20 74 79 70 65 73 20 66 6f 72 20 74 68 65 20 77 65 62 73 65 72 76 65 72 0a 6a 75 ntent.types.for.the.webserver.ju
2b420 73 74 20 62 79 20 73 75 70 70 6c 79 69 6e 67 20 61 6e 20 61 6c 69 73 74 20 6f 66 20 6d 69 6d 65 st.by.supplying.an.alist.of.mime
2b440 2d 74 79 70 65 73 20 61 6e 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 66 6f 72 0a 45 58 54 52 41 2d -types.and.extensions.for.EXTRA-
2b460 4d 49 4d 45 2d 54 59 50 45 53 2e 0a 0a 54 68 65 20 77 65 62 73 65 72 76 65 72 20 68 61 6e 64 6c MIME-TYPES...The.webserver.handl
2b480 65 72 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 66 69 6c 65 20 69 6e 64 65 78 65 73 2e 0a 0a 54 er.also.creates.file.indexes...T
2b4a0 68 65 20 77 65 62 73 65 72 76 65 72 20 75 73 65 73 20 60 65 6c 6e 6f 64 65 2d 74 65 73 74 2d 70 he.webserver.uses.`elnode-test-p
2b4c0 61 74 68 27 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 0a 72 65 71 75 65 ath'.to.make.sure.that.the.reque
2b4e0 73 74 20 64 6f 65 73 20 6e 6f 74 20 67 6f 20 61 62 6f 76 65 20 74 68 65 20 44 4f 43 52 4f 4f 54 st.does.not.go.above.the.DOCROOT
2b500 2e 22 0a 20 20 28 6c 65 74 20 28 28 6d 79 2d 64 6f 63 72 6f 6f 74 20 28 6f 72 20 64 6f 63 72 6f ."...(let.((my-docroot.(or.docro
2b520 6f 74 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 29 29 0a 20 20 ot.elnode-webserver-docroot))...
2b540 20 20 20 20 20 20 28 6d 79 2d 6d 69 6d 65 2d 74 79 70 65 73 20 28 6f 72 20 65 78 74 72 61 2d 6d ......(my-mime-types.(or.extra-m
2b560 69 6d 65 2d 74 79 70 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ime-types.......................
2b580 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 65 78 74 72 61 2d 6d 69 6d 65 .....elnode-webserver-extra-mime
2b5a0 74 79 70 65 73 29 29 29 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 types))).....(lambda.(httpcon)..
2b5c0 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d .....(elnode--webserver-handler-
2b5e0 70 72 6f 63 0a 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 6d 79 2d 64 6f 63 72 6f 6f 74 20 6d proc........httpcon.my-docroot.m
2b600 79 2d 6d 69 6d 65 2d 74 79 70 65 73 29 29 29 29 0a 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 y-mime-types))))...(defvar.elnod
2b620 65 2d 2d 6d 61 6b 65 2d 77 65 62 73 65 72 76 65 72 2d 73 74 6f 72 65 20 6e 69 6c 0a 20 20 22 41 e--make-webserver-store.nil..."A
2b640 6c 69 73 74 20 6f 66 20 77 65 62 73 65 72 76 65 72 73 20 6d 61 64 65 20 62 79 20 60 65 6c 6e 6f list.of.webservers.made.by.`elno
2b660 64 65 2d 6d 61 6b 65 2d 77 65 62 73 65 72 76 65 72 27 2e 0a 0a 53 74 6f 72 65 64 20 61 73 20 60 de-make-webserver'...Stored.as.`
2b680 64 6f 63 72 6f 6f 74 27 20 2e 20 60 77 65 62 73 65 72 76 65 72 27 2e 22 29 0a 0a 3b 3b 3b 23 23 docroot'...`webserver'.")..;;;##
2b6a0 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 77 65 62 #autoload.(defun.elnode-make-web
2b6c0 73 65 72 76 65 72 20 28 64 6f 63 72 6f 6f 74 20 70 6f 72 74 20 26 6f 70 74 69 6f 6e 61 6c 20 68 server.(docroot.port.&optional.h
2b6e0 6f 73 74 29 0a 20 20 22 4d 61 6b 65 20 61 20 77 65 62 73 65 72 76 65 72 20 69 6e 74 65 72 61 63 ost)..."Make.a.webserver.interac
2b700 74 69 76 65 6c 79 2c 20 66 6f 72 20 44 4f 43 52 4f 4f 54 20 6f 6e 20 50 4f 52 54 2e 0a 0a 41 6e tively,.for.DOCROOT.on.PORT...An
2b720 20 65 61 73 79 20 77 61 79 20 66 6f 72 20 61 20 75 73 65 72 20 74 6f 20 6d 61 6b 65 20 61 20 77 .easy.way.for.a.user.to.make.a.w
2b740 65 62 73 65 72 76 65 72 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 0a 64 69 72 65 63 74 ebserver.for.a.particular.direct
2b760 6f 72 79 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20 20 28 6c 65 74 20 28 28 64 ory."...(interactive....(let.((d
2b780 6f 63 72 6f 6f 74 20 28 72 65 61 64 2d 64 69 72 65 63 74 6f 72 79 2d 6e 61 6d 65 20 22 44 6f 63 ocroot.(read-directory-name."Doc
2b7a0 72 6f 6f 74 3a 20 22 20 6e 69 6c 20 6e 69 6c 20 74 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 6f root:.".nil.nil.t))..........(po
2b7c0 72 74 20 28 72 65 61 64 2d 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66 65 72 20 22 50 6f 72 74 3a 20 rt.(read-from-minibuffer."Port:.
2b7e0 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 68 6f 73 74 20 28 69 66 20 63 75 72 72 65 6e 74 2d 70 "))..........(host.(if.current-p
2b800 72 65 66 69 78 2d 61 72 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 refix-arg....................(re
2b820 61 64 2d 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66 65 72 20 22 48 6f 73 74 3a 20 22 29 0a 20 20 20 ad-from-minibuffer."Host:.")....
2b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73 74 ................elnode-init-host
2b860 29 29 29 0a 20 20 20 20 20 28 6c 69 73 74 20 64 6f 63 72 6f 6f 74 20 70 6f 72 74 20 68 6f 73 74 )))......(list.docroot.port.host
2b880 29 29 29 0a 20 20 28 6c 65 74 20 28 28 77 65 62 73 65 72 76 65 72 2d 70 72 6f 63 20 28 65 6c 6e )))...(let.((webserver-proc.(eln
2b8a0 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 6b 65 72 20 64 6f 63 72 ode-webserver-handler-maker.docr
2b8c0 6f 6f 74 29 29 29 0a 20 20 20 20 28 61 64 64 2d 74 6f 2d 6c 69 73 74 0a 20 20 20 20 20 27 65 6c oot))).....(add-to-list......'el
2b8e0 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 77 65 62 73 65 72 76 65 72 2d 73 74 6f 72 65 0a 20 20 20 20 20 node--make-webserver-store......
2b900 28 63 6f 6e 73 20 64 6f 63 72 6f 6f 74 20 77 65 62 73 65 72 76 65 72 2d 70 72 6f 63 29 29 0a 20 (cons.docroot.webserver-proc))..
2b920 20 20 20 28 65 6c 6e 6f 64 65 2d 73 74 61 72 74 0a 20 20 20 20 20 77 65 62 73 65 72 76 65 72 2d ...(elnode-start......webserver-
2b940 70 72 6f 63 0a 20 20 20 20 20 3a 70 6f 72 74 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 proc......:port.(string-to-numbe
2b960 72 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 70 6f 72 74 29 29 0a 20 20 20 20 20 3a 68 6f 73 74 r.(format."%s".port))......:host
2b980 20 68 6f 73 74 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 .host)))..;;;###autoload.(defun.
2b9a0 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 41 20 elnode-webserver.(httpcon)..."A.
2b9c0 73 69 6d 70 6c 65 20 77 65 62 73 65 72 76 65 72 20 74 68 61 74 20 73 65 72 76 65 73 20 64 6f 63 simple.webserver.that.serves.doc
2b9e0 75 6d 65 6e 74 73 20 6f 75 74 20 6f 66 20 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d uments.out.of.`elnode-webserver-
2ba00 64 6f 63 72 6f 6f 74 27 2e 0a 0a 54 68 69 73 20 69 73 20 6a 75 73 74 20 61 6e 20 65 78 61 6d 70 docroot'...This.is.just.an.examp
2ba20 6c 65 20 6f 66 20 61 6e 20 65 6c 6e 6f 64 65 20 77 65 62 73 65 72 76 65 72 2c 20 62 75 74 20 69 le.of.an.elnode.webserver,.but.i
2ba40 74 20 6d 61 79 20 62 65 20 61 6c 6c 0a 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 6d 6f 73 74 t.may.be.all.that.is.needed.most
2ba60 20 6f 66 20 74 68 65 20 74 69 6d 65 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65 .of.the.time...See.`elnode-webse
2ba80 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 6b 65 72 27 20 66 6f 72 20 6d 6f 72 65 20 70 6f 73 rver-handler-maker'.for.more.pos
2baa0 73 69 62 69 6c 69 74 69 65 73 20 66 6f 72 0a 6d 61 6b 69 6e 67 20 77 65 62 73 65 72 76 65 72 20 sibilities.for.making.webserver.
2bac0 66 75 6e 63 74 69 6f 6e 73 2e 0a 0a 48 54 54 50 43 4f 4e 20 69 73 20 74 68 65 20 48 54 54 50 20 functions...HTTPCON.is.the.HTTP.
2bae0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 75 73 65 72 20 61 67 65 6e 74 2e 22 0a 20 connection.to.the.user.agent."..
2bb00 20 28 65 6c 6e 6f 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 73 65 74 75 70 29 0a 20 20 28 6c 65 .(elnode--webserver-setup)...(le
2bb20 74 20 28 75 73 65 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 6b 65 72 29 0a t.(use-webserver-handler-maker).
2bb40 20 20 20 20 28 69 66 20 75 73 65 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 ....(if.use-webserver-handler-ma
2bb60 6b 65 72 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 68 ker.........(elnode--webserver-h
2bb80 61 6e 64 6c 65 72 2d 70 72 6f 63 0a 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 andler-proc..........httpcon....
2bba0 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 0a 20 ......elnode-webserver-docroot..
2bbc0 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 65 78 74 72 61 2d 6d ........elnode-webserver-extra-m
2bbe0 69 6d 65 74 79 70 65 73 29 0a 20 20 20 20 20 20 20 20 3b 3b 20 4f 74 68 65 72 77 69 73 65 20 44 imetypes).........;;.Otherwise.D
2bc00 4f 20 75 73 65 20 74 68 65 20 68 61 6e 64 6c 65 72 20 6d 61 6b 65 72 2e 2e 2e 0a 20 20 20 20 20 O.use.the.handler.maker.........
2bc20 20 20 20 28 6c 65 74 20 28 28 77 65 62 73 65 72 76 65 72 20 28 65 6c 6e 6f 64 65 2d 77 65 62 73 ...(let.((webserver.(elnode-webs
2bc40 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 6b 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 erver-handler-maker.............
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 64 ..............elnode-webserver-d
2bc80 6f 63 72 6f 6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ocroot..........................
2bca0 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 65 78 74 72 61 2d 6d 69 6d 65 74 79 70 65 .elnode-webserver-extra-mimetype
2bcc0 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 77 65 62 73 65 72 76 65 s)))...........(funcall.webserve
2bce0 72 20 68 74 74 70 63 6f 6e 29 29 29 29 29 0a 0a 3b 3b 20 44 65 66 61 75 6c 74 20 65 6c 6e 6f 64 r.httpcon)))))..;;.Default.elnod
2bd00 65 20 61 75 74 68 20 64 61 74 61 62 61 73 65 73 0a 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f e.auth.databases..(defconst.elno
2bd20 64 65 2d 61 75 74 68 2d 64 62 2d 73 70 65 63 2d 64 65 66 61 75 6c 74 0a 20 20 60 28 64 62 2d 68 de-auth-db-spec-default...`(db-h
2bd40 61 73 68 0a 20 20 20 20 3a 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 2c 28 65 78 70 61 6e 64 2d 66 ash.....:filename.....,(expand-f
2bd60 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 65 6c 6e 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 ile-name.(concat.elnode-config-d
2bd80 69 72 65 63 74 6f 72 79 20 22 65 6c 6e 6f 64 65 2d 61 75 74 68 22 29 29 29 0a 20 20 22 54 68 65 irectory."elnode-auth")))..."The
2bda0 20 64 65 66 61 75 6c 74 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 20 73 70 65 63 69 66 69 63 .default.elnode-auth-db.specific
2bdc0 61 74 69 6f 6e 2e 22 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 61 75 74 68 ation.")..(defcustom.elnode-auth
2bde0 2d 64 62 2d 73 70 65 63 0a 20 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 2d 73 70 65 63 2d 64 -db-spec...elnode-auth-db-spec-d
2be00 65 66 61 75 6c 74 0a 20 20 22 54 68 65 20 60 64 62 27 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e efault..."The.`db'.specification
2be20 20 6f 66 20 77 68 65 72 65 20 74 68 65 20 61 75 74 68 20 64 62 20 69 73 2e 22 0a 20 20 3a 67 72 .of.where.the.auth.db.is."...:gr
2be40 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 6c 69 73 74 20 73 79 6d 62 6f oup.'elnode...:type.'(list.symbo
2be60 6c 20 73 79 6d 62 6f 6c 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 l.symbol.string))..(defvar.elnod
2be80 65 2d 61 75 74 68 2d 64 62 0a 20 20 28 64 62 2d 6d 61 6b 65 20 65 6c 6e 6f 64 65 2d 61 75 74 68 e-auth-db...(db-make.elnode-auth
2bea0 2d 64 62 2d 73 70 65 63 29 0a 20 20 22 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 64 61 74 61 -db-spec)..."Authentication.data
2bec0 62 61 73 65 2e 0a 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 base...This.is.the.data.structur
2bee0 65 20 73 74 6f 72 69 6e 67 20 68 61 73 68 65 64 20 70 61 73 73 77 6f 72 64 73 20 61 67 61 69 6e e.storing.hashed.passwords.again
2bf00 73 74 0a 75 73 65 72 6e 61 6d 65 20 6b 65 79 73 2e 0a 0a 49 74 20 69 73 20 61 6e 20 65 6c 6e 6f st.username.keys...It.is.an.elno
2bf20 64 65 20 64 61 74 61 62 61 73 65 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 66 20 de.database.which.can.be.one.of.
2bf40 73 65 76 65 72 61 6c 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 2e 22 29 0a 0a 28 64 65 66 several.implementations.")..(def
2bf60 76 61 72 20 65 6c 6e 6f 64 65 2d 73 65 63 72 65 74 2d 6b 65 79 20 22 73 65 63 72 65 74 22 0a 20 var.elnode-secret-key."secret"..
2bf80 20 22 53 65 63 72 65 74 20 6b 65 79 20 75 73 65 64 20 74 6f 20 68 61 73 68 20 73 65 63 72 65 74 ."Secret.key.used.to.hash.secret
2bfa0 73 20 6c 69 6b 65 20 70 61 73 73 77 6f 72 64 73 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f s.like.passwords.")..(defun.elno
2bfc0 64 65 2d 2d 61 75 74 68 2d 6d 61 6b 65 2d 68 61 73 68 20 28 75 73 65 72 6e 61 6d 65 20 70 61 73 de--auth-make-hash.(username.pas
2bfe0 73 77 6f 72 64 29 0a 20 20 22 48 61 73 68 20 74 68 65 20 73 65 63 72 65 74 20 6b 65 79 20 61 6e sword)..."Hash.the.secret.key.an
2c000 64 20 74 68 65 20 55 53 45 52 4e 41 4d 45 20 61 6e 64 20 50 41 53 53 57 4f 52 44 2e 22 0a 20 20 d.the.USERNAME.and.PASSWORD."...
2c020 28 73 68 61 31 20 28 66 6f 72 6d 61 74 20 22 25 73 3a 25 73 3a 25 73 22 0a 20 20 20 20 20 20 20 (sha1.(format."%s:%s:%s"........
2c040 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 73 65 63 72 65 74 2d 6b 65 79 0a 20 20 20 20 20 .........elnode-secret-key......
2c060 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 ...........username.............
2c080 20 20 20 20 70 61 73 73 77 6f 72 64 29 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d ....password)))..(defvar.elnode-
2c0a0 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 64 2d 64 61 74 61 62 61 73 65 73 2d 68 69 73 74 6f 72 79 -auth-user-add-databases-history
2c0c0 20 6e 69 6c 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79 20 6f 66 20 73 79 6d 62 6f 6c 73 20 75 .nil..."The.history.of.symbols.u
2c0e0 73 65 64 20 66 6f 72 20 61 75 74 68 20 64 61 74 61 62 61 73 65 73 2e 22 29 0a 0a 28 64 65 66 76 sed.for.auth.databases.")..(defv
2c100 61 72 20 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 64 2d 75 73 65 72 6e 61 6d ar.elnode--auth-user-add-usernam
2c120 65 2d 68 69 73 74 6f 72 79 20 6e 69 6c 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79 20 6f 66 20 e-history.nil..."The.history.of.
2c140 75 73 65 72 6e 61 6d 65 73 20 75 73 65 64 20 66 6f 72 20 61 75 74 68 20 64 61 74 61 62 61 73 65 usernames.used.for.auth.database
2c160 73 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 s.")..(defun.elnode-auth-user-ad
2c180 64 20 28 75 73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 20 26 6f 70 74 69 6f 6e 61 6c 20 61 d.(username.password.&optional.a
2c1a0 75 74 68 2d 64 62 29 0a 20 20 22 43 6f 6d 6d 61 6e 64 20 74 6f 20 61 64 64 20 61 20 75 73 65 72 uth-db)..."Command.to.add.a.user
2c1c0 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 .to.the.internal.authentication.
2c1e0 64 61 74 61 62 61 73 65 2e 0a 0a 57 69 74 68 20 70 72 65 66 69 78 2d 61 72 67 20 61 6c 73 6f 20 database...With.prefix-arg.also.
2c200 72 65 71 75 65 73 74 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 64 61 74 61 62 request.the.authentication.datab
2c220 61 73 65 20 76 61 72 69 61 62 6c 65 0a 6e 61 6d 65 2e 20 20 54 68 65 20 61 75 74 68 65 6e 74 69 ase.variable.name...The.authenti
2c240 63 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 65 78 69 73 74 2e 20 20 42 79 20 cation.database.must.exist...By.
2c260 64 65 66 61 75 6c 74 20 74 68 65 0a 6d 61 69 6e 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 default.the.main.`elnode-auth-db
2c280 27 20 69 73 20 75 73 65 64 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20 20 28 6c '.is.used."...(interactive....(l
2c2a0 69 73 74 20 28 72 65 61 64 2d 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66 65 72 0a 20 20 20 20 20 20 ist.(read-from-minibuffer.......
2c2c0 20 20 20 20 22 75 73 65 72 6e 61 6d 65 3a 20 22 20 6e 69 6c 20 6e 69 6c 20 6e 69 6c 0a 20 20 20 ...."username:.".nil.nil.nil....
2c2e0 20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 64 2d 75 73 .......'elnode--auth-user-add-us
2c300 65 72 6e 61 6d 65 2d 68 69 73 74 6f 72 79 29 0a 20 20 20 20 20 20 20 20 20 28 72 65 61 64 2d 70 ername-history)..........(read-p
2c320 61 73 73 77 64 20 22 70 61 73 73 77 6f 72 64 3a 20 22 29 0a 20 20 20 20 20 20 20 20 20 28 77 68 asswd."password:.")..........(wh
2c340 65 6e 20 63 75 72 72 65 6e 74 2d 70 72 65 66 69 78 2d 61 72 67 0a 20 20 20 20 20 20 20 20 20 20 en.current-prefix-arg...........
2c360 20 28 69 6e 74 65 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d 70 6c 65 74 69 6e 67 .(intern.............(completing
2c380 2d 72 65 61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 75 74 68 20 64 61 74 61 62 61 73 -read.............."auth.databas
2c3a0 65 20 76 61 72 69 61 62 6c 65 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 75 73 65 72 2d 64 62 29 e.variable.(elnode-auth-user-db)
2c3c0 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 61 72 72 61 79 0a 20 20 20 20 20 20 20 :."..............obarray........
2c3e0 20 20 20 20 20 20 6e 69 6c 20 74 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6c ......nil.t.nil..............'el
2c400 6e 6f 64 65 2d 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 64 2d 64 61 74 61 62 61 73 65 73 2d 68 69 node--auth-user-add-databases-hi
2c420 73 74 6f 72 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d story..............'elnode-auth-
2c440 64 62 29 29 29 29 29 0a 20 20 28 75 6e 6c 65 73 73 20 61 75 74 68 2d 64 62 0a 20 20 20 20 28 73 db)))))...(unless.auth-db.....(s
2c460 65 74 71 20 61 75 74 68 2d 64 62 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 29 29 0a 20 20 etq.auth-db.'elnode-auth-db))...
2c480 28 64 62 2d 70 75 74 0a 20 20 20 75 73 65 72 6e 61 6d 65 0a 20 20 20 60 28 28 22 74 6f 6b 65 6e (db-put....username....`(("token
2c4a0 22 20 2e 20 2c 28 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d 6d 61 6b 65 2d 68 61 73 68 0a 20 20 20 "...,(elnode--auth-make-hash....
2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 ...............username.password
2c4e0 29 29 0a 20 20 20 20 20 28 22 75 73 65 72 6e 61 6d 65 22 20 2e 20 2c 75 73 65 72 6e 61 6d 65 29 ))......("username"...,username)
2c500 29 0a 20 20 20 28 73 79 6d 62 6f 6c 2d 76 61 6c 75 65 20 61 75 74 68 2d 64 62 29 29 0a 20 20 28 )....(symbol-value.auth-db))...(
2c520 6d 65 73 73 61 67 65 20 22 75 73 65 72 6e 61 6d 65 20 69 73 20 25 73 22 20 75 73 65 72 6e 61 6d message."username.is.%s".usernam
2c540 65 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 75 73 65 72 2d 70 20 e))..(defun*.elnode-auth-user-p.
2c560 28 75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (username.......................
2c580 20 20 20 20 20 20 70 61 73 73 77 6f 72 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ......password..................
2c5a0 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........&key.................
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 74 29 0a 20 20 22 44 6f 65 73 20 74 ............auth-test)..."Does.t
2c5e0 68 65 20 41 55 54 48 2d 54 45 53 54 20 70 61 73 73 3f 0a 0a 54 68 65 20 70 61 73 73 77 6f 72 64 he.AUTH-TEST.pass?..The.password
2c600 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 62 20 68 61 73 68 65 64 20 6b 65 79 65 .is.stored.in.the.db.hashed.keye
2c620 64 20 62 79 20 74 68 65 20 55 53 45 52 4e 41 4d 45 2c 0a 74 68 69 73 20 6c 6f 6f 6b 73 20 75 70 d.by.the.USERNAME,.this.looks.up
2c640 20 61 6e 64 20 74 65 73 74 73 20 74 68 65 20 68 61 73 68 2e 0a 0a 54 68 65 20 41 55 54 48 2d 44 .and.tests.the.hash...The.AUTH-D
2c660 42 20 69 73 20 61 6e 20 60 64 62 27 2c 20 62 79 20 64 65 66 61 75 6c 74 20 69 74 20 69 73 0a 60 B.is.an.`db',.by.default.it.is.`
2c680 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 27 22 0a 20 20 28 6c 65 74 20 28 28 74 6f 6b 65 6e 20 elnode-auth-db'"...(let.((token.
2c6a0 28 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d 6d 61 6b 65 2d 68 61 73 68 20 75 73 65 72 6e 61 6d 65 (elnode--auth-make-hash.username
2c6c0 20 70 61 73 73 77 6f 72 64 29 29 29 0a 20 20 20 20 28 65 71 75 61 6c 20 74 6f 6b 65 6e 20 28 66 .password))).....(equal.token.(f
2c6e0 75 6e 63 61 6c 6c 20 61 75 74 68 2d 74 65 73 74 20 75 73 65 72 6e 61 6d 65 29 29 29 29 0a 0a 0a uncall.auth-test.username))))...
2c700 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 20 28 6d 61 6b 65 (defvar.elnode-loggedin-db.(make
2c720 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65 71 75 61 6c 29 0a 20 20 22 53 74 6f -hash-table.:test.'equal)..."Sto
2c740 72 65 73 20 6c 6f 67 69 6e 73 20 2d 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 65 73 73 res.logins.-.authentication.sess
2c760 69 6f 6e 73 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 27 20 66 ions...See.`elnode-auth-login'.f
2c780 6f 72 20 68 6f 77 20 74 68 69 73 20 69 73 20 75 70 64 61 74 65 64 2e 22 29 0a 0a 0a 28 70 72 6f or.how.this.is.updated.")...(pro
2c7a0 67 6e 0a 20 20 3b 3b 20 53 65 74 73 20 75 70 20 74 68 65 20 65 6c 6e 6f 64 65 20 61 75 74 68 20 gn...;;.Sets.up.the.elnode.auth.
2c7c0 65 72 72 6f 72 73 0a 20 20 28 70 75 74 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72 65 64 65 errors...(put.'elnode-auth-crede
2c7e0 6e 74 69 61 6c 73 0a 20 20 20 20 20 20 20 27 65 72 72 6f 72 2d 63 6f 6e 64 69 74 69 6f 6e 73 0a ntials........'error-conditions.
2c800 20 20 20 20 20 20 20 27 28 65 72 72 6f 72 20 65 6c 6e 6f 64 65 20 65 6c 6e 6f 64 65 2d 61 75 74 .......'(error.elnode.elnode-aut
2c820 68 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 29 29 0a 20 20 28 70 h.elnode-auth-credentials))...(p
2c840 75 74 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 0a 20 20 20 20 ut.'elnode-auth-credentials.....
2c860 20 20 20 27 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 0a 20 20 20 20 20 20 20 22 45 6c 6e 6f 64 65 ...'error-message........"Elnode
2c880 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 22 29 0a 0a 20 20 3b 3b 20 46 .authentication.failed")....;;.F
2c8a0 6f 72 20 66 61 69 6c 69 6e 67 20 63 6f 6f 6b 69 65 73 0a 20 20 28 70 75 74 20 27 65 6c 6e 6f 64 or.failing.cookies...(put.'elnod
2c8c0 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 27 65 72 72 6f 72 2d 63 6f 6e 64 69 e-auth-token........'error-condi
2c8e0 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 27 28 65 72 72 6f 72 20 65 6c 6e 6f 64 65 20 65 6c 6e 6f tions........'(error.elnode.elno
2c900 64 65 2d 61 75 74 68 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 29 29 0a 20 20 28 70 de-auth.elnode-auth-token))...(p
2c920 75 74 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 27 65 72 ut.'elnode-auth-token........'er
2c940 72 6f 72 2d 6d 65 73 73 61 67 65 0a 20 20 20 20 20 20 20 22 45 6c 6e 6f 64 65 20 61 75 74 68 65 ror-message........"Elnode.authe
2c960 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 22 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e ntication.failed"))..(defun*.eln
2c980 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 20 28 75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20 20 ode-auth-login.(username........
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 73 73 77 6f 72 64 0a 20 20 20 ....................password....
2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 ........................&key....
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 ........................auth-tes
2ca00 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f t............................(lo
2ca20 67 67 65 64 69 6e 2d 64 62 20 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 ggedin-db.elnode-loggedin-db))..
2ca40 20 22 4c 6f 67 20 61 20 75 73 65 72 20 69 6e 2e 0a 0a 43 68 65 63 6b 20 74 68 65 20 55 53 45 52 ."Log.a.user.in...Check.the.USER
2ca60 4e 41 4d 45 20 61 6e 64 20 50 41 53 53 57 4f 52 44 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 61 NAME.and.PASSWORD.with.`elnode-a
2ca80 75 74 68 2d 75 73 65 72 2d 70 27 20 61 6e 64 0a 74 68 65 6e 20 75 70 64 61 74 65 20 60 65 6c 6e uth-user-p'.and.then.update.`eln
2caa0 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 27 20 77 69 74 68 20 74 68 65 20 75 73 65 72 6e 61 ode-loggedin-db'.with.the.userna
2cac0 6d 65 20 61 6e 64 20 74 68 65 20 6c 6f 67 69 6e 0a 72 65 63 6f 72 64 2e 0a 0a 54 61 6b 65 73 20 me.and.the.login.record...Takes.
2cae0 6f 70 74 69 6f 6e 61 6c 20 41 55 54 48 2d 44 42 20 77 68 69 63 68 20 69 73 20 74 68 65 20 64 61 optional.AUTH-DB.which.is.the.da
2cb00 74 61 62 61 73 65 20 76 61 72 69 61 62 6c 65 20 74 6f 0a 75 73 65 20 28 77 68 69 63 68 20 69 73 tabase.variable.to.use.(which.is
2cb20 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 27 20 62 79 20 64 65 66 61 75 6c 74 29 20 61 6e .`elnode-auth-db'.by.default).an
2cb40 64 20 4c 4f 47 47 45 44 49 4e 2d 44 42 20 77 68 69 63 68 0a 69 73 20 74 68 65 20 6c 6f 67 67 65 d.LOGGEDIN-DB.which.is.the.logge
2cb60 64 2d 69 6e 20 73 74 61 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 75 73 65 20 61 6e 64 20 77 d-in.state.database.to.use.and.w
2cb80 68 69 63 68 20 69 73 0a 60 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 27 20 62 79 20 hich.is.`elnode-loggedin-db'.by.
2cba0 64 65 66 61 75 6c 74 2e 22 0a 20 20 3b 3b 20 46 49 58 4d 45 20 2d 20 70 61 73 73 20 69 6e 20 74 default."...;;.FIXME.-.pass.in.t
2cbc0 68 65 20 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 69 66 20 28 65 6c 6e 6f 64 65 2d 61 he.test.function...(if.(elnode-a
2cbe0 75 74 68 2d 75 73 65 72 2d 70 20 75 73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 20 3a 61 75 uth-user-p.username.password.:au
2cc00 74 68 2d 74 65 73 74 20 61 75 74 68 2d 74 65 73 74 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 th-test.auth-test).......(let*.(
2cc20 28 72 6e 64 73 74 72 20 28 66 6f 72 6d 61 74 20 22 25 64 22 20 28 72 61 6e 64 6f 6d 29 29 29 0a (rndstr.(format."%d".(random))).
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 61 73 68 20 28 73 68 61 31 20 28 66 6f 72 6d 61 74 .............(hash.(sha1.(format
2cc60 20 22 25 73 3a 25 73 3a 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ."%s:%s:%s".....................
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 .............username...........
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 73 74 72 0a 20 20 .......................rndstr...
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 ...............................e
2cce0 6c 6e 6f 64 65 2d 73 65 63 72 65 74 2d 6b 65 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 lnode-secret-key))).............
2cd00 20 28 75 73 65 72 2d 72 65 63 6f 72 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 .(user-record...............(lis
2cd20 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 75 73 65 72 20 75 73 65 72 6e 61 6d 65 0a t................:user.username.
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 74 6f 6b 65 6e 20 72 6e 64 73 74 72 0a 20 20 20 ...............:token.rndstr....
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 3a 68 61 73 68 20 68 61 73 68 29 29 29 0a 20 20 20 20 20 20 ............:hash.hash))).......
2cd80 20 20 28 70 75 74 68 61 73 68 20 75 73 65 72 6e 61 6d 65 20 75 73 65 72 2d 72 65 63 6f 72 64 20 ..(puthash.username.user-record.
2cda0 6c 6f 67 67 65 64 69 6e 2d 64 62 29 0a 20 20 20 20 20 20 20 20 68 61 73 68 29 0a 20 20 20 20 20 loggedin-db).........hash)......
2cdc0 20 3b 3b 20 45 6c 73 65 20 69 74 20 77 61 73 20 62 61 64 20 73 6f 20 74 68 72 6f 77 20 61 6e 20 .;;.Else.it.was.bad.so.throw.an.
2cde0 65 72 72 6f 72 2e 0a 20 20 20 20 20 20 28 73 69 67 6e 61 6c 20 27 65 6c 6e 6f 64 65 2d 61 75 74 error........(signal.'elnode-aut
2ce00 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 20 28 6c 69 73 74 20 75 73 65 72 6e 61 6d 65 20 70 61 73 h-credentials.(list.username.pas
2ce20 73 77 6f 72 64 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 sword))))..(defun*.elnode-auth-c
2ce40 68 65 63 6b 2d 70 20 28 75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 heck-p.(username................
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..............token.............
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 .................&key...........
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 ...................(loggedin-db.
2cec0 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 20 22 43 68 65 63 6b 20 6c 6f elnode-loggedin-db))..."Check.lo
2cee0 67 69 6e 20 73 74 61 74 75 73 20 6f 66 20 74 68 65 20 55 53 45 52 4e 41 4d 45 20 61 67 61 69 6e gin.status.of.the.USERNAME.again
2cf00 73 74 20 74 68 65 20 68 61 73 68 65 64 20 54 4f 4b 45 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 st.the.hashed.TOKEN...Optionally
2cf20 20 75 73 65 20 74 68 65 20 4c 4f 47 47 45 44 49 4e 2d 44 42 20 73 75 70 70 6c 69 65 64 2e 20 20 .use.the.LOGGEDIN-DB.supplied...
2cf40 42 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20 69 73 0a 60 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 By.default.this.is.`elnode-logge
2cf60 64 69 6e 2d 64 62 27 2e 22 0a 20 20 28 6c 65 74 20 28 28 72 65 63 6f 72 64 20 28 67 65 74 68 61 din-db'."...(let.((record.(getha
2cf80 73 68 20 75 73 65 72 6e 61 6d 65 20 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 29 0a 20 20 20 20 28 sh.username.loggedin-db))).....(
2cfa0 65 71 75 61 6c 20 74 6f 6b 65 6e 20 28 70 6c 69 73 74 2d 67 65 74 20 72 65 63 6f 72 64 20 3a 68 equal.token.(plist-get.record.:h
2cfc0 61 73 68 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b ash))))..(defun.elnode-auth-cook
2cfe0 69 65 2d 64 65 63 6f 64 65 20 28 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 29 0a 20 20 22 44 65 63 6f ie-decode.(cookie-value)..."Deco
2d000 64 65 20 61 6e 20 65 6e 63 6f 64 65 64 20 65 6c 6e 6f 64 65 20 61 75 74 68 20 43 4f 4f 4b 49 45 de.an.encoded.elnode.auth.COOKIE
2d020 2d 56 41 4c 55 45 2e 22 0a 20 20 28 77 68 65 6e 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 -VALUE."...(when.(string-match."
2d040 5c 5c 28 2e 2a 5c 5c 29 3a 3a 5c 5c 28 2e 2a 5c 5c 29 22 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 \\(.*\\)::\\(.*\\)".cookie-value
2d060 29 0a 20 20 20 20 28 63 6f 6e 73 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 63 6f 6f 6b ).....(cons.(match-string.1.cook
2d080 69 65 2d 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e ie-value)...........(match-strin
2d0a0 67 20 32 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c g.2.cookie-value))))..(defun*.el
2d0c0 6e 6f 64 65 2d 61 75 74 68 2d 67 65 74 2d 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 20 28 68 74 74 70 node-auth-get-cookie-value.(http
2d0e0 63 6f 6e 20 26 6b 65 79 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 2d 61 75 con.&key.(cookie-name."elnode-au
2d100 74 68 22 29 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 64 65 63 6f 64 65 64 20 76 61 6c 75 th"))..."Return.the.decoded.valu
2d120 65 20 66 6f 72 20 43 4f 4f 4b 49 45 2d 4e 41 4d 45 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 69 e.for.COOKIE-NAME...By.default.i
2d140 74 27 73 20 5c 22 65 6c 6e 6f 64 65 2d 61 75 74 68 5c 22 20 62 75 74 20 79 6f 75 20 73 68 6f 75 t's.\"elnode-auth\".but.you.shou
2d160 6c 64 20 75 73 65 20 77 68 61 74 65 76 65 72 0a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 79 6f 75 27 ld.use.whatever.cookie-name.you'
2d180 72 65 20 75 73 69 6e 67 20 66 6f 72 20 79 6f 75 72 20 61 70 70 2e 22 0a 20 20 28 6c 65 74 2a 20 re.using.for.your.app."...(let*.
2d1a0 28 28 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b ((cookie-value.(elnode-http-cook
2d1c0 69 65 20 68 74 74 70 63 6f 6e 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 74 29 29 0a 20 20 20 20 20 ie.httpcon.cookie-name.t))......
2d1e0 20 20 20 20 28 64 65 63 6f 64 65 64 2d 63 6f 6e 73 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 ....(decoded-cons.(elnode-auth-c
2d200 6f 6f 6b 69 65 2d 64 65 63 6f 64 65 20 28 6f 72 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 20 22 22 ookie-decode.(or.cookie-value.""
2d220 29 29 29 29 0a 20 20 20 20 64 65 63 6f 64 65 64 2d 63 6f 6e 73 29 29 0a 0a 28 64 65 66 75 6e 2a )))).....decoded-cons))..(defun*
2d240 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b 69 65 2d 63 68 65 63 6b 2d 70 20 28 68 74 74 .elnode-auth-cookie-check-p.(htt
2d260 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 pcon............................
2d280 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........&key...................
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 ..................(cookie-name."
2d2c0 65 6c 6e 6f 64 65 2d 61 75 74 68 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 elnode-auth")...................
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 65 ..................(loggedin-db.e
2d300 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 20 22 43 68 65 63 6b 20 74 68 61 lnode-loggedin-db))..."Check.tha
2d320 74 20 74 68 65 20 75 73 65 72 20 69 73 20 6c 6f 67 67 65 64 69 6e 20 61 63 63 6f 72 64 69 6e 67 t.the.user.is.loggedin.according
2d340 20 74 6f 20 74 68 65 20 63 6f 6f 6b 69 65 2e 0a 0a 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 .to.the.cookie...The.name.of.the
2d360 20 63 6f 6f 6b 69 65 20 63 61 6e 20 62 65 20 73 75 70 70 6c 69 65 64 20 77 69 74 68 20 3a 43 4f .cookie.can.be.supplied.with.:CO
2d380 4f 4b 49 45 2d 4e 41 4d 45 20 2d 20 62 79 0a 64 65 66 61 75 6c 74 20 69 73 20 69 73 20 5c 22 65 OKIE-NAME.-.by.default.is.is.\"e
2d3a0 6c 6e 6f 64 65 2d 61 75 74 68 5c 22 2e 0a 0a 4c 4f 47 47 45 44 49 4e 2d 44 42 20 63 61 6e 20 62 lnode-auth\"...LOGGEDIN-DB.can.b
2d3c0 65 20 61 20 6c 6f 67 67 65 64 69 6e 20 73 74 61 74 65 20 64 61 74 61 62 61 73 65 20 77 68 69 63 e.a.loggedin.state.database.whic
2d3e0 68 20 69 73 20 65 78 70 65 63 74 65 64 20 74 6f 0a 62 65 20 61 20 60 64 62 27 2e 20 20 42 79 20 h.is.expected.to.be.a.`db'...By.
2d400 64 65 66 61 75 6c 74 20 69 74 20 69 73 20 60 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 default.it.is.`elnode-loggedin-d
2d420 62 27 2e 22 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f 6b 69 65 2d 63 6f 6e 73 20 28 65 6c 6e 6f 64 b'."...(let.((cookie-cons.(elnod
2d440 65 2d 61 75 74 68 2d 67 65 74 2d 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 e-auth-get-cookie-value.........
2d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 20 3a 63 6f 6f 6b 69 65 2d 6e 61 ..............httpcon.:cookie-na
2d480 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 63 me.cookie-name))).....(if.(not.c
2d4a0 6f 6f 6b 69 65 2d 63 6f 6e 73 29 0a 20 20 20 20 20 20 20 20 28 73 69 67 6e 61 6c 20 27 65 6c 6e ookie-cons).........(signal.'eln
2d4c0 6f 64 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 0a 20 20 20 20 ode-auth-token.cookie-name).....
2d4e0 20 20 20 20 28 6c 65 74 20 28 28 75 73 65 72 6e 61 6d 65 20 28 63 61 72 20 63 6f 6f 6b 69 65 2d ....(let.((username.(car.cookie-
2d500 63 6f 6e 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 6f 6b 65 6e 20 28 63 64 72 cons))...............(token.(cdr
2d520 20 63 6f 6f 6b 69 65 2d 63 6f 6e 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 .cookie-cons)))...........(elnod
2d540 65 2d 61 75 74 68 2d 63 68 65 63 6b 2d 70 0a 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 e-auth-check-p............userna
2d560 6d 65 20 74 6f 6b 65 6e 20 3a 6c 6f 67 67 65 64 69 6e 2d 64 62 20 6c 6f 67 67 65 64 69 6e 2d 64 me.token.:loggedin-db.loggedin-d
2d580 62 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b b)))))..(defun*.elnode-auth-cook
2d5a0 69 65 2d 63 68 65 63 6b 20 28 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ie-check.(httpcon...............
2d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 ....................&key........
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6f 6b ...........................(cook
2d600 69 65 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 2d 61 75 74 68 22 29 0a 20 20 20 20 20 20 20 20 20 ie-name."elnode-auth")..........
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64 .........................(logged
2d640 69 6e 2d 64 62 20 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 20 22 53 69 in-db.elnode-loggedin-db))..."Si
2d660 67 6e 61 6c 20 6f 6e 20 63 6f 6f 6b 69 65 20 66 61 69 6c 75 72 65 2e 0a 0a 53 65 65 20 60 65 6c gnal.on.cookie.failure...See.`el
2d680 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b 69 65 2d 63 68 65 63 6b 2d 70 27 20 66 6f 72 20 6d 6f node-auth-cookie-check-p'.for.mo
2d6a0 72 65 20 64 65 74 61 69 6c 73 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 65 6c 6e 6f 64 65 2d 61 re.details."...(unless.(elnode-a
2d6c0 75 74 68 2d 63 6f 6f 6b 69 65 2d 63 68 65 63 6b 2d 70 0a 20 20 20 20 20 20 20 20 20 20 20 68 74 uth-cookie-check-p............ht
2d6e0 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 63 6f tpcon............:cookie-name.co
2d700 6f 6b 69 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 3a 6c 6f 67 67 65 64 69 6e 2d 64 okie-name............:loggedin-d
2d720 62 20 6c 6f 67 67 65 64 69 6e 2d 64 62 29 0a 20 20 20 20 3b 3b 20 4e 6f 74 20 73 75 72 65 20 74 b.loggedin-db).....;;.Not.sure.t
2d740 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 72 65 63 74 20 74 6f 6b 65 6e 2e 2e 2e 0a 20 20 20 20 his.is.the.correct.token........
2d760 28 73 69 67 6e 61 6c 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 20 3a 6e 6f 74 2d (signal.'elnode-auth-token.:not-
2d780 6c 6f 67 67 65 64 2d 69 6e 29 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 61 75 74 logged-in)))..(defvar.elnode-aut
2d7a0 68 2d 68 74 74 70 63 6f 6e 20 6e 69 6c 0a 20 20 22 44 79 6e 61 6d 69 63 20 73 63 6f 70 65 20 76 h-httpcon.nil..."Dynamic.scope.v
2d7c0 61 72 69 61 62 6c 65 20 66 6f 72 20 48 54 54 50 20 63 6f 6e 20 77 68 69 6c 65 20 77 65 20 61 75 ariable.for.HTTP.con.while.we.au
2d7e0 74 68 2e 22 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 68 74 74 70 2d th.")..(defun*.elnode-auth-http-
2d800 6c 6f 67 69 6e 20 28 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 login.(httpcon..................
2d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 ...............username.password
2d840 20 6c 6f 67 67 65 64 2d 69 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .logged-in......................
2d860 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........&key.................
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65 6c ................(cookie-name."el
2d8a0 6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 nodeauth")......................
2d8c0 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 ...........auth-test............
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 .....................(loggedin-d
2d900 62 20 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 20 22 4c 6f 67 20 74 68 b.elnode-loggedin-db))..."Log.th
2d920 65 20 55 53 45 52 4e 41 4d 45 20 69 6e 20 6f 6e 20 74 68 65 20 48 54 54 50 43 4f 4e 20 69 66 20 e.USERNAME.in.on.the.HTTPCON.if.
2d940 50 41 53 53 57 4f 52 44 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 0a 49 66 20 61 75 74 68 65 6e 74 PASSWORD.is.correct...If.authent
2d960 69 63 61 74 69 6f 6e 20 73 75 63 63 65 65 64 73 20 73 65 74 20 74 68 65 20 72 65 6c 65 76 61 6e ication.succeeds.set.the.relevan
2d980 74 20 63 6f 6f 6b 69 65 20 61 6e 64 20 72 65 64 69 72 65 63 74 0a 74 68 65 20 75 73 65 72 20 74 t.cookie.and.redirect.the.user.t
2d9a0 6f 20 4c 4f 47 47 45 44 2d 49 4e 2e 0a 0a 41 63 74 75 61 6c 6c 79 20 75 73 65 73 20 60 65 6c 6e o.LOGGED-IN...Actually.uses.`eln
2d9c0 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 27 20 74 6f 20 64 6f 20 74 68 65 20 61 73 73 65 72 74 ode-auth-login'.to.do.the.assert
2d9e0 69 6f 6e 2e 0a 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 27 20 69 ion..`elnode-auth-credentials'.i
2da00 73 20 73 69 67 6e 61 6c 65 64 20 62 79 20 74 68 61 74 20 69 66 20 74 68 65 20 61 73 73 65 72 74 s.signaled.by.that.if.the.assert
2da20 69 6f 6e 20 66 61 69 6c 73 2e 0a 0a 41 55 54 48 2d 44 42 20 69 73 20 61 20 64 61 74 61 62 61 73 ion.fails...AUTH-DB.is.a.databas
2da40 65 2c 20 62 79 20 64 65 66 61 75 6c 74 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 27 2c 20 e,.by.default.`elnode-auth-db',.
2da60 69 74 27 73 20 70 61 73 73 65 64 0a 74 6f 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 it's.passed.to.`elnode-auth-logi
2da80 6e 27 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 68 74 74 70 63 n'."...(let*.((elnode-auth-httpc
2daa0 6f 6e 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 28 68 61 73 68 0a 20 20 20 20 20 on.httpcon)..........(hash......
2dac0 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 0a 20 20 20 20 20 20 20 20 .....(elnode-auth-login.........
2dae0 20 20 20 75 73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 0a 20 20 20 20 20 20 20 20 20 20 20 ...username.password............
2db00 3a 61 75 74 68 2d 74 65 73 74 20 61 75 74 68 2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 :auth-test.auth-test............
2db20 3a 6c 6f 67 67 65 64 69 6e 2d 64 62 20 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 29 0a 20 20 20 20 :loggedin-db.loggedin-db))).....
2db40 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 2d 73 65 74 0a 20 20 20 20 20 68 74 74 (elnode-http-header-set......htt
2db60 70 63 6f 6e 0a 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 pcon......(elnode-http-cookie-ma
2db80 6b 65 0a 20 20 20 20 20 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 28 66 6f 72 6d ke.......cookie-name.......(form
2dba0 61 74 20 22 25 73 3a 3a 25 73 22 20 75 73 65 72 6e 61 6d 65 20 68 61 73 68 29 0a 20 20 20 20 20 at."%s::%s".username.hash)......
2dbc0 20 3a 70 61 74 68 20 22 2f 22 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 .:path."/")).....(elnode-send-re
2dbe0 64 69 72 65 63 74 20 68 74 74 70 63 6f 6e 20 28 6f 72 20 6c 6f 67 67 65 64 2d 69 6e 20 22 2f 22 direct.httpcon.(or.logged-in."/"
2dc00 29 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 ))))..(defcustom.elnode-auth-log
2dc20 69 6e 2d 70 61 67 65 20 22 3c 68 74 6d 6c 3e 0a 3c 62 6f 64 79 3e 0a 3c 66 6f 72 6d 20 6d 65 74 in-page."<html>.<body>.<form.met
2dc40 68 6f 64 3d 27 50 4f 53 54 27 20 61 63 74 69 6f 6e 3d 27 3c 21 23 23 45 20 74 61 72 67 65 74 20 hod='POST'.action='<!##E.target.
2dc60 45 23 23 21 3e 27 3e 0a 3c 69 6e 70 75 74 20 74 79 70 65 3d 27 68 69 64 64 65 6e 27 20 6e 61 6d E##!>'>.<input.type='hidden'.nam
2dc80 65 3d 27 72 65 64 69 72 65 63 74 27 20 76 61 6c 75 65 3d 27 3c 21 23 23 45 20 72 65 64 69 72 65 e='redirect'.value='<!##E.redire
2dca0 63 74 20 45 23 23 21 3e 27 2f 3e 0a 75 73 65 72 6e 61 6d 65 3a 20 3c 69 6e 70 75 74 20 74 79 70 ct.E##!>'/>.username:.<input.typ
2dcc0 65 3d 27 74 65 78 74 27 20 6e 61 6d 65 3d 27 75 73 65 72 6e 61 6d 65 27 2f 3e 3c 62 72 2f 3e 0a e='text'.name='username'/><br/>.
2dce0 70 61 73 73 77 6f 72 64 3a 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 27 70 61 73 73 77 6f 72 64 27 password:.<input.type='password'
2dd00 20 6e 61 6d 65 3d 27 70 61 73 73 77 6f 72 64 27 2f 3e 3c 62 72 2f 3e 0a 3c 69 6e 70 75 74 20 74 .name='password'/><br/>.<input.t
2dd20 79 70 65 3d 27 73 75 62 6d 69 74 27 20 6e 61 6d 65 3d 27 6c 6f 67 69 6e 27 2f 3e 0a 3c 2f 66 6f ype='submit'.name='login'/>.</fo
2dd40 72 6d 3e 0a 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 22 0a 20 20 22 41 20 73 74 61 6e 64 61 rm>.</body>.</html>"..."A.standa
2dd60 72 64 20 6c 6f 67 69 6e 20 70 61 67 65 2c 20 75 73 65 64 20 62 79 20 60 65 6c 6e 6f 64 65 2d 61 rd.login.page,.used.by.`elnode-a
2dd80 75 74 68 2d 6c 6f 67 69 6e 2d 73 65 6e 64 65 72 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c uth-login-sender'."...:group.'el
2dda0 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 75 6e 20 node...:type.'(string))..(defun.
2ddc0 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 2d 73 65 6e 64 65 72 20 28 68 74 74 70 63 6f elnode-auth-login-sender.(httpco
2dde0 6e 20 74 61 72 67 65 74 20 72 65 64 69 72 65 63 74 29 0a 20 20 22 53 65 6e 64 20 74 68 65 20 6c n.target.redirect)..."Send.the.l
2de00 6f 67 69 6e 20 70 61 67 65 20 66 6f 72 20 61 75 74 68 20 74 6f 20 48 54 54 50 43 4f 4e 2e 0a 0a ogin.page.for.auth.to.HTTPCON...
2de20 54 68 65 20 6c 6f 67 69 6e 20 70 61 67 65 20 77 69 6c 6c 20 73 65 6e 64 20 69 74 73 20 61 75 74 The.login.page.will.send.its.aut
2de40 68 65 6e 74 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 20 74 6f 20 54 41 52 47 45 54 2e 0a 0a hentication.request.to.TARGET...
2de60 54 68 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 77 69 6c 6c 20 69 6e 63 6c 75 64 65 20 The.authentication.will.include.
2de80 75 73 65 72 6e 61 6d 65 2c 20 70 61 73 73 77 6f 72 64 20 41 4e 44 20 52 45 44 49 52 45 43 54 2c username,.password.AND.REDIRECT,
2dea0 0a 77 68 69 63 68 20 69 73 20 74 68 65 20 55 52 4c 20 74 6f 20 72 65 64 69 72 65 63 74 20 74 6f .which.is.the.URL.to.redirect.to
2dec0 20 77 68 65 6e 20 6c 6f 67 69 6e 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0a 0a 54 68 69 73 .when.login.is.successful...This
2dee0 20 66 75 6e 63 74 69 6f 6e 20 73 65 6e 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 .function.sends.the.contents.of.
2df00 74 68 65 20 63 75 73 74 6f 6d 20 76 61 72 69 61 62 6c 65 0a 60 65 6c 6e 6f 64 65 2d 61 75 74 68 the.custom.variable.`elnode-auth
2df20 2d 6c 6f 67 69 6e 2d 70 61 67 65 27 20 61 66 74 65 72 20 74 65 6d 70 6c 61 74 69 6e 67 20 69 74 -login-page'.after.templating.it
2df40 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 ."...(elnode-http-start.httpcon.
2df60 32 30 30 20 60 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 200.`("Content-type"..."text/htm
2df80 6c 22 29 29 0a 20 20 3b 3b 20 49 74 20 77 6f 75 6c 64 20 62 65 20 6e 69 63 65 20 74 6f 20 73 75 l"))...;;.It.would.be.nice.to.su
2dfa0 70 70 6f 72 74 20 70 72 65 61 6d 62 6c 65 73 2e 2e 2e 20 6e 6f 74 20 73 75 72 65 20 68 6f 77 2e pport.preambles....not.sure.how.
2dfc0 0a 20 20 3b 3b 20 20 28 77 68 65 6e 20 70 72 65 61 6d 62 6c 65 20 28 65 6c 6e 6f 64 65 2d 68 74 ...;;..(when.preamble.(elnode-ht
2dfe0 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 70 72 65 61 6d 62 6c 65 29 tp-send-string.httpcon.preamble)
2e000 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 0a 20 20 20 68 74 74 70 63 )...(elnode-http-return....httpc
2e020 6f 6e 0a 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 28 69 6e on....(with-temp-buffer......(in
2e040 73 65 72 74 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 2d 70 61 67 65 29 0a 20 20 20 sert.elnode-auth-login-page)....
2e060 20 20 28 65 6c 6e 6f 64 65 2d 2d 62 75 66 66 65 72 2d 74 65 6d 70 6c 61 74 65 0a 20 20 20 20 20 ..(elnode--buffer-template......
2e080 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 60 28 28 22 74 61 72 67 .(current-buffer).......`(("targ
2e0a0 65 74 22 20 2e 20 2c 74 61 72 67 65 74 29 0a 20 20 20 20 20 20 20 20 28 22 72 65 64 69 72 65 63 et"...,target).........("redirec
2e0c0 74 22 20 2e 20 2c 72 65 64 69 72 65 63 74 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c t"...,redirect))))))..(defun*.el
2e0e0 6e 6f 64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 6f node-auth--login-handler.(httpco
2e100 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n...............................
2e120 20 20 20 20 20 20 73 65 6e 64 65 72 20 74 61 72 67 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 ......sender.target.............
2e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 ........................&key....
2e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2e180 20 61 75 74 68 2d 74 65 73 74 20 3b 20 61 73 73 65 72 74 20 6e 6f 74 20 6e 69 6c 3f 0a 20 20 20 .auth-test.;.assert.not.nil?....
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2e1c0 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 .(cookie-name."elnodeauth").....
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2e200 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 (loggedin-db.elnode-loggedin-db)
2e220 29 0a 20 20 22 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c )..."The.implementation.of.the.l
2e240 6f 67 69 6e 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 61 75 74 68 20 74 65 73 74 69 6e 67 2e 0a 0a ogin.handler.for.auth.testing...
2e260 54 68 69 73 20 69 73 20 74 68 65 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 69 73 20 6d 61 70 70 This.is.the.handler.that.is.mapp
2e280 65 64 20 74 6f 20 2f 6c 6f 67 69 6e 2f 20 28 77 68 69 63 68 20 69 73 20 74 68 65 0a 64 65 66 61 ed.to./login/.(which.is.the.defa
2e2a0 75 6c 74 20 6c 6f 67 69 6e 20 70 61 74 68 29 20 6f 72 20 77 68 61 74 65 76 65 72 20 79 6f 75 20 ult.login.path).or.whatever.you.
2e2c0 77 61 6e 74 20 74 68 65 20 6c 6f 67 69 6e 20 70 61 74 68 20 74 6f 20 62 65 2e 0a 0a 53 45 4e 44 want.the.login.path.to.be...SEND
2e2e0 45 52 20 69 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 63 68 20 77 69 6c 6c 20 73 65 ER.is.the.function.which.will.se
2e300 6e 64 20 74 68 65 20 6c 6f 67 69 6e 20 70 61 67 65 20 74 6f 20 74 68 65 0a 75 73 65 72 2c 20 69 nd.the.login.page.to.the.user,.i
2e320 74 20 74 61 6b 65 73 20 61 6e 20 48 54 54 50 43 4f 4e 2e 20 20 49 74 20 6d 75 73 74 20 73 65 6e t.takes.an.HTTPCON...It.must.sen
2e340 64 20 61 20 27 75 73 65 72 6e 61 6d 65 27 20 61 6e 64 0a 27 70 61 73 73 77 6f 72 64 27 20 48 54 d.a.'username'.and.'password'.HT
2e360 54 50 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 69 73 20 68 61 6e 64 6c 65 72 2e 0a 0a TP.parameters.to.this.handler...
2e380 54 41 52 47 45 54 20 69 73 20 74 68 65 20 70 61 74 68 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 TARGET.is.the.path.that.will.be.
2e3a0 75 73 65 64 20 61 73 20 74 68 65 20 6c 6f 67 69 6e 20 68 61 6e 64 6c 65 72 0a 70 61 74 68 20 28 used.as.the.login.handler.path.(
2e3c0 74 68 65 20 70 61 74 68 20 74 6f 20 63 61 6c 6c 20 74 68 69 73 20 68 61 6e 64 6c 65 72 29 2e 22 the.path.to.call.this.handler)."
2e3e0 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 ...(elnode-method.httpcon.......
2e400 28 47 45 54 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 74 6f 20 28 6f 72 0a 20 20 20 20 20 20 (GET........(let.((to.(or.......
2e420 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 ............(elnode-http-param.h
2e440 74 74 70 63 6f 6e 20 22 72 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ttpcon."redirect")..............
2e460 20 20 20 20 20 22 2f 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 ....."/")))..........(funcall.se
2e480 6e 64 65 72 20 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 20 74 6f 29 29 29 0a 20 20 20 20 28 50 nder.httpcon.target.to))).....(P
2e4a0 4f 53 54 0a 20 20 20 20 20 28 6c 65 74 20 28 28 75 73 65 72 6e 61 6d 65 20 28 65 6c 6e 6f 64 65 OST......(let.((username.(elnode
2e4c0 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 75 73 65 72 6e 61 6d 65 22 29 29 -http-param.httpcon."username"))
2e4e0 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 61 73 73 77 6f 72 64 20 28 65 6c 6e 6f 64 65 2d 68 74 ............(password.(elnode-ht
2e500 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 70 61 73 73 77 6f 72 64 22 29 29 0a 20 20 tp-param.httpcon."password"))...
2e520 20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64 2d 69 6e 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 .........(logged-in.(elnode-http
2e540 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 72 65 64 69 72 65 63 74 22 29 29 29 0a 20 20 20 -param.httpcon."redirect")))....
2e560 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 0a 20 20 20 20 20 20 20 20 ....(condition-case.err.........
2e580 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 68 74 74 70 2d 6c 6f 67 69 6e 0a 20 20 20 20 20 ...(elnode-auth-http-login......
2e5a0 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e .......httpcon.............usern
2e5c0 61 6d 65 20 70 61 73 73 77 6f 72 64 20 6c 6f 67 67 65 64 2d 69 6e 0a 20 20 20 20 20 20 20 20 20 ame.password.logged-in..........
2e5e0 20 20 20 3a 61 75 74 68 2d 74 65 73 74 20 61 75 74 68 2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 ...:auth-test.auth-test.........
2e600 20 20 20 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 0a 20 20 ....:cookie-name.cookie-name)...
2e620 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 0a .......(elnode-auth-credentials.
2e640 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72 65 63 74 0a ..........(elnode-send-redirect.
2e660 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 ...........httpcon............(i
2e680 66 20 28 6e 6f 74 20 6c 6f 67 67 65 64 2d 69 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f.(not.logged-in)...............
2e6a0 20 74 61 72 67 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 .target................(format."
2e6c0 25 73 3f 72 65 64 69 72 65 63 74 3d 25 73 22 20 74 61 72 67 65 74 20 6c 6f 67 67 65 64 2d 69 6e %s?redirect=%s".target.logged-in
2e6e0 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 74 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 ))))..........(t.(elnode-error..
2e700 20 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e 2d ............"elnode-auth--login-
2e720 68 61 6e 64 6c 65 72 3a 20 75 6e 65 78 70 65 63 74 65 64 20 65 72 72 6f 72 3a 20 25 53 22 0a 20 handler:.unexpected.error:.%S"..
2e740 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 ............err)))))))..(defun.e
2e760 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 65 66 61 75 6c 74 2d 74 65 73 74 2d 76 30 30 31 20 28 75 73 lnode-auth-default-test-v001.(us
2e780 65 72 6e 61 6d 65 20 64 61 74 61 62 61 73 65 29 0a 20 20 22 54 68 65 20 66 69 72 73 74 20 74 65 ername.database)..."The.first.te
2e7a0 73 74 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 45 6c 6e 6f 64 65 20 61 75 74 68 st.function.used.for.Elnode.auth
2e7c0 2e 0a 0a 54 68 69 73 20 75 73 65 73 20 6a 75 73 74 20 74 68 65 20 6b 65 79 65 64 20 76 61 6c 75 ...This.uses.just.the.keyed.valu
2e7e0 65 20 6f 66 20 74 68 65 20 75 73 65 72 6e 61 6d 65 20 61 73 20 74 68 65 20 74 6f 6b 65 6e 2e 20 e.of.the.username.as.the.token..
2e800 20 57 65 0a 6e 6f 20 6c 6f 6e 67 65 72 20 73 74 6f 72 65 20 64 61 74 61 62 61 73 65 73 20 6c 69 .We.no.longer.store.databases.li
2e820 6b 65 20 74 68 61 74 20 62 79 20 64 65 66 61 75 6c 74 2e 22 0a 20 20 28 64 62 2d 67 65 74 20 75 ke.that.by.default."...(db-get.u
2e840 73 65 72 6e 61 6d 65 20 64 61 74 61 62 61 73 65 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 sername.database))..(defun.elnod
2e860 65 2d 61 75 74 68 2d 64 65 66 61 75 6c 74 2d 74 65 73 74 20 28 75 73 65 72 6e 61 6d 65 20 64 61 e-auth-default-test.(username.da
2e880 74 61 62 61 73 65 29 0a 20 20 22 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 66 75 6e 63 tabase)..."The.default.test.func
2e8a0 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 45 6c 6e 6f 64 65 20 61 75 74 68 2e 0a 0a 49 73 20 75 tion.used.for.Elnode.auth...Is.u
2e8c0 73 65 73 20 61 20 73 74 6f 72 65 64 20 61 6c 69 73 74 20 61 67 61 69 6e 73 74 20 55 53 45 52 4e ses.a.stored.alist.against.USERN
2e8e0 41 4d 45 2c 20 74 68 65 20 61 6c 69 73 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 74 68 AME,.the.alist.should.contain.th
2e900 65 20 6b 65 79 20 5c 22 74 6f 6b 65 6e 5c 22 20 77 69 74 68 20 61 20 75 73 65 72 27 73 20 74 6f e.key.\"token\".with.a.user's.to
2e920 6b 65 6e 2e 20 20 57 68 61 74 65 76 65 72 20 65 6c 73 65 20 74 68 65 20 61 6c 69 73 74 0a 63 6f ken...Whatever.else.the.alist.co
2e940 6e 74 61 69 6e 73 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 2e 22 0a 20 20 28 6c 65 74 20 28 28 ntains.is.irrelevant."...(let.((
2e960 75 73 65 72 20 28 64 62 2d 67 65 74 20 75 73 65 72 6e 61 6d 65 20 64 61 74 61 62 61 73 65 29 29 user.(db-get.username.database))
2e980 29 0a 20 20 20 20 28 77 68 65 6e 20 75 73 65 72 0a 20 20 20 20 20 20 28 61 6c 69 73 74 2d 67 65 ).....(when.user.......(alist-ge
2e9a0 74 20 22 74 6f 6b 65 6e 22 20 75 73 65 72 20 6e 69 6c 20 6e 69 6c 20 27 65 71 75 61 6c 29 29 29 t."token".user.nil.nil.'equal)))
2e9c0 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 2d 6d 61 6b 65 2d 6c 6f 67 )..(defun*.elnode-auth--make-log
2e9e0 69 6e 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 28 26 6b 65 79 0a 20 20 20 20 20 28 73 65 6e 64 65 in-handler.....(&key......(sende
2ea00 72 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 2d 73 65 6e 64 65 72 29 0a 20 20 20 r.'elnode-auth-login-sender)....
2ea20 20 20 28 74 61 72 67 65 74 20 22 2f 6c 6f 67 69 6e 2f 22 29 0a 20 20 20 20 20 61 75 74 68 2d 74 ..(target."/login/")......auth-t
2ea40 65 73 74 0a 20 20 20 20 20 28 61 75 74 68 2d 64 62 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 est......(auth-db.elnode-auth-db
2ea60 29 20 3b 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 61 75 74 68 2d 74 65 73 74 20 69 ).;.only.used.if.the.auth-test.i
2ea80 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 0a 20 20 20 20 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 s.not.present......(cookie-name.
2eaa0 22 65 6c 6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 "elnodeauth")......(loggedin-db.
2eac0 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20 elnode-loggedin-db))..."Make.an.
2eae0 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 27 2c 20 62 69 `elnode-auth--login-handler',.bi
2eb00 6e 64 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73 2e 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 nding.parameters."...(lambda.(ht
2eb20 74 70 63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e 2d 68 tpcon).....(elnode-auth--login-h
2eb40 61 6e 64 6c 65 72 0a 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 73 65 6e 64 65 72 20 andler......httpcon......sender.
2eb60 74 61 72 67 65 74 0a 20 20 20 20 20 3b 3b 20 4d 61 6b 65 20 61 20 74 65 73 74 20 66 75 6e 63 74 target......;;.Make.a.test.funct
2eb80 69 6f 6e 20 69 66 20 77 65 20 64 6f 6e 27 74 20 68 61 76 65 20 6f 6e 65 0a 20 20 20 20 20 3a 61 ion.if.we.don't.have.one......:a
2eba0 75 74 68 2d 74 65 73 74 20 28 69 66 20 28 66 75 6e 63 74 69 6f 6e 70 20 61 75 74 68 2d 74 65 73 uth-test.(if.(functionp.auth-tes
2ebc0 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 74 t).....................auth-test
2ebe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 75 73 .....................(lambda.(us
2ec00 65 72 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 ername).......................(e
2ec20 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 65 66 61 75 6c 74 2d 74 65 73 74 20 75 73 65 72 6e 61 6d 65 lnode-auth-default-test.username
2ec40 20 61 75 74 68 2d 64 62 29 29 29 0a 20 20 20 20 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 63 6f .auth-db)))......:cookie-name.co
2ec60 6f 6b 69 65 2d 6e 61 6d 65 0a 20 20 20 20 20 3a 6c 6f 67 67 65 64 69 6e 2d 64 62 20 6c 6f 67 67 okie-name......:loggedin-db.logg
2ec80 65 64 69 6e 2d 64 62 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 64 65 66 61 75 edin-db)))..(defun*.elnode-defau
2eca0 74 68 20 28 73 63 68 65 6d 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 th.(scheme-name.................
2ecc0 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ........&key....................
2ece0 20 20 20 20 20 28 74 65 73 74 20 3a 63 6f 6f 6b 69 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 .....(test.:cookie).............
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 ............auth-test...........
2ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 75 74 68 2d 64 62 20 27 65 6c 6e 6f 64 65 2d 61 ..............(auth-db.'elnode-a
2ed40 75 74 68 2d 64 62 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 uth-db).........................
2ed60 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 20 (cookie-name."elnodeauth")......
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 61 69 6c 75 72 65 2d 74 79 70 65 ...................(failure-type
2eda0 20 3a 72 65 64 69 72 65 63 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .:redirect).....................
2edc0 20 20 20 20 28 72 65 64 69 72 65 63 74 20 22 2f 6c 6f 67 69 6e 2f 22 29 0a 20 20 20 20 20 20 20 ....(redirect."/login/")........
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 6e 64 65 72 20 27 65 6c 6e 6f 64 65 .................(sender.'elnode
2ee00 2d 61 75 74 68 2d 6c 6f 67 69 6e 2d 73 65 6e 64 65 72 29 29 0a 20 20 22 44 65 66 69 6e 65 20 61 -auth-login-sender))..."Define.a
2ee20 6e 20 45 6c 6e 6f 64 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 2e 0a n.Elnode.authentication.scheme..
2ee40 0a 41 6e 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 20 63 6f 6e 73 69 73 .An.authentication.scheme.consis
2ee60 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 3a 0a ts.of.the.following.attributes:.
2ee80 0a 54 45 53 54 20 77 68 61 74 20 73 6f 72 74 20 6f 66 20 74 65 73 74 20 69 73 20 75 73 65 64 20 .TEST.what.sort.of.test.is.used.
2eea0 74 6f 20 74 65 73 74 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2c 20 62 79 0a 64 to.test.the.authentication,.by.d
2eec0 65 66 61 75 6c 74 20 74 68 69 73 20 69 73 20 60 3a 63 6f 6f 6b 69 65 27 2e 20 20 4e 6f 20 6f 74 efault.this.is.`:cookie'...No.ot
2eee0 68 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 74 65 73 74 73 20 61 72 65 0a 70 6f 73 her.authentication.tests.are.pos
2ef00 73 69 62 6c 65 20 72 69 67 68 74 20 6e 6f 77 20 62 75 74 20 69 6e 20 74 68 65 20 66 75 74 75 72 sible.right.now.but.in.the.futur
2ef20 65 20 74 68 65 72 65 20 6d 69 67 68 74 20 62 65 20 6d 61 6e 79 20 28 74 68 65 72 65 0a 6d 69 67 e.there.might.be.many.(there.mig
2ef40 68 74 20 61 6c 73 6f 20 62 65 20 61 20 67 65 6e 65 72 61 6c 20 60 3a 66 75 6e 63 74 69 6f 6e 27 ht.also.be.a.general.`:function'
2ef60 20 74 65 73 74 20 74 68 61 74 20 61 6c 6c 6f 77 73 20 63 61 6c 6c 69 6e 67 20 6f 66 20 61 0a 66 .test.that.allows.calling.of.a.f
2ef80 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 74 65 73 74 29 2e 0a unction.to.implement.the.test)..
2efa0 0a 43 4f 4f 4b 49 45 2d 4e 41 4d 45 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 54 45 .COOKIE-NAME.is.used.when.the.TE
2efc0 53 54 20 69 73 20 60 3a 63 6f 6f 6b 69 65 27 2e 20 20 49 74 20 69 73 20 74 68 65 20 6e 61 6d 65 ST.is.`:cookie'...It.is.the.name
2efe0 0a 6f 66 20 74 68 65 20 63 6f 6f 6b 69 65 20 74 6f 20 75 73 65 20 66 6f 72 20 61 75 74 68 65 6e .of.the.cookie.to.use.for.authen
2f000 74 69 63 61 74 69 6f 6e 2e 20 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20 69 73 0a 60 65 tication...By.default.this.is.`e
2f020 6c 6e 6f 64 65 2d 61 75 74 68 27 2e 20 20 49 74 20 6d 75 73 74 20 62 65 20 73 70 65 63 69 66 69 lnode-auth'...It.must.be.specifi
2f040 65 64 20 61 73 20 61 20 73 74 72 69 6e 67 2e 0a 0a 41 55 54 48 2d 44 42 20 69 73 20 74 68 65 20 ed.as.a.string...AUTH-DB.is.the.
2f060 60 64 62 27 20 75 73 65 64 20 66 6f 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 `db'.used.for.authentication.inf
2f080 6f 72 6d 61 74 69 6f 6e 2e 0a 49 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 61 75 74 68 ormation..It.is.used.as.the.auth
2f0a0 6f 72 69 74 79 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 65 72 73 2e 20 20 ority.of.information.on.users...
2f0c0 42 79 20 64 65 66 61 75 6c 74 0a 74 68 69 73 20 69 73 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d By.default.this.is.`elnode-auth-
2f0e0 64 62 27 2e 0a 0a 41 55 54 48 2d 54 45 53 54 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f db'...AUTH-TEST.is.a.function.to
2f100 20 69 6d 70 6c 65 6d 65 6e 74 20 72 65 74 72 69 65 76 61 6c 20 6f 66 20 75 73 65 72 73 2e 20 20 .implement.retrieval.of.users...
2f120 49 74 20 69 73 0a 75 73 65 64 20 69 6e 20 70 72 65 66 65 72 65 6e 63 65 20 74 6f 20 41 55 54 48 It.is.used.in.preference.to.AUTH
2f140 2d 44 42 20 62 75 74 20 63 61 6e 20 62 65 20 6e 69 6c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 -DB.but.can.be.nil.in.which.case
2f160 20 61 0a 64 65 66 61 75 6c 74 20 62 61 73 65 64 20 6f 6e 20 41 55 54 48 2d 44 42 20 77 69 6c 6c .a.default.based.on.AUTH-DB.will
2f180 20 62 65 20 75 73 65 64 2e 0a 0a 46 41 49 4c 55 52 45 2d 54 59 50 45 20 69 73 20 77 68 61 74 20 .be.used...FAILURE-TYPE.is.what.
2f1a0 74 6f 20 64 6f 20 69 66 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 73 2e 20 20 to.do.if.authentication.fails...
2f1c0 43 75 72 72 65 6e 74 6c 79 0a 6f 6e 6c 79 20 60 3a 72 65 64 69 72 65 63 74 27 20 69 73 20 73 75 Currently.only.`:redirect'.is.su
2f1e0 70 70 6f 72 74 65 64 2e 20 20 54 6f 20 72 65 64 69 72 65 63 74 20 6f 6e 20 66 61 69 6c 75 72 65 pported...To.redirect.on.failure
2f200 20 6d 65 61 6e 73 20 74 6f 0a 73 65 6e 64 20 61 20 33 30 32 20 77 69 74 68 20 61 20 6c 6f 63 61 .means.to.send.a.302.with.a.loca
2f220 74 69 6f 6e 20 74 6f 20 76 69 73 69 74 20 61 20 6c 6f 67 69 6e 20 70 61 67 65 2e 20 20 3a 46 41 tion.to.visit.a.login.page...:FA
2f240 49 4c 55 52 45 2d 54 59 50 45 0a 69 73 20 60 3a 72 65 64 69 72 65 63 74 27 20 62 79 20 64 65 66 ILURE-TYPE.is.`:redirect'.by.def
2f260 61 75 6c 74 2e 0a 0a 52 45 44 49 52 45 43 54 20 69 73 20 77 68 65 72 65 20 74 6f 20 72 65 64 69 ault...REDIRECT.is.where.to.redi
2f280 72 65 63 74 20 74 6f 20 69 66 20 46 41 49 4c 55 52 45 2d 54 59 50 45 20 69 73 20 60 3a 72 65 64 rect.to.if.FAILURE-TYPE.is.`:red
2f2a0 69 72 65 63 74 27 2e 0a 42 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20 69 73 20 5c 22 2f 6c 6f irect'..By.default.this.is.\"/lo
2f2c0 67 69 6e 2f 5c 22 2e 20 20 49 66 20 53 45 4e 44 45 52 20 69 73 20 6e 6f 74 20 6e 69 6c 20 74 68 gin/\"...If.SENDER.is.not.nil.th
2f2e0 65 6e 20 61 0a 64 69 73 70 61 74 63 68 65 72 20 74 6f 6c 64 20 61 62 6f 75 74 20 74 68 69 73 20 en.a.dispatcher.told.about.this.
2f300 61 75 74 68 20 73 63 68 65 6d 65 20 77 69 6c 6c 20 64 69 73 70 61 74 63 68 20 61 20 70 61 74 68 auth.scheme.will.dispatch.a.path
2f320 0a 6e 61 6d 69 6e 67 20 52 45 44 49 52 45 43 54 20 74 6f 20 53 45 4e 44 45 52 2e 0a 0a 53 45 4e .naming.REDIRECT.to.SENDER...SEN
2f340 44 45 52 20 69 73 20 61 6e 20 45 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 20 74 61 6b 69 6e 67 20 DER.is.an.Elnode.handler.taking.
2f360 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 6f 66 0a 60 74 61 72 67 65 74 additional.parameters.of.`target
2f380 27 20 61 6e 64 20 60 72 65 64 69 72 65 63 74 27 2e 20 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 '.and.`redirect'...By.default.th
2f3a0 69 73 20 69 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d is.is.the.function.`elnode-auth-
2f3c0 6c 6f 67 69 6e 2d 73 65 6e 64 65 72 27 2e 20 20 53 70 65 63 69 66 79 20 61 20 64 69 66 66 65 72 login-sender'...Specify.a.differ
2f3e0 65 6e 74 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 79 6f 75 0a 77 61 6e 74 20 74 6f 20 74 6f 74 61 ent.function.if.you.want.to.tota
2f400 6c 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 6c 6f 67 69 6e 20 70 61 67 65 2e 22 0a 20 20 28 6c lly.change.the.login.page."...(l
2f420 65 74 2a 20 28 28 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 et*.((login-handler.(elnode-auth
2f440 2d 2d 6d 61 6b 65 2d 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 --make-login-handler............
2f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73 65 6e 64 65 72 20 73 65 6e 64 65 72 0a 20 20 20 ..............:sender.sender....
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 74 61 72 67 65 74 20 72 65 ......................:target.re
2f4a0 64 69 72 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 direct..........................
2f4c0 3a 61 75 74 68 2d 74 65 73 74 20 61 75 74 68 2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 :auth-test.auth-test............
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 61 75 74 68 2d 64 62 20 61 75 74 68 2d 64 62 0a 20 ..............:auth-db.auth-db..
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 63 6f 6f 6b 69 65 2d ........................:cookie-
2f520 6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 61 75 74 name.cookie-name))..........(aut
2f540 68 2d 73 63 68 65 6d 65 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 h-scheme.(list..................
2f560 20 20 20 20 20 20 3a 74 65 73 74 20 74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ......:test.test................
2f580 20 20 20 20 20 20 20 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 ........:cookie-name.cookie-name
2f5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 66 61 69 6c 75 72 65 ........................:failure
2f5c0 2d 74 79 70 65 20 66 61 69 6c 75 72 65 2d 74 79 70 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 -type.failure-type..............
2f5e0 20 20 20 20 20 20 20 20 20 20 3a 72 65 64 69 72 65 63 74 20 72 65 64 69 72 65 63 74 0a 20 20 20 ..........:redirect.redirect....
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 6c 6f 67 69 6e 2d 68 61 6e 64 6c ....................:login-handl
2f620 65 72 20 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 29 29 29 0a 20 20 20 20 28 70 75 74 68 61 73 68 er.login-handler))).....(puthash
2f640 20 73 63 68 65 6d 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 73 .scheme-name..............auth-s
2f660 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 69 6e cheme..............elnode--defin
2f680 65 64 2d 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2d 73 63 68 65 6d 65 73 29 29 29 0a 0a 28 64 ed-authentication-schemes)))..(d
2f6a0 65 66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 69 73 70 61 74 63 68 65 72 20 28 efmacro.elnode-auth-dispatcher.(
2f6c0 68 74 74 70 63 6f 6e 20 61 75 74 68 2d 73 63 68 65 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a httpcon.auth-scheme.&rest.body).
2f6e0 20 20 22 44 69 73 70 61 74 63 68 20 48 54 54 50 43 4f 4e 20 74 6f 20 41 55 54 48 2d 53 43 48 45 .."Dispatch.HTTPCON.to.AUTH-SCHE
2f700 4d 45 27 73 20 68 61 6e 64 6c 65 72 20 69 66 20 69 74 20 6d 61 74 63 68 65 73 2e 0a 0a 4f 74 68 ME's.handler.if.it.matches...Oth
2f720 65 72 77 69 73 65 20 64 6f 20 42 4f 44 59 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 erwise.do.BODY."...(declare....(
2f740 64 65 62 75 67 20 28 73 65 78 70 20 73 65 78 70 20 26 72 65 73 74 20 66 6f 72 6d 29 29 0a 20 20 debug.(sexp.sexp.&rest.form))...
2f760 20 28 69 6e 64 65 6e 74 20 32 29 29 0a 20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 2d 76 20 .(indent.2))...(let.((httpcon-v.
2f780 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74 74 70 63 6f 6e 2d 76 22 29 29 0a 20 20 20 20 20 (make-symbol."httpcon-v"))......
2f7a0 20 20 20 28 61 75 74 68 2d 73 63 68 65 6d 65 2d 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 ...(auth-scheme-v.(make-symbol."
2f7c0 61 75 74 68 2d 73 63 68 65 6d 65 2d 76 22 29 29 0a 20 20 20 20 20 20 20 20 28 72 65 64 69 72 65 auth-scheme-v")).........(redire
2f7e0 63 74 2d 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 72 65 64 69 72 65 63 74 2d 76 22 29 29 ct-v.(make-symbol."redirect-v"))
2f800 0a 20 20 20 20 20 20 20 20 28 68 61 6e 64 6c 65 72 2d 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c .........(handler-v.(make-symbol
2f820 20 22 68 61 6e 64 6c 65 72 2d 76 22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c 68 74 ."handler-v"))).....`(let*.((,ht
2f840 74 70 63 6f 6e 2d 76 20 2c 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c tpcon-v.,httpcon).............(,
2f860 61 75 74 68 2d 73 63 68 65 6d 65 2d 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 68 auth-scheme-v..............(geth
2f880 61 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 61 75 74 68 2d 73 63 68 65 6d 65 0a 20 ash...............,auth-scheme..
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 .............elnode--defined-aut
2f8c0 68 65 6e 74 69 63 61 74 69 6f 6e 2d 73 63 68 65 6d 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 hentication-schemes))...........
2f8e0 20 20 28 2c 72 65 64 69 72 65 63 74 2d 76 20 28 70 6c 69 73 74 2d 67 65 74 20 2c 61 75 74 68 2d ..(,redirect-v.(plist-get.,auth-
2f900 73 63 68 65 6d 65 2d 76 20 3a 72 65 64 69 72 65 63 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 scheme-v.:redirect))............
2f920 20 28 2c 68 61 6e 64 6c 65 72 2d 76 20 28 70 6c 69 73 74 2d 67 65 74 20 2c 61 75 74 68 2d 73 63 .(,handler-v.(plist-get.,auth-sc
2f940 68 65 6d 65 2d 76 20 3a 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 29 29 29 0a 20 20 20 20 20 20 20 heme-v.:login-handler)))........
2f960 28 69 66 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 2d 6d 61 74 63 68 2d 66 (if.(elnode--mapper-find-match-f
2f980 75 6e 63 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 unc.............(elnode-http-pat
2f9a0 68 69 6e 66 6f 20 2c 68 74 74 70 63 6f 6e 2d 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 hinfo.,httpcon-v).............(c
2f9c0 6f 6e 73 20 2c 72 65 64 69 72 65 63 74 2d 76 20 2c 68 61 6e 64 6c 65 72 2d 76 29 29 0a 20 20 20 ons.,redirect-v.,handler-v))....
2f9e0 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 74 68 20 6d ........;;.If.the.current.path.m
2fa00 61 74 63 68 65 73 20 63 61 6c 6c 20 74 68 65 20 61 75 74 68 20 68 61 6e 64 6c 65 72 0a 20 20 20 atches.call.the.auth.handler....
2fa20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 2c 68 61 6e 64 6c 65 72 2d 76 20 2c 68 74 74 ........(funcall.,handler-v.,htt
2fa40 70 63 6f 6e 2d 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 64 6f 20 77 68 pcon-v)............;;.Else.do.wh
2fa60 61 74 65 76 65 72 20 74 68 65 20 62 6f 64 79 20 77 61 73 0a 20 20 20 20 20 20 20 20 20 20 20 2c atever.the.body.was............,
2fa80 40 62 6f 64 79 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 69 66 2d 65 6c 6e 6f 64 65 2d 61 @body))))..(defmacro.if-elnode-a
2faa0 75 74 68 20 28 68 74 74 70 63 6f 6e 20 73 63 68 65 6d 65 20 61 75 74 68 64 20 26 72 65 73 74 20 uth.(httpcon.scheme.authd.&rest.
2fac0 61 6e 6f 6e 79 6d 6f 75 73 29 0a 20 20 22 43 68 65 63 6b 20 74 68 65 20 48 54 54 50 43 4f 4e 20 anonymous)..."Check.the.HTTPCON.
2fae0 66 6f 72 20 53 43 48 45 4d 45 20 61 75 74 68 20 61 6e 64 20 65 76 61 6c 20 41 55 54 48 44 2e 0a for.SCHEME.auth.and.eval.AUTHD..
2fb00 0a 49 66 20 74 68 65 20 61 75 74 68 20 66 61 69 6c 73 20 74 68 65 6e 20 65 76 61 6c 75 61 74 65 .If.the.auth.fails.then.evaluate
2fb20 20 41 4e 4f 4e 59 4d 4f 55 53 20 69 6e 73 74 65 61 64 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a .ANONYMOUS.instead."...(declare.
2fb40 20 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 73 65 78 70 20 73 65 78 70 20 26 72 65 73 74 20 ...(debug.(sexp.sexp.sexp.&rest.
2fb60 66 6f 72 6d 29 29 0a 20 20 20 28 69 6e 64 65 6e 74 20 32 29 29 0a 20 20 28 6c 65 74 20 28 28 68 form))....(indent.2))...(let.((h
2fb80 74 74 70 63 6f 6e 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74 74 70 63 6f 6e 76 22 29 ttpconv.(make-symbol."httpconv")
2fba0 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 28 2c 68 74 74 70 63 6f 6e 76 20 2c 68 74 74 70 63 6f )).....`(let.((,httpconv.,httpco
2fbc0 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 73 63 68 65 6d 65 2d 6c 69 73 74 0a 20 20 20 20 20 n)............(scheme-list......
2fbe0 20 20 20 20 20 20 20 28 67 65 74 68 61 73 68 20 2c 73 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 .......(gethash.,scheme.........
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 .............elnode--defined-aut
2fc20 68 65 6e 74 69 63 61 74 69 6f 6e 2d 73 63 68 65 6d 65 73 29 29 29 0a 20 20 20 20 20 20 20 28 69 hentication-schemes)))........(i
2fc40 66 20 28 65 71 20 3a 63 6f 6f 6b 69 65 20 28 70 6c 69 73 74 2d 67 65 74 20 73 63 68 65 6d 65 2d f.(eq.:cookie.(plist-get.scheme-
2fc60 6c 69 73 74 20 3a 74 65 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 list.:test))............(conditi
2fc80 6f 6e 2d 63 61 73 65 20 74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 on-case.token................(pr
2fca0 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 ogn..................(elnode-aut
2fcc0 68 2d 63 6f 6f 6b 69 65 2d 63 68 65 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 h-cookie-check..................
2fce0 20 2c 68 74 74 70 63 6f 6e 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 63 6f .,httpconv...................:co
2fd00 6f 6b 69 65 2d 6e 61 6d 65 20 28 70 6c 69 73 74 2d 67 65 74 20 73 63 68 65 6d 65 2d 6c 69 73 74 okie-name.(plist-get.scheme-list
2fd20 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .:cookie-name)).................
2fd40 20 3b 3b 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 63 6f 64 65 20 77 61 73 20 6e 6f 77 .;;.Do.whatever.the.code.was.now
2fd60 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 61 75 74 68 64 29 0a 20 20 20 20 20 ...................,authd)......
2fd80 20 20 20 20 20 20 20 20 3b 3b 20 4f 6e 20 61 75 74 68 20 66 61 69 6c 75 72 65 20 64 6f 20 74 68 ........;;.On.auth.failure.do.th
2fda0 65 20 45 4c 53 45 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 e.ELSE..............(elnode-auth
2fdc0 2d 74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 6e 20 2c 40 61 6e -token...............(progn.,@an
2fde0 6f 6e 79 6d 6f 75 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 4e 6f 74 20 61 20 63 onymous)))............;;.Not.a.c
2fe00 6f 6f 6b 69 65 20 74 65 73 74 20 2d 20 6e 6f 74 20 73 75 72 65 20 77 68 61 74 20 74 6f 20 64 6f ookie.test.-.not.sure.what.to.do
2fe20 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22 45 4c 4e 4f 44 45 20 ...............(message."ELNODE.
2fe40 41 55 54 48 20 49 46 20 2d 20 4e 4f 54 20 43 4f 4f 4b 49 45 21 22 29 29 29 29 29 0a 0a 28 64 65 AUTH.IF.-.NOT.COOKIE!")))))..(de
2fe60 66 6d 61 63 72 6f 20 77 69 74 68 2d 65 6c 6e 6f 64 65 2d 61 75 74 68 20 28 68 74 74 70 63 6f 6e fmacro.with-elnode-auth.(httpcon
2fe80 20 73 63 68 65 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 50 72 6f 74 65 63 74 20 63 .scheme.&rest.body)..."Protect.c
2fea0 6f 64 65 20 77 69 74 68 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 75 73 69 6e 67 20 48 54 ode.with.authentication.using.HT
2fec0 54 50 43 4f 4e 20 61 6e 64 20 53 43 48 45 4d 45 2e 0a 0a 54 68 69 73 20 6d 61 63 72 6f 20 70 72 TPCON.and.SCHEME...This.macro.pr
2fee0 6f 74 65 63 74 73 20 63 6f 64 65 20 69 6e 20 61 20 68 61 6e 64 6c 65 72 20 77 69 74 68 20 61 20 otects.code.in.a.handler.with.a.
2ff00 63 68 65 63 6b 20 66 6f 72 20 61 6e 0a 61 75 74 68 65 6e 74 69 63 61 74 65 64 20 72 65 71 75 65 check.for.an.authenticated.reque
2ff20 73 74 20 28 74 68 65 20 63 68 65 63 6b 20 69 73 20 63 6f 6e 66 69 67 75 72 61 62 6c 65 29 2e 20 st.(the.check.is.configurable)..
2ff40 20 49 66 20 74 68 65 20 63 68 65 63 6b 0a 66 61 69 6c 73 20 74 68 65 6e 20 61 6e 20 61 70 70 72 .If.the.check.fails.then.an.appr
2ff60 6f 70 72 69 61 74 65 20 61 63 74 69 6f 6e 20 69 73 20 74 61 6b 65 6e 3b 20 66 6f 72 20 65 78 61 opriate.action.is.taken;.for.exa
2ff80 6d 70 6c 65 2c 20 73 65 6e 64 69 6e 67 20 61 0a 6c 6f 67 69 6e 20 70 61 67 65 2e 0a 0a 53 43 48 mple,.sending.a.login.page...SCH
2ffa0 45 4d 45 20 69 73 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 EME.is.the.authentication.scheme
2ffc0 20 74 6f 20 75 73 65 20 61 73 20 64 65 66 69 6e 65 64 20 62 79 0a 60 65 6c 6e 6f 64 65 2d 61 75 .to.use.as.defined.by.`elnode-au
2ffe0 74 68 2d 64 65 66 69 6e 65 2d 73 63 68 65 6d 65 27 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a 20 th-define-scheme'."...(declare..
30000 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 73 65 78 70 20 26 72 65 73 74 20 66 6f 72 6d 29 29 ..(debug.(sexp.sexp.&rest.form))
30020 0a 20 20 20 28 69 6e 64 65 6e 74 20 32 29 29 0a 20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e ....(indent.2))...(let.((httpcon
30040 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74 74 70 63 6f 6e 76 22 29 29 29 0a 20 20 20 v.(make-symbol."httpconv")))....
30060 20 60 28 6c 65 74 20 28 28 2c 68 74 74 70 63 6f 6e 76 20 2c 68 74 74 70 63 6f 6e 29 29 0a 20 20 .`(let.((,httpconv.,httpcon))...
30080 20 20 20 20 20 28 69 66 2d 65 6c 6e 6f 64 65 2d 61 75 74 68 20 2c 68 74 74 70 63 6f 6e 76 20 2c .....(if-elnode-auth.,httpconv.,
300a0 73 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 0a 20 20 20 20 20 20 20 20 20 scheme..........,@body..........
300c0 28 6c 65 74 20 28 28 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a (let.((to.................(cond.
300e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3b 3b 20 57 65 20 68 61 76 65 20 61 20 ..................(;;.We.have.a.
30100 77 72 61 70 70 65 72 2e 2e 2e 20 6f 74 68 65 72 20 6c 69 73 74 73 20 6f 74 68 65 72 0a 20 20 20 wrapper....other.lists.other....
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 74 68 61 6e 20 77 72 61 70 70 65 72 73 ................;;.than.wrappers
30140 20 61 72 65 20 70 72 6f 62 61 62 6c 79 20 70 6f 73 73 69 62 6c 65 3b 20 77 65 0a 20 20 20 20 20 .are.probably.possible;.we......
30160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 73 68 6f 75 6c 64 20 71 75 61 6c 69 66 79 20 ..............;;.should.qualify.
30180 74 68 65 20 74 65 73 74 20 68 65 72 65 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 the.test.here.to.be.............
301a0 20 20 20 20 20 20 20 3b 3b 20 77 72 61 70 70 65 72 20 73 70 65 63 69 66 69 63 0a 20 20 20 20 20 .......;;.wrapper.specific......
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 70 20 28 70 6c 69 73 74 2d 67 65 74 20 ..............(listp.(plist-get.
301e0 73 63 68 65 6d 65 2d 6c 69 73 74 20 3a 72 65 64 69 72 65 63 74 29 29 0a 20 20 20 20 20 20 20 20 scheme-list.:redirect)).........
30200 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........(format..............
30220 20 20 20 20 20 20 20 22 25 73 3f 72 65 64 69 72 65 63 74 3d 25 73 22 0a 20 20 20 20 20 20 20 20 ......."%s?redirect=%s".........
30240 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 74 20 28 70 6c 69 73 74 2d 67 65 74 20 73 63 68 65 ............(elt.(plist-get.sche
30260 6d 65 2d 6c 69 73 74 20 3a 72 65 64 69 72 65 63 74 29 20 33 29 0a 20 20 20 20 20 20 20 20 20 20 me-list.:redirect).3)...........
30280 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 ..........(elnode-http-pathinfo.
302a0 2c 68 74 74 70 63 6f 6e 76 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ,httpconv)))...................;
302c0 3b 20 41 20 70 6c 61 69 6e 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 75 73 65 64 20 64 69 72 ;.A.plain.string.can.be.used.dir
302e0 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 73 74 72 69 6e 67 ectly...................((string
30300 70 20 28 70 6c 69 73 74 2d 67 65 74 20 73 63 68 65 6d 65 2d 6c 69 73 74 20 3a 72 65 64 69 72 65 p.(plist-get.scheme-list.:redire
30320 63 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 ct))....................(plist-g
30340 65 74 20 73 63 68 65 6d 65 2d 6c 69 73 74 20 3a 72 65 64 69 72 65 63 74 29 29 0a 20 20 20 20 20 et.scheme-list.:redirect))......
30360 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .............(t.................
30380 20 20 20 28 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3a ...(error.....................":
303a0 72 65 64 69 72 65 63 74 20 4d 55 53 54 20 62 65 20 20 61 20 6c 69 73 74 20 6f 72 20 61 20 73 74 redirect.MUST.be..a.list.or.a.st
303c0 72 69 6e 67 22 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 ring")))))............(elnode-se
303e0 6e 64 2d 72 65 64 69 72 65 63 74 20 2c 68 74 74 70 63 6f 6e 76 20 74 6f 29 29 29 29 29 29 0a 0a nd-redirect.,httpconv.to))))))..
30400 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 74 65 73 74 2d 6c 6f 67 69 6e 20 28 61 75 74 68 20 74 (defun.elnode-test-login.(auth.t
30420 61 72 67 65 74 20 75 73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 29 0a 20 20 22 53 65 6e 64 arget.username.password)..."Send
30440 20 61 20 74 65 73 74 20 6c 6f 67 69 6e 20 74 6f 20 45 6c 6e 6f 64 65 2e 22 0a 20 20 3b 3b 20 46 .a.test.login.to.Elnode."...;;.F
30460 49 58 4d 45 20 2d 20 75 73 65 20 41 55 54 48 20 61 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 IXME.-.use.AUTH.as.a.reference.t
30480 6f 20 61 6e 20 65 6c 6e 6f 64 65 2d 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 0a 20 20 3b 3b 20 o.an.elnode-authentication...;;.
304a0 64 65 63 6c 61 72 61 74 69 6f 6e 20 61 6e 64 20 70 75 6c 6c 20 74 68 69 6e 67 73 20 6c 69 6b 65 declaration.and.pull.things.like
304c0 20 2f 6c 6f 67 69 6e 2f 20 66 72 6f 6d 20 69 74 0a 20 20 28 65 6c 6e 6f 64 65 2d 74 65 73 74 2d ./login/.from.it...(elnode-test-
304e0 63 61 6c 6c 0a 20 20 20 28 66 6f 72 6d 61 74 20 22 2f 6c 6f 67 69 6e 2f 3f 72 65 64 69 72 65 63 call....(format."/login/?redirec
30500 74 3d 25 73 22 20 74 61 72 67 65 74 29 0a 20 20 20 3a 6d 65 74 68 6f 64 20 22 50 4f 53 54 22 0a t=%s".target)....:method."POST".
30520 20 20 20 3a 70 61 72 61 6d 65 74 65 72 73 20 28 6c 69 73 74 20 28 63 6f 6e 73 20 22 75 73 65 72 ...:parameters.(list.(cons."user
30540 6e 61 6d 65 22 20 75 73 65 72 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 name".username).................
30560 20 20 20 20 20 28 63 6f 6e 73 20 22 70 61 73 73 77 6f 72 64 22 20 70 61 73 73 77 6f 72 64 29 29 .....(cons."password".password))
30580 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 ))..;;;###autoload.(defun.elnode
305a0 2d 69 6e 69 74 20 28 29 0a 20 20 22 42 6f 6f 74 73 74 72 61 70 73 20 74 68 65 20 65 6c 6e 6f 64 -init.()..."Bootstraps.the.elnod
305c0 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 77 68 65 6e 20 74 68 65 20 4c 69 73 70 20 69 73 20 6c e.environment.when.the.Lisp.is.l
305e0 6f 61 64 65 64 2e 0a 0a 49 74 27 73 20 75 73 65 66 75 6c 20 74 6f 20 68 61 76 65 20 65 6c 6e 6f oaded...It's.useful.to.have.elno
30600 64 65 20 73 74 61 72 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 2e 2e 20 6f 6e 20 4c 69 73 de.start.automatically....on.Lis
30620 70 0a 6c 6f 61 64 2e 20 20 49 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 60 65 6c 6e 6f 64 65 p.load...If.the.variable.`elnode
30640 2d 69 6e 69 74 2d 70 6f 72 74 27 20 69 73 20 73 65 74 20 74 68 65 6e 20 74 68 69 73 0a 66 75 6e -init-port'.is.set.then.this.fun
30660 63 74 69 6f 6e 20 77 69 6c 6c 20 6c 61 75 6e 63 68 20 61 20 73 65 72 76 65 72 20 6f 6e 20 69 74 ction.will.launch.a.server.on.it
30680 2e 0a 0a 54 68 65 20 73 65 72 76 65 72 20 69 73 20 73 74 61 72 74 65 64 20 77 69 74 68 20 60 65 ...The.server.is.started.with.`e
306a0 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 68 61 6e 64 6c 65 72 27 20 lnode-hostpath-default-handler'.
306c0 61 73 0a 74 68 65 20 68 61 6e 64 6c 65 72 20 61 6e 64 20 6c 69 73 74 65 6e 69 6e 67 20 6f 6e 20 as.the.handler.and.listening.on.
306e0 60 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73 74 27 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 `elnode-init-host'"...(interacti
30700 76 65 29 0a 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 70 6f 72 74 0a 20 20 20 20 20 ve)...(if.elnode-init-port......
30720 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 28 .(condition-case.nil...........(
30740 65 6c 6e 6f 64 65 2d 73 74 61 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d elnode-start............'elnode-
30760 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 hostpath-default-handler........
30780 20 20 20 20 3a 70 6f 72 74 20 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 70 6f 72 74 0a 20 20 20 20 20 ....:port.elnode-init-port......
307a0 20 20 20 20 20 20 3a 68 6f 73 74 20 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73 74 29 0a 20 20 ......:host.elnode-init-host)...
307c0 20 20 20 20 20 20 28 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 ......(error..........(elnode-er
307e0 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 69 6e 69 74 3a 20 63 61 6e 27 ror..........."elnode-init:.can'
30800 74 20 73 74 61 72 74 20 2d 20 70 6f 72 74 20 25 64 20 68 61 73 20 73 6f 6d 65 74 68 69 6e 67 20 t.start.-.port.%d.has.something.
30820 61 74 74 61 63 68 65 64 20 61 6c 72 65 61 64 79 22 0a 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f attached.already"...........elno
30840 64 65 2d 69 6e 69 74 2d 70 6f 72 74 29 29 29 29 0a 20 20 3b 3b 20 54 75 72 6e 20 6f 6e 20 74 68 de-init-port))))...;;.Turn.on.th
30860 65 20 64 65 66 65 72 20 71 75 65 75 65 20 70 72 6f 63 65 73 73 6f 72 20 69 66 20 77 65 20 6e 65 e.defer.queue.processor.if.we.ne
30880 65 64 20 74 6f 0a 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 6f 6e 0a 20 20 20 20 ed.to...(if.elnode-defer-on.....
308a0 20 20 28 69 66 20 28 6e 6f 74 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 29 0a ..(if.(not.elnode--defer-timer).
308c0 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 69 6e 69 74 2d 64 65 66 65 72 72 69 6e ..........(elnode--init-deferrin
308e0 67 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 63 75 73 74 6f 6d g))))..;;;###autoload.(defcustom
30900 20 65 6c 6e 6f 64 65 2d 64 6f 2d 69 6e 69 74 20 6e 69 6c 0a 20 20 22 53 68 6f 75 6c 64 20 65 6c .elnode-do-init.nil..."Should.el
30920 6e 6f 64 65 20 73 74 61 72 74 20 61 20 73 65 72 76 65 72 20 6f 6e 20 6c 6f 61 64 3f 0a 0a 54 68 node.start.a.server.on.load?..Th
30940 65 20 73 65 72 76 65 72 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20 69 73 20 63 6f 6e 74 e.server.that.is.started.is.cont
30960 72 6f 6c 6c 65 64 20 62 79 20 6d 6f 72 65 20 65 6c 6e 6f 64 65 0a 63 75 73 74 6f 6d 69 7a 61 74 rolled.by.more.elnode.customizat
30980 69 6f 6e 73 2e 0a 0a 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d ions...`elnode-hostpath-default-
309a0 74 61 62 6c 65 27 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d 61 70 70 69 6e 67 73 20 66 72 6f 6d table'.defines.the.mappings.from
309c0 0a 68 6f 73 74 70 61 74 68 20 72 65 67 65 78 73 20 74 6f 20 68 61 6e 64 6c 65 72 20 66 75 6e 63 .hostpath.regexs.to.handler.func
309e0 74 69 6f 6e 73 2e 20 42 79 20 64 65 66 61 75 6c 74 20 65 6c 6e 6f 64 65 20 73 68 69 70 73 0a 77 tions..By.default.elnode.ships.w
30a00 69 74 68 20 74 68 69 73 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f 6e 20 73 65 74 75 70 20 74 6f 20 ith.this.customization.setup.to.
30a20 73 65 72 76 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 20 72 6f 6f 74 20 64 65 66 69 6e 65 64 0a serve.the.document.root.defined.
30a40 69 6e 20 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 27 2c 20 77 in.`elnode-webserver-docroot',.w
30a60 68 69 63 68 20 62 79 20 64 65 66 61 75 6c 74 20 69 73 20 7e 2f 70 75 62 6c 69 63 5f 68 74 6d 6c hich.by.default.is.~/public_html
30a80 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 62 6f ."...:group.'elnode...:type.'(bo
30aa0 6f 6c 65 61 6e 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 2d 69 6e 69 74 65 64 20 olean))..(defvar.elnode--inited.
30ac0 6e 69 6c 0a 20 20 22 52 65 63 6f 72 64 73 20 77 68 65 6e 20 65 6c 6e 6f 64 65 20 69 73 20 69 6e nil..."Records.when.elnode.is.in
30ae0 69 74 69 61 6c 69 7a 65 64 2e 0a 0a 54 68 69 73 20 69 73 20 61 75 74 6f 6c 6f 61 64 69 6e 67 20 itialized...This.is.autoloading.
30b00 6d 65 63 68 61 6e 69 63 73 2c 20 73 65 65 20 74 68 65 20 65 76 61 6c 2d 61 66 74 65 72 2d 6c 6f mechanics,.see.the.eval-after-lo
30b20 61 64 20 66 6f 72 20 64 6f 69 6e 67 0a 69 6e 69 74 2e 22 29 0a 0a 3b 3b 20 41 75 74 6f 20 73 74 ad.for.doing.init.")..;;.Auto.st
30b40 61 72 74 20 65 6c 6e 6f 64 65 20 69 66 20 77 65 27 72 65 20 65 76 65 72 20 6c 6f 61 64 65 64 0a art.elnode.if.we're.ever.loaded.
30b60 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 65 76 61 6c 2d 61 66 74 65 72 2d 6c 6f 61 64 20 ;;;###autoload.(eval-after-load.
30b80 27 65 6c 6e 6f 64 65 0a 20 20 27 28 69 66 20 28 61 6e 64 20 28 62 6f 75 6e 64 70 20 27 65 6c 6e 'elnode...'(if.(and.(boundp.'eln
30ba0 6f 64 65 2d 64 6f 2d 69 6e 69 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 64 ode-do-init)............elnode-d
30bc0 6f 2d 69 6e 69 74 0a 09 20 20 20 28 6f 72 20 28 6e 6f 74 20 28 62 6f 75 6e 64 70 20 27 65 6c 6e o-init.....(or.(not.(boundp.'eln
30be0 6f 64 65 2d 2d 69 6e 69 74 65 64 29 29 0a 09 20 20 20 20 20 20 20 28 6e 6f 74 20 65 6c 6e 6f 64 ode--inited)).........(not.elnod
30c00 65 2d 2d 69 6e 69 74 65 64 29 29 29 0a 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 e--inited))).......(progn.......
30c20 20 20 28 65 6c 6e 6f 64 65 2d 69 6e 69 74 29 0a 20 20 20 20 20 20 20 20 28 73 65 74 71 20 65 6c ..(elnode-init).........(setq.el
30c40 6e 6f 64 65 2d 2d 69 6e 69 74 65 64 20 6e 69 6c 29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 node--inited.nil))))..(provide.'
30c60 65 6c 6e 6f 64 65 29 0a 0a 3b 3b 3b 20 65 6c 6e 6f 64 65 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 elnode)..;;;.elnode.el.ends.here
30c80 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
310a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
310c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
310e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
311a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
311c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
311e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
312a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
312c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
312e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
313a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
313c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
313e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
314a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
314c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
314e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
315a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
315c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
315e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
316a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
316c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
316e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
317a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
317c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
317e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
318a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
318c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
318e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
319a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
319c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
319e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................