/*
* This file is part of DisOrder
- * Copyright (C) 2005, 2007, 2008 Richard Kettlewell
+ * Copyright (C) 2005, 2007, 2008, 2013 Richard Kettlewell
*
* 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
#ifndef SPEAKER_PROTOCOL_H
#define SPEAKER_PROTOCOL_H
+#include "byte-order.h"
+#if HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+
/** @brief A message from the main server to the speaker, or vica versa */
struct speaker_message {
/** @brief Message type
*
- * Messges from the main server:
+ * Messages from the main server:
* - @ref SM_PLAY
* - @ref SM_PAUSE
* - @ref SM_RESUME
* - @ref SM_CANCEL
* - @ref SM_RELOAD
+ * - @ref SM_RTP_REQUEST
+ * - @ref SM_RTP_CANCEL
*
* Messages from the speaker:
* - @ref SM_PAUSED
* - @ref SM_FINISHED
* - @ref SM_PLAYING
* - @ref SM_UNKNOWN
+ * - @ref SM_ARRIVED
*/
int type;
/** @brief Message-specific data */
long data;
- /** @brief Track ID (including 0 terminator) */
- char id[24]; /* ID including terminator */
+ union {
+ /** @brief Track ID (including 0 terminator) */
+ char id[24]; /* ID including terminator */
+
+ /** @brief An IP address (for @ref SM_RTP_REQUEST and @ref SM_RTP_CANCEL) */
+ struct sockaddr_storage address;
+ } u;
};
/* messages from the main DisOrder server */
/** @brief Reload configuration */
#define SM_RELOAD 5
+/** @brief Reload configuration */
+#define SM_RTP_REQUEST 6
+
+/** @brief Reload configuration */
+#define SM_RTP_CANCEL 7
+
/* messages from the speaker */
/** @brief Paused track @c id, @c data seconds in
*
/** @brief Cancelled track @c id which wasn't playing */
#define SM_STILLBORN 133
+/** @brief A connection for track @c id arrived */
+#define SM_ARRIVED 134
+
void speaker_send(int fd, const struct speaker_message *sm);
/* Send a message. */
/** @brief Endianness */
uint8_t endian;
-#define ENDIAN_BIG 1
-#define ENDIAN_LITTLE 2
-#ifdef WORDS_BIGENDIAN
-# define ENDIAN_NATIVE ENDIAN_BIG
-#else
-# define ENDIAN_NATIVE ENDIAN_LITTLE
-#endif
} attribute((packed));
static inline int formats_equal(const struct stream_header *a,