Package org.our2tunes

Source Code of org.our2tunes.Request

/*
* 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 org.our2tunes;


import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

import org.cdavies.itunes.ConnectionStatus;
import org.our2unes.itunes.FieldPair;
import org.our2unes.itunes.client.request.NoServerPermissionException;
import org.our2unes.itunes.client.swing.One2OhMyGod;
import org.our2unes.itunes.util.Hasher;

/**
* @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;
  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;
  protected ConnectionStatus _status;
 
 
  public Request(String server, int port, String rs,ConnectionStatus status) 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;
    _status = status;
    Query();
    Process();
   
  }
 
  protected void Query() throws NoServerPermissionException {
    URL url =null;
    try {
      url = new URL("http://"+server+":"+port+"/"+requestString);
      if (One2OhMyGod.debug)
        System.out.println("Processing Request: "+ server+":"+port+"/"+requestString);
      URLConnection urlc = url.openConnection();
      String hashCode = Hasher.GenerateHash("/" + requestString,1,_status,-1);
     
      One2OhMyGod.debugPrint("Created hash for version " + _status.getItunesHost().getVersion());
     
      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 (One2OhMyGod.debug)
        System.out.println("Malformed URL")
    } catch (IOException ioe) {
      if (One2OhMyGod.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<size;j++) {
        int num = (0xFF&d.readByte());
        int up = ((int)Math.pow(16,pow))*(num/16);
        pow--;
        int down= ((int)Math.pow(16,pow))*(num%16);
        i+= up + down;
        pow--;
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return i;
  }
 
  protected void Process() throws NoServerPermissionException {
    if (data.length==0) {
      return;
    }
    dataType= dataString(4);
    offset += 4;
    int size = dataInt();
    offset += 4;
   
    fieldPairs = processDataFields()
  }
 
  protected ArrayList processDataFields(byte[] data, int offset) {
    ArrayList fieldPairs = new ArrayList();
    while (offset < data.length) {
      String name="";
      name = readString(data,offset,4);
      offset +=4;
      int size=readInt(data,offset);
      offset+=4;
      FieldPair fp = new FieldPair(name, data, offset, size);
      offset += size;
      fieldPairs.add(fp);
      if (name.equals("mlcl")) {
        mlclIndexes.add(new Integer(fieldPairs.size()-1));
      } else if (name.equals("mlit")) {
        mlitIndexes.add(new Integer(fieldPairs.size()-1));
      } else if (name.equals("mdcl")) {
        mdclIndexes.add(new Integer(fieldPairs.size()-1));
      }
    }
    return fieldPairs;
  }
 
  protected ArrayList processDataFields() {
    return processDataFields(data,offset);
//    ArrayList fieldPairs = new ArrayList();
//    while (offset < data.length) {
//      String name="";
//      name = dataString(4);
//      offset +=4;
//      int size=dataInt();
//      offset+=4;
//      FieldPair fp = new FieldPair(name, data, offset, size);
//      offset += size;
//      fieldPairs.add(fp);
//      if (name.equals("mlcl")) {
//        mlclIndexes.add(new Integer(fieldPairs.size()-1));
//      } else if (name.equals("mlit")) {
//        mlitIndexes.add(new Integer(fieldPairs.size()-1));
//      } else if (name.equals("mdcl")) {
//        mdclIndexes.add(new Integer(fieldPairs.size()-1));
//      }
//    }
//    return fieldPairs;
  }
 
  public String toString() {
    String ret = "";
    for (int i = 0; i < fieldPairs.size();i++) {
      FieldPair fp = (FieldPair)fieldPairs.get(i);
      ret += fp.toString()+"\n";   
    }
    return ret; 
  }
}

TOP

Related Classes of org.our2tunes.Request

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.