Skip to content

Commit

Permalink
perf: 完善 rdp 连接断开的错误提示
Browse files Browse the repository at this point in the history
  • Loading branch information
LeeEirc committed Jul 12, 2023
1 parent 3718df2 commit 27f9601
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 11 deletions.
16 changes: 10 additions & 6 deletions pkg/tunnel/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func (t *Connection) Run(ctx *gin.Context) (err error) {
switch instruction.Opcode {
case guacd.InstructionServerDisconnect,
guacd.InstructionServerError:
logger.Infof("Session[%s] receive guacamole server disconnect opcode", t)
logger.Infof("Session[%s] receive guacamole server disconnect: %s", t, instruction.String())
case guacd.InstructionStreamingAck:
select {
case activeChan <- struct{}{}:
Expand Down Expand Up @@ -179,17 +179,21 @@ func (t *Connection) Run(ctx *gin.Context) (err error) {
continue
}

switch ret.Opcode {
case guacd.InstructionKey:
userInputMessageChan <- &session.Message{
Opcode: ret.Opcode, Body: ret.Args,
Meta: meta}
default:

}

switch ret.Opcode {
case guacd.InstructionClientSync,
guacd.InstructionClientNop,
guacd.InstructionStreamingAck:
case guacd.InstructionClientDisconnect:
logger.Errorf("Session[%s] receive web client disconnect opcode", t)
case guacd.InstructionKey:
userInputMessageChan <- &session.Message{
Opcode: ret.Opcode, Body: ret.Args,
Meta: meta}
fallthrough
default:
select {
case activeChan <- struct{}{}:
Expand Down
6 changes: 3 additions & 3 deletions ui/src/components/GuacamoleConnect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<RightPanel>
<Settings :settings="settings" :title="$t('Settings')">
<el-button type="text" class="item-button el-icon-c-scale-to-original">
{{ $t('Display') }}
{{ $t('Display') }}
</el-button>
<div class="content"> <i class="el-icon-remove-outline" @click="decreaseScale" />
<span>{{ scaleValue }}%</span>
Expand Down Expand Up @@ -62,7 +62,7 @@ import GuacFileSystem from './GuacFileSystem'
import RightPanel from './RightPanel'
import Settings from './Settings'
import { default as i18n, getLanguage } from '@/i18n'
import { ErrorStatusCodes, ConvertAPIError } from '@/utils'
import { ErrorStatusCodes, ConvertAPIError, ConvertGuacamoleError } from '@/utils'
import { localStorageGet } from '@/utils/common'
const pixelDensity = 1
Expand Down Expand Up @@ -505,7 +505,7 @@ export default {
const code = status.code
let msg = status.message
const currentLang = getLanguage()
msg = ErrorStatusCodes[code] ? this.$t(ErrorStatusCodes[code]) : status.message
msg = ErrorStatusCodes[code] ? this.$t(ErrorStatusCodes[code]) : this.$t(ConvertGuacamoleError(status.message))
switch (code) {
case 1005:
// 管理员终断会话,特殊处理
Expand Down
22 changes: 21 additions & 1 deletion ui/src/i18n/lang/cn.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,27 @@ const message = {
Settings: '设置',
UploadSuccess: '上传成功',
Display: '显示',
AutoFit: '自动适应'
AutoFit: '自动适应',

GuacamoleErrDisconnected: '远程连接断开',
GuacamoleErrCredentialsExpired: '远程连接的凭证过期',
GuacamoleErrSecurityNegotiationFailed: '远程连接的安全协商失败',
GuacamoleErrAccessDenied: '远程连接的访问被拒绝',
GuacamoleErrAuthenticationFailure: '远程连接的认证失败',
GuacamoleErrSSLTLSConnectionFailed: '远程连接的 SSL/TLS 连接失败',
GuacamoleErrDNSLookupFailed: '远程连接的 DNS 查询失败',
GuacamoleErrServerRefusedConnectionBySecurityType: '远程连接的服务器拒绝连接,可能安全类型不匹配',
GuacamoleErrConnectionFailed: '远程连接失败',
GuacamoleErrUpstreamError: '远程连接的服务器发生错误',
GuacamoleErrForciblyDisconnected: '远程连接被强制断开',
GuacamoleErrLoggedOff: '远程连接的用户已注销',
GuacamoleErrIdleSessionTimeLimitExceeded: '远程连接的空闲时间超过限制',
GuacamoleErrActiveSessionTimeLimitExceeded: '远程连接的活动时间超过限制',
GuacamoleErrDisconnectedByOtherConnection: '远程连接被其他连接断开',
GuacamoleErrServerRefusedConnection: '远程连接的服务器拒绝连接',
GuacamoleErrInsufficientPrivileges: '远程连接的用户权限不足',
GuacamoleErrManuallyDisconnected: '远程连接被手动断开',
GuacamoleErrManuallyLoggedOff: '远程连接的用户被手动注销'
}

export default {
Expand Down
22 changes: 21 additions & 1 deletion ui/src/i18n/lang/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,27 @@ const message = {
Settings: 'Settings',
UploadSuccess: 'Upload success',
Display: 'Display',
AutoFit: 'Auto Fit'
AutoFit: 'Auto Fit',

GuacamoleErrDisconnected: 'Disconnected.',
GuacamoleErrCredentialsExpired: 'Credentials expired.',
GuacamoleErrSecurityNegotiationFailed: 'Security negotiation failed (wrong security type?)',
GuacamoleErrAccessDenied: 'Access denied by server (account locked/disabled?)',
GuacamoleErrAuthenticationFailure: 'Authentication failure (invalid credentials?)',
GuacamoleErrSSLTLSConnectionFailed: 'SSL/TLS connection failed (untrusted/self-signed certificate?)',
GuacamoleErrDNSLookupFailed: 'DNS lookup failed (incorrect hostname?)',
GuacamoleErrServerRefusedConnectionBySecurityType: 'Server refused connection (wrong security type?)',
GuacamoleErrConnectionFailed: 'Connection failed (server unreachable?)',
GuacamoleErrUpstreamError: 'Upstream error.',
GuacamoleErrForciblyDisconnected: 'Forcibly disconnected.',
GuacamoleErrLoggedOff: 'Logged off.',
GuacamoleErrIdleSessionTimeLimitExceeded: 'Idle session time limit exceeded.',
GuacamoleErrActiveSessionTimeLimitExceeded: 'Active session time limit exceeded.',
GuacamoleErrDisconnectedByOtherConnection: 'Disconnected by other connection.',
GuacamoleErrServerRefusedConnection: 'Server refused connection.',
GuacamoleErrInsufficientPrivileges: 'Insufficient privileges.',
GuacamoleErrManuallyDisconnected: 'Manually disconnected.',
GuacamoleErrManuallyLoggedOff: 'Manually logged off.'
}

export default {
Expand Down
29 changes: 29 additions & 0 deletions ui/src/utils/status.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,32 @@ export const APIErrorType = {
'unsupported protocol': 'JMSErrBadParams',
'permission deny': 'JMSErrPermission'
}

export function ConvertGuacamoleError(errMsg) {
if (typeof errMsg !== 'string') {
return errMsg
}
return GuacamoleErrMsg[errMsg] || errMsg
}

export const GuacamoleErrMsg = {
'Disconnected.': 'GuacamoleErrDisconnected',
'Credentials expired.': 'GuacamoleErrCredentialsExpired',
'Security negotiation failed (wrong security type?)': 'GuacamoleErrSecurityNegotiationFailed',
'Access denied by server (account locked/disabled?)': 'GuacamoleErrAccessDenied',
'Authentication failure (invalid credentials?)': 'GuacamoleErrAuthenticationFailure',
'SSL/TLS connection failed (untrusted/self-signed certificate?)': 'GuacamoleErrSSLTLSConnectionFailed',
'DNS lookup failed (incorrect hostname?)': 'GuacamoleErrDNSLookupFailed',
'Server refused connection (wrong security type?)': 'GuacamoleErrServerRefusedConnectionBySecurityType',
'Connection failed (server unreachable?)': 'GuacamoleErrConnectionFailed',
'Upstream error.': 'GuacamoleErrUpstreamError',
'Forcibly disconnected.': 'GuacamoleErrForciblyDisconnected',
'Logged off.': 'GuacamoleErrLoggedOff',
'Idle session time limit exceeded.': 'GuacamoleErrIdleSessionTimeLimitExceeded',
'Active session time limit exceeded.': 'GuacamoleErrActiveSessionTimeLimitExceeded',
'Disconnected by other connection.': 'GuacamoleErrDisconnectedByOtherConnection',
'Server refused connection.': 'GuacamoleErrServerRefusedConnection',
'Insufficient privileges.': 'GuacamoleErrInsufficientPrivileges',
'Manually disconnected.': 'GuacamoleErrManuallyDisconnected',
'Manually logged off.': 'GuacamoleErrManuallyLoggedOff'
}

0 comments on commit 27f9601

Please sign in to comment.