void BuddyListNamesPacket::parseContent(char *buf, int length, int numberOfAtts) {
    int index = 0;
    // friends
    VariableValue friends;
    index += friends.readName(buf,index);
    index ++; // Ignore 04

    usernames = new vector<string>;
    index = readStrings(usernames,buf,index);

    index += friends.readName(buf,index);
    index ++; // Ignore 04

    nicks = new vector<string>;
    index = readStrings(nicks,buf,index);

    index += friends.readName(buf,index);
    index ++; // Ignore 04
    index += friends.readValue(buf,index);
    userids = new vector<long>;
    int numberOfIds = friends.getValueAsLong();
    for(int i = 0 ; i < numberOfIds ; i++) {
      index += friends.readValue(buf,index,4);
      userids->push_back(friends.getValueAsLong());
      XDEBUG2( "UserID: %ld\n", friends.getValueAsLong() );
    }
  }
  void LoginSuccessPacket::parseContent(char *buf, int length, int numberOfAtts) {

    int read = 0;
    for(int i = 0 ; i < numberOfAtts ; i++) {
      VariableValue *val = new VariableValue();
      read += val->readName(buf, read);
      XDEBUG(( "Read Variable Name: %s\n", val->getName().c_str() ));
      if (val->getName() == "userid") {
	read++; // ignore 02
	read += val->readValue(buf, read, 3);
	read++; // ignore 00
	XDEBUG2( "My userid: %lu\n", val->getValueAsLong() );
	this->myuid=val->getValueAsLong();
      } else if (val->getName() == "sid") {
	read++; // ignore 03
	read+=val->readValue(buf, read, 16);
	//XDEBUG(( "My SID: %u\n", val->getValue() ));
      } else if (val->getName() == "nick") {
	//int lengthLength = (int)val->getValueAsLong();
	read++; // ignore 01
	//read+=val->readValue(buf, read, -1, 1);

	unsigned int l = (unsigned char)buf[read++];  //dufte - nick wird benötigt
	XDEBUG2( "Nick Length: %d\n", l );
    read++;
    read += val->readValue(buf,read,l);
	XDEBUG2( "Nick Length: %s\n", val->getValue() );

	this->nick=std::string(val->getValue(),l);

      } else if (val->getName() == "status") {
	read+=5; // ignore everything
      } else if (val->getName() == "dlset") {
	read+=3; // ignore everything
      } else {
	i = numberOfAtts; 
	// If we find something we don't know .. we stop parsing the 
	// packet.. who cares about the rest...
      }
      delete val;
    }
  }
  int XFireFoundBuddys::readStrings(vector<string> *strings, char *buf, int index) {
    VariableValue friends;
	index+=friends.readName(buf,index);
    index ++; // Ignore 04
	index ++; // Ignore 01

	index+=friends.readValue(buf,index,2);

    int numberOfStrings = friends.getValueAsLong();
    XDEBUG3( "name: %s numberOfStrings: %d\n", friends.getName().c_str(), numberOfStrings );
    for(int i = 0 ; i < numberOfStrings ; i++) {
		XDEBUG2( "Index: %ld\n", index );
      int length = (unsigned char)buf[index++];
      index++;
      index += friends.readValue(buf,index,length);
      string stringvalue = string(friends.getValue(),length);
      strings->push_back(stringvalue);
      XDEBUG3( "String length: %2d : %s\n", length, stringvalue.c_str() );
    }
    return index;
  }