    001package org.apache.commons.ssl;
    002
    003import javax.net.SocketFactory;
    004import java.io.IOException;
    005import java.io.InputStream;
    006import java.io.OutputStream;
    007import java.net.Socket;
    008import java.security.GeneralSecurityException;
    009
    010public class CRLSocket extends SSLClient {
    011    private final static CRLSocket secureInstance;
    012    private final static CRLSocket plainInstance;
    013
    014    static {
    015        CRLSocket sf1 = null, sf2 = null;
    016        try {
    017            sf1 = new CRLSocket();
    018            sf2 = new CRLSocket();
    019            sf2.setIsSecure(false);
    020        }
    021        catch (Exception e) {
    022            System.out.println("could not create CRLSocket: " + e);
    023            e.printStackTrace();
    024        }
    025        finally {
    026            secureInstance = sf1;
    027            plainInstance = sf2;
    028        }
    029    }
    030
    031    private CRLSocket() throws GeneralSecurityException, IOException {
    032        super();
    033
    034        // For now we setup the usual trust infrastructure, but consumers
    035        // are encouraged to call getInstance().addTrustMaterial() or
    036        // getInstance().setTrustMaterial() to customize the trust.
    037        if (TrustMaterial.JSSE_CACERTS != null) {
    038            setTrustMaterial(TrustMaterial.JSSE_CACERTS);
    039        } else {
    040            setTrustMaterial(TrustMaterial.CACERTS);
    041        }
    042        setConnectTimeout(5000);
    043        setSoTimeout(5000);
    044        setCheckCRL(false);
    045    }
    046
    047    public static SocketFactory getDefault() {
    048        return getSecureInstance();
    049    }
    050
    051    public static CRLSocket getSecureInstance() {
    052        return secureInstance;
    053    }
    054
    055    public static CRLSocket getPlainInstance() {
    056        return plainInstance;
    057    }
    058
    059    public static void main(String[] args) throws Exception {
    060        String host = args[0];
    061        String port = args[1];
    062        String hello
    063                = "HEAD / HTTP/1.1\r\n"
    064                + "Host:" + host + ":" + port + "\r\n\r\n";
    065        byte[] helloBytes = hello.getBytes("UTF-8");
    066
    067        System.out.println("About to getInstance() ");
    068        CRLSocket sf = getPlainInstance();
    069        long now = System.currentTimeMillis();
    070        System.out.println("About to create socket: [" + host + ":" + port + "]");
    071        Socket s = sf.createSocket(host, Integer.parseInt(port));
    072        long delay = System.currentTimeMillis() - now;
    073        System.out.println("Created socket! took " + delay + "ms ");
    074        OutputStream out = s.getOutputStream();
    075        out.write(helloBytes);
    076        out.flush();
    077
    078        System.out.println("\n" + new String(helloBytes, "UTF-8"));
    079
    080        InputStream in = s.getInputStream();
    081        int c = in.read();
    082        StringBuffer buf = new StringBuffer();
    083        System.out.println("Reading: ");
    084        System.out.println("================================================================================");
    085        while (c >= 0) {
    086            byte b = (byte) c;
    087            buf.append((char) b);
    088            System.out.print((char) b);
    089            if (-1 == buf.toString().indexOf("\r\n\r\n")) {
    090                c = in.read();
    091            } else {
    092                break;
    093            }
    094        }
    095        in.close();
    096        out.close();
    097        s.close();
    098    }
    099
    100}