Sun, 17 Jul 2011 18:10:54 +0200
Improved IPv6 support.
--- a/DebugClients/Python/DebugClientBase.py Sat Jul 16 15:03:09 2011 +0200 +++ b/DebugClients/Python/DebugClientBase.py Sun Jul 17 18:10:54 2011 +0200 @@ -1061,12 +1061,22 @@ if remoteAddress is None: # default: 127.0.0.1 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((DebugProtocol.DebugAddress, port)) - elif ":" in remoteAddress: # IPv6 - sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - sock.connect((remoteAddress, port)) - else: # IPv4 - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect((remoteAddress, port)) + else: + if "@@i" in remoteAddress: + remoteAddress, index = remoteAddress.split("@@i") + else: + index = 0 + if ":" in remoteAddress: # IPv6 + printerr(type(remoteAddress)) + printerr(type(port)) + sockaddr = socket.getaddrinfo( + remoteAddress, port, 0, 0, socket.SOL_TCP)[0][-1] + sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + sockaddr = sockaddr[:-1] + (int(index),) + sock.connect(sockaddr) + else: # IPv4 + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect((remoteAddress, port)) self.readstream = AsyncFile(sock, sys.stdin.mode, sys.stdin.name) self.writestream = AsyncFile(sock, sys.stdout.mode, sys.stdout.name) @@ -1825,7 +1835,7 @@ del args[0] del args[0] elif args[0] == '-p': - port = long(args[1]) + port = int(args[1]) del args[0] del args[0] elif args[0] == '-w': @@ -1872,7 +1882,7 @@ if sys.argv[1] == '': del sys.argv[1] try: - port = long(sys.argv[1]) + port = int(sys.argv[1]) except (ValueError, IndexError): port = -1 try:
--- a/DebugClients/Python3/DebugClientBase.py Sat Jul 16 15:03:09 2011 +0200 +++ b/DebugClients/Python3/DebugClientBase.py Sun Jul 17 18:10:54 2011 +0200 @@ -1061,12 +1061,20 @@ if remoteAddress is None: # default: 127.0.0.1 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((DebugProtocol.DebugAddress, port)) - elif ":" in remoteAddress: # IPv6 - sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - sock.connect((remoteAddress, port)) - else: # IPv4 - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect((remoteAddress, port)) + else: + if "@@i" in remoteAddress: + remoteAddress, index = remoteAddress.split("@@i") + else: + index = 0 + if ":" in remoteAddress: # IPv6 + sockaddr = socket.getaddrinfo( + remoteAddress, port, 0, 0, socket.SOL_TCP)[0][-1] + sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + sockaddr = sockaddr[:-1] + (int(index),) + sock.connect(sockaddr) + else: # IPv4 + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect((remoteAddress, port)) self.readstream = AsyncFile(sock, sys.stdin.mode, sys.stdin.name) self.writestream = AsyncFile(sock, sys.stdout.mode, sys.stdout.name)
--- a/DebugClients/Ruby/DebugClientBaseModule.rb Sat Jul 16 15:03:09 2011 +0200 +++ b/DebugClients/Ruby/DebugClientBaseModule.rb Sun Jul 17 18:10:54 2011 +0200 @@ -690,6 +690,14 @@ if remoteAddress == nil sock = TCPSocket.new(DebugAddress, port) else + if remoteAddress =~ /@@i/ + remoteAddress, interface = remoteAddress.split("@@i") + else + interface = 0 + end + if remoteAddress.downcase =~ /^fe80/ + remoteAddress = "%s%%%s" % [remoteAddress, interface] + end sock = TCPSocket.new(remoteAddress, port) end
--- a/Debugger/DebugServer.py Sat Jul 16 15:03:09 2011 +0200 +++ b/Debugger/DebugServer.py Sun Jul 17 18:10:54 2011 +0200 @@ -10,7 +10,7 @@ import os from PyQt4.QtCore import pyqtSignal, QModelIndex -from PyQt4.QtNetwork import QTcpServer, QHostAddress, QHostInfo +from PyQt4.QtNetwork import QTcpServer, QHostAddress, QHostInfo, QNetworkInterface from E5Gui.E5Application import e5App from E5Gui import E5MessageBox @@ -150,13 +150,18 @@ elif self.networkInterface == "allv6": hostAddress = QHostAddress("::") # QHostAddress.AnyIPv6) else: - hostAddress = QHostAddress(Preferences.getDebugger("NetworkInterface")) + hostAddress = QHostAddress(self.networkInterface) + self.networkInterfaceName, self.networkInterfaceIndex = \ + self.__getNetworkInterfaceAndIndex(self.networkInterface) + if Preferences.getDebugger("PassiveDbgEnabled"): - socket = Preferences.getDebugger("PassiveDbgPort") # default: 42424 - self.listen(hostAddress, socket) + sock = Preferences.getDebugger("PassiveDbgPort") # default: 42424 + self.listen(hostAddress, sock) self.passive = True self.passiveClientExited = False else: + if hostAddress.toString().lower().startswith("fe80"): + hostAddress.setScopeId(self.networkInterfaceName) self.listen(hostAddress) self.passive = False @@ -205,7 +210,25 @@ else: return "{0}@@v6".format(QHostInfo.localHostName()) else: - return self.networkInterface + return "{0}@@i{1}".format(self.networkInterface, + self.networkInterfaceIndex) + + def __getNetworkInterfaceAndIndex(self, address): + """ + Private method to determine the network interface and the interface index. + + @param address address to determine the info for (string) + @return tuple of network interface name (string) and index (integer) + """ + if address not in ["all", "allv6"]: + for networkInterface in QNetworkInterface.allInterfaces(): + addressEntries = networkInterface.addressEntries() + if len(addressEntries) > 0: + for addressEntry in addressEntries: + if addressEntry.ip().toString().lower() == address.lower(): + return networkInterface.name(), networkInterface.index() + + return "", 0 def preferencesChanged(self): """
--- a/Debugger/DebuggerInterfaceNone.py Sat Jul 16 15:03:09 2011 +0200 +++ b/Debugger/DebuggerInterfaceNone.py Sun Jul 17 18:10:54 2011 +0200 @@ -82,7 +82,7 @@ """ Public slot to handle a new connection. - @param sockreference to the socket object (QTcpSocket) + @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ return False
--- a/Debugger/DebuggerInterfacePython.py Sat Jul 16 15:03:09 2011 +0200 +++ b/Debugger/DebuggerInterfacePython.py Sun Jul 17 18:10:54 2011 +0200 @@ -354,7 +354,7 @@ """ Public slot to handle a new connection. - @param sockreference to the socket object (QTcpSocket) + @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ # If we already have a connection, refuse this one. It will be closed
--- a/Debugger/DebuggerInterfaceRuby.py Sat Jul 16 15:03:09 2011 +0200 +++ b/Debugger/DebuggerInterfaceRuby.py Sun Jul 17 18:10:54 2011 +0200 @@ -323,7 +323,7 @@ """ Public slot to handle a new connection. - @param sockreference to the socket object (QTcpSocket) + @param sock reference to the socket object (QTcpSocket) @return flag indicating success (boolean) """ # If we already have a connection, refuse this one. It will be closed