Initial commit.
[jagi.git] / src / jagi / scgi / Jagi.java
1 package jagi.scgi;
2
3 import jagi.*;
4 import java.util.*;
5 import java.io.*;
6 import java.nio.*;
7 import java.nio.channels.*;
8 import java.nio.charset.*;
9
10 public class Jagi {
11     public static void decodehead(Map<? super String, ? super String> into, Map<ByteBuffer, ByteBuffer> head, Charset coding) throws CharacterCodingException {
12         for(Map.Entry<ByteBuffer, ByteBuffer> h : head.entrySet())
13             into.put(coding.newDecoder().decode(h.getKey()).toString(), coding.decode(h.getValue()).toString());
14     }
15
16     public static Map<Object, Object> mkenv(ReadableByteChannel sk) throws IOException {
17         Map<ByteBuffer, ByteBuffer> rawhead = Scgi.readhead(sk);
18         Map<Object, Object> env;
19         try {
20             env = new HashMap<>();
21             decodehead(env, rawhead, Utils.UTF8);
22             env.put("jagi.uri_encoding", "utf-8");
23         } catch(CharacterCodingException e) {
24             env = new HashMap<>();
25             decodehead(env, rawhead, Utils.LATIN1);
26             env.put("jagi.uri_encoding", "latin-1");
27         }
28         env.put("jagi.version.major", 1);
29         env.put("jagi.version.minor", 0);
30         if(env.containsKey("HTTP_X_ASH_PROTOCOL"))
31             env.put("jagi.url_scheme", env.get("HTTP_X_ASH_PROTOCOL"));
32         else if(env.containsKey("HTTPS"))
33             env.put("jagi.url_scheme", "https");
34         else
35             env.put("jagi.url_scheme", "http");
36         env.put("jagi.input", sk);
37         env.put("jagi.errors", System.err);
38         env.put("jagi.multithread", true);
39         env.put("jagi.multiprocess", false);
40         env.put("jagi.run_once", false);
41         env.put("jagi.cleanup", new HashSet<>());
42         return(env);
43     }
44 }