code: private boolean
  toWire(DNSOutput out, int maxLength) {
  	if (maxLength < Header.LENGTH)
  		return false;
  
  	Header newheader = null;
  
  	int tempMaxLength = maxLength;
  	if (tsigkey != null)
  		tempMaxLength -= tsigkey.recordLength();
  
  	int startpos = out.current();
  	header.toWire(out);
  	Compression c = new Compression();
  	for (int i = 0; i < 4; i++) {
  		int skipped;
  		if (sections[i] == null)
  			continue;
  		skipped = sectionToWire(out, i, c, tempMaxLength);
  		if (skipped != 0) {
  			if (newheader == null)
  				newheader = (Header) header.clone();
  			if (i != Section.ADDITIONAL)
  				newheader.setFlag(Flags.TC);
  			int count = newheader.getCount(i);
  			newheader.setCount(i, count - skipped);
  			for (int j = i + 1; j < 4; j++)
  				newheader.setCount(j, 0);
  
  			out.save();
  			out.jump(startpos);
  			newheader.toWire(out);
  			out.restore();
  			break;
  		}
  	}
  
  	if (tsigkey != null) {
  		TSIGRecord tsigrec = tsigkey.generate(this, out.toByteArray(),
  						      tsigerror, querytsig);
  
  		if (newheader == null)
  			newheader = (Header) header.clone();
  		tsigrec.toWire(out, Section.ADDITIONAL, c);
  		newheader.incCount(Section.ADDITIONAL);
  
  		out.save();
  		out.jump(startpos);
  		newheader.toWire(out);
  		out.restore();
  	}
  
  	return true;
  }
docs: /* Returns true if the message could be rendered.