Change all 'safemode' references to use 'safe mode'.
Bug: 163433613 Test: atest FrameworksVcnTests Change-Id: I5daced209e4e6d8d1b87385b3f64660322908fa0
This commit is contained in:
@@ -86,12 +86,12 @@ public class Vcn extends Handler {
|
||||
private static final int MSG_CMD_TEARDOWN = MSG_CMD_BASE;
|
||||
|
||||
/**
|
||||
* Causes this VCN to immediately enter Safemode.
|
||||
* Causes this VCN to immediately enter safe mode.
|
||||
*
|
||||
* <p>Upon entering Safemode, the VCN will unregister its RequestListener, tear down all of its
|
||||
* VcnGatewayConnections, and notify VcnManagementService that it is in Safemode.
|
||||
* <p>Upon entering safe mode, the VCN will unregister its RequestListener, tear down all of its
|
||||
* VcnGatewayConnections, and notify VcnManagementService that it is in safe mode.
|
||||
*/
|
||||
private static final int MSG_CMD_ENTER_SAFEMODE = MSG_CMD_BASE + 1;
|
||||
private static final int MSG_CMD_ENTER_SAFE_MODE = MSG_CMD_BASE + 1;
|
||||
|
||||
@NonNull private final VcnContext mVcnContext;
|
||||
@NonNull private final ParcelUuid mSubscriptionGroup;
|
||||
@@ -216,8 +216,8 @@ public class Vcn extends Handler {
|
||||
case MSG_CMD_TEARDOWN:
|
||||
handleTeardown();
|
||||
break;
|
||||
case MSG_CMD_ENTER_SAFEMODE:
|
||||
handleEnterSafemode();
|
||||
case MSG_CMD_ENTER_SAFE_MODE:
|
||||
handleEnterSafeMode();
|
||||
break;
|
||||
default:
|
||||
Slog.wtf(getLogTag(), "Unknown msg.what: " + msg.what);
|
||||
@@ -243,7 +243,7 @@ public class Vcn extends Handler {
|
||||
mIsActive.set(false);
|
||||
}
|
||||
|
||||
private void handleEnterSafemode() {
|
||||
private void handleEnterSafeMode() {
|
||||
handleTeardown();
|
||||
|
||||
mVcnSafeModeCallback.onEnteredSafeMode();
|
||||
@@ -335,14 +335,14 @@ public class Vcn extends Handler {
|
||||
/** Callback used for passing status signals from a VcnGatewayConnection to its managing Vcn. */
|
||||
@VisibleForTesting(visibility = Visibility.PACKAGE)
|
||||
public interface VcnGatewayStatusCallback {
|
||||
/** Called by a VcnGatewayConnection to indicate that it has entered Safemode. */
|
||||
void onEnteredSafemode();
|
||||
/** Called by a VcnGatewayConnection to indicate that it has entered safe mode. */
|
||||
void onEnteredSafeMode();
|
||||
}
|
||||
|
||||
private class VcnGatewayStatusCallbackImpl implements VcnGatewayStatusCallback {
|
||||
@Override
|
||||
public void onEnteredSafemode() {
|
||||
sendMessage(obtainMessage(MSG_CMD_ENTER_SAFEMODE));
|
||||
public void onEnteredSafeMode() {
|
||||
sendMessage(obtainMessage(MSG_CMD_ENTER_SAFE_MODE));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -418,13 +418,13 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
private static final int EVENT_SUBSCRIPTIONS_CHANGED = 9;
|
||||
|
||||
/**
|
||||
* Sent when this VcnGatewayConnection has entered Safemode.
|
||||
* Sent when this VcnGatewayConnection has entered safe mode.
|
||||
*
|
||||
* <p>A VcnGatewayConnection enters Safemode when it takes over {@link
|
||||
* <p>A VcnGatewayConnection enters safe mode when it takes over {@link
|
||||
* #SAFEMODE_TIMEOUT_SECONDS} to enter {@link ConnectedState}.
|
||||
*
|
||||
* <p>When a VcnGatewayConnection enters safe mode, it will fire {@link
|
||||
* VcnGatewayStatusCallback#onEnteredSafemode()} to notify its Vcn. The Vcn will then shut down
|
||||
* VcnGatewayStatusCallback#onEnteredSafeMode()} to notify its Vcn. The Vcn will then shut down
|
||||
* its VcnGatewayConnectin(s).
|
||||
*
|
||||
* <p>Relevant in DisconnectingState, ConnectingState, ConnectedState (if the Vcn Network is not
|
||||
@@ -432,7 +432,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
*
|
||||
* @param arg1 The "all" token; this signal is always honored.
|
||||
*/
|
||||
private static final int EVENT_SAFEMODE_TIMEOUT_EXCEEDED = 10;
|
||||
private static final int EVENT_SAFE_MODE_TIMEOUT_EXCEEDED = 10;
|
||||
|
||||
@VisibleForTesting(visibility = Visibility.PRIVATE)
|
||||
@NonNull
|
||||
@@ -551,7 +551,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
@Nullable private WakeupMessage mTeardownTimeoutAlarm;
|
||||
@Nullable private WakeupMessage mDisconnectRequestAlarm;
|
||||
@Nullable private WakeupMessage mRetryTimeoutAlarm;
|
||||
@Nullable private WakeupMessage mSafemodeTimeoutAlarm;
|
||||
@Nullable private WakeupMessage mSafeModeTimeoutAlarm;
|
||||
|
||||
public VcnGatewayConnection(
|
||||
@NonNull VcnContext vcnContext,
|
||||
@@ -638,7 +638,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
cancelTeardownTimeoutAlarm();
|
||||
cancelDisconnectRequestAlarm();
|
||||
cancelRetryTimeoutAlarm();
|
||||
cancelSafemodeAlarm();
|
||||
cancelSafeModeAlarm();
|
||||
|
||||
mUnderlyingNetworkTracker.teardown();
|
||||
}
|
||||
@@ -928,27 +928,27 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
}
|
||||
|
||||
@VisibleForTesting(visibility = Visibility.PRIVATE)
|
||||
void setSafemodeAlarm() {
|
||||
void setSafeModeAlarm() {
|
||||
// Only schedule a NEW alarm if none is already set.
|
||||
if (mSafemodeTimeoutAlarm != null) {
|
||||
if (mSafeModeTimeoutAlarm != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Message delayedMessage = obtainMessage(EVENT_SAFEMODE_TIMEOUT_EXCEEDED, TOKEN_ALL);
|
||||
mSafemodeTimeoutAlarm =
|
||||
final Message delayedMessage = obtainMessage(EVENT_SAFE_MODE_TIMEOUT_EXCEEDED, TOKEN_ALL);
|
||||
mSafeModeTimeoutAlarm =
|
||||
createScheduledAlarm(
|
||||
SAFEMODE_TIMEOUT_ALARM,
|
||||
delayedMessage,
|
||||
TimeUnit.SECONDS.toMillis(SAFEMODE_TIMEOUT_SECONDS));
|
||||
}
|
||||
|
||||
private void cancelSafemodeAlarm() {
|
||||
if (mSafemodeTimeoutAlarm != null) {
|
||||
mSafemodeTimeoutAlarm.cancel();
|
||||
mSafemodeTimeoutAlarm = null;
|
||||
private void cancelSafeModeAlarm() {
|
||||
if (mSafeModeTimeoutAlarm != null) {
|
||||
mSafeModeTimeoutAlarm.cancel();
|
||||
mSafeModeTimeoutAlarm = null;
|
||||
}
|
||||
|
||||
removeEqualMessages(EVENT_SAFEMODE_TIMEOUT_EXCEEDED);
|
||||
removeEqualMessages(EVENT_SAFE_MODE_TIMEOUT_EXCEEDED);
|
||||
}
|
||||
|
||||
private void sessionLost(int token, @Nullable Exception exception) {
|
||||
@@ -1125,7 +1125,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
Slog.wtf(TAG, "Active IKE Session or NetworkAgent in DisconnectedState");
|
||||
}
|
||||
|
||||
cancelSafemodeAlarm();
|
||||
cancelSafeModeAlarm();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1153,7 +1153,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
@Override
|
||||
protected void exitState() {
|
||||
// Safe to blindly set up, as it is cancelled and cleared on entering this state
|
||||
setSafemodeAlarm();
|
||||
setSafeModeAlarm();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1245,9 +1245,9 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
transitionTo(mDisconnectedState);
|
||||
}
|
||||
break;
|
||||
case EVENT_SAFEMODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafemode();
|
||||
mSafemodeTimeoutAlarm = null;
|
||||
case EVENT_SAFE_MODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafeMode();
|
||||
mSafeModeTimeoutAlarm = null;
|
||||
break;
|
||||
default:
|
||||
logUnhandledMessage(msg);
|
||||
@@ -1331,9 +1331,9 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
case EVENT_DISCONNECT_REQUESTED:
|
||||
handleDisconnectRequested(((EventDisconnectRequestedInfo) msg.obj).reason);
|
||||
break;
|
||||
case EVENT_SAFEMODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafemode();
|
||||
mSafemodeTimeoutAlarm = null;
|
||||
case EVENT_SAFE_MODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafeMode();
|
||||
mSafeModeTimeoutAlarm = null;
|
||||
break;
|
||||
default:
|
||||
logUnhandledMessage(msg);
|
||||
@@ -1399,7 +1399,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
|
||||
// Validated connection, clear failed attempt counter
|
||||
mFailedAttempts = 0;
|
||||
cancelSafemodeAlarm();
|
||||
cancelSafeModeAlarm();
|
||||
}
|
||||
|
||||
protected void applyTransform(
|
||||
@@ -1517,9 +1517,9 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
case EVENT_DISCONNECT_REQUESTED:
|
||||
handleDisconnectRequested(((EventDisconnectRequestedInfo) msg.obj).reason);
|
||||
break;
|
||||
case EVENT_SAFEMODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafemode();
|
||||
mSafemodeTimeoutAlarm = null;
|
||||
case EVENT_SAFE_MODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafeMode();
|
||||
mSafeModeTimeoutAlarm = null;
|
||||
break;
|
||||
default:
|
||||
logUnhandledMessage(msg);
|
||||
@@ -1574,7 +1574,7 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
protected void exitState() {
|
||||
// Attempt to set the safe mode alarm - this requires the Vcn Network being validated
|
||||
// while in ConnectedState (which cancels the previous alarm)
|
||||
setSafemodeAlarm();
|
||||
setSafeModeAlarm();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1622,9 +1622,9 @@ public class VcnGatewayConnection extends StateMachine {
|
||||
case EVENT_DISCONNECT_REQUESTED:
|
||||
handleDisconnectRequested(((EventDisconnectRequestedInfo) msg.obj).reason);
|
||||
break;
|
||||
case EVENT_SAFEMODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafemode();
|
||||
mSafemodeTimeoutAlarm = null;
|
||||
case EVENT_SAFE_MODE_TIMEOUT_EXCEEDED:
|
||||
mGatewayStatusCallback.onEnteredSafeMode();
|
||||
mSafeModeTimeoutAlarm = null;
|
||||
break;
|
||||
default:
|
||||
logUnhandledMessage(msg);
|
||||
|
||||
@@ -75,8 +75,8 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEnterStateDoesNotCancelSafemodeAlarm() {
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
public void testEnterStateDoesNotCancelSafeModeAlarm() {
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -130,7 +130,7 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
|
||||
@Test
|
||||
public void testChildOpenedRegistersNetwork() throws Exception {
|
||||
// Verify scheduled but not canceled when entering ConnectedState
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
|
||||
final VcnChildSessionConfiguration mMockChildSessionConfig =
|
||||
mock(VcnChildSessionConfiguration.class);
|
||||
@@ -174,17 +174,17 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
|
||||
assertTrue(nc.hasCapability(cap));
|
||||
}
|
||||
|
||||
// Now that Vcn Network is up, notify it as validated and verify the Safemode alarm is
|
||||
// Now that Vcn Network is up, notify it as validated and verify the SafeMode alarm is
|
||||
// canceled
|
||||
mGatewayConnection.mNetworkAgent.onValidationStatus(
|
||||
NetworkAgent.VALIDATION_STATUS_VALID, null /* redirectUri */);
|
||||
verify(mSafemodeTimeoutAlarm).cancel();
|
||||
verify(mSafeModeTimeoutAlarm).cancel();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChildSessionClosedTriggersDisconnect() throws Exception {
|
||||
// Verify scheduled but not canceled when entering ConnectedState
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
|
||||
getChildSessionCallback().onClosed();
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -192,14 +192,14 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
|
||||
assertEquals(mGatewayConnection.mDisconnectingState, mGatewayConnection.getCurrentState());
|
||||
verifyTeardownTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
|
||||
// Since network never validated, verify mSafemodeTimeoutAlarm not canceled
|
||||
verifyNoMoreInteractions(mSafemodeTimeoutAlarm);
|
||||
// Since network never validated, verify mSafeModeTimeoutAlarm not canceled
|
||||
verifyNoMoreInteractions(mSafeModeTimeoutAlarm);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIkeSessionClosedTriggersDisconnect() throws Exception {
|
||||
// Verify scheduled but not canceled when entering ConnectedState
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
|
||||
getIkeSessionCallback().onClosed();
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -207,7 +207,7 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
|
||||
assertEquals(mGatewayConnection.mRetryTimeoutState, mGatewayConnection.getCurrentState());
|
||||
verify(mIkeSession).close();
|
||||
|
||||
// Since network never validated, verify mSafemodeTimeoutAlarm not canceled
|
||||
verifyNoMoreInteractions(mSafemodeTimeoutAlarm);
|
||||
// Since network never validated, verify mSafeModeTimeoutAlarm not canceled
|
||||
verifyNoMoreInteractions(mSafeModeTimeoutAlarm);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ public class VcnGatewayConnectionConnectingStateTest extends VcnGatewayConnectio
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSafemodeTimeoutNotifiesCallback() {
|
||||
verifySafemodeTimeoutNotifiesCallback(mGatewayConnection.mConnectingState);
|
||||
public void testSafeModeTimeoutNotifiesCallback() {
|
||||
verifySafeModeTimeoutNotifiesCallback(mGatewayConnection.mConnectingState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class VcnGatewayConnectionDisconnectedStateTest extends VcnGatewayConnect
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertEquals(mGatewayConnection.mConnectingState, mGatewayConnection.getCurrentState());
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -100,6 +100,6 @@ public class VcnGatewayConnectionDisconnectedStateTest extends VcnGatewayConnect
|
||||
|
||||
assertNull(mGatewayConnection.getCurrentState());
|
||||
verify(mIpSecSvc).deleteTunnelInterface(eq(TEST_IPSEC_TUNNEL_RESOURCE_ID), any());
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(true /* expectCanceled */);
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(true /* expectCanceled */);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public class VcnGatewayConnectionDisconnectingStateTest extends VcnGatewayConnec
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSafemodeTimeoutNotifiesCallback() {
|
||||
verifySafemodeTimeoutNotifiesCallback(mGatewayConnection.mDisconnectingState);
|
||||
public void testSafeModeTimeoutNotifiesCallback() {
|
||||
verifySafeModeTimeoutNotifiesCallback(mGatewayConnection.mDisconnectingState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public class VcnGatewayConnectionRetryTimeoutStateTest extends VcnGatewayConnect
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSafemodeTimeoutNotifiesCallback() {
|
||||
verifySafemodeTimeoutNotifiesCallback(mGatewayConnection.mRetryTimeoutState);
|
||||
public void testSafeModeTimeoutNotifiesCallback() {
|
||||
verifySafeModeTimeoutNotifiesCallback(mGatewayConnection.mRetryTimeoutState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public class VcnGatewayConnectionTestBase {
|
||||
@NonNull protected final WakeupMessage mTeardownTimeoutAlarm;
|
||||
@NonNull protected final WakeupMessage mDisconnectRequestAlarm;
|
||||
@NonNull protected final WakeupMessage mRetryTimeoutAlarm;
|
||||
@NonNull protected final WakeupMessage mSafemodeTimeoutAlarm;
|
||||
@NonNull protected final WakeupMessage mSafeModeTimeoutAlarm;
|
||||
|
||||
@NonNull protected final IpSecService mIpSecSvc;
|
||||
@NonNull protected final ConnectivityManager mConnMgr;
|
||||
@@ -131,7 +131,7 @@ public class VcnGatewayConnectionTestBase {
|
||||
mTeardownTimeoutAlarm = mock(WakeupMessage.class);
|
||||
mDisconnectRequestAlarm = mock(WakeupMessage.class);
|
||||
mRetryTimeoutAlarm = mock(WakeupMessage.class);
|
||||
mSafemodeTimeoutAlarm = mock(WakeupMessage.class);
|
||||
mSafeModeTimeoutAlarm = mock(WakeupMessage.class);
|
||||
|
||||
mIpSecSvc = mock(IpSecService.class);
|
||||
setupIpSecManager(mContext, mIpSecSvc);
|
||||
@@ -154,7 +154,7 @@ public class VcnGatewayConnectionTestBase {
|
||||
setUpWakeupMessage(mTeardownTimeoutAlarm, VcnGatewayConnection.TEARDOWN_TIMEOUT_ALARM);
|
||||
setUpWakeupMessage(mDisconnectRequestAlarm, VcnGatewayConnection.DISCONNECT_REQUEST_ALARM);
|
||||
setUpWakeupMessage(mRetryTimeoutAlarm, VcnGatewayConnection.RETRY_TIMEOUT_ALARM);
|
||||
setUpWakeupMessage(mSafemodeTimeoutAlarm, VcnGatewayConnection.SAFEMODE_TIMEOUT_ALARM);
|
||||
setUpWakeupMessage(mSafeModeTimeoutAlarm, VcnGatewayConnection.SAFEMODE_TIMEOUT_ALARM);
|
||||
|
||||
doReturn(ELAPSED_REAL_TIME).when(mDeps).getElapsedRealTime();
|
||||
}
|
||||
@@ -259,23 +259,23 @@ public class VcnGatewayConnectionTestBase {
|
||||
expectCanceled);
|
||||
}
|
||||
|
||||
protected Runnable verifySafemodeTimeoutAlarmAndGetCallback(boolean expectCanceled) {
|
||||
protected Runnable verifySafeModeTimeoutAlarmAndGetCallback(boolean expectCanceled) {
|
||||
return verifyWakeupMessageSetUpAndGetCallback(
|
||||
VcnGatewayConnection.SAFEMODE_TIMEOUT_ALARM,
|
||||
mSafemodeTimeoutAlarm,
|
||||
mSafeModeTimeoutAlarm,
|
||||
TimeUnit.SECONDS.toMillis(VcnGatewayConnection.SAFEMODE_TIMEOUT_SECONDS),
|
||||
expectCanceled);
|
||||
}
|
||||
|
||||
protected void verifySafemodeTimeoutNotifiesCallback(@NonNull State expectedState) {
|
||||
// Safemode timer starts when VcnGatewayConnection exits DisconnectedState (the initial
|
||||
protected void verifySafeModeTimeoutNotifiesCallback(@NonNull State expectedState) {
|
||||
// SafeMode timer starts when VcnGatewayConnection exits DisconnectedState (the initial
|
||||
// state)
|
||||
final Runnable delayedEvent =
|
||||
verifySafemodeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
verifySafeModeTimeoutAlarmAndGetCallback(false /* expectCanceled */);
|
||||
delayedEvent.run();
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
verify(mGatewayStatusCallback).onEnteredSafemode();
|
||||
verify(mGatewayStatusCallback).onEnteredSafeMode();
|
||||
assertEquals(expectedState, mGatewayConnection.getCurrentState());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ public class VcnTest {
|
||||
// Doesn't matter which callback this gets - any Gateway entering safe mode should shut down
|
||||
// all Gateways
|
||||
final VcnGatewayStatusCallback statusCallback = mGatewayStatusCallbackCaptor.getValue();
|
||||
statusCallback.onEnteredSafemode();
|
||||
statusCallback.onEnteredSafeMode();
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
for (final VcnGatewayConnection gatewayConnection : gatewayConnections) {
|
||||
|
||||
Reference in New Issue
Block a user