For a challenge, and because BeOS hasn't got a client, I'm
attempting to write a napster client in REBOL.
Napster sends data in a format that has a two byte binary
length, followed by a two byte binary message code then
a string thats the two byte binary length long.
I'm using read-io to get these from the server, however
read-io occassionally gets one less byte than expected.
here's a code snippet...
Response: make binary! 2
read-io Napster Response 4
print Response
; napsters server suffers from byte reversal !!
ResponseLength: (to-integer first Response) + (256 * (to-integer
second Response))
ResponseCode: (to-integer third Response) + (256 * (to-integer
fourth Response))
print ResponseCode
print ResponseLength
Response: Make string! ResponseLength
read-io Napster Response ResponseLength
either ResponseCode = 3
[
print Response
print " Login okay!"
]
[
print "Login Failed"
]
Response: make binary! 2
read-io Napster Response 4
print Response
and the output...
#{10000300}
3
16
[EMAIL PROTECTED]
Login okay!
#{6D}
** Script Error: Out of range or past end.
** Where: to-integer second Response
as you can see, the length is 16 (3 is the message code) but the data
pulled back is
"[EMAIL PROTECTED]" is only 15 bytes long, the 'm' from .com is received
when the
script is expecting the next response.
Can any one see anything that I'm doing incorrectly or might this be a
bug ????
Dave