#define HTTP_ERR_MSG "HTTP/1.0 400 Bad Request\n"
/** \endcond */
-/** the possible states of a client from the server's POV */
+/** The possible states of a client from the server's POV. */
enum http_status {
+ /** We accepted the connection on the tcp socket. */
HTTP_CONNECTED,
+ /** Successfully received the get request. */
HTTP_GOT_GET_REQUEST,
+ /** We sent the OK message back to the client. */
HTTP_SENT_OK_MSG,
+ /** Connection established, we might need to send the audio file header. */
HTTP_READY_TO_STREAM,
+ /** Connection is ready for sending audio data. */
HTTP_STREAMING,
+ /** We didn't receive a valid get request. */
HTTP_INVALID_GET_REQUEST
};
-/** clients will be kicked if there are more than that many bytes pending */
+/** Clients will be kicked if there are more than that many bytes pending. */
#define MAX_BACKLOG 40000
-/** the list of connected clients **/
+/** The list of connected clients. */
static struct list_head clients;
-/** the whitelist/blacklist */
+/** The whitelist/blacklist. */
static struct list_head access_perm_list;
-/** describes one client that connected the tcp port of the http sender */
+/** Describes one client that connected the tcp port of the http sender. */
struct http_client {
-/** the file descriptor of the client */
+ /** The file descriptor of the client. */
int fd;
-/** address information about the client */
+ /** Address information about the client. */
struct sockaddr_in addr;
-/** the client's current status */
+ /** The client's current status. */
enum http_status status;
-/** non-zero if we included \a fd in the read set */
+ /** Non-zero if we included \a fd in the read set.*/
int check_r;
-/** non-zero if we included \a fd in the write set */
+ /** Non-zero if we included \a fd in the write set. */
int check_w;
-/** the position of this client in the client list */
+ /** The position of this client in the client list. */
struct list_head node;
-/** the list of pending packets for this client */
+ /** Te list of pending packets for this client. */
struct list_head packet_queue;
-/** the number of pending bytes for this client */
+ /** The number of pending bytes for this client. */
unsigned long pq_bytes;
};
/**
- * describes one queued data packet for a client
+ * Describes one queued data packet for a client.
*
* The send function of the http sender checks each client fd for writing. If a
* client fd is not ready, it tries to queue that packet for this client until
* the number of queued bytes exceeds \p MAX_BACKLOG.
*/
struct queued_packet {
-/** the length of the packet in bytes */
+ /** The length of the packet in bytes. */
unsigned int len;
-/** pointer to the packet data */
+ /** Pointer to the packet data. */
char *packet;
-/** position of the packet in the packet list */
+ /** Position of the packet in the packet list. */
struct list_head node;
};
/**
- * describes one entry in the blacklist/whitelist of the http sender
+ * Describes one entry in the blacklist/whitelist of the http sender.
*/
struct access_info {
- /** the address to be black/whitelisted */
+ /** The address to be black/whitelisted. */
struct in_addr addr;
- /** the netmask for this entry */
+ /** The netmask for this entry. */
unsigned netmask;
- /** the position of this entry in the access_perm_list */
+ /** The position of this entry in the access_perm_list. */
struct list_head node;
};
static int server_fd = -1, numclients;
static struct sender *self;
-
static void http_shutdown_client(struct http_client *hc, const char *msg)
{
struct queued_packet *qp, *tmp;
}
/**
- * the init function of the http sender
+ * The init function of the http sender.
*
- * \param s pointer to the http sender struct
+ * \param s Pointer to the http sender struct.
*
- * It initializes all function pointers of \a s, init the client list and the
- * acess control list as well. If autostart is wanted, open the tcp port.
+ * It initializes all function pointers of \a s, the client list and the access
+ * control list. If the autostart option was given, the tcp port is opened.
*/
void http_send_init(struct sender *s)
{