import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Scanner;
class httpserver{
    public static void main(String[] args)throws Exception{
        try(ServerSocket sS=new ServerSocket()){
            HashMap<String,String> hM=new HashMap<>();
            if(1<args.length)try(Scanner sr=new Scanner(args[1])){
                while(null!=sr.findInLine("([^\\[\\]]+)\\[([^\\[\\]]*)"))hM.put(sr.match().group(1),sr.match().group(2));
            }
            sS.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(),8080));
            for(;;)try(Socket s=sS.accept();Scanner sr=new Scanner(s.getInputStream());OutputStream oS=s.getOutputStream()){
                if(null==sr.findInLine("^.+ (.+\\.(.*)) (.+)"))continue;
                File f=new File(args[0],sr.match().group(1));
                if(f.exists())try(FileInputStream fIS=new FileInputStream(f)){
                    oS.write((sr.match().group(3)+" 200 OK\nContent-Type:"+hM.get(sr.match().group(2))+"\n\n").getBytes());
                    oS.write(fIS.readAllBytes());
                }
            }
        }
    }
}