1<?php 2/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ 3 4/** 5 * DNS Library for handling lookups and updates. 6 * 7 * PHP Version 5 8 * 9 * Copyright (c) 2011, Mike Pultz <mike@mikepultz.com>. 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 16 * * Redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer. 18 * 19 * * Redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in 21 * the documentation and/or other materials provided with the 22 * distribution. 23 * 24 * * Neither the name of Mike Pultz nor the names of his contributors 25 * may be used to endorse or promote products derived from this 26 * software without specific prior written permission. 27 * 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 31 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 32 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 33 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 34 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 35 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 36 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC 37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 38 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 39 * POSSIBILITY OF SUCH DAMAGE. 40 * 41 * @category Networking 42 * @package Net_DNS2 43 * @author Mike Pultz <mike@mikepultz.com> 44 * @copyright 2011 Mike Pultz <mike@mikepultz.com> 45 * @license http://www.opensource.org/licenses/bsd-license.php BSD License 46 * @version SVN: $Id: URI.php 132 2011-12-03 05:28:54Z mike.pultz $ 47 * @link http://pear.php.net/package/Net_DNS2 48 * @since File available since Release 1.2.0 49 * 50 */ 51 52/** 53 * URI Resource Record - http://tools.ietf.org/html/draft-faltstrom-uri-06 54 * 55 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 56 * | PRIORITY | 57 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 58 * | WEIGHT | 59 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 60 * / TARGET / 61 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 62 * 63 * @category Networking 64 * @package Net_DNS2 65 * @author Mike Pultz <mike@mikepultz.com> 66 * @license http://www.opensource.org/licenses/bsd-license.php BSD License 67 * @link http://pear.php.net/package/Net_DNS2 68 * @see Net_DNS2_RR 69 * 70 */ 71class Net_DNS2_RR_URI extends Net_DNS2_RR 72{ 73 /* 74 * The priority of this target host. 75 */ 76 public $priority; 77 78 /* 79 * a relative weight for entries with the same priority 80 */ 81 public $weight; 82 83 /* 84 * The domain name of the target host 85 */ 86 public $target; 87 88 /** 89 * method to return the rdata portion of the packet as a string 90 * 91 * @return string 92 * @access protected 93 * 94 */ 95 protected function rrToString() 96 { 97 // 98 // presentation format has double quotes (") around the target. 99 // 100 return $this->priority . ' ' . $this->weight . ' "' . 101 $this->cleanString($this->target) . '"'; 102 } 103 104 /** 105 * parses the rdata portion from a standard DNS config line 106 * 107 * @param array $rdata a string split line of values for the rdata 108 * 109 * @return boolean 110 * @access protected 111 * 112 */ 113 protected function rrFromString(array $rdata) 114 { 115 $this->priority = $rdata[0]; 116 $this->weight = $rdata[1]; 117 118 // 119 // make sure to trim the lead/trailing double quote if it's there. 120 // 121 $this->target = trim($this->cleanString($rdata[2]), '"'); 122 123 return true; 124 } 125 126 /** 127 * parses the rdata of the Net_DNS2_Packet object 128 * 129 * @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from 130 * 131 * @return boolean 132 * @access protected 133 * 134 */ 135 protected function rrSet(Net_DNS2_Packet &$packet) 136 { 137 if ($this->rdlength > 0) { 138 139 // 140 // unpack the priority and weight 141 // 142 $x = unpack('npriority/nweight', $this->rdata); 143 144 $this->priority = $x['priority']; 145 $this->weight = $x['weight']; 146 147 $offset = $packet->offset + 4; 148 $this->target = Net_DNS2_Packet::expand($packet, $offset); 149 150 return true; 151 } 152 153 return false; 154 } 155 156 /** 157 * returns the rdata portion of the DNS packet 158 * 159 * @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for 160 * compressed names 161 * 162 * @return mixed either returns a binary packed 163 * string or null on failure 164 * @access protected 165 * 166 */ 167 protected function rrGet(Net_DNS2_Packet &$packet) 168 { 169 if (strlen($this->target) > 0) { 170 171 $data = pack('nn', $this->priority, $this->weight); 172 $packet->offset += 4; 173 174 $data .= $packet->compress(trim($this->target, '"'), $packet->offset); 175 176 return $data; 177 } 178 179 return null; 180 } 181} 182 183?> 184