Example #1
0
def decodeHandshake(message):
    length = binaryToShortInt(message[0])
    proto = message[1:20]
    reserved = message[20:28]
    infoHash = message[28:48]
    peerId = message[48:68]
    return length, proto, reserved, infoHash, peerId
Example #2
0
def decodeMessage(message):
    length = binaryToLongInt(message[:4])
    if length==0:
        #keepalive
        result = (-1, None)
    else:
        numericMessageTyp = binaryToShortInt(message[4])  
        if numericMessageTyp<0 or numericMessageTyp>8:
            #unknown messagetype
            result = (-2, None)
        elif numericMessageTyp>=0 and numericMessageTyp<=3 and length==1:
            #choke, unchoke, interested, notinterested
            result = (numericMessageTyp, None)
        elif numericMessageTyp==4 and length==5:
            #have
            result = (numericMessageTyp, binaryToLongInt(message[5:9]))
        elif numericMessageTyp==5:
            #bitfield
            result = (numericMessageTyp, binaryToBin(message[5:]))
        elif numericMessageTyp==6 and length==13:
            #request
            result = (numericMessageTyp, (binaryToLongInt(message[5:9]),\
                                          binaryToLongInt(message[9:13]),\
                                          binaryToLongInt(message[13:17])))
        elif numericMessageTyp==7:
            #piece
            result = (numericMessageTyp, (binaryToLongInt(message[5:9]),\
                                          binaryToLongInt(message[9:13]),\
                                          message[13:]))
        elif numericMessageTyp==8 and length==13:
            #cancel
            result = (numericMessageTyp, (binaryToLongInt(message[5:9]),\
                                          binaryToLongInt(message[9:13]),\
                                          binaryToLongInt(message[13:17])))
        else:
            #corrupt message
            result = (None, None)
    return result