/* * Created on May 6, 2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments Copyright 2003 Joseph Barnett This File is part of "one 2 oh my god" "one 2 oh my god" is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by Free Software Foundation; either version 2 of the License, or your option) any later version. "one 2 oh my god" 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 "one 2 oh my god"; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package itunes.client.request; import itunes.*; import itunes.util.Hasher; import java.net.*; import java.io.*; import java.util.ArrayList; /** * @author jbarnett * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class Request { public static final int ITUNES_PORT = 3689; public static boolean debug = false; protected String server; protected int port; public byte[] data; protected int offset; protected int expectedLength; protected String dataType; protected ArrayList fieldPairs; protected ArrayList mlitIndexes; protected ArrayList mlclIndexes; protected ArrayList mdclIndexes; protected String requestString; public Request(String server, int port, String rs) throws NoServerPermissionException { this.server = server; this.port = port; dataType = ""; offset = 0; fieldPairs = new ArrayList(); mlitIndexes = new ArrayList(); mlclIndexes = new ArrayList(); mdclIndexes = new ArrayList(); requestString = rs; Query(); Process(); } protected void Query() throws NoServerPermissionException { URL url =null; try { url = new URL("http://"+server+":"+port+"/"+requestString); if (debug) System.out.println("Processing Request: "+ server+":"+port+"/"+requestString); URLConnection urlc = url.openConnection(); String hashCode = Hasher.GenerateHash("/" + requestString,1); urlc.addRequestProperty("Client-DAAP-Validation", hashCode); urlc.addRequestProperty("Client-DAAP-Access-Index", "1"); DataInputStream in = new DataInputStream(urlc.getInputStream()); int len = urlc.getContentLength(); if (len == -1) { return; } data = new byte[len]; in.readFully(data); } catch (MalformedURLException e) { if (debug) System.out.println("Malformed URL"); } catch (IOException ioe) { if (debug) System.out.println(ioe.getLocalizedMessage()); throw new NoServerPermissionException(); } } protected static int readSize(String data) { return readSize(data, 4); } protected static int readSize(String data, int j) { String elength = ""; for (int i = 0; i < j; i++) { elength += ((int)data.charAt(i)>15?"":"0") + Integer.toHexString((int)data.charAt(i)); } return Integer.valueOf(elength,16).intValue(); } protected String dataString(int i) { return readString(data,offset,i); } public static String readString(byte[] data, int offset, int i) { String a = ""; try { a = new String(data, offset,i,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return a; } protected int dataInt() { return readInt(data, offset,4); } protected static int readInt(byte[] data, int offset) { int i = 0; try { ByteArrayInputStream b = new ByteArrayInputStream(data, offset, 4); DataInputStream d = new DataInputStream(b); i = d.readInt(); } catch (IOException e) { e.printStackTrace(); } return i; } public static int readInt(byte[] data, int offset, int size) { int i = 0; try { ByteArrayInputStream b = new ByteArrayInputStream(data, offset, size); DataInputStream d = new DataInputStream(b); int pow = size*2 - 1; for (int j = 0;j