MCPcopy Create free account
hub / github.com/DeNA/PacketProxy / generateReply

Method generateReply

src/main/java/core/org/xbill/DNS/jnamed.java:369–441  ·  view source on GitHub ↗
(Message query, byte [] in, int length, Socket s)

Source from the content-addressed store, hash-verified

367 * TCP.
368 */
369public byte []
370generateReply(Message query, byte [] in, int length, Socket s)
371throws IOException
372{
373 Header header;
374 boolean badversion;
375 int maxLength;
376 int flags = 0;
377
378 header = query.getHeader();
379 if (header.getFlag(Flags.QR))
380 return null;
381 if (header.getRcode() != Rcode.NOERROR)
382 return errorMessage(query, Rcode.FORMERR);
383 if (header.getOpcode() != Opcode.QUERY)
384 return errorMessage(query, Rcode.NOTIMP);
385
386 Record queryRecord = query.getQuestion();
387
388
389 TSIGRecord queryTSIG = query.getTSIG();
390 TSIG tsig = null;
391 if (queryTSIG != null) {
392 tsig = (TSIG) TSIGs.get(queryTSIG.getName());
393 if (tsig == null ||
394 tsig.verify(query, in, length, null) != Rcode.NOERROR)
395 return formerrMessage(in);
396 }
397
398 OPTRecord queryOPT = query.getOPT();
399 if (queryOPT != null && queryOPT.getVersion() > 0)
400 badversion = true;
401
402 if (s != null)
403 maxLength = 65535;
404 else if (queryOPT != null)
405 maxLength = Math.max(queryOPT.getPayloadSize(), 512);
406 else
407 maxLength = 512;
408
409 if (queryOPT != null && (queryOPT.getFlags() & ExtendedFlags.DO) != 0)
410 flags = FLAG_DNSSECOK;
411
412 Message response = new Message(query.getHeader().getID());
413 response.getHeader().setFlag(Flags.QR);
414 if (query.getHeader().getFlag(Flags.RD))
415 response.getHeader().setFlag(Flags.RD);
416 response.addRecord(queryRecord, Section.QUESTION);
417
418 Name name = queryRecord.getName();
419 int type = queryRecord.getType();
420 int dclass = queryRecord.getDClass();
421 if (type == Type.AXFR && s != null)
422 return doAXFR(name, query, tsig, queryTSIG, s);
423 if (!Type.isRR(type) && type != Type.ANY)
424 return errorMessage(query, Rcode.NOTIMP);
425
426 byte rcode = addAnswer(response, name, type, dclass, 0, flags);

Callers 3

runMethod · 0.95
TCPclientMethod · 0.95
serveUDPMethod · 0.95

Calls 15

getHeaderMethod · 0.95
getFlagMethod · 0.95
getRcodeMethod · 0.95
errorMessageMethod · 0.95
getOpcodeMethod · 0.95
verifyMethod · 0.95
formerrMessageMethod · 0.95
getVersionMethod · 0.95
getPayloadSizeMethod · 0.95
getFlagsMethod · 0.95
addRecordMethod · 0.95
getNameMethod · 0.95

Tested by

no test coverage detected