⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmultihost.java

📁 httptunnel.jar httptunnel java 源码
💻 JAVA
字号:
package net.jumperz.app.MGuardian.plugin;

import java.io.*;
import java.util.*;
import java.net.*;
import net.jumperz.net.*;
import net.jumperz.util.*;
import java.util.regex.*;

public class MMultiHost
extends MGuardianPlugin
{
/*
www1.example.com=192.168.1.2
www2.example.com=192.168.1.3:80
www3.example.com=192.168.1.3:82
 */
private Map hostPeerMap = new HashMap();
private String configFileName;
private MPeer defaultPeer;
private Pattern pattern = Pattern.compile( "([0-9]{1,3}\\.){3}[0-9]{1,3}" );
//--------------------------------------------------------------------------------
public void startup()
throws IOException
{
configFileName = control.getProperty( "multiHost.configFileName" );
if( configFileName == null )
	{
	throw new IOException( "'multiHost.configFileName' must be set in 'control' file." );
	}
MProperties prop = new MProperties();
prop.load( new FileInputStream( configFileName ) );
Set keySet = prop.getKeySet();
Iterator p = keySet.iterator();
while( p.hasNext() )
	{
	String key = ( String )p.next();
	String value = ( String )prop.getProperty( key );
	int port = 80;
	String[] array = value.split( ":" );
	if( array.length == 2 )
		{
		port = Integer.parseInt( array[ 1 ] );
		}
	String host = array[ 0 ];
	/*
	Matcher matcher = pattern.matcher( host );
	if( !matcher.matches() )
		{
		throw new IOException( host + " must be an IP address." );
		}
	*/
	
	MPeer peer = new MPeer( host, port );
	hostPeerMap.put( key, peer );
	}
defaultPeer = new MPeer( control.getProperty( "targetHost" ), Integer.parseInt( control.getProperty( "targetPort" ) ) );
}
//--------------------------------------------------------------------------------
public Map execute( Map sessionInfo )
throws IOException
{
MHttpRequest request = ( MHttpRequest )sessionInfo.get( "request" );
String host = request.getHeaderValue( "Host" );
Map pluginResult = new HashMap();

Socket oldSocket = ( Socket )sessionInfo.get( "serverSideSocket" );
MPeer oldPeer = null;
if( oldSocket != null )
	{
	oldPeer = new MPeer( oldSocket );
	}

MPeer targetPeer = ( MPeer )hostPeerMap.get( host );

if( targetPeer == null )
	{
	if( oldSocket == null )
		{	
		return null;
		}
	else
		{
		if( oldPeer.equals( defaultPeer ) )
			{
				//reuse socket
			return null;
			}
		else
			{
			Socket newSocket = defaultPeer.getSocket();
			pluginResult.put( "serverSideSocket", newSocket );
			return pluginResult;
			}
		}
	}
else
	{
	if( oldSocket == null )
		{
		Socket newSocket = targetPeer.getSocket();
		pluginResult.put( "serverSideSocket", newSocket );
		return pluginResult;
		}
	else
		{
		if( oldPeer.equals( targetPeer ) )
			{
				//reuse socket
			return null;
			}
		else
			{
			System.err.println( "hoge" );//TODO
			Socket newSocket = targetPeer.getSocket();
			pluginResult.put( "serverSideSocket", newSocket );
			return pluginResult;
			}
		}
	}
}
//--------------------------------------------------------------------------------
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -