/*
- * Copyright (C) 2005-2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2008 Andre Noll <maan@systemlinux.org>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \file ortp_send.c para_server's ortp sender */
#include <ortp/ortp.h>
+#include <ortp/port.h>
#include "server.cmdline.h"
-#include "server.h"
+#include "para.h"
+#include "error.h"
+#include "string.h"
+#include "afh.h"
#include "afs.h"
+#include "server.h"
+#include "vss.h"
#include "send.h"
#include "list.h"
#include "ortp.h"
-#include "string.h"
-/** \cond convert in_addr to ascii */
+/** Convert in_addr to ascii. */
#define TARGET_ADDR(oc) inet_ntoa((oc)->addr)
-/** \endcond */
-/** describes one entry in the list of targets for the ortp sender */
+/** Describes one entry in the list of targets for the ortp sender. */
struct ortp_target {
-/** address info */
+ /** Address info. */
struct in_addr addr;
-/** whether the ortp sender is activated */
+ /** Whether the ortp sender is activated. */
int status;
-/** the ortp timestamp increases by this amount */
- int chunk_ts;
-/** the currently used timestamp for this target */
- int last_ts;
-/** the position of this target in the list of targets */
+ /** The ortp timestamp increases by this amount. */
+ uint32_t chunk_ts;
+ /** The currently used timestamp for this target. */
+ uint32_t last_ts;
+ /** The position of this target in the list of targets. */
struct list_head node;
-/** the UDP port */
+ /** The UDP port. */
int port;
-/** non-zero if at least one chunk has been sent to this target */
+ /** Non-zero if at least one chunk has been sent to this target. */
int streaming;
-/** the session pointer from libortp */
+ /** The session pointer from libortp. */
RtpSession *session;
};
free(ot);
}
-static void ortp_send_buf(char *buf, int len, long unsigned chunks_sent)
+static void ortp_send_buf(char *buf, size_t len, long unsigned chunks_sent)
{
struct ortp_target *ot, *tmp;
- int ret;
+ int ret, ortp_len = len; /* rtp_session_send_with_ts expects int */
+ if (ortp_len < 0)
+ return;
list_for_each_entry_safe(ot, tmp, &targets, node) {
- int ts;
+ uint32_t ts;
if (!ot->session)
continue;
WRITE_CHUNK_TS(buf, ot->chunk_ts);
ts = ot->chunk_ts * chunks_sent;
ret = rtp_session_send_with_ts(ot->session,
- (unsigned char*)buf, len, ts);
+ (unsigned char*)buf, ortp_len, ts);
ot->last_ts = ts;
if (ret < 0)
ortp_delete_target(ot, "send error");
set_multicast(s);
}
-/* called by afs */
+/* called by vss */
static void ortp_shutdown_targets(void)
{
unsigned char buf[ORTP_AUDIO_HEADER_LEN];
{
struct ortp_target *ot, *tmp;
size_t sendbuf_len;
- int header_len = 0;
+ size_t header_len = 0;
int packet_type = ORTP_DATA;
char *sendbuf, *header_buf = NULL;
struct timeval *chunk_tv;
if (self->status != SENDER_ON)
return;
- chunk_tv = afs_chunk_time();
+
+// PARA_NOTICE_LOG("sending %lu\n", current_chunk);
+ chunk_tv = vss_chunk_time();
if (!chunk_tv)
return;
list_for_each_entry_safe(ot, tmp, &targets, node) {
}
if (!ot->chunk_ts)
ot->chunk_ts = rtp_session_time_to_ts(ot->session,
- tv2ms(chunk_tv));
+ (int)tv2ms(chunk_tv));
// PARA_DEBUG_LOG("len: %d, ts: %lu, ts: %d\n",
// len, ot->chunk_ts * chunks_sent, ot->chunk_ts);
ot->streaming = 1;
}
if (list_empty(&targets))
return;
- header_buf = afs_get_header(&header_len);
+ header_buf = vss_get_header(&header_len);
if (!need_extra_header(current_chunk))
header_len = 0;
sendbuf_len = ORTP_AUDIO_HEADER_LEN + header_len + len;
if (!p)
goto err;
*p = '\0';
- if (!inet_aton(arg, &addr))
+ if (!inet_pton(AF_INET, arg, &addr))
goto err;
port = atoi(++p);
if (port < 0 || port > 65535)