Lines Matching refs:packet
18 #include "packet.h"
485 tsig_update(tsig_record_type *tsig, buffer_type *packet, size_t length)
489 assert(length <= buffer_limit(packet));
496 buffer_at(packet, sizeof(original_query_id)),
498 if (QR(packet)) {
546 tsig_find_rr(tsig_record_type *tsig, buffer_type *packet)
548 size_t saved_position = buffer_position(packet);
549 size_t rrcount = ((size_t)QDCOUNT(packet)
550 + (size_t)ANCOUNT(packet)
551 + (size_t)NSCOUNT(packet)
552 + (size_t)ARCOUNT(packet));
556 if (ARCOUNT(packet) == 0) {
561 /* impossibly high number of records in 64k, reject packet */
562 buffer_set_position(packet, saved_position);
566 buffer_set_position(packet, QHEADERSZ);
570 if (!packet_skip_rr(packet, i < QDCOUNT(packet))) {
571 buffer_set_position(packet, saved_position);
576 result = tsig_parse_rr(tsig, packet);
577 buffer_set_position(packet, saved_position);
582 tsig_parse_rr(tsig_record_type *tsig, buffer_type *packet)
590 tsig->position = buffer_position(packet);
597 tsig->key_name = dname_make_from_packet(tsig->rr_region, packet, 1, 1);
599 buffer_set_position(packet, tsig->position);
603 if (!buffer_available(packet, 10)) {
604 buffer_set_position(packet, tsig->position);
608 type = buffer_read_u16(packet);
609 klass = buffer_read_u16(packet);
613 buffer_set_position(packet, tsig->position);
617 ttl = buffer_read_u32(packet);
618 rdlen = buffer_read_u16(packet);
622 if (ttl != 0 || !buffer_available(packet, rdlen)) {
623 buffer_set_position(packet, tsig->position);
628 tsig->rr_region, packet, 1, 1);
629 if (!tsig->algorithm_name || !buffer_available(packet, 10)) {
630 buffer_set_position(packet, tsig->position);
634 tsig->signed_time_high = buffer_read_u16(packet);
635 tsig->signed_time_low = buffer_read_u32(packet);
636 tsig->signed_time_fudge = buffer_read_u16(packet);
637 tsig->mac_size = buffer_read_u16(packet);
638 if (!buffer_available(packet, tsig->mac_size)) {
639 buffer_set_position(packet, tsig->position);
645 buffer_set_position(packet, tsig->position);
650 tsig->rr_region, buffer_current(packet), tsig->mac_size);
651 buffer_skip(packet, tsig->mac_size);
652 if (!buffer_available(packet, 6)) {
653 buffer_set_position(packet, tsig->position);
656 tsig->original_query_id = buffer_read_u16(packet);
657 packet);
658 tsig->other_size = buffer_read_u16(packet);
659 if (!buffer_available(packet, tsig->other_size) || tsig->other_size > 16) {
661 buffer_set_position(packet, tsig->position);
665 tsig->rr_region, buffer_current(packet), tsig->other_size);
666 buffer_skip(packet, tsig->other_size);
672 tsig_append_rr(tsig_record_type *tsig, buffer_type *packet)
678 buffer_write(packet, dname_name(tsig->key_name),
680 else buffer_write_u8(packet, 0);
681 buffer_write_u16(packet, TYPE_TSIG);
682 buffer_write_u16(packet, CLASS_ANY);
683 buffer_write_u32(packet, 0); /* TTL */
684 rdlength_pos = buffer_position(packet);
685 buffer_skip(packet, sizeof(uint16_t));
687 buffer_write(packet, dname_name(tsig->algorithm_name),
689 else buffer_write_u8(packet, 0);
690 buffer_write_u16(packet, tsig->signed_time_high);
691 buffer_write_u32(packet, tsig->signed_time_low);
692 buffer_write_u16(packet, tsig->signed_time_fudge);
693 buffer_write_u16(packet, tsig->mac_size);
695 buffer_write(packet, tsig->mac_data, tsig->mac_size);
696 buffer_write_u16(packet, tsig->original_query_id);
697 buffer_write_u16(packet, tsig->error_code);
698 buffer_write_u16(packet, tsig->other_size);
700 buffer_write(packet, tsig->other_data, tsig->other_size);
702 buffer_write_u16_at(packet, rdlength_pos,
703 buffer_position(packet) - rdlength_pos