Pastebin :: Ident server RSS Feed
Posted by Anonymous at 2007-03-20 17:22:42
New | Download | Delete | Report | http://chipzirc.net/pastebin/xb
  1. namespace BooIdent
  2.  
  3. import System
  4. import System.IO
  5. import System.Text
  6. import System.Net
  7. import System.Net.Sockets
  8.  
  9. class Server(IDisposable):
  10. """ Identification Protocol Server, as simple as possible. """
  11.         username as string
  12.         os as string
  13.         socket as TcpListener
  14.        
  15.         def constructor():
  16.                 self(System.Environment.UserName)
  17.        
  18.         def constructor(username as string):
  19.                 self(username, System.Environment.OSVersion.Platform.ToString())
  20.        
  21.         def constructor(username as string, os as string):
  22.                 self.username = username
  23.                 self.os = os
  24.                
  25.         def Trace(obj):
  26.                 System.Diagnostics.Trace.WriteLine("BooIdent: " + obj.ToString())
  27.                
  28.         def Dispose():
  29.                 Stop()
  30.        
  31.         def Start():
  32.                 ep = IPEndPoint(IPAddress.Any, 113)
  33.                 Start(ep)
  34.        
  35.         def Start(ep as IPEndPoint):
  36.                 try:
  37.                         Trace("Server starting... Local EP = " + ep.ToString())
  38.                         socket = TcpListener(ep)
  39.                         socket.Start()
  40.                         Trace("Server running :)")
  41.                 except ex:
  42.                         Trace("Server error: " + ex.ToString())
  43.                         raise ex
  44.                
  45.         def Stop():
  46.                 try:
  47.                         if socket != null:
  48.                                 socket.Stop()
  49.                                 Trace("Server stopped")
  50.                 ensure:
  51.                         socket = null
  52.  
  53.         def ListenOnce():
  54.                 if not socket.Pending():
  55.                         return
  56.                
  57.                 using client = socket.AcceptTcpClient():
  58.                         ep = client.Client.RemoteEndPoint.ToString()
  59.                         Trace("Accepted client " + ep)
  60.                        
  61.                         using sr = StreamReader(client.GetStream(), Encoding.ASCII):
  62.                                 request = sr.ReadLine()
  63.                                 Trace("Client " + ep + " request: " + request)
  64.                        
  65.                                 response = request + " : USERID : " + os + " : " + username + "\r\n"
  66.                                 using sw = StreamWriter(client.GetStream(), Encoding.ASCII):
  67.                                         sw.Write(response)
  68.  
  69.                                 Trace("Client " + ep + " response: " + response)
  70.                        
  71.