Initial revision
This commit is contained in:
parent
6252229170
commit
cdd04cad5c
|
@ -0,0 +1,81 @@
|
|||
# Remote nusers client interface
|
||||
|
||||
import rpc
|
||||
from rpc import Packer, Unpacker, TCPClient, UDPClient
|
||||
|
||||
|
||||
class RnusersPacker(Packer):
|
||||
def pack_utmp(self, ui):
|
||||
ut_line, ut_name, ut_host, ut_time = utmp
|
||||
self.pack_string(ut_line)
|
||||
self.pack_string(ut_name)
|
||||
self.pack_string(ut_host)
|
||||
self.pack_int(ut_time)
|
||||
def pack_utmpidle(self, ui):
|
||||
ui_itmp, ui_idle = ui
|
||||
self.pack_utmp(ui_utmp)
|
||||
self.pack_uint(ui_idle)
|
||||
def pack_utmpidlearr(self, list):
|
||||
self.pack_array(list, self.pack_itmpidle)
|
||||
|
||||
|
||||
class RnusersUnpacker(Unpacker):
|
||||
def unpack_utmp(self):
|
||||
ut_line = self.unpack_string()
|
||||
ut_name = self.unpack_string()
|
||||
ut_host = self.unpack_string()
|
||||
ut_time = self.unpack_int()
|
||||
return ut_line, ut_name, ut_host, ut_time
|
||||
def unpack_utmpidle(self):
|
||||
ui_utmp = self.unpack_utmp()
|
||||
ui_idle = self.unpack_uint()
|
||||
return ui_utmp, ui_idle
|
||||
def unpack_utmpidlearr(self):
|
||||
return self.unpack_array(self.unpack_utmpidle)
|
||||
|
||||
|
||||
class RnusersClient(UDPClient):
|
||||
|
||||
def addpackers(self):
|
||||
self.packer = RnusersPacker().init()
|
||||
self.unpacker = RnusersUnpacker().init('')
|
||||
|
||||
def init(self, host):
|
||||
return UDPClient.init(self, host, 100002, 2)
|
||||
|
||||
def Num(self):
|
||||
self.start_call(1)
|
||||
self.do_call()
|
||||
n = self.unpacker.unpack_int()
|
||||
self.end_call()
|
||||
return n
|
||||
|
||||
def Names(self):
|
||||
self.start_call(2)
|
||||
self.do_call()
|
||||
list = self.unpacker.unpack_utmpidlearr()
|
||||
self.end_call()
|
||||
return list
|
||||
|
||||
def Allnames(self):
|
||||
self.start_call(3)
|
||||
self.do_call()
|
||||
list = self.unpacker.unpack_utmpidlearr()
|
||||
self.end_call()
|
||||
return list
|
||||
|
||||
|
||||
def test():
|
||||
import sys
|
||||
host = ''
|
||||
if sys.argv[1:]: host = sys.argv[1]
|
||||
c = RnusersClient().init(host)
|
||||
list = c.Names()
|
||||
def strip0(s):
|
||||
while s and s[-1] == '\0': s = s[:-1]
|
||||
return s
|
||||
for (line, name, host, time), idle in list:
|
||||
line = strip0(line)
|
||||
name = strip0(name)
|
||||
host = strip0(host)
|
||||
print name, host, line, time, idle
|
Loading…
Reference in New Issue