[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] add an in-progress python controller to test controlport



Update of /home/or/cvsroot/contrib
In directory moria.mit.edu:/home2/arma/work/onion/cvs/contrib

Added Files:
	tor-control.py 
Log Message:
add an in-progress python controller to test controlport


--- NEW FILE: tor-control.py ---
#!/usr/bin/python2
#$Id: tor-control.py,v 1.1 2004/11/07 22:08:20 arma Exp $

import socket
import struct
import sys

MSG_TYPE_SETCONF = 0x0002
MSG_TYPE_GETCONF = 0x0003
MSG_TYPE_AUTH    = 0x0007

def parseHostAndPort(h):
    host, port = "localhost", 9050
    if ":" in h:
        i = h.index(":")
        host = h[:i]
        try:
            port = int(h[i+1:])
        except ValueError:
            print "Bad hostname %r"%h
            sys.exit(1)
    elif h:
        try:
            port = int(h)
        except ValueError:
            host = h

    return host, port

def receive_message(s):
  body = ""
  header = s.recv(4)
  length,type = struct.unpack("!HH",header)
  print "Got response length %d, type %d"%(length,type)
  if length:
    body = s.recv(length)
  print "Got response length %d, type %d, body %s"%(length,type,body)
  return length,type,body

def pack_message(type, body=""):
  length = len(body)
  reqheader = struct.pack("!HH", length, type)
  return "%s%s"%(reqheader,body)

def authenticate(s):
  s.sendall(pack_message(MSG_TYPE_AUTH))
  length,type,body = receive_message(s)
  return

def get_option(s,name):
  s.sendall(pack_message(MSG_TYPE_GETCONF,name))
  length,type,body = receive_message(s)
  return

def do_main_loop(host,port):
  print "host is %s:%d"%(host,port)
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.connect((host,port))
  authenticate(s)
  get_option(s,"nickname")
#  get_option(s,"DirFetchPostPeriod\n")

  return

if __name__ == '__main__':
  if len(sys.argv) != 2:
    print "Syntax: tor-control.py torhost:torport"
    sys.exit(0)
  sh,sp = parseHostAndPort(sys.argv[1])
  do_main_loop(sh,sp)