Declare client_t::channel as struct channel for better type safety.
[umurmur.git] / src / client.h
index 78d45fc0cf52e3e8542d854dc16beb3fde8e7df3..f5346bf8b68d858d220fcdb2bd539fd7db22327b 100644 (file)
@@ -1,5 +1,5 @@
-/* Copyright (C) 2009-2011, Martin Johansson <martin@fatbob.nu>
-   Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2014, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2014, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
@@ -31,7 +31,7 @@
 #ifndef CLIENT_H_45786678
 #define CLIENT_H_45786678
 
-#include <config.h>
+#include "config.h"
 #include <stdint.h>
 #include <unistd.h>             /* close() */
 #include <sys/types.h>
 
 #define BUFSIZE 8192
 #define UDP_BUFSIZE 512
-#define INACTICITY_TIMEOUT 15 /* Seconds */
+#define INACTIVITY_TIMEOUT 15 /* Seconds */
 #define MAX_CODECS 10
 #define MAX_TOKENSIZE 64
 #define MAX_TOKENS 32
+#define KEY_LENGTH sizeof(uint16_t) + 4 * sizeof(in_addr_t)
 
 #define IS_AUTH(_a_) ((_a_)->authenticated)
 
+struct channel;
+
 typedef struct {
        int tcpfd;
        SSL_handle_t *ssl;
@@ -65,15 +68,14 @@ typedef struct {
        bool_t shutdown_wait;
        cryptState_t cryptState;
        bool_t readBlockedOnWrite, writeBlockedOnRead;
-       
-       struct sockaddr_in remote_tcp;
-       struct sockaddr_in remote_udp; 
+       struct sockaddr_storage remote_tcp;
+       struct sockaddr_storage remote_udp;
        uint8_t rxbuf[BUFSIZE], txbuf[BUFSIZE];
        uint32_t rxcount, msgsize, drainleft, txcount, txsize;
        int sessionId;
-       uint64_t key;
+       uint8_t key[KEY_LENGTH];
        char *username;
-       bool_t bUDP, authenticated, deaf, mute, recording;
+       bool_t bUDP, authenticated, deaf, mute, self_deaf, self_mute, recording, bOpus;
        char *os, *release, *os_version;
        uint32_t version;
        int codec_count;
@@ -83,7 +85,7 @@ typedef struct {
        struct dlist node;
        struct dlist txMsgQueue;
        int txQueueCount;
-       void *channel; /* Ugly... */
+       struct channel *channel;
        char *context;
        struct dlist chan_node;
        struct dlist voicetargets;
@@ -91,6 +93,7 @@ typedef struct {
        int tokencount;
        uint8_t hash[20];
        bool_t isAdmin;
+       bool_t isSuppressed;
        float UDPPingAvg, UDPPingVar, TCPPingAvg, TCPPingVar;
        uint32_t UDPPackets, TCPPackets;
 } client_t;
@@ -108,7 +111,7 @@ typedef struct {
 void Client_init();
 int Client_getfds(struct pollfd *pollfds);
 void Client_janitor();
-int Client_add(int fd, struct sockaddr_in *remote);
+int Client_add(int fd, struct sockaddr_storage *remote);
 int Client_read_fd(int fd);
 int Client_write_fd(int fd);
 int Client_send_message(client_t *client, message_t *msg);
@@ -118,12 +121,16 @@ int Client_count(void);
 void Client_close(client_t *client);
 client_t *Client_iterate(client_t **client);
 int Client_send_message_except(client_t *client, message_t *msg);
-int Client_read_udp(void);
+int Client_read_udp(int udpsock);
 void Client_disconnect_all();
 int Client_voiceMsg(client_t *client, uint8_t *data, int len);
-void recheckCodecVersions();
+void recheckCodecVersions(client_t *connectingClient);
 void Client_codec_add(client_t *client, int codec);
 void Client_codec_free(client_t *client);
 codec_t *Client_codec_iterate(client_t *client, codec_t **codec_itr);
+void Client_textmessage(client_t *client, char *text);
+bool_t Client_token_match(client_t *client, char const *str);
+void Client_token_free(client_t *client);
+void Client_token_add(client_t *client, char *token_string);
 
 #endif