/*
- * Copyright (C) 2005-2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
struct receiver_node {
/** Points to the corresponding receiver. */
struct receiver *receiver;
- /** The output buffer. */
- char *buf;
- /** The amount of bytes in \a buf. */
- size_t loaded;
/** Receiver-specific data. */
void *private_data;
- /** Pointer to the error member of the consumer. */
- int *output_error;
/** Pointer to the configuration data for this instance. */
void *conf;
/** The task associated with this instance. */
struct task task;
+ /** The receiver node is always the root of the buffer tree. */
+ struct btr_node *btrn;
};
/**
* Describes one supported paraslash receiver.
*
- * \sa http_recv.c, ortp_recv.c
+ * \sa http_recv.c, udp_recv.c
*/
struct receiver {
/**
*
* It must fill in all other function pointers and is assumed to succeed.
*
- * \sa http_recv_init ortp_recv_init.
+ * \sa http_recv_init udp_recv_init.
*/
void (*init)(struct receiver *r);
/**
* \a argc and \a argv.
*/
void *(*parse_config)(int argc, char **argv);
+ /**
+ * Deallocate the configuration structure of a receiver node.
+ *
+ * This calls the receiver-specific cleanup function generated by
+ * gengetopt.
+ */
+ void (*free_config)(void *conf);
/**
* Open one instance of the receiver.
*
* \sa receiver_node.
*/
void (*close)(struct receiver_node *rn);
- /**
- * Deactivate the receiver.
- *
- * Clean up what init has allocated.
- */
- void (*shutdown)(void);
/**
* Add file descriptors to fd_sets and compute timeout for select(2).
*
*/
void (*post_select)(struct sched *s, struct task *t);
+ /** The two help texts of this receiver. */
struct ggo_help help;
};
-
-/** \cond */
-extern void http_recv_init(struct receiver *r);
-#define HTTP_RECEIVER {.name = "http", .init = http_recv_init},
-extern void dccp_recv_init(struct receiver *r);
-#define DCCP_RECEIVER {.name = "dccp", .init = dccp_recv_init},
-
-#ifdef HAVE_ORTP
-extern void ortp_recv_init(struct receiver *r);
-#define ORTP_RECEIVER {.name = "ortp", .init = ortp_recv_init},
-#else
-#define ORTP_RECEIVER
-#endif
-
-extern struct receiver receivers[];
-/** \endcond */
-
/** Define an array of all available receivers. */
#define DEFINE_RECEIVER_ARRAY struct receiver receivers[] = { \
HTTP_RECEIVER \
DCCP_RECEIVER \
- ORTP_RECEIVER \
+ UDP_RECEIVER \
{.name = NULL}};
+/** Iterate over all available receivers. */
#define FOR_EACH_RECEIVER(i) for (i = 0; receivers[i].name; i++)
+void recv_init(void);
void *check_receiver_arg(char *ra, int *receiver_num);
void print_receiver_helps(int detailed);
+int generic_recv_pre_select(struct sched *s, struct task *t);
+
+/** \cond receiver */
+extern void http_recv_init(struct receiver *r);
+#define HTTP_RECEIVER {.name = "http", .init = http_recv_init},
+extern void dccp_recv_init(struct receiver *r);
+#define DCCP_RECEIVER {.name = "dccp", .init = dccp_recv_init},
+extern void udp_recv_init(struct receiver *r);
+#define UDP_RECEIVER {.name = "udp", .init = udp_recv_init},
+
+extern struct receiver receivers[];
+/** \endcond receiver */
+