src/org/sipdroid/net/RtpSocket.java
author nikita@nikita-laptop
Sat, 23 Jan 2010 22:19:43 +0100
changeset 834 e8d6255306f8
child 835 4e40f3481f23
permissions -rw-r--r--
Sipdroid Basic
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     1
/*
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     2
 * Copyright (C) 2009 The Sipdroid Open Source Project
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     3
 * Copyright (C) 2005 Luca Veltri - University of Parma - Italy
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     4
 * 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     5
 * This file is part of Sipdroid (http://www.sipdroid.org)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     6
 * 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     7
 * Sipdroid is free software; you can redistribute it and/or modify
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     8
 * it under the terms of the GNU General Public License as published by
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
     9
 * the Free Software Foundation; either version 3 of the License, or
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    10
 * (at your option) any later version.
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    11
 * 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    12
 * This source code is distributed in the hope that it will be useful,
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    15
 * GNU General Public License for more details.
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    16
 * 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    18
 * along with this source code; if not, write to the Free Software
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    19
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    20
 */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    21
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    22
package src.org.sipdroid.net;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    23
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    24
import java.net.InetAddress;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    25
import java.net.DatagramPacket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    26
import java.io.IOException;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    27
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    28
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    29
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    30
/**
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    31
 * RtpSocket implements a RTP socket for receiving and sending RTP packets.
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    32
 * <p>
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    33
 * RtpSocket is associated to a DatagramSocket that is used to send and/or
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    34
 * receive RtpPackets.
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    35
 */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    36
public class RtpSocket {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    37
	/** UDP socket */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    38
	SipdroidSocket socket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    39
	DatagramPacket datagram;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    40
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    41
	/** Remote address */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    42
	InetAddress r_addr;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    43
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    44
	/** Remote port */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    45
	int r_port;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    46
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    47
	/** Creates a new RTP socket (only receiver) */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    48
	public RtpSocket(SipdroidSocket datagram_socket) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    49
		socket = datagram_socket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    50
		r_addr = null;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    51
		r_port = 0;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    52
		datagram = new DatagramPacket(new byte[1],1);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    53
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    54
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    55
	/** Creates a new RTP socket (sender and receiver) */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    56
	public RtpSocket(SipdroidSocket datagram_socket,
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    57
			InetAddress remote_address, int remote_port) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    58
		socket = datagram_socket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    59
		r_addr = remote_address;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    60
		r_port = remote_port;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    61
		datagram = new DatagramPacket(new byte[1],1);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    62
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    63
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    64
	/** Returns the RTP SipdroidSocket */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    65
	public SipdroidSocket getDatagramSocket() {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    66
		return socket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    67
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    68
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    69
	/** Receives a RTP packet from this socket */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    70
	public void receive(RtpPacket rtpp) throws IOException {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    71
		datagram.setData(rtpp.packet);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    72
		datagram.setLength(rtpp.packet.length);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    73
		socket.receive(datagram);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    74
		if (!socket.isConnected())
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    75
			socket.connect(datagram.getAddress(),datagram.getPort());
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    76
		rtpp.packet_len = datagram.getLength();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    77
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    78
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    79
	/** Sends a RTP packet from this socket */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    80
	public void send(RtpPacket rtpp) throws IOException {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    81
		datagram.setData(rtpp.packet);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    82
		datagram.setLength(rtpp.packet_len);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    83
		datagram.setAddress(r_addr);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    84
		datagram.setPort(r_port);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    85
		socket.send(datagram);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    86
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    87
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    88
	/** Closes this socket */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    89
	public void close() { // socket.close();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    90
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    91
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    92
}