forked from LBRYCommunity/lbry-sdk
Merge pull request #1138 from lbryio/dht-compat
make dht forwards-compatible for upcoming switch to standardized bencode dict keys
This commit is contained in:
commit
6dd8138c05
5 changed files with 23 additions and 23 deletions
|
@ -30,7 +30,7 @@ at anytime.
|
||||||
### Added
|
### Added
|
||||||
* scripts to autogenerate documentation
|
* scripts to autogenerate documentation
|
||||||
* now updating new channel also takes into consideration the original bid amount, so now channel could be updated for wallet balance + the original bid amount
|
* now updating new channel also takes into consideration the original bid amount, so now channel could be updated for wallet balance + the original bid amount
|
||||||
*
|
* forward-compaitibility for upcoming DHT bencoding changes
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
* short(single dashed) arguments for `lbrynet-cli`
|
* short(single dashed) arguments for `lbrynet-cli`
|
||||||
|
|
|
@ -2045,7 +2045,7 @@ class Daemon(AuthJSONRPCServer):
|
||||||
.format(MAX_UPDATE_FEE_ESTIMATE - balance))
|
.format(MAX_UPDATE_FEE_ESTIMATE - balance))
|
||||||
elif bid > max_bid_amount:
|
elif bid > max_bid_amount:
|
||||||
raise InsufficientFundsError(
|
raise InsufficientFundsError(
|
||||||
"Please lower the bid value, the maximum amount you can specify for this claim is {}"
|
"Please lower the bid. After accounting for the estimated fee, you only have {} left."
|
||||||
.format(max_bid_amount))
|
.format(max_bid_amount))
|
||||||
|
|
||||||
metadata = metadata or {}
|
metadata = metadata or {}
|
||||||
|
|
|
@ -64,16 +64,9 @@ class Bencode(Encoding):
|
||||||
keys = data.keys()
|
keys = data.keys()
|
||||||
keys.sort()
|
keys.sort()
|
||||||
for key in keys:
|
for key in keys:
|
||||||
encodedDictItems += self.encode(key)
|
encodedDictItems += self.encode(key) # TODO: keys should always be bytestrings
|
||||||
encodedDictItems += self.encode(data[key])
|
encodedDictItems += self.encode(data[key])
|
||||||
return 'd%se' % encodedDictItems
|
return 'd%se' % encodedDictItems
|
||||||
elif isinstance(data, float):
|
|
||||||
# This (float data type) is a non-standard extension to the original Bencode algorithm
|
|
||||||
return 'f%fe' % data
|
|
||||||
elif data is None:
|
|
||||||
# This (None/NULL data type) is a non-standard extension
|
|
||||||
# to the original Bencode algorithm
|
|
||||||
return 'n'
|
|
||||||
else:
|
else:
|
||||||
print data
|
print data
|
||||||
raise TypeError("Cannot bencode '%s' object" % type(data))
|
raise TypeError("Cannot bencode '%s' object" % type(data))
|
||||||
|
|
|
@ -43,24 +43,31 @@ class MessageTranslator(object):
|
||||||
class DefaultFormat(MessageTranslator):
|
class DefaultFormat(MessageTranslator):
|
||||||
""" The default on-the-wire message format for this library """
|
""" The default on-the-wire message format for this library """
|
||||||
typeRequest, typeResponse, typeError = range(3)
|
typeRequest, typeResponse, typeError = range(3)
|
||||||
headerType, headerMsgID, headerNodeID, headerPayload, headerArgs = range(5)
|
headerType, headerMsgID, headerNodeID, headerPayload, headerArgs = range(5) # TODO: make str
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get(primitive, key):
|
||||||
|
try:
|
||||||
|
return primitive[key]
|
||||||
|
except KeyError:
|
||||||
|
return primitive[str(key)] # TODO: switch to int()
|
||||||
|
|
||||||
def fromPrimitive(self, msgPrimitive):
|
def fromPrimitive(self, msgPrimitive):
|
||||||
msgType = msgPrimitive[self.headerType]
|
msgType = msgPrimitive[self.headerType]
|
||||||
if msgType == self.typeRequest:
|
if msgType == self.typeRequest:
|
||||||
msg = msgtypes.RequestMessage(msgPrimitive[self.headerNodeID],
|
msg = msgtypes.RequestMessage(self.get(msgPrimitive, self.headerNodeID),
|
||||||
msgPrimitive[self.headerPayload],
|
self.get(msgPrimitive, self.headerPayload),
|
||||||
msgPrimitive[self.headerArgs],
|
self.get(msgPrimitive, self.headerArgs),
|
||||||
msgPrimitive[self.headerMsgID])
|
self.get(msgPrimitive, self.headerMsgID))
|
||||||
elif msgType == self.typeResponse:
|
elif msgType == self.typeResponse:
|
||||||
msg = msgtypes.ResponseMessage(msgPrimitive[self.headerMsgID],
|
msg = msgtypes.ResponseMessage(self.get(msgPrimitive, self.headerMsgID),
|
||||||
msgPrimitive[self.headerNodeID],
|
self.get(msgPrimitive, self.headerNodeID),
|
||||||
msgPrimitive[self.headerPayload])
|
self.get(msgPrimitive, self.headerPayload))
|
||||||
elif msgType == self.typeError:
|
elif msgType == self.typeError:
|
||||||
msg = msgtypes.ErrorMessage(msgPrimitive[self.headerMsgID],
|
msg = msgtypes.ErrorMessage(self.get(msgPrimitive, self.headerMsgID),
|
||||||
msgPrimitive[self.headerNodeID],
|
self.get(msgPrimitive, self.headerNodeID),
|
||||||
msgPrimitive[self.headerPayload],
|
self.get(msgPrimitive, self.headerPayload),
|
||||||
msgPrimitive[self.headerArgs])
|
self.get(msgPrimitive, self.headerArgs))
|
||||||
else:
|
else:
|
||||||
# Unknown message, no payload
|
# Unknown message, no payload
|
||||||
msg = msgtypes.Message(msgPrimitive[self.headerMsgID], msgPrimitive[self.headerNodeID])
|
msg = msgtypes.Message(msgPrimitive[self.headerMsgID], msgPrimitive[self.headerNodeID])
|
||||||
|
|
|
@ -209,7 +209,7 @@ class KademliaProtocol(protocol.DatagramProtocol):
|
||||||
except (encoding.DecodeError, ValueError):
|
except (encoding.DecodeError, ValueError):
|
||||||
# We received some rubbish here
|
# We received some rubbish here
|
||||||
return
|
return
|
||||||
except IndexError:
|
except (IndexError, KeyError):
|
||||||
log.warning("Couldn't decode dht datagram from %s", address)
|
log.warning("Couldn't decode dht datagram from %s", address)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue