FileDocCategorySizeDatePackage
XMLHTTPClient.javaAPI DocAzureus 3.0.3.415656Thu May 18 14:47:30 BST 2006org.gudy.azureus2.ui.webplugin.remoteui.xml.client

XMLHTTPClient

public class XMLHTTPClient extends Object
author
parg

Fields Summary
Constructors Summary
protected XMLHTTPClient()

		boolean	quick_test = false;
			
		try{
			long	req_id = SystemTime.getCurrentTime();
			
			if ( quick_test ){
				SimpleXMLParserDocument	res = 
					sendRequest( 	"<REQUEST>"+
										"<METHOD>getDownloads</METHOD>"+
										"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
									"</REQUEST>");
				
				res.print();
				
			}else{
				
				SimpleXMLParserDocument	res = 
					sendRequest( 	"<REQUEST>"+
										"<METHOD>getSingleton</METHOD>"+
										"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
									"</REQUEST>");
				
				res.print();
	
				String connection_id = res.getChild( "_connection_id" ).getValue().trim();
				
				String plugin_if_oid	= res.getChild( "_object_id" ).getValue().trim();
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + plugin_if_oid + "</_object_id></OBJECT>" +
							"<METHOD>getShortCuts</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
	
				/* short cuts
					
				String sc_oid	= res.getChild( "_object_id" ).getValue().trim();
			
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + sc_oid + "</_object_id></OBJECT>" +
							"<METHOD>getDownload[byte[]]</METHOD>"+
							"<PARAMS>"+
								"<ENTRY>6495034E54A2B374560389FAE3812A6191C614BA</ENTRY>"+
							"</PARAMS>" + 
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				
				res.print();
				
				String dl_oid	= res.getChild( "_object_id" ).getValue().trim();
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + dl_oid + "</_object_id></OBJECT>" +
							"<METHOD>setPriority[int]</METHOD>"+
							"<PARAMS>"+
								"<ENTRY>2</ENTRY>"+
							"</PARAMS>" + 
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				*/

				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + plugin_if_oid + "</_object_id></OBJECT>" +
							"<METHOD>getDownloadManager</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
	
				String dl_man_oid	= res.getChild( "_object_id" ).getValue().trim();
				
				
					// tracker torrents
				/*
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + plugin_if_oid + "</_object_id></OBJECT>" +
							"<METHOD>getTracker</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
	
				String tracker_oid	= res.getChild( "_object_id" ).getValue().trim();			
	
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + tracker_oid + "</_object_id></OBJECT>" +
							"<METHOD>getTorrents</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
			
				res.print();
				*/
				
				/*
				SimpleXMLParserDocumentNode[]	kids = res.getChildren();
				
				for (int i=0;i<kids.length;i++){
				
					String dl_oid	= kids[i].getChild( "_object_id" ).getValue().trim();
				
					System.out.println( "kid: oid = " + dl_oid );
					
					res = sendRequest( 
							"<REQUEST>" +
								"<OBJECT><_object_id>" + dl_oid + "</_object_id></OBJECT>" +
								"<METHOD>stop</METHOD>"+
								"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
								"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
							"</REQUEST>");
					
					res.print();
						
				}
					// IP Filter
				
				/*
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + plugin_if_oid + "</_object_id></OBJECT>" +
							"<METHOD>getIPFilter</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
	
				
				String ip_filter_oid	= res.getChild( "_object_id" ).getValue().trim();

				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + ip_filter_oid + "</_object_id></OBJECT>" +
							"<METHOD>setInRangeAddressesAreAllowed[boolean]</METHOD>"+
							"<PARAMS>"+
								"<ENTRY>true</ENTRY>"+
							"</PARAMS>" + 
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				
				res.print();

				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + ip_filter_oid + "</_object_id></OBJECT>" +
							"<METHOD>getInRangeAddressesAreAllowed</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				
				res.print();
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + ip_filter_oid + "</_object_id></OBJECT>" +
							"<METHOD>isInRange[String]</METHOD>"+
							"<PARAMS>"+
								"<ENTRY>9.2.3.4</ENTRY>"+
							"</PARAMS>" + 
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				
				res.print();
				*/
				
				/*
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + ip_filter_oid + "</_object_id></OBJECT>" +
							"<METHOD>getRanges</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				
				res.print();


				SimpleXMLParserDocumentNode[]	kids = res.getChildren();
				
				for (int i=0;i<kids.length;i++){
				
					String range_oid	= kids[i].getChild( "_object_id" ).getValue().trim();

					res = sendRequest( 
							"<REQUEST>" +
								"<OBJECT><_object_id>" + range_oid + "</_object_id></OBJECT>" +
								"<METHOD>delete</METHOD>"+
								"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
								"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
							"</REQUEST>");
				}
				*/
				
				/*
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + ip_filter_oid + "</_object_id></OBJECT>" +
							"<METHOD>createAndAddRange[String,String,String,boolean]</METHOD>"+
							"<PARAMS>"+
								"<ENTRY>XML Test</ENTRY>"+
								"<ENTRY>1.1.1.1</ENTRY>"+
								"<ENTRY>1.1.1.2</ENTRY>"+
								"<ENTRY>false</ENTRY>"+
							"</PARAMS>" +
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");	
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + ip_filter_oid + "</_object_id></OBJECT>" +
							"<METHOD>save</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");				
				*/
				
				/*
				
					// config stuff
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + plugin_if_oid + "</_object_id></OBJECT>" +
							"<METHOD>getPluginconfig</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
	
				
				String config_oid	= res.getChild( "_object_id" ).getValue().trim();

				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + config_oid + "</_object_id></OBJECT>" +
							"<PARAMS>"+
								"<ENTRY index=\"1\">12</ENTRY>"+
								"<ENTRY index=\"0\">Max Upload Speed KBs</ENTRY>"+
							//	"<ENTRY>Max Upload Speed KBs</ENTRY>"+
							//	"<ENTRY>12</ENTRY>"+
							"</PARAMS>" +
							"<METHOD>setParameter[String,int]</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
				*/
				
				/* stuff for adding a torrent */
				 
			
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + plugin_if_oid + "</_object_id></OBJECT>" +
							"<METHOD>getTorrentManager</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
	
				String torrent_man_oid	= res.getChild( "_object_id" ).getValue().trim();
	
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + torrent_man_oid + "</_object_id></OBJECT>" +
							"<METHOD>getURLDownloader[URL]</METHOD>"+
							"<PARAMS><ENTRY>http://torrents.aelitis.com:88/torrents/Rob%20Costlow.torrent</ENTRY></PARAMS>" +
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
			
				res.print();
				
				String torrent_downloader_oid	= res.getChild( "_object_id" ).getValue().trim();

				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + torrent_downloader_oid + "</_object_id></OBJECT>" +
							"<METHOD>download[String]</METHOD>"+
							"<PARAMS>"+
   							    "<ENTRY>fallback</ENTRY>"+
						    "</PARAMS>" +
	
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
			
				res.print();

				String torrent_oid	= res.getChild( "_object_id" ).getValue().trim();
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + torrent_oid + "</_object_id></OBJECT>" +
							"<METHOD>writeToFile[File]</METHOD>"+
							"<PARAMS>"+
   							    "<ENTRY>C:\\temp\\fred.torrent</ENTRY>"+
						    "</PARAMS>" +
	
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
			
				res.print();
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + dl_man_oid + "</_object_id></OBJECT>" +
							"<METHOD>addDownload[Torrent,File,File]</METHOD>"+
							"<PARAMS>" +
							    "<ENTRY><OBJECT><_object_id>" + torrent_oid + "</_object_id></OBJECT></ENTRY>" +
							    "<ENTRY>C:\\temp\\fred.torrent</ENTRY>"+
							    "<ENTRY>C:\\temp</ENTRY>"+
							"</PARAMS>" +
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
	
				res.print();
				
				
				res = sendRequest( 
						"<REQUEST>" +
							"<OBJECT><_object_id>" + dl_man_oid + "</_object_id></OBJECT>" +
							"<METHOD>getDownloads</METHOD>"+
							"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
							"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
						"</REQUEST>");
			
				res.print();
				
				
				
				SimpleXMLParserDocumentNode[]	kids = res.getChildren();
				
				for (int i=0;i<kids.length;i++){
				
					String dl_oid	= kids[i].getChild( "_object_id" ).getValue().trim();
				
					System.out.println( "kid: oid = " + dl_oid );
					
					res = sendRequest( 
							"<REQUEST>" +
								"<OBJECT><_object_id>" + dl_oid + "</_object_id></OBJECT>" +
								"<METHOD>getDiskManagerFileInfo</METHOD>"+
								"<CONNECTION_ID>" + connection_id + "</CONNECTION_ID>"+
								"<REQUEST_ID>" + (req_id++) + "</REQUEST_ID>"+
							"</REQUEST>");
					
					res.print();
						
				}
				
			}

		}catch( Throwable e ){
			
			Debug.printStackTrace( e );
		}
	
Methods Summary
public static voidmain(java.lang.String[] args)

		new XMLHTTPClient();
	
protected org.gudy.azureus2.plugins.utils.xml.simpleparser.SimpleXMLParserDocumentsendRequest(java.lang.String request)

		String	resp = sendRequestSupport( request );
		
		System.out.println( "got:" + resp );
		
		return( SimpleXMLParserDocumentFactory.create( resp ));
	
protected java.lang.StringsendRequestSupport(java.lang.String request)

		try{
	
		    URL url = new URL( "http://127.0.0.1:6884/process.cgi" );
			
			// System.out.println( "doc base = " + url );
			
			HttpURLConnection con;
			
			if ( url.getProtocol().equalsIgnoreCase("https")){
				
				// see ConfigurationChecker for SSL client defaults
				
				URLConnection url_con = url.openConnection();
				
					// Opera doesn't return a javax class
				
				if ( url_con.getClass().getName().startsWith( "javax")){
									
					HttpsURLConnection ssl_con = (HttpsURLConnection)url_con;
					
					// allow for certs that contain IP addresses rather than dns names
					
					ssl_con.setHostnameVerifier(
							new HostnameVerifier()
							{
								public boolean
								verify(
										String		host,
										SSLSession	session )
								{
									return( true );
								}
							});	
				
					con = ssl_con;
				}else{
					
					con = (HttpURLConnection)url_con;
				}
			}else{
				
				con = (HttpURLConnection) url.openConnection();
			}
	
			con.setRequestProperty("Connection", "close" );
			
			con.setRequestMethod( "POST" );
			
			con.setAllowUserInteraction( true );
			
			con.setDoInput( true );
			
			con.setDoOutput( true );
						
			con.connect();
		
			PrintWriter os = null;
			
			try{
				os	= new PrintWriter( new OutputStreamWriter( con.getOutputStream() , Constants.DEFAULT_ENCODING ));
			
				os.print( request );
				
				os.flush();
				
			}finally{
			
				if ( os != null ){
					
					os.close();
				}
			}
			
			InputStream is = null;
			
			try{
				
				is = con.getInputStream();
				
				int content_length = con.getContentLength();
				
				byte[] data = new byte[1024];
				
				int	num_read = 0;
				
				ByteArrayOutputStream	baos = new ByteArrayOutputStream();
				
				while ( num_read < content_length ){
					
					try{
						int	len = is.read(data);
						
						if ( len > 0 ){
							
							baos.write(data, 0, len);
															
							num_read += len;
							
						}else if ( len == 0 ){
							
							Thread.sleep(20);
							
						}else{
							
							break;
						}
						
					}catch (Exception e){
						
						Debug.printStackTrace( e );
						
						break;
					}
				}
												
				return( new String( baos.toByteArray(), Constants.DEFAULT_ENCODING ));
				
			}finally{
				
				if ( is != null ){
					
					is.close();
				}
			}
		}catch( Throwable e ){		
	
			throw( new RuntimeException( "whoops", e ));
		}