Android Open Source - multicast_test_tool D N S Answer






From Project

Back to project page multicast_test_tool.

License

The source code is released under:

Apache License

If you think the Android project multicast_test_tool listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011 David Simmons/*from  w w  w.j ava 2s  . c om*/
 * http://cafbit.com/entry/testing_multicast_support_on_android
 *
 * 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 com.cafbit.netlib.dns;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * This class represents a DNS "answer" component.
 * @author simmons
 */
public class DNSAnswer extends DNSComponent {
    
    public String name;
    public Type type;
    public int ttl;
    public byte[] rdata;
    public String rdataString;

    public DNSAnswer(DNSBuffer buffer) {
        parse(buffer);
    }

    @Override
    public int length() {
        // TODO: implement
        return 0;
    }

    @Override
    public void serialize(DNSBuffer buffer) {
        // TODO: implement
    }

    private void parse(DNSBuffer buffer) {
        name = buffer.readName();
        type = Type.getType(buffer.readShort());
        
        // the most significant bit of the rrclass is special
        // in Multicast DNS -- it is used as a "cache flush" bit,
        // and only the least significant 15 bits should be used
        // as the class.
        // see:
        //   http://tools.ietf.org/html/draft-cheshire-dnsext-multicastdns-05
        //   section 11.3
        int aclass = buffer.readShortAsInt();
        //boolean cacheFlush = ((aclass & 0x8000) != 0);
        aclass = aclass & 0x7FFF;
        if (aclass != 1) {
            throw new DNSException("only class IN supported.  (got "+aclass+")");
        }
        
        ttl = buffer.readInteger();
        rdata = buffer.readRdata();
        
        if (type.equals(Type.A) || type.equals(Type.AAAA)) {
            try {
                rdataString = InetAddress.getByAddress(rdata).toString();
            } catch (UnknownHostException e) {
                throw new DNSException("problem parsing rdata");
            }
        } else if (type.equals(Type.TXT)) {
            rdataString = "";
            for (int i=0; i<rdata.length; ) {
                int length = rdata[i++];
                rdataString += DNSBuffer.bytesToString(rdata, i, length);
                i += length;
                if (i != rdata.length) {
                    rdataString += " // ";
                }
            }
        } else if (type.equals(Type.PTR)) {
            // rewind the buffer to the beginning of the
            // name (just after the 16-bit name-length field)
            // and reparse the name to allow for compression
            // offsets.
            int oldoffset = buffer.offset;
            buffer.offset -= rdata.length;
            rdataString = buffer.readName();
            if (oldoffset != buffer.offset) {
                throw new DNSException("bad PTR rdata");
            }
        } else {
            rdataString = "data["+rdata.length+"]";
        }

    }
    
    public String toString() {
        return name+" "+type.toString()+" "+getRdataString();
    }

    public String getRdataString() {
        return rdataString;
    }
}




Java Source Code List

com.cafbit.multicasttest.MulticastTestActivity.java
com.cafbit.multicasttest.NetThread.java
com.cafbit.multicasttest.PacketListAdapter.java
com.cafbit.multicasttest.Packet.java
com.cafbit.multicasttest.Util.java
com.cafbit.netlib.NetUtil.java
com.cafbit.netlib.dns.DNSAnswer.java
com.cafbit.netlib.dns.DNSBuffer.java
com.cafbit.netlib.dns.DNSComponent.java
com.cafbit.netlib.dns.DNSException.java
com.cafbit.netlib.dns.DNSMessage.java
com.cafbit.netlib.dns.DNSQuestion.java