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;
    }
  }
  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;
 }
  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;
  }
VariableValue::VariableValue (const VariableValue& other)
	: m_variable(other.m_variable)
	, m_storage(other.m_variable->getType())
{
	m_storage.getValue(getType()) = other.getValue().value();
}