iCGI.md - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 iCGI.md (4280B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 # Introduction to CGI Err bitreich.org 70 i 2 Err bitreich.org 70 i 3 Geomyidae has support for running scripts on each request, which will Err bitreich.org 70 i 4 generate dynamic content. Err bitreich.org 70 i 5 Err bitreich.org 70 i 6 There are three modes: standard cgi, dynamic cgi and http compatibility Err bitreich.org 70 i 7 mode. (»CGI« as name was just taken, because that's easier to compare Err bitreich.org 70 i 8 to the web.) Err bitreich.org 70 i 9 Err bitreich.org 70 i 10 Err bitreich.org 70 i 11 ## Permissions Err bitreich.org 70 i 12 Err bitreich.org 70 i 13 The scripts are run using the permissions of geomyidae. It is advised to Err bitreich.org 70 i 14 use the -g and -u options of geomyidae. Err bitreich.org 70 i 15 Err bitreich.org 70 i 16 Err bitreich.org 70 i 17 ## Beforehand Err bitreich.org 70 i 18 Err bitreich.org 70 i 19 In these examples C: is what the client sends and S: what the server is Err bitreich.org 70 i 20 sending. Err bitreich.org 70 i 21 Err bitreich.org 70 i 22 ## Stdout/Stdin I/O of the Scripts Err bitreich.org 70 i 23 Err bitreich.org 70 i 24 All scripts called below, in TLS or Non-TLS mode, will get full access of Err bitreich.org 70 i 25 the socket of the connection, with the socket bound to stdin and stdout. Err bitreich.org 70 i 26 Geomyidae does not check for any connection duration. This allows to Err bitreich.org 70 i 27 create long-lasting streaming services, like radio or TV stations. Err bitreich.org 70 i 28 Err bitreich.org 70 i 29 ## Calling Convention Err bitreich.org 70 i 30 Err bitreich.org 70 i 31 Geomyidae will call the script like this: Err bitreich.org 70 i 32 Err bitreich.org 70 i 33 % $gopherroot/test.cgi $search $arguments $host $port $traversal Err bitreich.org 70 i 34 $selector Err bitreich.org 70 i 35 Err bitreich.org 70 i 36 When it is a plain request, the arguments will have these values: Err bitreich.org 70 i 37 Err bitreich.org 70 i 38 C: /test.cgi Err bitreich.org 70 i 39 -> $search = "" Err bitreich.org 70 i 40 -> $arguments = "" Err bitreich.org 70 i 41 -> $host = server host Err bitreich.org 70 i 42 -> $port = server port Err bitreich.org 70 i 43 -> $traversal = "" Err bitreich.org 70 i 44 -> $selector = "/test.cgi" Err bitreich.org 70 i 45 Err bitreich.org 70 i 46 If the request is for a type 7 search element, then the entered string by Err bitreich.org 70 i 47 the user will be seen as following: Err bitreich.org 70 i 48 Err bitreich.org 70 i 49 C: /test.cgi searchterm (There is a TAB in-between) Err bitreich.org 70 i 50 -> $search = »searchterm« Err bitreich.org 70 i 51 -> $arguments = "" Err bitreich.org 70 i 52 -> $host = server host Err bitreich.org 70 i 53 -> $port = server port Err bitreich.org 70 i 54 -> $traversal = "" Err bitreich.org 70 i 55 -> $selector = "/test.cgi\tsearchterm" Err bitreich.org 70 i 56 Err bitreich.org 70 i 57 When you are trying to give your script some calling arguments, the syntax Err bitreich.org 70 i 58 is: Err bitreich.org 70 i 59 Err bitreich.org 70 i 60 C: /test.cgi?hello Err bitreich.org 70 i 61 -> $search = "" Err bitreich.org 70 i 62 -> $arguments = "hello" Err bitreich.org 70 i 63 -> $host = server host Err bitreich.org 70 i 64 -> $port = server port Err bitreich.org 70 i 65 -> $traversal = "" Err bitreich.org 70 i 66 -> $selector = "/test.cgi?hello" Err bitreich.org 70 i 67 Err bitreich.org 70 i 68 If both ways of input are combined, the variables are set as following: Err bitreich.org 70 i 69 Err bitreich.org 70 i 70 C: /test.cgi?hello=world searchterm (Beware! A Tab!) Err bitreich.org 70 i 71 -> $search = "searchterm" Err bitreich.org 70 i 72 -> $arguments = "hello=world" Err bitreich.org 70 i 73 -> $host = server host Err bitreich.org 70 i 74 -> $port = server port Err bitreich.org 70 i 75 -> $traversal = "" Err bitreich.org 70 i 76 -> $selector = "/test.cgi?hello=world\tsearchterm" Err bitreich.org 70 i 77 Err bitreich.org 70 i 78 ## REST Calling Convention Err bitreich.org 70 i 79 Err bitreich.org 70 i 80 There is a special mode in geomyidae to imitate REST calling abilities. Err bitreich.org 70 i 81 Err bitreich.org 70 i 82 When a user requests some non-existing path, geomyidae will start from Err bitreich.org 70 i 83 the base and go up the path directories, until it reaches the first not Err bitreich.org 70 i 84 existing directory. Err bitreich.org 70 i 85 Err bitreich.org 70 i 86 C: /base/some/dir/that/does/not/exist?some-arguments searchterm Err bitreich.org 70 i 87 -> base exists Err bitreich.org 70 i 88 -> some exists Err bitreich.org 70 i 89 -> dir does not exist Err bitreich.org 70 i 90 -> search for index.cgi or index.dcgi in /base/some Err bitreich.org 70 i 91 -> if found, call index.cgi or index.dcgi as follows: Err bitreich.org 70 i 92 -> $search = "searchterm" Err bitreich.org 70 i 93 -> $arguments = "some-arguments" Err bitreich.org 70 i 94 -> $host = server host Err bitreich.org 70 i 95 -> $port = server port Err bitreich.org 70 i 96 -> $traversal = "/dir/that/does/not/exist" Err bitreich.org 70 i 97 -> $selector = "/base/some/dir/that/does/not/exist?some-arguments\tsearchterm" Err bitreich.org 70 i 98 Err bitreich.org 70 i 99 ## Standard CGI Err bitreich.org 70 i 100 Err bitreich.org 70 i 101 The file extension "cgi" switches to this mode, where the output of Err bitreich.org 70 i 102 the script is not interpreted at all by the server and the script needs Err bitreich.org 70 i 103 to send raw content. Err bitreich.org 70 i 104 Err bitreich.org 70 i 105 % cat test.cgi Err bitreich.org 70 i 106 #!/bin/sh Err bitreich.org 70 i 107 echo "Hello my friend." Err bitreich.org 70 i 108 % Err bitreich.org 70 i 109 Err bitreich.org 70 i 110 The client will receive: Err bitreich.org 70 i 111 Err bitreich.org 70 i 112 S: Hello my friend. Err bitreich.org 70 i 113 Err bitreich.org 70 i 114 Err bitreich.org 70 i 115 ## Dynamic CGI Err bitreich.org 70 i 116 Err bitreich.org 70 i 117 For using dynamic CGI, the file needs to end in "dcgi", which will Err bitreich.org 70 i 118 switch on the interpretation of the returned lines by the server. The Err bitreich.org 70 i 119 interpreted for- mat is the same as in the .gph files. Err bitreich.org 70 i 120 Err bitreich.org 70 i 121 % cat test.dcgi Err bitreich.org 70 i 122 #!/bin/sh Err bitreich.org 70 i 123 echo "[1|Some link|/somewhere|server|port]" Err bitreich.org 70 i 124 % Err bitreich.org 70 i 125 Err bitreich.org 70 i 126 Here geomyidae will interpret the .gph format and return the valid Err bitreich.org 70 i 127 gopher menu item. Err bitreich.org 70 i 128 Err bitreich.org 70 i 129 S: 1Some link /somewhere gopher.r-36.net 70 Err bitreich.org 70 i 130 Err bitreich.org 70 i 131 ## HTTP Compatibility Err bitreich.org 70 i 132 Err bitreich.org 70 i 133 In case someone sends some HTTP request to geomyidae and other cases, Err bitreich.org 70 i 134 geomyidae will do this: Err bitreich.org 70 i 135 Err bitreich.org 70 i 136 C: GET /some/dir HTTP/1.1 Err bitreich.org 70 i 137 -> /GET does exist and is executable Err bitreich.org 70 i 138 -> call GET as follows: Err bitreich.org 70 i 139 -> $search = "" Err bitreich.org 70 i 140 -> $arguments = "" Err bitreich.org 70 i 141 -> $host = server host Err bitreich.org 70 i 142 -> $port = server port Err bitreich.org 70 i 143 -> $traversal = "" Err bitreich.org 70 i 144 -> $selector = "GET /some/dir HTTP/1.1\r\n" Err bitreich.org 70 i 145 (full raw request by the client.) Err bitreich.org 70 i 146 Err bitreich.org 70 i 147 This allows to serve HTTP next go gopher and get TLS for free. Other Err bitreich.org 70 i 148 HTTP-like protocols can be used over gopher in simple scripts, like the Err bitreich.org 70 i 149 icecast upload protocol. Err bitreich.org 70 i 150 Err bitreich.org 70 i 151 ## Environment Variables Err bitreich.org 70 i 152 Err bitreich.org 70 i 153 Please see the manpage geomyidae(8) for all variables and their content. Err bitreich.org 70 i 154 All states of the script execution environment and client request are Err bitreich.org 70 i 155 available. Err bitreich.org 70 i 156 Err bitreich.org 70 i 157 Err bitreich.org 70 i 158 Have fun! Err bitreich.org 70 i 159 Err bitreich.org 70 .