(self, data)
| 772 | |
| 773 | # We have received a version message |
| 774 | def recversion(self, data): |
| 775 | if len(data) < 83: |
| 776 | # This version message is unreasonably short. Forget it. |
| 777 | return |
| 778 | if self.verackSent: |
| 779 | """ |
| 780 | We must have already processed the remote node's version message. |
| 781 | There might be a time in the future when we Do want to process |
| 782 | a new version message, like if the remote node wants to update |
| 783 | the streams in which they are interested. But for now we'll |
| 784 | ignore this version message |
| 785 | """ |
| 786 | return |
| 787 | |
| 788 | self.remoteProtocolVersion, = unpack('>L', data[:4]) |
| 789 | self.services, = unpack('>q', data[4:12]) |
| 790 | |
| 791 | timestamp, = unpack('>Q', data[12:20]) |
| 792 | self.timeOffset = timestamp - int(time.time()) |
| 793 | |
| 794 | self.myExternalIP = socket.inet_ntoa(data[40:44]) |
| 795 | # print 'myExternalIP', self.myExternalIP |
| 796 | self.remoteNodeIncomingPort, = unpack('>H', data[70:72]) |
| 797 | # print 'remoteNodeIncomingPort', self.remoteNodeIncomingPort |
| 798 | useragentLength, lengthOfUseragentVarint = decodeVarint( |
| 799 | data[80:84]) |
| 800 | readPosition = 80 + lengthOfUseragentVarint |
| 801 | self.userAgent = data[readPosition:readPosition + useragentLength] |
| 802 | |
| 803 | # version check |
| 804 | try: |
| 805 | userAgentName, userAgentVersion = self.userAgent[1:-1].split(":", 2) |
| 806 | except: |
| 807 | userAgentName = self.userAgent |
| 808 | userAgentVersion = "0.0.0" |
| 809 | if userAgentName == "PyBitmessage": |
| 810 | myVersion = [int(n) for n in softwareVersion.split(".")] |
| 811 | try: |
| 812 | remoteVersion = [int(n) for n in userAgentVersion.split(".")] |
| 813 | except: |
| 814 | remoteVersion = 0 |
| 815 | # remote is newer, but do not cross between stable and unstable |
| 816 | try: |
| 817 | if cmp(remoteVersion, myVersion) > 0 and \ |
| 818 | (myVersion[1] % 2 == remoteVersion[1] % 2): |
| 819 | queues.UISignalQueue.put(('newVersionAvailable', remoteVersion)) |
| 820 | except: |
| 821 | pass |
| 822 | |
| 823 | readPosition += useragentLength |
| 824 | numberOfStreamsInVersionMessage, lengthOfNumberOfStreamsInVersionMessage = decodeVarint( |
| 825 | data[readPosition:]) |
| 826 | readPosition += lengthOfNumberOfStreamsInVersionMessage |
| 827 | self.remoteStreams = [] |
| 828 | for i in range(numberOfStreamsInVersionMessage): |
| 829 | newStreamNumber, lengthOfRemoteStreamNumber = decodeVarint(data[readPosition:]) |
| 830 | readPosition += lengthOfRemoteStreamNumber |
| 831 | self.remoteStreams.append(newStreamNumber) |
no test coverage detected