def build_inf(self): """ Build an INF for us. """ d = self.inf.copy() # Hubs should never leak PIDs. if "PD" in d: del d["PD"] data = join_flags(d) return "%s %s" % (self.sid, data)
def handle_SUP(self, data): if self.state not in ("PROTOCOL", "NORMAL"): self.status(44, "Invalid state", "FCHSUP") return for flag in data.split(" "): feature = flag[2:] if flag.startswith("RM"): self.features.discard(feature) elif flag.startswith("AD"): self.features.add(feature) if "BASE" not in self.features: self.status(45, "Missing required feature", "FCBASE") return if "TIGR" not in self.features: self.status(45, "Missing required feature", "FCTIGR") return # If in PROTOCOL, reply with SUP, assign and send a SID, and switch to # the IDENTIFY state. if self.state == "PROTOCOL": sup = "ISUP %s" % join_features(self._our_features) self.sendLine(sup) self.send_sid() uptime = int(time.time() - self.factory.started) info = { "CT": 32, "UP": uptime, } inf = "IINF %s" % join_flags(info) self.sendLine(inf) self.state = "IDENTIFY"
def build_inf(self): return "SERV %s" % join_flags(self.inf)
def test_join_flags_escaped(self): i = {"DE": "current topic"} o = "DEcurrent\\stopic" self.assertEqual(join_flags(i), o)
def test_join_flags_multiple(self): i = {"HU": "1", "HI": "1"} o1 = "HU1 HI1" o2 = "HI1 HU1" self.assertTrue(join_flags(i) in (o1, o2))
def test_join_flag_single(self): i = {"FS": "0"} o = "FS0" self.assertEqual(join_flags(i), o)