blob: c0635fbf987396162039c82c86a3c798acdb026d [file] [log] [blame]
Shuyi Chend7955ce2013-05-22 14:51:55 -07001// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2
3package org.xbill.DNS;
4
5import java.io.*;
6
7/**
8 * Server Selection Record - finds hosts running services in a domain. An
9 * SRV record will normally be named _<service>._<protocol>.domain
10 * - examples would be _sips._tcp.example.org (for the secure SIP protocol) and
11 * _http._tcp.example.com (if HTTP used SRV records)
12 *
13 * @author Brian Wellington
14 */
15
16public class SRVRecord extends Record {
17
18private static final long serialVersionUID = -3886460132387522052L;
19
20private int priority, weight, port;
21private Name target;
22
23SRVRecord() {}
24
25Record
26getObject() {
27 return new SRVRecord();
28}
29
30/**
31 * Creates an SRV Record from the given data
32 * @param priority The priority of this SRV. Records with lower priority
33 * are preferred.
34 * @param weight The weight, used to select between records at the same
35 * priority.
36 * @param port The TCP/UDP port that the service uses
37 * @param target The host running the service
38 */
39public
40SRVRecord(Name name, int dclass, long ttl, int priority,
41 int weight, int port, Name target)
42{
43 super(name, Type.SRV, dclass, ttl);
44 this.priority = checkU16("priority", priority);
45 this.weight = checkU16("weight", weight);
46 this.port = checkU16("port", port);
47 this.target = checkName("target", target);
48}
49
50void
51rrFromWire(DNSInput in) throws IOException {
52 priority = in.readU16();
53 weight = in.readU16();
54 port = in.readU16();
55 target = new Name(in);
56}
57
58void
59rdataFromString(Tokenizer st, Name origin) throws IOException {
60 priority = st.getUInt16();
61 weight = st.getUInt16();
62 port = st.getUInt16();
63 target = st.getName(origin);
64}
65
66/** Converts rdata to a String */
67String
68rrToString() {
69 StringBuffer sb = new StringBuffer();
70 sb.append(priority + " ");
71 sb.append(weight + " ");
72 sb.append(port + " ");
73 sb.append(target);
74 return sb.toString();
75}
76
77/** Returns the priority */
78public int
79getPriority() {
80 return priority;
81}
82
83/** Returns the weight */
84public int
85getWeight() {
86 return weight;
87}
88
89/** Returns the port that the service runs on */
90public int
91getPort() {
92 return port;
93}
94
95/** Returns the host running that the service */
96public Name
97getTarget() {
98 return target;
99}
100
101void
102rrToWire(DNSOutput out, Compression c, boolean canonical) {
103 out.writeU16(priority);
104 out.writeU16(weight);
105 out.writeU16(port);
106 target.toWire(out, null, canonical);
107}
108
109public Name
110getAdditionalName() {
111 return target;
112}
113
114}