You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2005/01/13 10:30:48 UTC

svn commit: r125052 - in incubator/directory/dns/trunk/core/src/java/org/apache/dns: io records

Author: erodriguez
Date: Thu Jan 13 01:30:44 2005
New Revision: 125052

URL: http://svn.apache.org/viewcvs?view=rev&rev=125052
Log:
Refactoring in preparation for Resource Record build-out.
Added:
   incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/Record.java
Modified:
   incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java
   incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java
   incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java
   incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java

Modified: incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java?view=diff&rev=125052&p1=incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java&r1=125051&p2=incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java&r2=125052
==============================================================================
--- incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java	(original)
+++ incubator/directory/dns/trunk/core/src/java/org/apache/dns/io/DnsMessageEncoder.java	Thu Jan 13 01:30:44 2005
@@ -23,8 +23,7 @@
 import org.apache.dns.messages.MessageType;
 import org.apache.dns.messages.OpCode;
 import org.apache.dns.messages.ResponseCode;
-import org.apache.dns.records.QuestionRecord;
-import org.apache.dns.records.ResourceRecord;
+import org.apache.dns.records.Record;
 
 public class DnsMessageEncoder
 {
@@ -50,57 +49,12 @@
 		byteBuffer.putShort( (short)message.getAuthorityRecords().length );
 		byteBuffer.putShort( (short)message.getAdditionalRecords().length );
 		
-		encodeQuestions( message.getQuestionRecords(), byteBuffer );
+		encodeRecords( message.getQuestionRecords(), byteBuffer );
 		encodeRecords( message.getAnswerRecords(), byteBuffer );
 		encodeRecords( message.getAuthorityRecords(), byteBuffer );
 		encodeRecords( message.getAdditionalRecords(), byteBuffer );
 	}
 	
-	private void encodeRecords( ResourceRecord[] records, ByteBuffer byteBuffer )
-	{
-		for ( int ii = 0; ii < records.length; ii++ )
-		{
-			encodeDomainName( records[ ii ].getDomainName(), byteBuffer );
-			
-			byteBuffer.putShort( (short)records[ ii ].getRecordType().getOrdinal() );
-			byteBuffer.putShort( (short)records[ ii ].getRecordClass().getOrdinal() );
-			
-			byteBuffer.putInt( records[ ii ].getTimeToLive() );
-			byteBuffer.putShort( (short)records[ ii ].getResourceDataLength() );
-			
-			records[ ii ].writeTo( byteBuffer );
-		}
-	}
-	
-	private void encodeQuestions( QuestionRecord[] records, ByteBuffer byteBuffer )
-	{
-		for ( int ii = 0; ii < records.length; ii++ )
-		{
-			encodeDomainName( records[ ii ].getDomainName(), byteBuffer );
-			
-			byteBuffer.putShort( (short)records[ ii ].getRecordType().getOrdinal() );
-			byteBuffer.putShort( (short)records[ ii ].getRecordClass().getOrdinal() );
-		}
-	}
-	
-	private void encodeDomainName( String domainName, ByteBuffer byteBuffer )
-	{
-		String[] labels = domainName.split("\\.");
-		
-		for ( int ii = 0; ii < labels.length; ii++ )
-		{
-			byteBuffer.put( (byte)labels[ ii ].length() );
-			
-			char[] characters = labels[ ii ].toCharArray();
-			for ( int jj = 0; jj < characters.length; jj++ )
-			{
-				byteBuffer.put( (byte)characters[ jj ] );
-			}
-		}
-		
-		byteBuffer.put( (byte)0x00 );
-	}
-	
 	private byte encodeMessageType( MessageType messageType, byte header )
 	{
 		byte oneBit = (byte)( messageType.getOrdinal() & 0x01 );
@@ -153,6 +107,14 @@
 	{
 		byte fourBits = (byte)( responseCode.getOrdinal() & 0x0F );
 		return (byte)( fourBits | header );
+	}
+	
+	private void encodeRecords( Record[] records, ByteBuffer byteBuffer )
+	{
+		for ( int ii = 0; ii < records.length; ii++ )
+		{
+			records[ ii ].writeTo( byteBuffer );
+		}
 	}
 }
 

Modified: incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java?view=diff&rev=125052&p1=incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java&r1=125051&p2=incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java&r2=125052
==============================================================================
--- incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java	(original)
+++ incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/InternetResource.java	Thu Jan 13 01:30:44 2005
@@ -17,24 +17,13 @@
 
 package org.apache.dns.records;
 
-import java.nio.ByteBuffer;
-
 
 public abstract class InternetResource extends ResourceRecord
 {
-	private byte[] resourceData;
-	
 	public InternetResource( String domainName, RecordType recordType,
 			int timeToLive, byte[] resourceData )
 	{
 		super( domainName, recordType, RecordClass.IN, timeToLive, resourceData );
-		
-		this.resourceData = resourceData;
-	}
-	
-	protected void dataToByteBuffer( ByteBuffer out )
-	{
-		out.put( resourceData );
 	}
 }
 

Modified: incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java?view=diff&rev=125052&p1=incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java&r1=125051&p2=incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java&r2=125052
==============================================================================
--- incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java	(original)
+++ incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/QuestionRecord.java	Thu Jan 13 01:30:44 2005
@@ -18,7 +18,6 @@
 package org.apache.dns.records;
 
 
-
 /**
  * The question section is used to carry the "question" in most queries,
  * i.e., the parameters that define what is being asked.  The section
@@ -36,63 +35,16 @@
  *     |                     QCLASS                    |
  *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  */
-public class QuestionRecord
+public class QuestionRecord extends Record
 {
-	private String      domainName;
-	private RecordType  recordType;
-	private RecordClass recordClass;
-	
-	
 	public QuestionRecord( String domainName, RecordType recordType, RecordClass recordClass )
 	{
-		this.domainName  = domainName;
-		this.recordType  = recordType;
-		this.recordClass = recordClass;
-	}
-	
-	
-	/**
-	 * A two octet code that specifies the class of the query.
-     * For example, the QCLASS field is IN for the Internet.
-	 * 
-	 * @return Returns the questionClass.
-	 */
-	public RecordClass getRecordClass()
-	{
-		return recordClass;
-	}
-	
-	/**
-	 * A domain name represented as a sequence of labels, where
-	 * each label consists of a length octet followed by that
-	 * number of octets.  The domain name terminates with the
-	 * zero length octet for the null label of the root.  Note
-	 * that this field may be an odd number of octets; no
-	 * padding is used.
-	 * 
-	 * @return Returns the questionName.
-	 */
-	public String getDomainName()
-	{
-		return domainName;
-	}
-	
-	/**
-	 * A two octet code which specifies the type of the query.
-	 * The values for this field include all codes valid for a
-	 * TYPE field, together with some more general codes which
-	 * can match more than one type of RR.
-	 * 
-	 * @return Returns the questionType.
-	 */
-	public RecordType getRecordType()
-	{
-		return recordType;
+		super( domainName, recordType, recordClass );
 	}
 	
 	public String toString()
 	{
-		return "org.apache.dns.records.QuestionRecord[ " + domainName + " ( " +
+		return getClass().getName() + "[ " + domainName + " ( " +
 				recordClass + " " + recordType + " ) ]";
 	}
 }

Added: incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/Record.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/Record.java?view=auto&rev=125052
==============================================================================
--- (empty file)
+++ incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/Record.java	Thu Jan 13 01:30:44 2005
@@ -0,0 +1,119 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.dns.records;
+
+import java.nio.ByteBuffer;
+
+/**
+ *                                     1  1  1  1  1  1
+ *       0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+ *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ *     |                                               |
+ *     /                                               /
+ *     /                      NAME                     /
+ *     |                                               |
+ *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ *     |                      TYPE                     |
+ *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ *     |                     CLASS                     |
+ *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ */
+public abstract class Record
+{
+	/**
+	 * A domain name represented as a sequence of labels, where
+	 * each label consists of a length octet followed by that
+	 * number of octets.  The domain name terminates with the
+	 * zero length octet for the null label of the root.  Note
+	 * that this field may be an odd number of octets; no
+	 * padding is used.
+	 */
+	protected String domainName;
+	
+	/**
+	 * A two octet code which specifies the type.
+	 */
+	protected RecordType recordType;
+	
+	/**
+	 * A two octet code that specifies the class.
+     * For example, the CLASS field is IN for the Internet.
+	 */
+	protected RecordClass recordClass;
+	
+	
+	public Record( String domainName, RecordType recordType, RecordClass recordClass )
+	{
+		this.domainName  = domainName;
+		this.recordType  = recordType;
+		this.recordClass = recordClass;
+	}
+	
+	
+	public void writeTo( ByteBuffer out )
+	{
+		dataToByteBuffer( out );
+	}
+	
+	protected void dataToByteBuffer( ByteBuffer byteBuffer )
+	{
+		encodeDomainName( byteBuffer, domainName );
+		encodeRecordType( byteBuffer, recordType );
+		encodeRecordClass( byteBuffer, recordClass );
+	}
+	
+	protected void encodeDomainName( ByteBuffer byteBuffer, String domainName )
+	{
+		String[] labels = domainName.split("\\.");
+		
+		for ( int ii = 0; ii < labels.length; ii++ )
+		{
+			byteBuffer.put( (byte)labels[ ii ].length() );
+			
+			char[] characters = labels[ ii ].toCharArray();
+			for ( int jj = 0; jj < characters.length; jj++ )
+			{
+				byteBuffer.put( (byte)characters[ jj ] );
+			}
+		}
+		
+		byteBuffer.put( (byte)0x00 );
+	}
+	
+	protected void encodeRecordType( ByteBuffer byteBuffer, RecordType recordType )
+	{
+		byteBuffer.putShort( (short)recordType.getOrdinal() );
+	}
+	
+	protected void encodeRecordClass( ByteBuffer byteBuffer, RecordClass recordClass )
+	{
+		byteBuffer.putShort( (short)recordClass.getOrdinal() );
+	}
+	
+	protected byte[] domainNameToByteArray( String domainName )
+	{
+		ByteBuffer byteBuffer = ByteBuffer.allocate( 256 );
+		encodeDomainName( byteBuffer, domainName );
+		byte[] bytes = new byte[ byteBuffer.position() ];
+		byteBuffer.rewind();
+		byteBuffer.get( bytes );
+		
+		return bytes;
+	}
+}
+

Modified: incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java?view=diff&rev=125052&p1=incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java&r1=125051&p2=incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java&r2=125052
==============================================================================
--- incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java	(original)
+++ incubator/directory/dns/trunk/core/src/java/org/apache/dns/records/ResourceRecord.java	Thu Jan 13 01:30:44 2005
@@ -45,70 +45,34 @@
  *     /                                               /
  *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  */
-public abstract class ResourceRecord
+public abstract class ResourceRecord extends Record
 {
-	private String      domainName;
-	private RecordType  recordType;
-	private RecordClass recordClass;
-	
-	private int         timeToLive;
-	private byte[]      resourceData;
+	protected int    timeToLive;
+	protected byte[] resourceData;
 	
 	public ResourceRecord( String domainName, RecordType recordType, RecordClass recordClass,
 			int timeToLive, byte[] resourceData )
 	{
-		this.domainName   = domainName;
-		this.recordType   = recordType;
-		this.recordClass  = recordClass;
+		super( domainName, recordType, recordClass );
+		
 		this.timeToLive   = timeToLive;
 		this.resourceData = resourceData;
+		
+		decodeResourceData( resourceData );
 	}
 	
-	/**
-	 * @return Returns the domain name.
-	 */
-	public String getDomainName()
-	{
-		return domainName;
-	}
-	
-	/**
-	 * @return Returns the record type.
-	 */
-	public RecordType getRecordType()
-	{
-		return recordType;
-	}
-	
-	/**
-	 * @return Returns the record class.
-	 */
-	public RecordClass getRecordClass()
-	{
-		return recordClass;
-	}
-	
-	/**
-	 * @return Returns the resource data length.
-	 */
-	public int getResourceDataLength()
-	{
-		return resourceData.length;
-	}
-	
-	/**
-	 * @return Returns the time-to-live (TTL).
-	 */
-	public int getTimeToLive()
-	{
-		return timeToLive;
-	}
-	
-	abstract protected void dataToByteBuffer( ByteBuffer out );
+	abstract protected void decodeResourceData( byte[] resourceData );	
+	abstract protected byte[] encodeResourceData();
 	
-	public void writeTo( ByteBuffer out )
+	protected void dataToByteBuffer( ByteBuffer byteBuffer )
 	{
-		dataToByteBuffer( out );
+		super.dataToByteBuffer( byteBuffer );
+		
+		byteBuffer.putInt( timeToLive );
+		
+		byte[] resourceData = encodeResourceData();
+		byteBuffer.putShort( (short)resourceData.length );
+		byteBuffer.put( resourceData );
 	}
 	
 	public String toString()