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;
}
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 ; }
/* Returns true if the message could be rendered.