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