[ 
https://issues.apache.org/jira/browse/NET-426?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13135229#comment-13135229
 ] 

Ketan edited comment on NET-426 at 10/25/11 4:58 PM:
-----------------------------------------------------

Here is code snippet I was playing with.  I had this executed before data 
connection handshake starting. Note this is for SunJSSE provider since I had 
Sun's JVM installed:
{code:java}

        SSLSocket sslControlSocket = (SSLSocket) controlConnectionSocket;
        String host = "host.used.to.connect.to.socket";
        try {
                SSLSession sess = sslControlSocket.getSession();
                SSLSessionContext sessions = sess.getSessionContext();
                // SunJSSE 1.6 specific code
                Field cache = sessions.getClass().getDeclaredField(
                        "sessionHostPortCache");
                cache.setAccessible(true);
                Object c = cache.get(sessions);
                String key = (host + ":" + String.valueOf(socket.getPort()))
                        .toLowerCase();
                // Class<?> cc = Class.forName("sun.security.util.Cache");
                Class<?> cc = c.getClass();
                cc.getDeclaredMethod("put", Object.class, Object.class).invoke(
                                c, key, sess);
        } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
{code} 
                
      was (Author: ktp420):
    Here is code snippet I was playing with.  I had this executed before data 
connection handshake starting. Note this is for SunJSSE provider since I had 
Sun's JVM installed:

        SSLSocket sslControlSocket = (SSLSocket) controlConnectionSocket;
        String host = "host.used.to.connect.to.socket";
        try {
                SSLSession sess = sslControlSocket.getSession();
                SSLSessionContext sessions = sess.getSessionContext();
                // SunJSSE 1.6 specific code
                Field cache = sessions.getClass().getDeclaredField(
                        "sessionHostPortCache");
                cache.setAccessible(true);
                Object c = cache.get(sessions);
                String key = (host + ":" + String.valueOf(socket.getPort()))
                        .toLowerCase();
                // Class<?> cc = Class.forName("sun.security.util.Cache");
                Class<?> cc = c.getClass();
                cc.getDeclaredMethod("put", Object.class, Object.class).invoke(
                                c, key, sess);
        } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
                  
> FTPS: Hook to customize _openDataConnection_ SSLSocket before 
> startHandshake() is called
> ----------------------------------------------------------------------------------------
>
>                 Key: NET-426
>                 URL: https://issues.apache.org/jira/browse/NET-426
>             Project: Commons Net
>          Issue Type: Bug
>          Components: FTP
>    Affects Versions: 3.0.1
>            Reporter: Ketan
>            Priority: Critical
>         Attachments: FTPSClient.patch
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> Currently in FTPSClient class, there is protected _openDataConnection_ 
> method, which create SSLSocket for data connection.  But there is no hook to 
> customize the SSLSocket before startHandshake is called.  
> I need to know the remote host ip and port, which i can get for socket, and 
> do custom setup to try to reuse SSL sessions from control connection socket.  
> Since the socket factory uses createSocket() method, I can't just use custom 
> socket factory since I don't know the host and port.  I can't just override 
> the _openDataConnection_() method in my class since that will call the 
> startHandshake().  
> So it would be nice if you can provide hook, much like _connectAction_(), but 
> for data connection before handshake is started.  You can pass the new data 
> socket as argument to this hook method so one can get remote host and port 
> information.  

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to