1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.newsclub.net.unix.demo.nanohttpd;
19
20 import java.io.File;
21 import java.io.IOException;
22 import java.net.InetAddress;
23 import java.net.ServerSocket;
24 import java.net.SocketAddress;
25
26 import org.newsclub.net.unix.AFSocketAddress;
27 import org.newsclub.net.unix.AFUNIXSocketAddress;
28 import org.newsclub.net.unix.demo.DemoHelper;
29 import org.newsclub.net.unix.demo.okhttp.OkHttpClientDemo;
30
31 import com.kohlschutter.annotations.compiletime.SuppressFBWarnings;
32
33 import fi.iki.elonen.NanoHTTPD;
34
35
36
37
38
39
40
41
42
43 @SuppressFBWarnings("UNENCRYPTED_SERVER_SOCKET")
44 public final class NanoHttpdServerDemo extends NanoHTTPD {
45
46 public NanoHttpdServerDemo(SocketAddress socketAddress) throws IOException {
47 super(0);
48 setServerSocketFactory(new ServerSocketFactory() {
49
50 @Override
51 public ServerSocket create() throws IOException {
52 if (socketAddress instanceof AFSocketAddress) {
53 return ((AFSocketAddress) socketAddress).newForceBoundServerSocket();
54 } else {
55 ServerSocket serverSocket = new ServerSocket();
56 serverSocket.bind(socketAddress);
57 return serverSocket;
58 }
59 }
60 });
61 System.out.println("Address: " + socketAddress);
62 if (socketAddress instanceof AFUNIXSocketAddress) {
63 System.out.println("Try: curl --unix-socket " + ((AFUNIXSocketAddress) socketAddress)
64 .getPath() + " http://localhost/");
65 }
66 }
67
68 public static void main(String[] args) throws IOException {
69 SocketAddress addr = DemoHelper.parseAddress(args,
70 AFUNIXSocketAddress.of(new File("/tmp/junixsocket-http-server.sock")));
71
72 new NanoHttpdServerDemo(addr).start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
73 }
74
75 @Override
76 public Response serve(IHTTPSession session) {
77 return newFixedLengthResponse("Hello world from " + getSystemHostname() + "\n");
78 }
79
80 private static String getSystemHostname() {
81 try {
82 return InetAddress.getLocalHost().getHostName();
83 } catch (Exception e) {
84 e.printStackTrace();
85 return null;
86 }
87 }
88 }