|
30 | 30 | import java.security.MessageDigest; |
31 | 31 | import java.security.NoSuchAlgorithmException; |
32 | 32 | import java.security.SecureRandom; |
33 | | -import java.text.SimpleDateFormat; |
| 33 | +import java.time.ZonedDateTime; |
| 34 | +import java.time.ZoneId; |
| 35 | +import java.time.format.DateTimeFormatter; |
34 | 36 | import java.util.ArrayList; |
35 | | -import java.util.Calendar; |
36 | 37 | import java.util.Collections; |
37 | 38 | import java.util.LinkedList; |
38 | 39 | import java.util.List; |
39 | 40 | import java.util.Locale; |
40 | | -import java.util.TimeZone; |
41 | 41 | import org.java_websocket.WebSocketImpl; |
42 | 42 | import org.java_websocket.enums.CloseHandshakeType; |
43 | 43 | import org.java_websocket.enums.HandshakeState; |
@@ -105,6 +105,13 @@ public class Draft_6455 extends Draft { |
105 | 105 | */ |
106 | 106 | private static final String CONNECTION = "Connection"; |
107 | 107 |
|
| 108 | + /** |
| 109 | + * DateTimeFormatter for HTTP date format (thread-safe) |
| 110 | + */ |
| 111 | + private static final DateTimeFormatter HTTP_DATE_FORMAT = |
| 112 | + DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.US) |
| 113 | + .withZone(ZoneId.of("GMT")); |
| 114 | + |
108 | 115 | /** |
109 | 116 | * Logger instance |
110 | 117 | * |
@@ -723,7 +730,7 @@ private int getSizeBytes(ByteBuffer mes) { |
723 | 730 | @Override |
724 | 731 | public List<Framedata> translateFrame(ByteBuffer buffer) throws InvalidDataException { |
725 | 732 | while (true) { |
726 | | - List<Framedata> frames = new LinkedList<>(); |
| 733 | + List<Framedata> frames = new ArrayList<>(); |
727 | 734 | Framedata cur; |
728 | 735 | if (incompleteframe != null) { |
729 | 736 | // complete an incomplete frame |
@@ -816,11 +823,7 @@ public void reset() { |
816 | 823 | * @return the server time |
817 | 824 | */ |
818 | 825 | private String getServerTime() { |
819 | | - Calendar calendar = Calendar.getInstance(); |
820 | | - SimpleDateFormat dateFormat = new SimpleDateFormat( |
821 | | - "EEE, dd MMM yyyy HH:mm:ss z", Locale.US); |
822 | | - dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); |
823 | | - return dateFormat.format(calendar.getTime()); |
| 826 | + return HTTP_DATE_FORMAT.format(ZonedDateTime.now()); |
824 | 827 | } |
825 | 828 |
|
826 | 829 | /** |
@@ -1114,15 +1117,15 @@ public CloseHandshakeType getCloseHandshakeType() { |
1114 | 1117 |
|
1115 | 1118 | @Override |
1116 | 1119 | public String toString() { |
1117 | | - String result = super.toString(); |
| 1120 | + StringBuilder result = new StringBuilder(super.toString()); |
1118 | 1121 | if (getExtension() != null) { |
1119 | | - result += " extension: " + getExtension().toString(); |
| 1122 | + result.append(" extension: ").append(getExtension().toString()); |
1120 | 1123 | } |
1121 | 1124 | if (getProtocol() != null) { |
1122 | | - result += " protocol: " + getProtocol().toString(); |
| 1125 | + result.append(" protocol: ").append(getProtocol().toString()); |
1123 | 1126 | } |
1124 | | - result += " max frame size: " + this.maxFrameSize; |
1125 | | - return result; |
| 1127 | + result.append(" max frame size: ").append(this.maxFrameSize); |
| 1128 | + return result.toString(); |
1126 | 1129 | } |
1127 | 1130 |
|
1128 | 1131 | @Override |
|
0 commit comments