start = in.getPos(); while ((len = in.readUnsignedByte()) != 0) { if ((len & 0xC0) != 0) { int pos = in.readUnsignedByte(); pos += ((len & ~0xC0) << 8); dnsName name2 = (c == null) ? null : c.get(pos);  if (name2 == null) name[labels++] = new String("<compressed>"); else { System.arraycopy(name2.name, 0, name, labels, name2.labels); labels += name2.labels; } break;
if (s.equals("@") && origin != null) { append(origin); return; } try { MyStringTokenizer st = new MyStringTokenizer(s, ".");  while (st.hasMoreTokens()) name[labels++] = st.nextToken();  if (!st.hasMoreDelimiters() && origin != null) append(origin); } catch (ArrayIndexOutOfBoundsException e) { StringBuffer sb = new StringBuffer(); sb.append("String "); sb.append(s); if (origin != null) { sb.append("."); sb.append(origin);
dnsName(CountedDataInputStream in, dnsCompression c) throws IOException {	int len, start, count = 0;	labels = 0;	name = new String[MAXLABELS];	start = in.getPos();	while ((len = in.readUnsignedByte()) != 0) {		if ((len & 0xC0) != 0) {			int pos = in.readUnsignedByte();			pos += ((len & ~0xC0) << 8);			dnsName name2 = (c == null) ? null : c.get(pos);/*System.out.println("Looking for name at " + pos + ", found " + name2);*/			if (name2 == null)				name[labels++] = new String("<compressed>");			else {				System.arraycopy(name2.name, 0, name, labels,						 name2.labels);				labels += name2.labels;			}			break;		}		byte [] b = new byte[len];		in.read(b);		name[labels++] = new String(b);		count++;	}	if (c != null) 		for (int i = 0, pos = start; i < count; i++) {			dnsName tname = new dnsName(this, i);			c.add(pos, tname);/*System.out.println("(D) Adding " + tname + " at " + pos);*/			pos += (name[i].length() + 1);		}}