diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/tunnel/AbstractGuacamoleTunnelService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/tunnel/AbstractGuacamoleTunnelService.java index 20ac29995..2b11d4f1b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/tunnel/AbstractGuacamoleTunnelService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/tunnel/AbstractGuacamoleTunnelService.java @@ -476,6 +476,15 @@ public abstract class AbstractGuacamoleTunnelService implements GuacamoleTunnelS activeConnections.put(connection.getIdentifier(), activeConnection); activeConnectionGroups.put(connection.getParentIdentifier(), activeConnection); config = getGuacamoleConfiguration(activeConnection.getUser(), connection); + + // If timezone is provided by tunnel parameter, and not + // overriden by connection parameter, set it. + String tzTunnel = info.getTimezone(); + String tzParam = config.getParameter("timezone"); + if ((tzParam == null || tzParam.isEmpty()) + && tzTunnel != null && !tzTunnel.isEmpty()) + config.setParameter("timezone", tzTunnel); + } // If we ARE joining an active connection, generate a configuration diff --git a/guacamole-common/src/main/java/org/apache/guacamole/protocol/GuacamoleClientInformation.java b/guacamole-common/src/main/java/org/apache/guacamole/protocol/GuacamoleClientInformation.java index d90d05d3f..c1e7ae066 100644 --- a/guacamole-common/src/main/java/org/apache/guacamole/protocol/GuacamoleClientInformation.java +++ b/guacamole-common/src/main/java/org/apache/guacamole/protocol/GuacamoleClientInformation.java @@ -58,6 +58,11 @@ public class GuacamoleClientInformation { * The list of image mimetypes reported by the client to be supported. */ private final List imageMimetypes = new ArrayList(); + + /** + * The timezone report by the client. + */ + private String timezone = ""; /** * Returns the optimal screen width requested by the client, in pixels. @@ -144,5 +149,25 @@ public class GuacamoleClientInformation { public List getImageMimetypes() { return imageMimetypes; } + + /** + * Return the timezone as reported by the client. + * + * @returns + * A string value of the timezone reported by the client. + */ + public String getTimezone() { + return timezone; + } + + /** + * Set the string value of the timezone. + * + * @param timezone + * The string value of the timezone reported by the client. + */ + public void setTimezone(String timezone) { + this.timezone = timezone; + } } diff --git a/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequest.java b/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequest.java index 8c23dabad..1355a150e 100644 --- a/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequest.java +++ b/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequest.java @@ -95,6 +95,11 @@ public abstract class TunnelRequest { * once for each mimetype. */ public static final String IMAGE_PARAMETER = "GUAC_IMAGE"; + + /** + * The name of the parameter specifying the timezone of the client. + */ + public static final String TIMEZONE_PARAMETER = "GUAC_TIMEZONE"; /** * All supported object types that can be used as the destination of a @@ -365,5 +370,16 @@ public abstract class TunnelRequest { public List getImageMimetypes() { return getParameterValues(IMAGE_PARAMETER); } - + + /** + * Returns the value of the timezone parameter declared within the + * tunnel request. + * + * @return + * The string value of the timezone parameter as reported by + * the client. + */ + public String getTimezone() { + return getParameter(TIMEZONE_PARAMETER); + } } diff --git a/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequestService.java b/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequestService.java index 1479d8243..9f0fdfaf3 100644 --- a/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequestService.java +++ b/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequestService.java @@ -166,6 +166,11 @@ public class TunnelRequestService { List imageMimetypes = request.getImageMimetypes(); if (imageMimetypes != null) info.getImageMimetypes().addAll(imageMimetypes); + + // Get the timezone value + String timezone = request.getTimezone(); + if (timezone != null & !timezone.isEmpty()) + info.setTimezone(timezone); return info; }