2026-03-17 13:31:18 -07:00

736 lines
26 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.tridium.util.ArrayUtil
* com.tridium.util.BSessionInfo
* com.tridium.util.IFoxSession
* javax.baja.agent.AgentList
* javax.baja.data.BIDataValue
* javax.baja.file.BIFile
* javax.baja.naming.BHost
* javax.baja.naming.BOrd
* javax.baja.naming.BServiceScheme$ServiceSession
* javax.baja.naming.OrdQuery
* javax.baja.naming.SlotPath
* javax.baja.nav.BINavNode
* javax.baja.nav.BNavFileSpace
* javax.baja.nav.NavFileDecoder
* javax.baja.registry.TypeInfo
* javax.baja.security.AuthenticationException
* javax.baja.security.AuthenticationRealm
* javax.baja.security.BICredentials
* javax.baja.security.BIUserCredentials
* javax.baja.security.BPassword
* javax.baja.security.BUsernameAndPassword
* javax.baja.space.BSpace
* javax.baja.sys.BAbsTime
* javax.baja.sys.BComponent
* javax.baja.sys.BFacets
* javax.baja.sys.BIcon
* javax.baja.sys.BObject
* javax.baja.sys.BRelTime
* javax.baja.sys.BString
* javax.baja.sys.BajaRuntimeException
* javax.baja.sys.Context
* javax.baja.sys.ModuleNotFoundException
* javax.baja.sys.ServiceNotFoundException
* javax.baja.sys.Sys
* javax.baja.sys.Type
* javax.baja.timezone.BTimeZone
* javax.baja.util.LexiconText
* javax.baja.util.Version
*/
package com.tridium.fox.sys;
import com.tridium.fox.message.FoxMessage;
import com.tridium.fox.session.Fox;
import com.tridium.fox.session.FoxAuthenticationException;
import com.tridium.fox.session.FoxSession;
import com.tridium.fox.sys.BFoxClientConnection;
import com.tridium.fox.sys.BFoxScheme;
import com.tridium.fox.sys.BFoxsScheme;
import com.tridium.fox.sys.BIFoxProxySpace;
import com.tridium.fox.sys.BSysChannel;
import com.tridium.fox.sys.FatalAuthenticationException;
import com.tridium.fox.sys.LocalizableExceptionTranslator;
import com.tridium.fox.sys.LocalizableServerException;
import com.tridium.fox.sys.ModuleNotFoundLocalException;
import com.tridium.fox.sys.ModuleNotFoundRemoteException;
import com.tridium.fox.sys.broker.BBrokerChannel;
import com.tridium.util.ArrayUtil;
import com.tridium.util.BSessionInfo;
import com.tridium.util.IFoxSession;
import java.lang.reflect.Method;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import javax.baja.agent.AgentList;
import javax.baja.data.BIDataValue;
import javax.baja.file.BIFile;
import javax.baja.fox.BFoxProxySession;
import javax.baja.naming.BHost;
import javax.baja.naming.BOrd;
import javax.baja.naming.BServiceScheme;
import javax.baja.naming.OrdQuery;
import javax.baja.naming.SlotPath;
import javax.baja.nav.BINavNode;
import javax.baja.nav.BNavFileSpace;
import javax.baja.nav.NavFileDecoder;
import javax.baja.registry.TypeInfo;
import javax.baja.security.AuthenticationException;
import javax.baja.security.AuthenticationRealm;
import javax.baja.security.BICredentials;
import javax.baja.security.BIUserCredentials;
import javax.baja.security.BPassword;
import javax.baja.security.BUsernameAndPassword;
import javax.baja.space.BSpace;
import javax.baja.sys.BAbsTime;
import javax.baja.sys.BComponent;
import javax.baja.sys.BFacets;
import javax.baja.sys.BIcon;
import javax.baja.sys.BObject;
import javax.baja.sys.BRelTime;
import javax.baja.sys.BString;
import javax.baja.sys.BajaRuntimeException;
import javax.baja.sys.Context;
import javax.baja.sys.ModuleNotFoundException;
import javax.baja.sys.ServiceNotFoundException;
import javax.baja.sys.Sys;
import javax.baja.sys.Type;
import javax.baja.timezone.BTimeZone;
import javax.baja.util.LexiconText;
import javax.baja.util.Version;
/*
* Illegal identifiers - consider using --renameillegalidents true
*/
public class BFoxSession
extends BFoxProxySession
implements AuthenticationRealm,
BServiceScheme.ServiceSession,
IFoxSession,
BFoxClientConnection.Interest {
public static final Type TYPE;
private static final BIcon iconConnected;
private static final BIcon iconDisconnected;
private static final BIcon tunnelIconConnected;
private static final BIcon tunnelIconDisconnected;
private static final BIcon secureBadgeConnected;
private static final BIcon secureBadgeDisconnected;
String[] tunnelAuthorities;
private final BHost host;
private boolean useFoxs;
private int port;
private final BFoxClientConnection connection;
private boolean connected;
private BOrd absOrd;
private BOrd ordInHost;
private String stationName;
private BIUserCredentials credentials;
private String authenticationScheme;
private Context sessionContext;
String stationFault;
public Object uiCache;
static /* synthetic */ Class class$com$tridium$fox$sys$BFoxSession;
static /* synthetic */ Class class$java$lang$String;
static /* synthetic */ Class class$javax$baja$sys$BAbsTime;
static /* synthetic */ Class class$java$net$Socket;
public Type getType() {
return TYPE;
}
public static BFoxSession[] list() {
ArrayList<BINavNode> arrayList = new ArrayList<BINavNode>();
BHost[] bHostArray = BHost.getAllHosts();
int n = 0;
while (n < bHostArray.length) {
BHost bHost = bHostArray[n];
BINavNode[] bINavNodeArray = bHost.getNavChildren();
int n2 = 0;
while (n2 < bINavNodeArray.length) {
if (bINavNodeArray[n2] instanceof BFoxSession) {
arrayList.add(bINavNodeArray[n2]);
}
++n2;
}
++n;
}
return arrayList.toArray(new BFoxSession[arrayList.size()]);
}
public static BFoxSession make(BHost bHost, int n) {
return BFoxSession.make(null, bHost, n, false);
}
public static BFoxSession make(BHost bHost, int n, boolean bl) {
return BFoxSession.make(null, bHost, n, bl);
}
public static BFoxSession make(String string, BHost bHost, int n, boolean bl) {
return BFoxSession.make(string, bHost, n, bl, null);
}
public static BFoxSession make(String string, BHost bHost, int n, boolean bl, String string2) {
String[] stringArray = null;
if (string2 != null) {
stringArray = new String[]{string2};
}
return BFoxSession.make(string, bHost, n, bl, stringArray);
}
public static BFoxSession make(String string, BHost bHost, int n, boolean bl, String[] stringArray) {
String string2 = BFoxSession.buildNavName(n, bl, stringArray);
BFoxSession bFoxSession = (BFoxSession)bHost.getNavChild(string2);
if (bFoxSession == null) {
bFoxSession = new BFoxSession(string2, string, bHost, n, bl, stringArray);
bHost.addNavChild((BINavNode)bFoxSession);
}
return bFoxSession;
}
protected static String buildNavName(int n, boolean bl, String[] stringArray) {
int n2;
String string = bl ? "foxs" : "fox";
int n3 = n2 = bl ? 4911 : 1911;
if (n != n2) {
string = string + ':' + n;
}
if (stringArray != null) {
int n4 = 0;
while (n4 < stringArray.length) {
if (stringArray[n4] != null) {
string = string + '/' + stringArray[n4];
}
++n4;
}
}
return string;
}
public BHost getHost() {
return this.host;
}
public int getPort() {
return this.port;
}
public void setPort(int n) {
this.port = n;
}
public boolean getUseFoxs() {
return this.useFoxs;
}
public void setUseFoxs(boolean bl) {
this.useFoxs = bl;
}
public String[] getTunnelAuthorities() {
return this.tunnelAuthorities;
}
public BFoxClientConnection getConnection() {
return this.connection;
}
public String getStationName() {
return this.stationName;
}
public BSessionInfo getSessionInfo() {
BSessionInfo bSessionInfo;
FoxSession foxSession = this.connection.session();
BAbsTime bAbsTime = BAbsTime.make((long)foxSession.getConnectTime());
Type type = BSessionInfo.TYPE;
if (this.useFoxs) {
type = Sys.getType((String)"platCrypto:SslSessionInfo");
}
Class clazz = type.getTypeClass();
String string = null;
if (this.getCredentials() instanceof BIUserCredentials) {
string = ((BIUserCredentials)this.getCredentials()).getUsername();
}
try {
Class clazz2;
Class clazz3;
Class clazz4;
Class[] classArray = new Class[4];
Class clazz5 = class$java$lang$String;
if (clazz5 == null) {
clazz5 = classArray[0] = (class$java$lang$String = BFoxSession.class("[Ljava.lang.String;", false));
}
if ((clazz4 = class$javax$baja$sys$BAbsTime) == null) {
clazz4 = classArray[1] = (class$javax$baja$sys$BAbsTime = BFoxSession.class("[Ljavax.baja.sys.BAbsTime;", false));
}
if ((clazz3 = class$java$net$Socket) == null) {
clazz3 = classArray[2] = (class$java$net$Socket = BFoxSession.class("[Ljava.net.Socket;", false));
}
if ((clazz2 = class$java$lang$String) == null) {
clazz2 = class$java$lang$String = BFoxSession.class("[Ljava.lang.String;", false);
}
classArray[3] = clazz2;
Method method = clazz.getMethod("make", classArray);
Socket socket = foxSession.getSocket();
bSessionInfo = (BSessionInfo)method.invoke(null, this.stationName, bAbsTime, socket, string);
}
catch (Exception exception) {
exception.printStackTrace();
bSessionInfo = null;
}
return bSessionInfo;
}
public boolean isConnected() {
return this.connected;
}
public synchronized void connect() throws Exception {
if (this.connected) {
return;
}
if (this.credentials == null) {
this.credentials = new BUsernameAndPassword();
}
this.connection.setCredentials((BICredentials)this.credentials);
this.connection.setUsername(this.credentials.getUsername());
try {
this.connection.connect();
BOrd bOrd = null;
if (this.tunnelAuthorities != null) {
this.setLexiconText(LexiconText.make((String)"fox", (String)"nav.foxTunnelSession"));
bOrd = this.useFoxs ? BOrd.make((OrdQuery)new BFoxsScheme.FoxQuery(this.port, this.tunnelAuthorities)) : BOrd.make((OrdQuery)new BFoxScheme.FoxQuery(this.port, this.tunnelAuthorities));
} else {
bOrd = this.useFoxs ? BOrd.make((OrdQuery)new BFoxsScheme.FoxQuery(this.port)) : BOrd.make((OrdQuery)new BFoxScheme.FoxQuery(this.port));
}
if (!bOrd.equivalent((Object)this.ordInHost)) {
this.ordInHost = bOrd;
this.absOrd = BOrd.make((BOrd)this.host.getAbsoluteOrd(), (BOrd)this.ordInHost);
}
if (!this.connection.hasInterests()) {
this.connection.engageNoRetry(this, 0L);
}
}
catch (FoxAuthenticationException foxAuthenticationException) {
if (foxAuthenticationException.fatal != null) {
throw new FatalAuthenticationException(foxAuthenticationException.fatal);
}
this.authenticationScheme = foxAuthenticationException.method == null ? "Fox" : "Fox (" + foxAuthenticationException.method + ')';
throw new AuthenticationException((AuthenticationRealm)this, (Throwable)foxAuthenticationException);
}
}
void postConnect() throws Exception {
FoxMessage foxMessage = this.connection.session().getRemoteHello();
this.stationName = null;
try {
this.stationName = foxMessage.getString("station.name");
}
catch (Exception exception) {}
this.connection.getChannels().getUserChannel().fetchPrefs();
this.connection.getChannels().getSysChannel().subscribeNavEvents();
this.loadSubSpaces();
this.loadNavFileSpace();
BTimeZone bTimeZone = BTimeZone.getLocal();
try {
bTimeZone = (BTimeZone)BTimeZone.DEFAULT.decodeFromString(foxMessage.getString("timeZone"));
}
catch (Exception exception) {}
this.sessionContext = BFacets.make((String)"TimeZone", (BIDataValue)bTimeZone, (String)"username", (BIDataValue)BString.make((String)this.getUsername()));
this.connected = true;
}
public void disconnect() {
this.connection.disengage(this);
this.connection.close();
}
public void close() {
this.disconnect();
this.host.removeNavChild((BINavNode)this);
}
public String getStationFault() {
return this.stationFault;
}
public Context getSessionContext() {
return this.sessionContext;
}
public String getUsername() {
return this.connection.getUsername();
}
public BAbsTime getLastFailureTime() {
return this.connection.getLastFailureTime();
}
public String getLastFailureCause() {
return this.connection.getLastFailureCause();
}
public BRelTime getRetryPeriod() {
return this.connection.getRetryPeriod();
}
public void setRetryPeriod(BRelTime bRelTime) {
this.connection.setRetryPeriod(bRelTime);
}
public BAbsTime getNextAttemptTime() {
return this.connection.getNextAttemptTime();
}
public boolean isEngaged(String string) {
return this.connection.isEngaged(this.toInterest(string));
}
public void engageNoRetry(String string) throws Exception {
this.connection.engageNoRetry(this.toInterest(string));
}
public void engageNoRetry(String string, long l) throws Exception {
this.connection.engageNoRetry(this.toInterest(string), l);
}
public void engageRetry(String string) throws Exception {
this.connection.engageRetry(this.toInterest(string));
}
public void disengage(String string) {
this.connection.disengage(this.toInterest(string));
}
private final BFoxClientConnection.Interest toInterest(String string) {
return new BFoxClientConnection.StringInterest(string);
}
synchronized void sessionOpened() {
}
synchronized void sessionClosed() {
this.connected = false;
this.stationFault = null;
this.unloadSubSpaces();
this.credentials = null;
this.connection.setUsername("");
this.connection.setPassword(BPassword.DEFAULT);
}
public String getAuthenticationRealmName() {
return this.absOrd.toString();
}
public String getAuthenticationScheme() {
return this.authenticationScheme;
}
public BICredentials makeCredentials() {
return new BUsernameAndPassword();
}
public BICredentials getCredentials() {
return this.credentials;
}
public void setCredentials(BICredentials bICredentials) {
if (!(bICredentials instanceof BIUserCredentials)) {
throw new IllegalArgumentException();
}
this.credentials = (BIUserCredentials)bICredentials;
}
public void loadSubSpaces() {
try {
BSysChannel bSysChannel = this.getConnection().getChannels().getSysChannel();
HashMap hashMap = bSysChannel.listLocalSpaces();
TypeInfo[] typeInfoArray = Sys.getRegistry().getTypes(BIFoxProxySpace.TYPE.getTypeInfo());
int n = 0;
while (n < typeInfoArray.length) {
TypeInfo typeInfo = typeInfoArray[n];
if (!typeInfo.isInterface() && !typeInfo.isAbstract()) {
try {
BSpace bSpace = (BSpace)typeInfoArray[n].getInstance();
if (hashMap.containsKey(bSpace.getNavName()) && this.getNavChild(bSpace.getNavName()) == null) {
((BIFoxProxySpace)bSpace).init(this);
this.addNavChild((BINavNode)bSpace);
}
}
catch (Exception exception) {
exception.printStackTrace();
}
}
++n;
}
}
catch (LocalizableServerException localizableServerException) {
if (localizableServerException.getLexiconModule().equals("fox") && localizableServerException.getLexiconKey().equals("error.NoPermissionForStation")) {
throw localizableServerException;
}
localizableServerException.printStackTrace();
}
catch (Throwable throwable) {
throwable.printStackTrace();
}
}
public void loadNavFileSpace() {
BOrd bOrd = null;
try {
Object[] objectArray = this.getNavChildren();
int n = 0;
while (n < objectArray.length) {
if (objectArray[n] instanceof BNavFileSpace) {
this.removeNavChild(objectArray[n]);
break;
}
++n;
}
bOrd = this.connection.getChannels().getUserChannel().getNavFile();
if (bOrd.isNull()) {
return;
}
BIFile bIFile = (BIFile)bOrd.get((BObject)this);
BNavFileSpace bNavFileSpace = new NavFileDecoder(bIFile).decodeDocument();
this.addNavChild((BINavNode)bNavFileSpace);
objectArray = this.getNavChildren();
objectArray = (BINavNode[])ArrayUtil.toTop((Object[])objectArray, (int)(objectArray.length - 1));
this.reorderNavChildren((BINavNode[])objectArray);
}
catch (Throwable throwable) {
System.out.println("ERROR: Cannot load nav file \"" + bOrd + "\": " + throwable);
}
}
public void unloadSubSpaces() {
try {
BINavNode[] bINavNodeArray = this.getNavChildren();
int n = 0;
while (n < bINavNodeArray.length) {
try {
BINavNode bINavNode = bINavNodeArray[n];
if (bINavNode instanceof BIFoxProxySpace) {
BIFoxProxySpace bIFoxProxySpace = (BIFoxProxySpace)bINavNode;
bIFoxProxySpace.cleanup(this);
}
this.removeNavChild(bINavNode);
}
catch (Exception exception) {
exception.printStackTrace();
}
++n;
}
}
catch (Exception exception) {
exception.printStackTrace();
}
}
public BOrd getAbsoluteOrd() {
return this.absOrd;
}
public BOrd getOrdInHost() {
return this.ordInHost;
}
public String getNavDisplayName(Context context) {
String string = super.getNavDisplayName(context);
if (!this.useFoxs) {
if (this.connection.getPort() != 1911) {
string = string + ':' + this.connection.getPort();
}
} else if (this.connection.getPort() != 4911) {
string = string + ':' + this.connection.getPort();
}
if (this.stationName != null) {
string = string + " (" + this.stationName + ')';
return string;
}
return string;
}
public BOrd getNavOrd() {
return this.absOrd;
}
public BComponent getService(Type type) {
try {
BBrokerChannel bBrokerChannel = (BBrokerChannel)this.connection.getChannels().get("station", BBrokerChannel.TYPE);
SlotPath slotPath = bBrokerChannel.serviceToPath(type.toString());
BOrd bOrd = BOrd.make((String)("station:|" + slotPath));
return (BComponent)bOrd.get((BObject)this);
}
catch (Exception exception) {
throw new ServiceNotFoundException(type.toString(), (Throwable)exception);
}
}
public AgentList getAgents(Context context) {
AgentList agentList = super.getAgents(context);
if (this.tunnelAuthorities != null) {
agentList.toTop("workbench:FoxTunnelSessionAgent");
} else {
agentList.toTop("workbench:FoxSessionAgent");
}
agentList.toTop("workbench:StationSummary");
agentList.remove("workbench:NavContainerView");
return agentList;
}
public BIcon getIcon() {
BIcon bIcon = null;
if (this.isConnected()) {
BIcon bIcon2 = bIcon = this.tunnelAuthorities == null ? iconConnected : tunnelIconConnected;
if (this.useFoxs) {
return BIcon.make((BIcon)bIcon, (BIcon)secureBadgeConnected);
}
} else {
BIcon bIcon3 = bIcon = this.tunnelAuthorities == null ? iconDisconnected : tunnelIconDisconnected;
if (this.useFoxs) {
return BIcon.make((BIcon)bIcon, (BIcon)secureBadgeDisconnected);
}
}
return bIcon;
}
public static RuntimeException toException(Throwable throwable) {
if (throwable instanceof ModuleNotFoundLocalException) {
return (RuntimeException)throwable;
}
if (throwable instanceof ModuleNotFoundRemoteException) {
return (RuntimeException)throwable;
}
ModuleNotFoundException moduleNotFoundException = LocalizableExceptionTranslator.getModuleNotFoundException(throwable);
if (moduleNotFoundException != null) {
return new ModuleNotFoundLocalException(moduleNotFoundException.getModuleName(), throwable);
}
if (throwable instanceof RuntimeException) {
return (RuntimeException)throwable;
}
return new BajaRuntimeException(throwable);
}
public final Object fw(int n, Object object, Object object2, Object object3, Object object4) {
boolean bl = false;
switch (n) {
case 805:
case 806: {
bl = true;
}
case 801:
case 802: {
String string = (String)object;
BHost bHost = (BHost)object2;
String string2 = bl ? "fwFoxs-" + bHost.getHostname() : "fwFox-" + bHost.getHostname();
int n2 = bl ? 4911 : 1911;
int n3 = object3 != null ? (Integer)object3 : n2;
String[] stringArray = (String[])object4;
if (n3 != n2) {
string2 = string2 + ':' + n3;
}
if (stringArray != null) {
int n4 = 0;
while (n4 < stringArray.length) {
if (stringArray[n4] != null) {
string2 = string2 + '/' + stringArray[n4];
}
++n4;
}
}
BFoxSession bFoxSession = new BFoxSession(string2, string, bHost, n3, bl, stringArray);
Integer n5 = n == 801 || n == 805 ? FoxSession.FW_FOX_SESSION : FoxSession.FW_STATION_FOX_SESSION;
bFoxSession.connection.fw(803, n5, null, null, null);
return bFoxSession;
}
case 404: {
if (object == null || ((String)object).equalsIgnoreCase("baja")) {
return this.getConnection().getRemoteVersion();
}
if (this.getConnection().getRemoteVersion().compareTo((Object)new Version(new int[]{3, 6, 13})) != -1) {
BSysChannel bSysChannel = this.getConnection().getChannels().getSysChannel();
try {
byte[] byArray = bSysChannel.stationCall("module.version", ((String)object).getBytes());
return new Version(new String(byArray));
}
catch (Exception exception) {
return null;
}
}
return null;
}
}
return super.fw(n, object, object2, object3, object4);
}
static /* synthetic */ Class class(String string, boolean bl) {
try {
Class<?> clazz = Class.forName(string);
if (!bl) {
clazz = clazz.getComponentType();
}
return clazz;
}
catch (ClassNotFoundException classNotFoundException) {
throw new NoClassDefFoundError(classNotFoundException.getMessage());
}
}
private final /* synthetic */ void this() {
this.tunnelAuthorities = null;
this.authenticationScheme = "Fox";
this.uiCache = null;
}
private BFoxSession(String string, String string2, BHost bHost, int n, boolean bl, String[] stringArray) {
super(string);
this.this();
this.stationName = string2;
this.host = bHost;
this.port = n;
this.useFoxs = bl;
this.tunnelAuthorities = stringArray;
if (stringArray != null) {
this.setLexiconText(LexiconText.make((String)"fox", (String)"nav.foxTunnelSession"));
this.ordInHost = bl ? BOrd.make((OrdQuery)new BFoxsScheme.FoxQuery(n, stringArray)) : BOrd.make((OrdQuery)new BFoxScheme.FoxQuery(n, stringArray));
} else {
this.ordInHost = bl ? BOrd.make((OrdQuery)new BFoxsScheme.FoxQuery(n)) : BOrd.make((OrdQuery)new BFoxScheme.FoxQuery(n));
}
this.absOrd = BOrd.make((BOrd)bHost.getAbsoluteOrd(), (BOrd)this.ordInHost);
this.connection = new BFoxClientConnection(this);
if (Fox.appVersion == "unknown") {
try {
Fox.appVersion = "" + Sys.getBajaModule().getVendorVersion();
}
catch (Exception exception) {}
try {
Fox.hostName = Sys.getLocalHost().getHostName();
}
catch (Exception exception) {}
try {
Fox.hostAddress = Sys.getLocalHost().getHostAddress();
}
catch (Exception exception) {}
}
}
static {
Class clazz = class$com$tridium$fox$sys$BFoxSession;
if (clazz == null) {
clazz = class$com$tridium$fox$sys$BFoxSession = BFoxSession.class("[Lcom.tridium.fox.sys.BFoxSession;", false);
}
TYPE = Sys.loadType((Class)clazz);
iconConnected = BIcon.std((String)"fox.png");
iconDisconnected = BIcon.std((String)"foxDisconnected.png");
tunnelIconConnected = BIcon.std((String)"foxTunnel.png");
tunnelIconDisconnected = BIcon.std((String)"foxTunnelDisconnected.png");
secureBadgeConnected = BIcon.std((String)"badges/lock.png");
secureBadgeDisconnected = BIcon.std((String)"badges/lockDisconnected.png");
}
}