1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 2004 Brian Wellington (bwelling@xbill.org)
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS;
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.*;
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Implements common functionality for the many record types whose format
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * is an unsigned 16 bit integer followed by a name.
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenabstract class U16NameBase extends Record {
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static final long serialVersionUID = -8315884183112502995L;
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected int u16Field;
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected Name nameField;
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenU16NameBase() {}
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenU16NameBase(Name name, int type, int dclass, long ttl) {
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	super(name, type, dclass, ttl);
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenU16NameBase(Name name, int type, int dclass, long ttl, int u16Field,
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	    String u16Description, Name nameField, String nameDescription)
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	super(name, type, dclass, ttl);
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	this.u16Field = checkU16(u16Description, u16Field);
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	this.nameField = checkName(nameDescription, nameField);
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrrFromWire(DNSInput in) throws IOException {
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	u16Field = in.readU16();
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	nameField = new Name(in);
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrdataFromString(Tokenizer st, Name origin) throws IOException {
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	u16Field = st.getUInt16();
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	nameField = st.getName(origin);
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenString
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrrToString() {
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	StringBuffer sb = new StringBuffer();
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	sb.append(u16Field);
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	sb.append(" ");
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	sb.append(nameField);
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return sb.toString();
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected int
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChengetU16Field() {
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return u16Field;
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected Name
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChengetNameField() {
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return nameField;
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrrToWire(DNSOutput out, Compression c, boolean canonical) {
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	out.writeU16(u16Field);
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	nameField.toWire(out, null, canonical);
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
76