POC for a Java Agent to set URL connection timeout defaults

Start intercepting URL calls
diff --git a/src/main/java/org/apache/sling/uca/impl/Agent.java b/src/main/java/org/apache/sling/uca/impl/Agent.java
index 909bb9e..1391182 100644
--- a/src/main/java/org/apache/sling/uca/impl/Agent.java
+++ b/src/main/java/org/apache/sling/uca/impl/Agent.java
@@ -4,9 +4,10 @@
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.IllegalClassFormatException;
 import java.lang.instrument.Instrumentation;
-import java.lang.instrument.UnmodifiableClassException;
 import java.security.ProtectionDomain;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
 
 import javassist.CannotCompileException;
 import javassist.ClassPool;
@@ -19,12 +20,7 @@
     public static void premain(String args, Instrumentation inst) {
 
         System.out.println("Loading agent...");
-        inst.addTransformer(new HashMapTransformer(), true);
-        try {
-            inst.retransformClasses(HashMap.class);
-        } catch (UnmodifiableClassException e) {
-            throw new RuntimeException(e);
-        }
+        inst.addTransformer(new URLTimeoutTransformer(), true);
         System.out.println("Loaded agent!");
     }
     
@@ -32,19 +28,27 @@
         premain(args, inst);
     }
 
-    static class HashMapTransformer implements ClassFileTransformer {
-
+    static class URLTimeoutTransformer implements ClassFileTransformer {
+        
+        private static final Set<String> CLASSES_TO_TRANSFORM = new HashSet<>();
+        
+        static {
+            CLASSES_TO_TRANSFORM.add("sun.net.www.protocol.http.HttpURLConnection".replace('.', '/'));
+            CLASSES_TO_TRANSFORM.add("sun.net.www.protocol.https.HttpsURLConnectionImpl".replace('.', '/'));
+        }
+        
         private final Class<?> klazz = HashMap.class;
         
         @Override
         public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
                 ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
             try {
-                if ( classBeingRedefined == klazz) {
+                if ( CLASSES_TO_TRANSFORM.contains(className)) {
                     System.out.println("Asked to transform " + className);
                     CtClass cc = ClassPool.getDefault().get(klazz.getName());
-                    CtMethod putMethod = cc.getDeclaredMethod("put");
-                    putMethod.insertAfter("System.out.println(\"[AGENT] Adding key \" + key );");
+                    CtMethod connectMethod = cc.getDeclaredMethod("connect");
+                    connectMethod.insertBefore("if ( getConnectTimeout() == 0 ) { setConnectTimeout(60); }");
+                    connectMethod.insertBefore("if ( getReadTimeout() == 0 ) { setReadTimeout(60); }");
                     classfileBuffer = cc.toBytecode();
                     cc.detach();
                     System.err.println("Transformation complete!");
diff --git a/src/main/java/org/apache/sling/uca/impl/Main.java b/src/main/java/org/apache/sling/uca/impl/Main.java
index 9cf5802..21bcbb7 100644
--- a/src/main/java/org/apache/sling/uca/impl/Main.java
+++ b/src/main/java/org/apache/sling/uca/impl/Main.java
@@ -1,17 +1,14 @@
 package org.apache.sling.uca.impl;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 public class Main {
     
-    public static void main(String[] args) {
+    public static void main(String[] args) throws MalformedURLException, IOException {
         
-        Map<String, String> map = new HashMap<>();
-        map.put("foo", "bar");
-        map.put("foo", "baz");
-        
-        System.out.println(map.get("foo"));
+        new URL("http://sling.apache.org").openConnection();
     }
 
 }