LocalSSLSocketFactory.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package epson.print.inkrpln;
  2. import java.io.IOException;
  3. import java.net.InetAddress;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6. import java.util.Arrays;
  7. import java.util.LinkedList;
  8. import java.util.List;
  9. import javax.net.ssl.SSLSocket;
  10. import javax.net.ssl.SSLSocketFactory;
  11. public class LocalSSLSocketFactory extends SSLSocketFactory {
  12. private SSLSocketFactory mOrigSSLSocketFactory;
  13. public LocalSSLSocketFactory(SSLSocketFactory sSLSocketFactory) {
  14. mOrigSSLSocketFactory = sSLSocketFactory;
  15. }
  16. public String[] getDefaultCipherSuites() {
  17. return mOrigSSLSocketFactory.getDefaultCipherSuites();
  18. }
  19. public String[] getSupportedCipherSuites() {
  20. return mOrigSSLSocketFactory.getSupportedCipherSuites();
  21. }
  22. public Socket createSocket(Socket socket, String str, int i, boolean z) throws IOException {
  23. SSLSocket sSLSocket = (SSLSocket) mOrigSSLSocketFactory.createSocket(socket, str, i, z);
  24. localEnableProtocols(sSLSocket);
  25. return sSLSocket;
  26. }
  27. public Socket createSocket(String str, int i) throws IOException, UnknownHostException {
  28. SSLSocket sSLSocket = (SSLSocket) mOrigSSLSocketFactory.createSocket(str, i);
  29. localEnableProtocols(sSLSocket);
  30. return sSLSocket;
  31. }
  32. public Socket createSocket(String str, int i, InetAddress inetAddress, int i2) throws IOException, UnknownHostException {
  33. SSLSocket sSLSocket = (SSLSocket) mOrigSSLSocketFactory.createSocket(str, i, inetAddress, i2);
  34. localEnableProtocols(sSLSocket);
  35. return sSLSocket;
  36. }
  37. public Socket createSocket(InetAddress inetAddress, int i) throws IOException {
  38. SSLSocket sSLSocket = (SSLSocket) mOrigSSLSocketFactory.createSocket(inetAddress, i);
  39. localEnableProtocols(sSLSocket);
  40. return sSLSocket;
  41. }
  42. public Socket createSocket(InetAddress inetAddress, int i, InetAddress inetAddress2, int i2) throws IOException {
  43. SSLSocket sSLSocket = (SSLSocket) mOrigSSLSocketFactory.createSocket(inetAddress, i, inetAddress2, i2);
  44. localEnableProtocols(sSLSocket);
  45. return sSLSocket;
  46. }
  47. private void old_localEnableProtocols(SSLSocket sSLSocket) {
  48. sSLSocket.setEnabledProtocols(complementArray(sSLSocket.getSupportedProtocols(), Arrays.asList(new String[]{"TLSv1"})));
  49. }
  50. private void localEnableProtocols(SSLSocket sSLSocket) throws IOException {
  51. String[] filterArray = filterArray(sSLSocket.getSupportedProtocols(), Arrays.asList(new String[]{"TLSv1.2"}));
  52. if (filterArray.length > 0) {
  53. sSLSocket.setEnabledProtocols(filterArray);
  54. return;
  55. }
  56. throw new IOException("Protocol not supported");
  57. }
  58. @NonNull
  59. public static String[] complementArray(@NonNull String[] strArr, @NonNull List<String> list) {
  60. List<String> asList = Arrays.asList(strArr);
  61. LinkedList linkedList = new LinkedList();
  62. for (String str : asList) {
  63. if (list.indexOf(str) == -1) {
  64. linkedList.add(str);
  65. }
  66. }
  67. return (String[]) linkedList.toArray(new String[linkedList.size()]);
  68. }
  69. @NonNull
  70. public static String[] filterArray(@NonNull String[] strArr, @NonNull List<String> list) {
  71. List<String> asList = Arrays.asList(strArr);
  72. LinkedList linkedList = new LinkedList();
  73. for (String str : asList) {
  74. if (list.indexOf(str) != -1) {
  75. linkedList.add(str);
  76. }
  77. }
  78. return (String[]) linkedList.toArray(new String[linkedList.size()]);
  79. }
  80. }