All Downloads are FREE. Search and download functionalities are using the official Maven repository.

android.net.rtp.RtpStream Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 14-robolectric-10818077
Show newest version
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * 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 android.net.rtp;

import java.net.InetAddress;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.SocketException;

/**
 * RtpStream represents the base class of streams which send and receive network
 * packets with media payloads over Real-time Transport Protocol (RTP).
 *
 * 

Using this class requires * {@link android.Manifest.permission#INTERNET} permission.

*/ public class RtpStream { /** * This mode indicates that the stream sends and receives packets at the * same time. This is the initial mode for new streams. */ public static final int MODE_NORMAL = 0; /** * This mode indicates that the stream only sends packets. */ public static final int MODE_SEND_ONLY = 1; /** * This mode indicates that the stream only receives packets. */ public static final int MODE_RECEIVE_ONLY = 2; private static final int MODE_LAST = 2; private final InetAddress mLocalAddress; private final int mLocalPort; private InetAddress mRemoteAddress; private int mRemotePort = -1; private int mMode = MODE_NORMAL; private int mSocket = -1; static { System.loadLibrary("rtp_jni"); } /** * Creates a RtpStream on the given local address. Note that the local * port is assigned automatically to conform with RFC 3550. * * @param address The network address of the local host to bind to. * @throws SocketException if the address cannot be bound or a problem * occurs during binding. */ RtpStream(InetAddress address) throws SocketException { mLocalPort = create(address.getHostAddress()); mLocalAddress = address; } private native int create(String address) throws SocketException; /** * Returns the network address of the local host. */ public InetAddress getLocalAddress() { return mLocalAddress; } /** * Returns the network port of the local host. */ public int getLocalPort() { return mLocalPort; } /** * Returns the network address of the remote host or {@code null} if the * stream is not associated. */ public InetAddress getRemoteAddress() { return mRemoteAddress; } /** * Returns the network port of the remote host or {@code -1} if the stream * is not associated. */ public int getRemotePort() { return mRemotePort; } /** * Returns {@code true} if the stream is busy. In this case most of the * setter methods are disabled. This method is intended to be overridden * by subclasses. */ public boolean isBusy() { return false; } /** * Returns the current mode. */ public int getMode() { return mMode; } /** * Changes the current mode. It must be one of {@link #MODE_NORMAL}, * {@link #MODE_SEND_ONLY}, and {@link #MODE_RECEIVE_ONLY}. * * @param mode The mode to change to. * @throws IllegalArgumentException if the mode is invalid. * @throws IllegalStateException if the stream is busy. * @see #isBusy() */ public void setMode(int mode) { if (isBusy()) { throw new IllegalStateException("Busy"); } if (mode < 0 || mode > MODE_LAST) { throw new IllegalArgumentException("Invalid mode"); } mMode = mode; } /** * Associates with a remote host. This defines the destination of the * outgoing packets. * * @param address The network address of the remote host. * @param port The network port of the remote host. * @throws IllegalArgumentException if the address is not supported or the * port is invalid. * @throws IllegalStateException if the stream is busy. * @see #isBusy() */ public void associate(InetAddress address, int port) { if (isBusy()) { throw new IllegalStateException("Busy"); } if (!(address instanceof Inet4Address && mLocalAddress instanceof Inet4Address) && !(address instanceof Inet6Address && mLocalAddress instanceof Inet6Address)) { throw new IllegalArgumentException("Unsupported address"); } if (port < 0 || port > 65535) { throw new IllegalArgumentException("Invalid port"); } mRemoteAddress = address; mRemotePort = port; } int getSocket() { return mSocket; } /** * Releases allocated resources. The stream becomes inoperable after calling * this method. * * @throws IllegalStateException if the stream is busy. * @see #isBusy() */ public void release() { synchronized (this) { if (isBusy()) { throw new IllegalStateException("Busy"); } close(); } } private native void close(); @Override protected void finalize() throws Throwable { close(); super.finalize(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy