Hi Murphy,

That's true, converting to string solves the problem. However, I think it would 
be better to modify checksum() to test the type of passed data. Also, a "build 
packet" example would be great for the next nox update :-)

Thanks,
Ibrahim


Subject: Re: [nox-dev] FW: Checksum calculation bug?
From: jam...@nau.edu
Date: Wed, 24 Aug 2011 14:20:04 -0700
CC: nox-dev@noxrepo.org
To: ibrahim.me...@alumnos.upm.es



checksum() is expecting the payload to be a str, not an array.array('B').  
IIRC, the NOX packet library basically always ends up with a str 
(struct.pack()ing the header fields and concatenating with the payload after 
possibly calling .tostring() on it).  This is the kind of thing that it calls 
checksum() on, so the assumption that it's passed a str is probably a decent 
one, so I don't think it's a bug.
This raises the question of how you're building the packets and where you are 
calling checksum() from, but in any event, you can just call .tostring() on 
your array before passing it to checksum(), or run your own version of 
checksum(), or modify checksum() to see if it's passed an array.array('B') 
since apparently creating an array from an array doesn't re-pack the values.
-- Murphy
On Aug 24, 2011, at 10:43 AM, ibrahim mun wrote:The reason is that wireshark 
shows checksum error in received packets (I've built). in python prompt I 
tried:data=array.array('B',"example")arr=array.array('H', data)and the result 
was an array of bytes! modifying the code I don't receive any erroneous packets.
Is this my special casa or maybe a python issue?Thanks,
Ibrahim
Subject: Re: [nox-dev] FW: Checksum calculation bug?
From: jam...@nau.edu
Date: Wed, 24 Aug 2011 04:35:20 -0700
CC: nox-dev@noxrepo.org
To: ibrahim.me...@alumnos.upm.es

Do you have any reason to suspect that it isn't functioning correctly?
It seems like you are assuming that arr is an array of bytes.  However, if you 
look at the top of the function, you'll see that it's actually an array.array 
of "H" values, which are unsigned two-byte values.
-- Murphy
On Aug 24, 2011, at 4:19 AM, ibrahim mun wrote:Hi,

I think we have a bug in packet_utils.checksum, please check it:
=============================
def checksum(data, start, skip_word = 0):

    if len(data) % 2 != 0:
        arr = array.array('H', data[:-1])
    else:
        arr = array.array('H', data)

    if skip_word:
        for i in range(0, len(arr)):
            if i == skip_word:
                continue
            start +=  arr[i]
    else:        
       for i in range(0,len(arr)): # BUG?   
            start +=  arr[i]        # BUG? 
       # IT should be :
       # for i in range(0, len(arr)-1,2):
       # start +=  arr[i]*0x100 +arr[i+1]

    if len(data) % 2 != 0:
        start += struct.unpack('H', data[-1]+'\0')[0]

    start  = (start >> 16) + (start & 0xffff)
    start += (start >> 16);

    return ntohs(~start & 0xffff)
===============================

Thanks,

Ibrahim


_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev


                                          
_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to