Package com.aelitis.azureus.core.networkmanager.impl.tcp

Examples of com.aelitis.azureus.core.networkmanager.impl.tcp.TCPTransportImpl


 
        public void
        connectSuccess(
          SocketChannel channel )
        {
          final TCPTransportImpl  transport =
            new TCPTransportImpl(
                (ProtocolEndpointTCP)ProtocolEndpointFactory.createEndpoint( ProtocolEndpoint.PROTOCOL_TCP, target_address ), false, false, null );
         
          transport.setFilter( TCPTransportHelperFilterFactory.createTransparentFilter( channel ));
 
          new ProxyLoginHandler(
              transport,
              target_address,
              new ProxyLoginHandler.ProxyListener()
              {
                public void
                connectSuccess()
                {
                  transport.close( "Done" );
                 
                  result[0]   = RES_OK;

                  sem.release();
                }
 
                public void
                connectFailure(
                  Throwable failure_msg )
                {
                  transport.close( "Proxy login failed" );
                 
                  result[0]   = RES_SOCKS_FAILED;
                  error[0= new NetworkAdminException( "Proxy connect failed", failure_msg );
                 
                  sem.release();
View Full Code Here


   
          public void
          connectSuccess(
            SocketChannel channel )
          {
            final TCPTransportImpl  transport =
              new TCPTransportImpl(
                  (ProtocolEndpointTCP)ProtocolEndpointFactory.createEndpoint( ProtocolEndpoint.PROTOCOL_TCP, target_address ), false, false, null );
           
            transport.setFilter( TCPTransportHelperFilterFactory.createTransparentFilter( channel ));
   
            final long start_time = SystemTime.getCurrentTime();
           
            try{
              String  get_str = VersionCheckClient.getSingleton().getHTTPGetString( true, false );
             
              ByteBuffer  request = ByteBuffer.wrap( get_str.getBytes());
             
              while( request.hasRemaining()){
               
                if ( transport.write( new ByteBuffer[]{ request }, 0, 1 ) < 1 ) {
                 
                  if( SystemTime.getCurrentTime() - start_time > 30*1000 ) {
                   
                    String error = "proxy handshake message send timed out after 30sec";
                   
                    Debug.out( error );
                   
                    throw new IOException( error );
                  }
                 
                  try{
                    Thread.sleep( 50 );
                   
                  }catch( Throwable t ){
                   
                    t.printStackTrace();
                  }
                }
              }
                               
              TCPNetworkManager.getSingleton().getReadSelector().register(
                transport.getSocketChannel(),
                new VirtualChannelSelector.VirtualSelectorListener()
                {
                  private byte[]    reply_buffer = new byte[8192];
                 
                  private ByteBuffer  reply = ByteBuffer.wrap( reply_buffer );
                 
                  public boolean
                  selectSuccess(
                    VirtualChannelSelector   selector,
                    SocketChannel       sc,
                    Object           attachment )
                  {
                    try{
                       if( SystemTime.getCurrentTime() - start_time > 30*1000 ){
                        
                         throw( new Exception( "Timeout" ));
                       }

                       long len = transport.read( new ByteBuffer[]{ reply }, 0, 1 );

                       if ( len <= 0 ){
                        
                         return( false );
                       }
                      
                       String  str = new String( reply_buffer, 0, reply.position());
                                             
                       if ( str.indexOf( NL + NL ) != -1 ){
                       
                         System.out.println( str );
                        
                         String  server_name = "unknown";
                         String  auth    = "none";
                         String  response  = "unknown";
                          
                         StringTokenizer tok = new StringTokenizer( str, "\n" );
                        
                         int  line_num = 0;
                        
                         while( tok.hasMoreTokens()){
                          
                           String  token = tok.nextToken().trim();
                          
                           if ( token.length() == 0 ){
                            
                             continue;
                           }
                          
                           line_num++;
                          
                           if ( line_num == 1 ){
                            
                             int pos = token.indexOf(' ');
                            
                             if ( pos != -1 ){
                              
                               response = token.substring( pos + 1 ).trim();
                             }
                           }else{
                            
                             int  pos = token.indexOf(':');
                            
                             if ( pos != -1 ){
                              
                               String  lhs = token.substring( 0, pos ).trim().toLowerCase( MessageText.LOCALE_ENGLISH );
                               String  rhs = token.substring( pos+1 ).trim();

                               if ( lhs.equals( "server" )){
                                
                                 if ( !response.startsWith( "200" )){
                                 
                                   server_name = rhs;
                                 }
                               }else if ( lhs.equals( "via" )){
                                  
                                 server_name = rhs;
                                
                                 int  p = server_name.indexOf(' ');
                                
                                 if ( p != -1 ){
                                  
                                   server_name = server_name.substring( p+1 ).trim();
                                 }
                                
                               }else if ( lhs.equals( "proxy-authenticate" )){
                                
                                 auth = rhs;
                               }
                             }
                           }
                         }
                        
                         details[0] =
                           new ProxyDetails(
                               server_name,
                               response,
                               auth );
                        
                         transport.close( "Done" );
                        
                         result[0]   = RES_OK;

                         sem.release()
                       
                       }else{
                       
                        TCPNetworkManager.getSingleton().getReadSelector().resumeSelects( transport.getSocketChannel() );
                      }
     
                       return( true );
                     
                    }
                    catch( Throwable t ) {
 
 
                      return false;
                    }
                  }
   
                  public void
                  selectFailure(
                    VirtualChannelSelector   selector,
                    SocketChannel       sc,
                    Object           attachment,
                    Throwable        msg )
                  {
                    result[0]   = RES_PROXY_FAILED;
                    error[0= new NetworkAdminException( "Proxy error", msg );
                   
                    transport.close( "Proxy error" );
                   
                    sem.release();     
                  }
                },
                null );
View Full Code Here

TOP

Related Classes of com.aelitis.azureus.core.networkmanager.impl.tcp.TCPTransportImpl

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.