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()