Package org.jnode.net.ipv4.udp

Source Code of org.jnode.net.ipv4.udp.UDPDatagramSocketImpl

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.net.ipv4.udp;

import org.jnode.net.SocketBuffer;
import org.jnode.net.ipv4.IPv4Address;
import org.jnode.net.ipv4.IPv4Constants;
import org.jnode.net.ipv4.IPv4Header;
import org.jnode.net.util.AbstractDatagramSocketImpl;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.ExSocketOptions;
import java.net.InetAddress;
import java.net.SocketException;

/**
* @author epr
* @author Martin Husted Hartvig (hagar@jnode.org)
*/
public class UDPDatagramSocketImpl extends AbstractDatagramSocketImpl implements IPv4Constants,
        UDPConstants, ExSocketOptions {
    /**
     * The UDP protocol we're using
     */
    private final UDPProtocol protocol;

    /**
     * Create a new instance
     *
     * @param protocol
     */
    public UDPDatagramSocketImpl(UDPProtocol protocol) {
        this.protocol = protocol;
    }

    /**
     * @see java.net.DatagramSocketImpl#bind(int, java.net.InetAddress)
     */
    protected void doBind(int lport, InetAddress laddr) throws SocketException {
        protocol.bind(this);
    }

    /**
     * @see java.net.DatagramSocketImpl#close()
     */
    protected void doClose() {
        protocol.unbind(this);
    }

    /**
     * @see java.net.DatagramSocketImpl#getTTL()
     */
    protected byte getTTL() throws IOException {
        // TODO Auto-generated method stub
        return 0;
    }

    /**
     * @see java.net.DatagramSocketImpl#receive(java.net.DatagramPacket)
     */
    protected void onReceive(DatagramPacket p, SocketBuffer skbuf) throws IOException {
        final IPv4Header ipHdr = (IPv4Header) skbuf.getNetworkLayerHeader();
        final UDPHeader udpHdr = (UDPHeader) skbuf.getTransportLayerHeader();
        p.setData(skbuf.toByteArray(), 0, skbuf.getSize());
        p.setAddress(ipHdr.getSource().toInetAddress());
        p.setPort(udpHdr.getSrcPort());
    }

    /**
     * @see java.net.DatagramSocketImpl#send(java.net.DatagramPacket)
     */
    protected void send(DatagramPacket p) throws IOException {

        final IPv4Address dstAddress = new IPv4Address(p.getAddress());
        final IPv4Header ipHdr;
        ipHdr = new IPv4Header(getTos(), getTimeToLive(), IPPROTO_UDP, dstAddress, p.getLength() + UDP_HLEN);
        if (!getLocalAddress().isAnyLocalAddress() || (getDevice() != null)) {
            ipHdr.setSource(new IPv4Address(getLocalAddress()));
        }
        final UDPHeader udpHdr;
        final int srcPort = getLocalPort();
        // final int srcPort = p.getPort(); // or getLocalPort???? TODO Fix
        // srcPort issue
        udpHdr = new UDPHeader(srcPort, p.getPort(), p.getLength());

        final SocketBuffer skbuf = new SocketBuffer(p.getData(), p.getOffset(), p.getLength());
        skbuf.setDevice(getDevice());
        protocol.send(ipHdr, udpHdr, skbuf);
    }

    public void setLocalPort(int localPort) {
        this.localPort = localPort;
    }

    /**
     * @see java.net.DatagramSocketImpl#setTTL(byte)
     */
    protected void setTTL(byte ttl) throws IOException {
        // TODO Auto-generated method stub

    }
}
TOP

Related Classes of org.jnode.net.ipv4.udp.UDPDatagramSocketImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.