Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThorvald Natvig <slicer@users.sourceforge.net>2009-05-17 19:50:46 +0400
committerThorvald Natvig <slicer@users.sourceforge.net>2009-05-17 19:50:46 +0400
commit73131d21cf1aca1df63a06655f549e7821404c1b (patch)
tree964911328399495f6c18c9dc7177d51a93e58813 /src
parent8a12ebc45586219bbf81add79422c37877991688 (diff)
Server-side unregister
Diffstat (limited to 'src')
-rw-r--r--src/Message.h3
-rw-r--r--src/Mumble.proto8
-rw-r--r--src/murmur/Messages.cpp41
-rw-r--r--src/murmur/Server.h2
-rw-r--r--src/murmur/ServerDB.cpp1
5 files changed, 53 insertions, 2 deletions
diff --git a/src/Message.h b/src/Message.h
index 623a6b394..d45e9b890 100644
--- a/src/Message.h
+++ b/src/Message.h
@@ -52,7 +52,8 @@
MUMBLE_MH_MSG(QueryUsers) \
MUMBLE_MH_MSG(CryptSetup) \
MUMBLE_MH_MSG(ContextActionAdd) \
- MUMBLE_MH_MSG(ContextAction)
+ MUMBLE_MH_MSG(ContextAction) \
+ MUMBLE_MH_MSG(UserList)
class MessageHandler {
public:
diff --git a/src/Mumble.proto b/src/Mumble.proto
index 99b75ca20..9a0b099ec 100644
--- a/src/Mumble.proto
+++ b/src/Mumble.proto
@@ -182,3 +182,11 @@ message ContextAction {
optional uint32 channel_id = 2;
required string action = 3;
}
+
+message UserList {
+ message User {
+ required uint32 user_id = 1;
+ optional string name = 2;
+ }
+ repeated User users = 1;
+}
diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp
index a287e274d..d25bc703c 100644
--- a/src/murmur/Messages.cpp
+++ b/src/murmur/Messages.cpp
@@ -1035,3 +1035,44 @@ void Server::msgVersion(ServerUser *uSource, MumbleProto::Version &msg) {
uSource->qsOSVersion = u8(msg.os_version());
}
}
+
+void Server::msgUserList(ServerUser *uSource, MumbleProto::UserList &msg) {
+ MSG_SETUP(User::Authenticated);
+
+ if (! hasPermission(uSource, qhChannels.value(0), ChanACL::Register)) {
+ PERM_DENIED(uSource, qhChannels.value(0), ChanACL::Register);
+ return;
+ }
+
+ if (msg.users_size() == 0) {
+ // Query mode.
+ QMap<int, QString> users = getRegisteredUsers();
+ QMap<int, QString>::const_iterator i;
+ for(i = users.constBegin(); i != users.constEnd(); ++i) {
+ ::MumbleProto::UserList_User *u = msg.add_users();
+ u->set_user_id(i.key());
+ u->set_name(u8(i.value()));
+ }
+ sendMessage(uSource, msg);
+ } else {
+ for (int i=0;i < msg.users_size(); ++i) {
+ const MumbleProto::UserList_User &u = msg.users(i);
+
+ int id = u.user_id();
+ if (id == 0)
+ continue;
+
+ if (! u.has_name()) {
+ log(uSource, QString::fromLatin1("Unregistered user %1").arg(id));
+ unregisterUser(id);
+ } else {
+ const QString &name = u8(u.name());
+ log(uSource, QString::fromLatin1("Renamed user %1 to '%2'").arg(id).arg(name));
+
+ QMap<QString, QString> info;
+ info.insert("name", name);
+ setInfo(id, info);
+ }
+ }
+ }
+}
diff --git a/src/murmur/Server.h b/src/murmur/Server.h
index 2d8b9ea5b..71a3c5299 100644
--- a/src/murmur/Server.h
+++ b/src/murmur/Server.h
@@ -296,7 +296,7 @@ class Server : public QThread {
QMap<QString, QString> getRegistration(int id);
int registerUser(const QMap<QString, QString> &info);
bool unregisterUser(int id);
- QMap<int, QString > getRegisteredUsers(const QString &filter);
+ QMap<int, QString > getRegisteredUsers(const QString &filter = QString());
bool setInfo(int id, const QMap<QString, QString> &info);
bool setTexture(int id, const QByteArray &texture);
bool isUserId(int id);
diff --git a/src/murmur/ServerDB.cpp b/src/murmur/ServerDB.cpp
index 4868d4519..9616075a4 100644
--- a/src/murmur/ServerDB.cpp
+++ b/src/murmur/ServerDB.cpp
@@ -562,6 +562,7 @@ int Server::registerUser(const QMap<QString, QString> &info) {
}
bool Server::unregisterUser(int id) {
+ // FIXME: Update ACLs and groups to remove id.
if (id <= 0)
return false;