?? msslinitializer.java
字號:
package net.jumperz.app.MDoorman;
import java.io.*;
import java.net.*;
import net.jumperz.util.*;
import net.jumperz.security.*;
import net.jumperz.net.*;
public class MSslInitializer
implements MCommand, MSubject1
{
public static final int SUCCESS = 1;
public static final int ERROR = 2;
private MSubject1 subject = new MSubject1Impl();
private MHttpRequest request;
private BufferedInputStream cIn;
private OutputStream cOut, out2;
private String host;
private int port;
private int state;
private Socket cSocket, socket2, socket3;
private InputStream in2;
// --------------------------------------------------------------------------------
public MSslInitializer( MHttpRequest request, BufferedInputStream cIn, Socket cSocket )
{
this.request = request;
this.cIn = cIn;
this.cSocket = cSocket;
}
// --------------------------------------------------------------------------------
public int getState()
{
return state;
}
// --------------------------------------------------------------------------------
public void execute()
{
try
{
execute2();
state = SUCCESS;
}
catch( Exception e )
{
state = ERROR;
}
notify1();
}
// --------------------------------------------------------------------------------
private void execute2()
throws Exception
{
cOut = cSocket.getOutputStream();
// host and port
String uri = request.getUri();
String[] array = uri.split( ":" );
if( array.length == 2 )
{
host = array[ 0 ];
port = MStringUtil.parseInt( array[ 1 ], 443 );
}
else
{
host = array[ 0 ];
port = 443;
}
// reply to connect request
cOut.write( "HTTP/1.1 200 OK\r\n\r\n".getBytes( MCharset.CS_ISO_8859_1 ) );
MSslManager sslManager = MSslManager.getInstance();
synchronized( sslManager )
{
// intermediate socket
socket2 = new Socket( "127.0.0.1", sslManager.getPort() );
in2 = socket2.getInputStream();
out2 = socket2.getOutputStream();
socket3 = sslManager.accept();
}
MStreamConnector streamConnector1 = new MStreamConnector( cIn, out2 );
MStreamConnector streamConnector2 = new MStreamConnector( in2, cOut );
/*
MStreamConnectorObserver streamConnectorObserver = new MStreamConnectorObserver( streamConnector1 );
streamConnectorObserver.addSocket( cSocket );
streamConnectorObserver.addSocket( socket2 );
streamConnector1.register1( streamConnectorObserver );
*/
MThreadPool threadPool = MDoorman.getInstance().threadPool;
threadPool.addCommand( streamConnector1 );
threadPool.addCommand( streamConnector2 );
BufferedInputStream in3 = new BufferedInputStream( socket3.getInputStream() );
OutputStream out3 = socket3.getOutputStream();
MSession session = new MSession( in3, out3, cSocket );
session.setHttps();
session.setPeer( new MPeer( host, port ) );
if( MDoorman.getInstance().useProxy )
{
session.setConnectRequest( request );
}
session.onRequestReceived( new MHttpRequest( in3 ) );
}
// --------------------------------------------------------------------------------
public void breakCommand()
{
}
// --------------------------------------------------------------------------------
public void notify1()
{
subject.notify1();
}
// --------------------------------------------------------------------------------
public void register1( MObserver1 observer )
{
subject.register1( observer );
}
// --------------------------------------------------------------------------------
public void removeObservers1()
{
subject.removeObservers1();
}
// --------------------------------------------------------------------------------
public void removeObserver1( MObserver1 observer )
{
subject.removeObserver1( observer );
}
// --------------------------------------------------------------------------------
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -