On 12/5/06, chris <[EMAIL PROTECTED]> wrote:
> On Tuesday 05 December 2006 06:19, Peter Kropf wrote:
> > I was poking around the owserver protocol from Python
>
>  is that with socket or are you using higher level modules?
> can you show a demo script?

Here's the code I'm playing with. Note that it is broken and has many
problems including not correctly reading the messages received. But it
will give you an idea on how things could work...



import sys
import os
import socket
import struct


msg_error    = 0
msg_nop      = 1
msg_read     = 2
msg_write    = 3
msg_dir      = 4
msg_size     = 5
msg_presence = 6

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print s
s.connect(('kuro2', 9999))
payload = '/'
#payload = '/bus.0'
#payload='/10.B7B64D000800'
print 'payload:', payload

smsg = struct.pack('iiiiii',
                   socket.htonl(0), #version
                   socket.htonl(len(payload) + 1), #payload length
                   socket.htonl(msg_dir), #type of function call
                   socket.htonl(258), #format flags
                   socket.htonl(0), #size of data element for read or write
                   socket.htonl(0), #offset for read or write
                   )

print 'len(smsg):', len(smsg)
print 'smsg:', smsg


s.sendall(smsg)

smsg = payload + '\x00'
print 'len(smsg):', len(smsg)
print 'smsg:', smsg

s.sendall(smsg)

log = open('/tmp/ow.log', 'w')

data = s.recv(24)

print
print 'len(data):', len(data)
print 'data:', data

try:
    data1 = s.recv(67)
    data = data + data1
    data2 = ' '
    while len(data2):
        data2 = s.recv(67)
        data = data + data2
except socket.error:
    pass

log.write(data)
log.close()
s.close()

print
print 'len(data):', len(data)
print 'data:', data


#version, payload_len, type_of_call, format_flags, size_of_data,
offset, payload = struct.unpack('iiiiiis', data)
version, payload_len, type_of_call, format_flags, size_of_data, offset
= struct.unpack('iiiiii', data[:24])

version = socket.ntohl(version)
payload_len = socket.ntohl(payload_len)
type_of_call = socket.ntohl(type_of_call)
format_flags = socket.ntohl(format_flags)
size_of_data = socket.ntohl(size_of_data)
offset = socket.ntohl(offset)

print
print 'version:', version
print 'payload_len:', payload_len
print 'type_of_call:', type_of_call
print 'format_flags:', format_flags
print 'size_of_data:', size_of_data
print 'offset:', offset

if payload_len:
    print 'payload:', data1
    for idx in range(0, len(data1)):
        print idx, ord(data1[idx]), data1[idx]

sys.exit(0)

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to