blob: 544e9fde78db229642bedf189393f8585f63404c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp
index f8472fa3..97d4de2a 100644
--- a/src/murmur/Messages.cpp
+++ b/src/murmur/Messages.cpp
@@ -1492,8 +1492,14 @@ void Server::msgContextAction(ServerUser *uSource, MumbleProto::ContextAction &m
}
void Server::msgVersion(ServerUser *uSource, MumbleProto::Version &msg) {
+ bool ok = true;
if (msg.has_version())
uSource->uiVersion=msg.version();
+ else
+ ok = false;
+ if(ok)
+ if(msg.version() < 0x010300)
+ ok = false;
if (msg.has_release())
uSource->qsRelease = u8(msg.release());
if (msg.has_os()) {
@@ -1501,6 +1507,18 @@ void Server::msgVersion(ServerUser *uSource, MumbleProto::Version &msg) {
if (msg.has_os_version())
uSource->qsOSVersion = u8(msg.os_version());
}
+ if (! ok) {
+ QString reason = "worng version";
+ log(uSource, QString("Rejected connection from %1: %2")
+ .arg(addressToString(uSource->peerAddress(), uSource->peerPort()), reason));
+ MumbleProto::Reject mpr;
+ mpr.set_reason(u8(reason));
+ mpr.set_type(MumbleProto::Reject::RejectType::Reject_RejectType_WrongVersion);
+ sendMessage(uSource, mpr);
+ uSource->disconnectSocket();
+ return;
+ }
+
log(uSource, QString("Client version %1 (%2: %3)").arg(MumbleVersion::toString(uSource->uiVersion)).arg(uSource->qsOS).arg(uSource->qsRelease));
}
|