Skip to content
Snippets Groups Projects
RTPConnectorUDPInputStream.java 2.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
     *
     * Distributable under LGPL license.
     * See terms of license at gnu.org.
     */
    package org.jitsi.impl.neomedia;
    
    import java.io.*;
    import java.net.*;
    
    
    import org.ice4j.socket.*;
    import org.jitsi.service.libjitsi.*;
    
    import org.jitsi.service.packetlogging.*;
    
    /**
     * RTPConnectorInputStream implementation for UDP protocol.
     *
     * @author Sebastien Vincent
     */
    public class RTPConnectorUDPInputStream
        extends RTPConnectorInputStream
    {
        /**
         * UDP socket used to receive data.
         */
        private final DatagramSocket socket;
    
        /**
         * Receive size configured flag.
         */
        private boolean receivedSizeFlag = false;
    
        /**
         * Initializes a new <tt>RTPConnectorInputStream</tt> which is to receive
         * packet data from a specific UDP socket.
         *
         * @param socket the UDP socket the new instance is to receive data from
         */
        public RTPConnectorUDPInputStream(DatagramSocket socket)
        {
            this.socket = socket;
    
            if(socket != null)
            {
                closed = false;
                receiverThread = new Thread(this);
                receiverThread.start();
            }
        }
    
        /**
         * Close this stream, stops the worker thread.
         */
        @Override
        public synchronized void close()
        {
            closed = true;
            if(socket != null)
            {
                socket.close();
            }
        }
    
        /**
         * Log the packet.
         *
         * @param p packet to log
         */
        protected void doLogPacket(DatagramPacket p)
        {
            if(socket.getLocalAddress() == null)
                return;
    
    
            // Do not log the packet if this one has been processed (and already
            // logged) by the ice4j stack.
            if(socket instanceof MultiplexingDatagramSocket)
                return;
    
            PacketLoggingService packetLogging = LibJitsi.getPacketLoggingService();
    
    
            if (packetLogging != null)
                packetLogging.logPacket(
                        PacketLoggingService.ProtocolName.RTP,
                        p.getAddress().getAddress(),
                        p.getPort(),
                        socket.getLocalAddress().getAddress(),
                        socket.getLocalPort(),
                        PacketLoggingService.TransportName.UDP,
                        false,
                        p.getData(),
                        p.getOffset(),
                        p.getLength());
        }
    
        /**
         * Receive packet.
         *
         * @param p packet for receiving
         * @throws IOException if something goes wrong during receiving
         */
        protected void receivePacket(DatagramPacket p)
            throws IOException
        {
            if(!receivedSizeFlag)
            {
                receivedSizeFlag = true;
    
                try
                {
                    socket.setReceiveBufferSize(65535);
                }
                catch(Throwable t)
                {
                }
            }
            socket.receive(p);
        }
    }