Fix deaf/mute issues. Fix channel moves by admin and admin enter channels with password.
[umurmur.git] / src / client.c
index e4936e2419ef15f6091ceaa6bddd73ab25e5e9d6..30979e8a11b76aa69d7e8d9af3dd37a06cce5430 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-2012, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
@@ -45,6 +45,7 @@
 #include "channel.h"
 #include "version.h"
 #include "voicetarget.h"
+#include "ban.h"
 
 extern char system_string[], version_string[];
 
@@ -106,6 +107,7 @@ void Client_janitor()
                        Client_free(c);
                }
        }
+       Ban_pruneBanned();
 }
 
 void Client_codec_add(client_t *client, int codec)
@@ -288,7 +290,11 @@ int Client_add(int fd, struct sockaddr_in *remote)
 {
        client_t *newclient;
        message_t *sendmsg;
-       
+
+       if (Ban_isBannedAddr((in_addr_t *)&remote->sin_addr)) {
+               Log_info("Address %s banned. Disconnecting", inet_ntoa(remote->sin_addr));
+               return -1;
+       }
        newclient = malloc(sizeof(client_t));
        if (newclient == NULL)
                Log_fatal("Out of memory");
@@ -769,7 +775,7 @@ out:
 
 static inline void Client_send_voice(client_t *src, client_t *dst, uint8_t *data, int len, int poslen)
 {
-       if (IS_AUTH(dst) && dst != src && !dst->deaf) {
+       if (IS_AUTH(dst) && dst != src && (!dst->deaf || !dst->self_deaf)) {
                if (poslen > 0 && /* Has positional data */
                        src->context != NULL && dst->context != NULL && /* ...both source and destination has context */
                        strcmp(src->context, dst->context) == 0) /* ...and the contexts match */