src/org/sipdroid/net/RtpSocket.java
author nikita@nikita-laptop
Sun, 24 Jan 2010 00:42:29 +0100
changeset 835 4e40f3481f23
parent 834 e8d6255306f8
permissions -rw-r--r--
new sipdroid
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
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    22
package org.sipdroid.net;
834
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 {
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    37
    /** UDP socket */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    38
    SipdroidSocket socket;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    39
    DatagramPacket datagram;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    40
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    41
    /** Remote address */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    42
    InetAddress r_addr;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    43
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    44
    /** Remote port */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    45
    int r_port;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    46
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    47
    /** Creates a new RTP socket (only receiver) */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    48
    public RtpSocket(SipdroidSocket datagram_socket) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    49
	socket = datagram_socket;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    50
	r_addr = null;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    51
	r_port = 0;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    52
	datagram = new DatagramPacket(new byte[1],1);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    53
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    54
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    55
    /** Creates a new RTP socket (sender and receiver) */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    56
    public RtpSocket(SipdroidSocket datagram_socket,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    57
	InetAddress remote_address, int remote_port) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    58
	socket = datagram_socket;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    59
	r_addr = remote_address;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    60
	r_port = remote_port;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    61
	datagram = new DatagramPacket(new byte[1],1);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    62
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    63
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    64
    /** Returns the RTP SipdroidSocket */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    65
    public SipdroidSocket getDatagramSocket() {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    66
	return socket;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    67
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    68
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    69
    /** Receives a RTP packet from this socket */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    70
    public void receive(RtpPacket rtpp) throws IOException {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    71
	datagram.setData(rtpp.packet);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    72
	datagram.setLength(rtpp.packet.length);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    73
	socket.receive(datagram);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    74
	if (!socket.isConnected())
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    75
	    socket.connect(datagram.getAddress(),datagram.getPort());
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    76
	rtpp.packet_len = datagram.getLength();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    77
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    78
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    79
    /** Sends a RTP packet from this socket */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    80
    public void send(RtpPacket rtpp) throws IOException {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    81
	datagram.setData(rtpp.packet);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    82
	datagram.setLength(rtpp.packet_len);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    83
	datagram.setAddress(r_addr);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    84
	datagram.setPort(r_port);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    85
	socket.send(datagram);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    86
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    87
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    88
    /** Closes this socket */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    89
    public void close() { // socket.close();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    90
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    91
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents:
diff changeset
    92
}