Add option to disallow text messages.
authorMartin Johansson <martin@fatbob.nu>
Sat, 25 Feb 2012 20:06:04 +0000 (21:06 +0100)
committerMartin Johansson <martin@fatbob.nu>
Sat, 25 Feb 2012 20:06:04 +0000 (21:06 +0100)
src/conf.c
src/conf.h
src/messagehandler.c

index adc0e1ba335d3859ef18b6cad8dc576a66218775..cf1677bffdd852bf3f16e6309a9e9bebb691fe1c 100644 (file)
@@ -244,6 +244,23 @@ int getIntConf(param_t param)
        }
 }
 
+bool_t getBoolConf(param_t param)
+{
+       config_setting_t *setting = NULL;
+       
+       switch (param) {
+       case ALLOW_TEXTMESSAGE:
+               setting = config_lookup(&configuration, "allow_textmessage");
+               if (!setting)
+                       return true;
+               else
+                       return config_setting_get_bool(setting);
+               break;
+       default:
+               doAssert(false);
+       }
+}
+
 int Conf_getNextChannel(conf_channel_t *chdesc, int index)
 {
        config_setting_t *setting = NULL;
index 100c73fd85f350f8daa6555d1d0cc932affa88d6..8eb84e2e569ba5714a82158744cac38d5112407d 100644 (file)
@@ -50,6 +50,7 @@ typedef enum param {
        LOGFILE,
        ADMIN_PASSPHRASE,
        BAN_LENGTH,
+       ALLOW_TEXTMESSAGE,
 } param_t;
 
 typedef struct {
@@ -71,6 +72,7 @@ bool_t Conf_ok(const char *conffile);
 
 const char *getStrConf(param_t param);
 int getIntConf(param_t param);
+bool_t getBoolConf(param_t param);
 int Conf_getNextChannel(conf_channel_t *chdesc, int index);
 int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index);
 
index f8858c96c35e5e1f1d7ecfbf74d23070e5e69fd4..5a2269c4cfc27f9affdd125b151ed740f5ac4ace 100644 (file)
@@ -512,6 +512,8 @@ void Mh_handle_message(client_t *client, message_t *msg)
                break;
                
        case TextMessage:
+               if (!getBoolConf(ALLOW_TEXTMESSAGE))
+                       break;
                msg->payload.textMessage->has_actor = true;
                msg->payload.textMessage->actor = client->sessionId;
 
@@ -617,11 +619,15 @@ void Mh_handle_message(client_t *client, message_t *msg)
        case PermissionQuery:
                Msg_inc_ref(msg); /* Re-use message */
                msg->payload.permissionQuery->has_permissions = true;
+               
                if (client->isAdmin)
                        msg->payload.permissionQuery->permissions = PERM_ADMIN;
                else
                        msg->payload.permissionQuery->permissions = PERM_DEFAULT;
                
+               if (!getBoolConf(ALLOW_TEXTMESSAGE))
+                       msg->payload.permissionQuery->permissions &= ~PERM_TEXTMESSAGE;
+               
                Client_send_message(client, msg);
                break;
        case UDPTunnel: