MCPcopy Index your code
hub / github.com/Bitmessage/PyBitmessage / recversion

Method recversion

src/class_receiveDataThread.py:774–865  ·  view source on GitHub ↗
(self, data)

Source from the content-addressed store, hash-verified

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&#x27;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&#x27;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)

Callers 1

processDataMethod · 0.95

Calls 7

sendverackMethod · 0.95
sendversionMethod · 0.95
isHostInPrivateIPRangeFunction · 0.90
BMConfigParserClass · 0.90
decodeVarintFunction · 0.85
putMethod · 0.80
safeGetIntMethod · 0.80

Tested by

no test coverage detected