+ if (!_proxyReceived) {
+ quint32 magic;
+ socket()->peek((char*) &magic, 4);
+ magic = qFromBigEndian<quint32>(magic);
+
+ if (magic == Protocol::proxyMagic) {
+ if (!socket()->canReadLine()) {
+ return;
+ }
+ QByteArray line = socket()->readLine(108);
+ _proxyLine = ProxyLine::parseProxyLine(line);
+ if (_proxyLine.protocol != QAbstractSocket::UnknownNetworkLayerProtocol) {
+ QList<QString> subnets = Quassel::optionValue("proxy-cidr").split(",");
+ for (const QString& subnet : subnets) {
+ if (socket()->peerAddress().isInSubnet(QHostAddress::parseSubnet(subnet))) {
+ _useProxyLine = true;
+ break;
+ }
+ }
+ }
+ }
+ _proxyReceived = true;
+ }
+
+ if (socket()->bytesAvailable() < 4)
+ return;
+