Example #1
0
 def run(self):
     self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
     self.sock.settimeout(10)
     self.new_servers = {}
     while True:
         try :
             self.sock.sendto("info", ('<broadcast>', s.SQUIDNET_BROADCAST_PORT))
             while True :
                 if self.callback:
                     self.callback(self, self.servers)
                 self.servers = self.new_servers
                 if self.deleteold:
                     self.new_servers = {}
                 (message, address) = self.sock.recvfrom(4096)
                 if len(message) :
                     try :
                         xs = sexp.read_all(message)
                         for x in xs :
                             serv = s.SquidServer.load_sexp(x)
                             # hopefully server names are unique
                             self.new_servers[serv.name] = serv
                     except socket.error :
                         pass #timeout
                     except :
                         print "bad server response. ignoring: "+message
                         traceback.print_exc()
         except socket.error :
             pass # timeout
         except :
             traceback.print_exc()
     self.sock.close()
Example #2
0
 def _get_info(self):
     if not hasattr(self, '_info'):
         try:
             self._info = squidprotocol.SquidServer.load_sexp(sexp.read_all(str(self.pickled_data))[0])
         except int:
             raise ValueError("No data set yet")
     return self._info
Example #3
0
 def run(self) :
     print "Starting handler server."
     self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     self.s.bind(("", self.server_info.port))
     self.s.settimeout(5)
     while self.go:
         try :
             message, address = self.s.recvfrom(8192 << 8)
             print "Got data from", address
             # Acknowledge it.
             xs = sexp.read_all(message)
             for x in xs :
                 # try to interpret it as a message!
                 print "Message:", x
                 print self.server_info.handle(x)
                 # we don't try to talk to the client.  Like a remote controller
         except socket.error :
             pass # just a timeout
         except :
             traceback.print_exc()
     self.s.close()
Example #4
0
 def run(self) :
     print "Starting broadcast server."
     self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     self.s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
     self.s.bind(("", s.SQUIDNET_BROADCAST_PORT))
     self.s.settimeout(5)
     while self.go :
         try :
             message, address = self.s.recvfrom(4096 << 10)
             print "Got data from", address
             # Acknowledge it.
             xs = sexp.read_all(message)
             for x in xs :
                 if x == sexp.Symbol("info") :
                     print "Giving info"
                     self.s.sendto(sexp.write(self.server_info.get_sexp()), address)
                 else :
                     print "Ignoring"
         except socket.error :
             pass # just a timeout
         except :
             traceback.print_exc()
     self.s.close()
Example #5
0
                print "Pinging",l[1]
                info.ping(l[1])
                #info.ping(l[1])
            elif l[0] == "servers" :
                for serv in info.servers.keys() :
                    print serv
            elif l[0] == "devices" :
                for d in info.servers[l[1]].devices :
                    print "%s\t%s" % (d.name, d.desc)
            elif l[0] == "messages" :
                for m in info.servers[l[1]].get_device(l[2]).messages :
                    print "%s %s - %s" % (m.name,
                                         ''.join("(%s, %s)" % (a.name, a.argtype.clssquidtype()) for a in m.arguments),
                                        m.desc)
            elif l[0] == "request" :
                c = i.split(" ", 4)
                if len(c) < 5 :
                    c.append("")
                m = info.servers[c[1]].get_device(c[2]).get_message(c[3])
                args = m.decode_sexp_args(sexp.read_all(c[4]))
                info.request(c[1], c[2], c[3], args)
            elif l[0] == "dump" :
                print sexp.write(info.servers[l[1]].get_sexp())
            elif l[0] in ('quit', 'exit'):
                break
        except (KeyboardInterrupt, EOFError) :
            break
        except :
            traceback.print_exc()
            pass