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 BuddyListOnlinePacket::parseContent(char *buf, int length, int numberOfAtts) {
	DUMPPACKET("BuddyListOnlinePacket")
    XINFO(( "Got List of buddys that are online\n" ));
    int index = 0;
    // friends
    VariableValue userid;
    userids = new vector<long>;

    /* auskommentiert, wird nicht mehr gesendet 2.3.11
	index += userid.readName(buf,index);
	*/
	index ++; // Ignore 01
    index ++; // Ignore 04
    index ++; // Ignore 02
	

    int numberOfIds = (unsigned char)buf[index];
    index++;
    index++;//ignore 00
    for(int i = 0 ; i < numberOfIds ; i++) {
      index += userid.readValue(buf,index,4);
      userids->push_back(userid.getValueAsLong());
      XINFO2( "UserID: %ld\n", userid.getValueAsLong() );
    }

    VariableValue sid;
    sids = new vector<char *>;
    /* auskommentiert, wird nicht mehr gesendet 2.3.11
	index += sid.readName(buf,index); */

	index ++; // Ignore 03
    index ++; // Ignore 04
    index ++; // Ignore 03
	

    numberOfIds = (unsigned char)buf[index];
    index++;
    index++;//ignore 00
    for(int i = 0 ; i < numberOfIds ; i++) {
      index += userid.readValue(buf,index,16);
      char *sid = new char[16];
      memcpy(sid,userid.getValue(),16);
      sids->push_back(sid);
      //for(int loop = 0; loop < userid.getValueLength();loop++){
      //      XINFO(( "SID: %d\n", userid.getValue()[loop] ));
      //}
    }

  }
 int ClanBuddyListNamesPacket::readStrings(vector<string> *strings, char *buf, int index) {
   VariableValue friends;
   index += friends.readValue(buf,index,2);
   //index ++; // Ignore 00
   int numberOfStrings = friends.getValueAsLong();
   XDEBUG3( "name: %s numberOfStrings: %d\n", friends.getName().c_str(), numberOfStrings );
   for(int i = 0 ; i < numberOfStrings ; i++) {
     int length = (unsigned char)buf[index++];
     index++;
     index += friends.readValue(buf,index,length);
     string stringvalue = string(friends.getValue(),length);
     strings->push_back(stringvalue);
     XDEBUG(( "String length: %2d : %s\n", length, stringvalue.c_str() ));
   }
   return index;
 }
  void ClanBuddyListNamesPacket::parseContent(char *buf, int length, int numberOfAtts) {
    int index = 0;

	VariableValue friends;

	XDEBUG2( "Len: %ld\n", length );

	index+=2; //paar bytes überspringen

	index += friends.readValue(buf,index,2);
	this->clanid = friends.getValueAsLong();

	index+=4; //paar bytes überspringen

    userids = new vector<long>;

	index += friends.readValue(buf,index);
   
	int numberOfIds = friends.getValueAsLong();

	XDEBUG2( "numberofId: %ld\n", numberOfIds );

    for(int i = 0 ; i < numberOfIds ; i++) {
      index += friends.readValue(buf,index,4);
      userids->push_back(friends.getValueAsLong());
      XDEBUG3( "UserID: %ld %ld\n",i+1, friends.getValueAsLong() );
    }

	XDEBUG2( "NextByte: %ld\n",buf[index] );
	XDEBUG2( "NextByte: %ld\n",buf[index+1] );

	index+=3; //nächsten 3 skippen

	XDEBUG2( "NextByte: %ld\n",buf[index] );
	XDEBUG2( "NextByte: %ld\n",buf[index+1] );
	
	usernames = new vector<string>;
    index = readStrings(usernames,buf,index);

	index+=3; //nächsten 3 skippen

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

  }
  void XFireClanPacket::parseContent(char *buf, int nlength, int numberOfAtts) {
    VariableValue val;
	int index = 0;
	int length = 0;
	string stringvalue;

	index += 3; // ersten 5 bytes skippen

	this->count=(char)buf[index];

	index += 2;

	for(int i=0;i<this->count;i++)
	{
		index += val.readValue(buf,index,2); //clanid lesen
		this->clanid[i] = val.getValueAsLong();
		index += 2;
	}

	index += 5; // 7 bytes skippen

	for(int i=0;i<this->count;i++)
	{
		length = (unsigned char)buf[index++]; //clannamen lesen
		index++;
		index += val.readValue(buf,index,length);
		stringvalue = string(val.getValue(),length);

		this->name[i] = stringvalue;
	}

	index += 5; // 5 skippen

	for(int i=0;i<this->count;i++)
	{
		length = (unsigned char)buf[index++]; //url anhängsel auslesen
		index++;
		index += val.readValue(buf,index,length);
		stringvalue = string(val.getValue(),length);

		this->url[i] = stringvalue;
	}

  }
  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;
  }