Package org.gudy.azureus2.core3.util.protocol.azplug

Source Code of org.gudy.azureus2.core3.util.protocol.azplug.AZPluginConnection

/*
* Created on 06-Mar-2005
* Created by Paul Gardner
* Copyright (C) 2004, 2005, 2006 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/

package org.gudy.azureus2.core3.util.protocol.azplug;

import java.util.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;


import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.ipc.IPCException;
import org.gudy.azureus2.plugins.ipc.IPCInterface;

import com.aelitis.azureus.core.AzureusCoreFactory;

/**
* @author parg
*
*/

public class
AZPluginConnection
  extends HttpURLConnection
{
  private int    response_code  = HTTP_OK;
  private String  response_msg  = "OK";
 
  private InputStream          input_stream;
  private Map<String,List<String>>   headers = new HashMap<String, List<String>>();
 
  protected
  AZPluginConnection(
    URL    _url )
  {
    super( _url );
  }
 
  public void
  connect()
    throws IOException
   
  {
    String url = getURL().toString();
   
    int  pos = url.indexOf( "?" );
   
    if ( pos == -1 ){
     
      throw( new IOException( "Malformed URL - ? missing" ));
    }
   
    url = url.substring( pos+1 );
   
    String[]  bits = url.split( "&" );
   
    Map args = new HashMap();
   
    for (int i=0;i<bits.length;i++ ){
     
      String  bit = bits[i];
     
      String[] x = bit.split( "=" );
     
      if ( x.length == 2 ){
       
        String  lhs = x[0];
        String  rhs = URLDecoder.decode(x[1], "UTF-8" );
       
        args.put( lhs.toLowerCase(), rhs );
      }
    }
   
    String  plugin_id = (String)args.get( "id" );
   
    if ( plugin_id == null ){
     
      throw( new IOException( "Plugin id missing" ));
    }
   
    String  plugin_name = (String)args.get( "name" );
    String  arg      = (String)args.get( "arg" );
   
    String plugin_str = plugin_id + (plugin_name==null?"":( " (" + plugin_name + ")" ));
   
    // AZPluginConnection is called via reflection
    // Let's just assume that the Core is avail..
    PluginInterface pi = AzureusCoreFactory.getSingleton().getPluginManager().getPluginInterfaceByID( plugin_id );
   
    if ( pi == null ){
     
      throw( new IOException( "Plugin id " + plugin_str + " not installed" ));
    }
   
    IPCInterface ipc = pi.getIPC();
   
    try{
      if ( ipc.canInvoke( "handleURLProtocol", new Object[]{ this, arg })){
         
        input_stream = (InputStream)ipc.invoke( "handleURLProtocol", new Object[]{ this, arg });

      }else{
     
        input_stream = (InputStream)ipc.invoke( "handleURLProtocol", new Object[]{ arg });
      }
    }catch( IPCException ipce ){
     
      Throwable e = ipce;
     
      if ( e.getCause() != null ){
       
        e = e.getCause();
      }
     
      throw( new IOException( "Communication error with plugin '" + plugin_str + "': " + Debug.getNestedExceptionMessage(e)));
    }
  }
 
    public Map<String,List<String>>
    getHeaderFields()
    {
        return( headers );
    }
   
    public String
    getHeaderField(
      String  name )
    {
      List<String> values = headers.get( name );
     
      if ( values == null || values.size() == 0 ){
       
        return( null );
      }
     
      return( values.get( values.size()-1 ));
    }
   
    public void
    setHeaderField(
      String  name,
      String  value )
    {
         List<String> values = headers.get( name );
        
         if ( values == null ){
          
           values = new ArrayList<String>();
          
           headers.put( name, values );
         }

         values.add( value );
    }
   
  public InputStream
  getInputStream()
 
    throws IOException
  {
    return( input_stream );
  }
 
  public void
  setResponse(
    int    _code,
    String  _msg )
  {
    response_code    = _code;
    response_msg    = _msg;
  }
 
  public int
  getResponseCode()
  {
    return( response_code );
  }
 
  public String
  getResponseMessage()
  {
    return( response_msg );
  }
 
  public boolean
  usingProxy()
  {
    return( false );
  }
 
  public void
  disconnect()
  {
  }
}
TOP

Related Classes of org.gudy.azureus2.core3.util.protocol.azplug.AZPluginConnection

TOP
Copyright © 2018 www.massapi.com. 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.