[telepathy-qt4/master] IncomingFileTransferChannel: Added Port access control support.
Andre Moreira Magalhaes (andrunko)
andre.magalhaes at collabora.co.uk
Tue Sep 22 20:04:02 PDT 2009
---
TelepathyQt4/incoming-file-transfer-channel.cpp | 41 ++++++++++++++++++++---
1 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/TelepathyQt4/incoming-file-transfer-channel.cpp b/TelepathyQt4/incoming-file-transfer-channel.cpp
index 37c5546..f3dd6bb 100644
--- a/TelepathyQt4/incoming-file-transfer-channel.cpp
+++ b/TelepathyQt4/incoming-file-transfer-channel.cpp
@@ -31,6 +31,7 @@
#include <TelepathyQt4/Types>
#include <QIODevice>
+#include <QTcpServer>
#include <QTcpSocket>
namespace Tp
@@ -46,6 +47,7 @@ struct IncomingFileTransferChannel::Private
QIODevice *output;
QTcpSocket *socket;
+ SocketAccessControl accessControl;
SocketAddressIPv4 addr;
};
@@ -164,9 +166,35 @@ PendingOperation *IncomingFileTransferChannel::acceptFile(qulonglong offset,
mPriv->output = output;
+ QDBusVariant accessControlParam;
+ SupportedSocketMap socketTypes = availableSocketTypes();
+ UIntList addressTypeList = socketTypes.value(SocketAddressTypeIPv4);
+ if (addressTypeList.contains(SocketAccessControlPort)) {
+ debug() << "Using SocketAccessControlPort";
+
+ QTcpServer tcpServer;
+ tcpServer.listen(QHostAddress("127.0.0.1"));
+ quint16 port = tcpServer.serverPort();
+ tcpServer.close();
+
+ SocketAddressIPv4 addr;
+ addr.address = "127.0.0.1";
+ addr.port = port;
+
+ mPriv->accessControl = SocketAccessControlPort;
+ // set port here
+ mPriv->addr.port = port;
+ accessControlParam.setVariant(qVariantFromValue(addr));
+ } else {
+ debug() << "Using SocketAccessControlLocalhost";
+
+ mPriv->accessControl = SocketAccessControlLocalhost;
+ accessControlParam = QDBusVariant(QVariant(QString()));
+ }
+
PendingVariant *pv = new PendingVariant(
fileTransferInterface(BypassInterfaceCheck)->AcceptFile(SocketAddressTypeIPv4,
- SocketAccessControlLocalhost, QDBusVariant(QVariant(QString())),
+ mPriv->accessControl, accessControlParam,
offset),
this);
connect(pv,
@@ -184,10 +212,13 @@ void IncomingFileTransferChannel::onAcceptFileFinished(PendingOperation *op)
return;
}
- PendingVariant *pv = qobject_cast<PendingVariant *>(op);
- mPriv->addr = qdbus_cast<SocketAddressIPv4>(pv->result());
- debug().nospace() << "Got address " << mPriv->addr.address <<
- ":" << mPriv->addr.port;
+ if (mPriv->accessControl == SocketAccessControlLocalhost) {
+ PendingVariant *pv = qobject_cast<PendingVariant *>(op);
+ mPriv->addr = qdbus_cast<SocketAddressIPv4>(pv->result());
+ } else {
+ mPriv->addr.address = "127.0.0.1";
+ // the port was already set in acceptFile
+ }
if (state() == FileTransferStateOpen) {
// now we have the address and we are already opened,
--
1.5.6.5
More information about the telepathy-commits
mailing list