mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-07 05:21:29 +03:00
show TCP/UDP/IPv6 in tooltip (#12613)
* add punch type log Signed-off-by: 21pages <sunboeasy@gmail.com> * show TCP/UDP/IPv6 in tooltip Signed-off-by: 21pages <sunboeasy@gmail.com> * Skip udp punch if udp nat port is 0 Signed-off-by: 21pages <sunboeasy@gmail.com> --------- Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
@@ -3910,3 +3910,24 @@ String get appName {
|
||||
}
|
||||
return _appName;
|
||||
}
|
||||
|
||||
String getConnectionText(bool secure, bool direct, String streamType) {
|
||||
String connectionText;
|
||||
if (secure && direct) {
|
||||
connectionText = translate("Direct and encrypted connection");
|
||||
} else if (secure && !direct) {
|
||||
connectionText = translate("Relayed and encrypted connection");
|
||||
} else if (!secure && direct) {
|
||||
connectionText = translate("Direct and unencrypted connection");
|
||||
} else {
|
||||
connectionText = translate("Relayed and unencrypted connection");
|
||||
}
|
||||
if (streamType == 'Relay') {
|
||||
streamType = 'TCP';
|
||||
}
|
||||
if (streamType.isEmpty) {
|
||||
return connectionText;
|
||||
} else {
|
||||
return '$connectionText ($streamType)';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,9 +77,11 @@ class CurrentDisplayState {
|
||||
class ConnectionType {
|
||||
final Rx<String> _secure = kInvalidValueStr.obs;
|
||||
final Rx<String> _direct = kInvalidValueStr.obs;
|
||||
final Rx<String> _stream_type = kInvalidValueStr.obs;
|
||||
|
||||
Rx<String> get secure => _secure;
|
||||
Rx<String> get direct => _direct;
|
||||
Rx<String> get stream_type => _stream_type;
|
||||
|
||||
static String get strSecure => 'secure';
|
||||
static String get strInsecure => 'insecure';
|
||||
@@ -94,9 +96,14 @@ class ConnectionType {
|
||||
_direct.value = v ? strDirect : strIndirect;
|
||||
}
|
||||
|
||||
void setStreamType(String v) {
|
||||
_stream_type.value = v;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return _secure.value != kInvalidValueStr &&
|
||||
_direct.value != kInvalidValueStr;
|
||||
_direct.value != kInvalidValueStr &&
|
||||
_stream_type.value != kInvalidValueStr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -146,16 +146,8 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
|
||||
connectionType.secure.value == ConnectionType.strSecure;
|
||||
bool direct =
|
||||
connectionType.direct.value == ConnectionType.strDirect;
|
||||
String msgConn;
|
||||
if (secure && direct) {
|
||||
msgConn = translate("Direct and encrypted connection");
|
||||
} else if (secure && !direct) {
|
||||
msgConn = translate("Relayed and encrypted connection");
|
||||
} else if (!secure && direct) {
|
||||
msgConn = translate("Direct and unencrypted connection");
|
||||
} else {
|
||||
msgConn = translate("Relayed and unencrypted connection");
|
||||
}
|
||||
String msgConn = getConnectionText(
|
||||
secure, direct, connectionType.stream_type.value);
|
||||
var msgFingerprint = '${translate('Fingerprint')}:\n';
|
||||
var fingerprint = FingerprintState.find(key).value;
|
||||
if (fingerprint.isEmpty) {
|
||||
|
||||
@@ -145,16 +145,8 @@ class _ViewCameraTabPageState extends State<ViewCameraTabPage> {
|
||||
connectionType.secure.value == ConnectionType.strSecure;
|
||||
bool direct =
|
||||
connectionType.direct.value == ConnectionType.strDirect;
|
||||
String msgConn;
|
||||
if (secure && direct) {
|
||||
msgConn = translate("Direct and encrypted connection");
|
||||
} else if (secure && !direct) {
|
||||
msgConn = translate("Relayed and encrypted connection");
|
||||
} else if (!secure && direct) {
|
||||
msgConn = translate("Direct and unencrypted connection");
|
||||
} else {
|
||||
msgConn = translate("Relayed and unencrypted connection");
|
||||
}
|
||||
String msgConn = getConnectionText(
|
||||
secure, direct, connectionType.stream_type.value);
|
||||
var msgFingerprint = '${translate('Fingerprint')}:\n';
|
||||
var fingerprint = FingerprintState.find(key).value;
|
||||
if (fingerprint.isEmpty) {
|
||||
|
||||
@@ -40,7 +40,12 @@ void _disableAndroidSoftKeyboard({bool? isKeyboardVisible}) {
|
||||
}
|
||||
|
||||
class RemotePage extends StatefulWidget {
|
||||
RemotePage({Key? key, required this.id, this.password, this.isSharedPassword, this.forceRelay})
|
||||
RemotePage(
|
||||
{Key? key,
|
||||
required this.id,
|
||||
this.password,
|
||||
this.isSharedPassword,
|
||||
this.forceRelay})
|
||||
: super(key: key);
|
||||
|
||||
final String id;
|
||||
@@ -1105,7 +1110,7 @@ void showOptions(
|
||||
BuildContext context, String id, OverlayDialogManager dialogManager) async {
|
||||
var displays = <Widget>[];
|
||||
final pi = gFFI.ffiModel.pi;
|
||||
final image = gFFI.ffiModel.getConnectionImage();
|
||||
final image = gFFI.ffiModel.getConnectionImageText();
|
||||
if (image != null) {
|
||||
displays.add(Padding(padding: const EdgeInsets.only(top: 8), child: image));
|
||||
}
|
||||
|
||||
@@ -39,7 +39,11 @@ void _disableAndroidSoftKeyboard({bool? isKeyboardVisible}) {
|
||||
|
||||
class ViewCameraPage extends StatefulWidget {
|
||||
ViewCameraPage(
|
||||
{Key? key, required this.id, this.password, this.isSharedPassword, this.forceRelay})
|
||||
{Key? key,
|
||||
required this.id,
|
||||
this.password,
|
||||
this.isSharedPassword,
|
||||
this.forceRelay})
|
||||
: super(key: key);
|
||||
|
||||
final String id;
|
||||
@@ -579,7 +583,7 @@ void showOptions(
|
||||
BuildContext context, String id, OverlayDialogManager dialogManager) async {
|
||||
var displays = <Widget>[];
|
||||
final pi = gFFI.ffiModel.pi;
|
||||
final image = gFFI.ffiModel.getConnectionImage();
|
||||
final image = gFFI.ffiModel.getConnectionImageText();
|
||||
if (image != null) {
|
||||
displays.add(Padding(padding: const EdgeInsets.only(top: 8), child: image));
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ class CachedPeerData {
|
||||
|
||||
bool secure = false;
|
||||
bool direct = false;
|
||||
String streamType = '';
|
||||
|
||||
CachedPeerData();
|
||||
|
||||
@@ -74,6 +75,7 @@ class CachedPeerData {
|
||||
'permissions': permissions,
|
||||
'secure': secure,
|
||||
'direct': direct,
|
||||
'streamType': streamType,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -92,6 +94,7 @@ class CachedPeerData {
|
||||
});
|
||||
data.secure = map['secure'];
|
||||
data.direct = map['direct'];
|
||||
data.streamType = map['streamType'];
|
||||
return data;
|
||||
} catch (e) {
|
||||
debugPrint('Failed to parse CachedPeerData: $e');
|
||||
@@ -223,27 +226,45 @@ class FfiModel with ChangeNotifier {
|
||||
timerScreenshot?.cancel();
|
||||
}
|
||||
|
||||
setConnectionType(String peerId, bool secure, bool direct) {
|
||||
setConnectionType(
|
||||
String peerId, bool secure, bool direct, String streamType) {
|
||||
cachedPeerData.secure = secure;
|
||||
cachedPeerData.direct = direct;
|
||||
cachedPeerData.streamType = streamType;
|
||||
_secure = secure;
|
||||
_direct = direct;
|
||||
try {
|
||||
var connectionType = ConnectionTypeState.find(peerId);
|
||||
connectionType.setSecure(secure);
|
||||
connectionType.setDirect(direct);
|
||||
connectionType.setStreamType(streamType);
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
Widget? getConnectionImage() {
|
||||
Widget? getConnectionImageText() {
|
||||
if (secure == null || direct == null) {
|
||||
return null;
|
||||
} else {
|
||||
final icon =
|
||||
'${secure == true ? 'secure' : 'insecure'}${direct == true ? '' : '_relay'}';
|
||||
return SvgPicture.asset('assets/$icon.svg', width: 48, height: 48);
|
||||
final iconWidget =
|
||||
SvgPicture.asset('assets/$icon.svg', width: 48, height: 48);
|
||||
String connectionText =
|
||||
getConnectionText(secure!, direct!, cachedPeerData.streamType);
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
iconWidget,
|
||||
SizedBox(height: 4),
|
||||
Text(
|
||||
connectionText,
|
||||
style: TextStyle(fontSize: 12),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +281,7 @@ class FfiModel with ChangeNotifier {
|
||||
'link': '',
|
||||
}, sessionId, peerId);
|
||||
updatePrivacyMode(data.updatePrivacyMode, sessionId, peerId);
|
||||
setConnectionType(peerId, data.secure, data.direct);
|
||||
setConnectionType(peerId, data.secure, data.direct, data.streamType);
|
||||
await handlePeerInfo(data.peerInfo, peerId, true);
|
||||
for (final element in data.cursorDataList) {
|
||||
updateLastCursorId(element);
|
||||
@@ -289,8 +310,8 @@ class FfiModel with ChangeNotifier {
|
||||
} else if (name == 'sync_platform_additions') {
|
||||
handlePlatformAdditions(evt, sessionId, peerId);
|
||||
} else if (name == 'connection_ready') {
|
||||
setConnectionType(
|
||||
peerId, evt['secure'] == 'true', evt['direct'] == 'true');
|
||||
setConnectionType(peerId, evt['secure'] == 'true',
|
||||
evt['direct'] == 'true', evt['stream_type'] ?? '');
|
||||
} else if (name == 'switch_display') {
|
||||
// switch display is kept for backward compatibility
|
||||
handleSwitchDisplay(evt, sessionId, peerId);
|
||||
|
||||
Reference in New Issue
Block a user