home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 4 / AACD04.ISO / AACD / Programming / Python / Source / Amiga_Misc / testset / as.py next >
Encoding:
Python Source  |  1998-10-31  |  1.9 KB  |  61 lines

  1. import ARexx
  2. import socket
  3.  
  4. # dictionary of used sockets, filedes->socket
  5. sockets={}
  6.  
  7. # One function to handle the socket commands,
  8. # this is convenient because one 'try' block covers all.
  9. def cmd_dispatcher(host,msg,cmd,args):
  10.     try:
  11.         if cmd=='GETHOSTBYNAME':
  12.             msg.result=socket.gethostbyname(args['HOST'])
  13.         elif cmd=='GETHOSTNAME':
  14.             msg.result=socket.gethostname()
  15.         elif cmd=='GETHOSTBYADDR':
  16.             (msg.result,aliaslist,ipaddrlist) = socket.gethostbyaddr(args['IPADDR'])
  17.         elif cmd=='GETSERVBYNAME':
  18.             if args['TCP']: prot='tcp'
  19.             if args['UDP']: prot='udp'
  20.             msg.result=`socket.getservbyname(args['SERVICE'],prot)`
  21.         elif cmd=='CONNECTSOCKET':
  22.             sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  23.             sock.connect(args['HOST'],args['PORT'])
  24.             sockets[sock.fileno()]=sock
  25.             msg.result=`sock.fileno()`
  26.         elif cmd=='CLOSESOCKET':
  27.             fd=args['SOCKET']
  28.             sockets[fd].close()
  29.             del sockets[fd]
  30.         elif cmd=='READSOCKET':
  31.             msg.result=sockets[args['SOCKET']].recv(args['LEN'])
  32.             if not msg.result: msg.rc=ARexx.RC_WARN
  33.         elif cmd=='WRITESOCKET':
  34.             msg.result=`sockets[args['SOCKET']].send(args['DATA'])`
  35.         elif cmd=='WRITESOCKETCR':
  36.             msg.result=`sockets[args['SOCKET']].send(args['DATA']+'\n')`
  37.  
  38.     except socket.error,string:
  39.         msg.rc=ARexx.RC_ERROR
  40.         if type(string)==type(''): msg.rc2=string
  41.         else: msg.rc2=string[1]
  42.     return 1
  43.  
  44. cmds = [
  45. ('GETHOSTBYNAME','HOST/A',None,cmd_dispatcher),
  46. ('GETHOSTNAME','',None,cmd_dispatcher),
  47. ('GETHOSTBYADDR','IPADDR/A',None,cmd_dispatcher),
  48. ('GETSERVBYNAME','SERVICE/A,TCP/S,UDP/S',{'TCP':-1,'UDP':0},cmd_dispatcher),
  49. ('CONNECTSOCKET','HOST/A,PORT/N/A',None,cmd_dispatcher),
  50. ('CLOSESOCKET','SOCKET/A/N',None,cmd_dispatcher),
  51. ('READSOCKET','SOCKET/A/N,LEN/A/N',None,cmd_dispatcher),
  52. ('WRITESOCKET','SOCKET/A/N,DATA/A/F',None,cmd_dispatcher),
  53. ('WRITESOCKETCR','SOCKET/A/N,DATA/A/F',None,cmd_dispatcher)
  54. ]
  55.  
  56. h=ARexx.host('PY_SOCK',cmds)
  57.  
  58. print 'Python ARexx host. Host is',h.name
  59.  
  60. h.run()
  61.