📄 networkmanagersecurity.java
字号:
//package SOMA.security.net;
package SOMA.network;
import java.io.*;
import java.net.*;
import java.util.*;
import SOMA.network.connection.*;
import SOMA.Environment;
import SOMA.explorer.*;
import SOMA.naming.*;
import SOMA.naming.place.*;
import SOMA.naming.domain.*;
import SOMA.security.net.ssl.*;
/** Gestore delle comunicazioni di rete di un {@link SOMA.Environment place}.
*
* @author Livio Profiri
*/
public class NetworkManagerSecurity extends NetworkManager
{ /*
Environment env;
ConnectionServer connectionServer = null;
private Hashtable permanentConnections = new Hashtable(); */
/** Informazioni sul place. */
/* public PlaceInfo placeInfo;
DirExplorerItem networkManagerDir;
DirExplorerItem connectionsDir;
int connectionCount = 1; */
/** Memorizza le {@link SOMA.network.connection.Connection connessioni}
* con gli altri place dello stesso dominio. */
public ConnectionStore connectionStore = new ConnectionStore();
/** Costruttore.
* @param env L'environment del place.
* @param port La porta su cui avviare il
* {@link SOMA.network.connection.ConnectionServer server} per le connessioni.
*/
public NetworkManagerSecurity( Environment env, int port ) throws IOException, ConnectionServer.ConnectionServerException, NameException
{
super ( env ,port );
NetworkManagerInit ( port );
}
public void NetworkManagerInit( int port ) throws IOException, ConnectionServer.ConnectionServerException, NameException
{
if( env.placeID.isDomain() )
placeInfo = new DomainInfo( env.placeID, InetAddress.getLocalHost(), port );
else
placeInfo = new PlaceInfo( env.placeID, InetAddress.getLocalHost(), port );
//Aggiungo 2 voci alla struttura delle directory.
networkManagerDir = new DirExplorerItem( "netManager" );
env.dir.addItem( networkManagerDir );
networkManagerDir.addItem( "placeInfo", new ObjectExplorerItem( placeInfo ) );
// Eliminare questa: la lista si allunga ad ogni connessione.
connectionsDir = new DirExplorerItem( "connections" );
networkManagerDir.addItem( connectionsDir );
// Aggiungo un'autoconnessione, in modo che i comandi spediti verso lo stesso place
// vengano eseguiti in loco
Connection selfConnection = new SelfConnection( env );
connectionStore.putConnection( env.placeID, selfConnection );
connectionsDir.addItem( "selfConnection", new ConnectionExplorerItem( selfConnection ) );
// Avvio il server per le connessioni
connectionServer = new SSLConnectionServer( port, 100,
new ExplorableConnectionFactory( env, connectionsDir, "servConn" ) );
networkManagerDir.addItem( "server" , new DaemonExplorerItem( connectionServer ) );
connectionServer.start();
if( env.placeID.isDomain() )
{
env.domainNameService = new DomainNameService( env );
env.dir.addItem( "dns", new DNSExplorerItem( env.domainNameService ) );
env.domainNameService.putDomain( (DomainInfo)placeInfo );
}
env.placeNameService = new PlaceNameService( env );
env.dir.addItem( "pns", new PNSExplorerItem( env.placeNameService ) );
env.placeNameService.putPlace( placeInfo );
networkManagerDir.addItem( "connList" , new ExplorerItem( "List of connections" )
{
public Object Execute( Collection Parameters, PrintStream out )
{
connectionStore.printConnections( out );
return null;
}
});
networkManagerDir.addItem( "send" , new ExplorerItem( "<PlaceID> <Message>" )
{
public Object Execute( Collection Parameters, PrintStream out )
{
if( Parameters.size() > 1 )
{
Iterator i = Parameters.iterator();
PlaceID dest = null;
try
{
dest = new PlaceID( (String)i.next() );
}
catch( NameException e )
{
out.println( e );
return e;
}
SendMessageCommand Message = new SendMessageCommand( (String)i.next() );
out.println( "Sending command " + Message + " to " + dest );
if( sendCommand( dest, Message ) )
{
out.println( "Message " + Message + " sent!" );
return new Boolean( true );
}
else
{
out.println( "ERROR: Message " + Message + " NOT SENT!" );
return new Boolean( true );
}
}
out.println( "incorrect number of parameters" );
return null;
}
});
networkManagerDir.addItem( "perm" , new PermanentConnectionsExplorerItem() );
}
/** Spedizione di un comando ad un place.
*
* @return <code>true</code> se la spedizione ha avuto successo.
*/
public boolean sendCommand( PlaceID destID, Command aCommand )
{
// Questa va rifatta per bene
//if( PlaceID.isDomain() ) Occhio al default palce
boolean answer = false;
// Stesso dominio
if( env.placeID.sameDomain( destID ) )
{
// Sono gi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -