1 // Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2 
3 package org.xbill.DNS;
4 
5 import 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 
16 public class SRVRecord extends Record {
17 
18 private static final long serialVersionUID = -3886460132387522052L;
19 
20 private int priority, weight, port;
21 private Name target;
22 
SRVRecord()23 SRVRecord() {}
24 
25 Record
getObject()26 getObject() {
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  */
39 public
SRVRecord(Name name, int dclass, long ttl, int priority, int weight, int port, Name target)40 SRVRecord(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 
50 void
rrFromWire(DNSInput in)51 rrFromWire(DNSInput in) throws IOException {
52 	priority = in.readU16();
53 	weight = in.readU16();
54 	port = in.readU16();
55 	target = new Name(in);
56 }
57 
58 void
rdataFromString(Tokenizer st, Name origin)59 rdataFromString(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 */
67 String
rrToString()68 rrToString() {
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 */
78 public int
getPriority()79 getPriority() {
80 	return priority;
81 }
82 
83 /** Returns the weight */
84 public int
getWeight()85 getWeight() {
86 	return weight;
87 }
88 
89 /** Returns the port that the service runs on */
90 public int
getPort()91 getPort() {
92 	return port;
93 }
94 
95 /** Returns the host running that the service */
96 public Name
getTarget()97 getTarget() {
98 	return target;
99 }
100 
101 void
rrToWire(DNSOutput out, Compression c, boolean canonical)102 rrToWire(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 
109 public Name
getAdditionalName()110 getAdditionalName() {
111 	return target;
112 }
113 
114 }
115