def part_room(self, room_jid, jid): if not isinstance(room_jid, JID): room_jid = JID(room_jid) if not isinstance(jid, JID): jid = JID(jid) presence = MucPresence(from_jid=jid.bare(), to_jid=room_jid.bare(), stanza_type='unavailable') self.stream.send(presence)
def send_to_room(self, room_jid, jid, body): if not isinstance(room_jid, JID): room_jid = JID(room_jid) if not isinstance(jid, JID): jid = JID(jid) msg = Message(from_jid=jid.bare(), to_jid=room_jid.bare(), body=body, stanza_type="groupchat") self.stream.send(msg)
def join_room(self, room_jid, jid, nick=None): if not isinstance(room_jid, JID): room_jid = JID(room_jid) if not isinstance(jid, JID): jid = JID(jid) if nick is None: nick = jid.resource my_sender = JID(room_jid.node, room_jid.domain, nick) p = MucPresence(from_jid=jid.bare(), to_jid=my_sender) p.make_join_request(history_maxchars=0) self.stream.send(p) return my_sender
def vipadia_command(self, iq): dbg("vipadia_command:\n%s" % (fmt_evt(iq),)) StLock.acquire() try: items = iq.xpath_eval("v:command/v:item", { "v": "http://vipadia.com/skype", }) for item in items: command = item.prop("command") if command == "subscribe": djid = JID(item.prop("djid")) if djid not in St['dialbacks']: self.safe_send(iq.make_result_response()) return True self.safe_send(Presence( to_jid=St['dialbacks'][djid], from_jid=item.prop("from"), stanza_type="subscribe")) elif command == "subscribed": frm = JID("%s@%s" % (item.prop("from"), self.config.component)) ujid = St['dialbacks'][get_from(iq)] self.safe_send(Presence( to_jid=ujid, from_jid=frm, stanza_type="subscribed")) elif command == "register-subscribe": jid = JID(item.prop("jid")) self.safe_send(Presence( to_jid=jid.bare(), from_jid=self.config.component, stanza_type="subscribe")) elif command == "register-available": jid = JID(item.prop("jid")) fake_available = Presence(to_jid=self.config.component, from_jid=jid) self.presence_available(fake_available) elif command == "out-subscribe": frm = JID("%s@%s" % (item.prop("from"), self.config.component)) iq_frm = get_from(iq) if iq_frm not in St['dialbacks']: self.safe_send(iq.make_result_response()) return True ujid = St['dialbacks'][iq_frm] self.safe_send(Presence( to_jid=ujid, from_jid=frm, stanza_type="subscribe")) elif command == "slave-online": frm = get_from(iq) digest = str(item.prop("digest")) if not self.is_valid_slave(frm.as_utf8(), digest): err("invalid slave! frm:%s iq:\n%s" % (frm.as_utf8(), fmt_evt(iq))) self.safe_send(iq.make_error_response("forbidden")) return True capacity = int(item.prop("capacity")) base = int(item.prop("base")) St['slaves'][frm] = None St['slots'][frm] = {} dbg(" before St['slots']:%s" % (St['slots'],)) for i in range(base, base+capacity): if i not in St['slots'][frm]: St['slots'][frm][i] = None dbg(" after St['slots']:%s" % (St['slots'],)) self.safe_send(Presence( to_jid=frm, from_jid=self.config.component, stanza_type="subscribe")) elif command == "spawn": ujid = item.prop("ujid") skypeuser = item.prop("skypeuser") skypesecret = item.prop("skypesecret") errstr = self._spawn(JID(ujid), skypeuser, skypesecret) if errstr: err("_spawn error! errstr:%s" % (errstr,)) else: err("unknown command! command:%s\n%s" % (command, fmt_evt(iq),)) self.safe_send(iq.make_error_response("feature-not-implemented")) return True self.safe_send(iq.make_result_response()) return True finally: StLock.release()
def vipadia_command(self, iq): dbg("vipadia_command:\n%s" % (fmt_evt(iq), )) StLock.acquire() try: items = iq.xpath_eval("v:command/v:item", { "v": "http://vipadia.com/skype", }) for item in items: command = item.prop("command") if command == "subscribe": djid = JID(item.prop("djid")) if djid not in St['dialbacks']: self.safe_send(iq.make_result_response()) return True self.safe_send( Presence(to_jid=St['dialbacks'][djid], from_jid=item.prop("from"), stanza_type="subscribe")) elif command == "subscribed": frm = JID("%s@%s" % (item.prop("from"), self.config.component)) ujid = St['dialbacks'][get_from(iq)] self.safe_send( Presence(to_jid=ujid, from_jid=frm, stanza_type="subscribed")) elif command == "register-subscribe": jid = JID(item.prop("jid")) self.safe_send( Presence(to_jid=jid.bare(), from_jid=self.config.component, stanza_type="subscribe")) elif command == "register-available": jid = JID(item.prop("jid")) fake_available = Presence(to_jid=self.config.component, from_jid=jid) self.presence_available(fake_available) elif command == "out-subscribe": frm = JID("%s@%s" % (item.prop("from"), self.config.component)) iq_frm = get_from(iq) if iq_frm not in St['dialbacks']: self.safe_send(iq.make_result_response()) return True ujid = St['dialbacks'][iq_frm] self.safe_send( Presence(to_jid=ujid, from_jid=frm, stanza_type="subscribe")) elif command == "slave-online": frm = get_from(iq) digest = str(item.prop("digest")) if not self.is_valid_slave(frm.as_utf8(), digest): err("invalid slave! frm:%s iq:\n%s" % (frm.as_utf8(), fmt_evt(iq))) self.safe_send(iq.make_error_response("forbidden")) return True capacity = int(item.prop("capacity")) base = int(item.prop("base")) St['slaves'][frm] = None St['slots'][frm] = {} dbg(" before St['slots']:%s" % (St['slots'], )) for i in range(base, base + capacity): if i not in St['slots'][frm]: St['slots'][frm][i] = None dbg(" after St['slots']:%s" % (St['slots'], )) self.safe_send( Presence(to_jid=frm, from_jid=self.config.component, stanza_type="subscribe")) elif command == "spawn": ujid = item.prop("ujid") skypeuser = item.prop("skypeuser") skypesecret = item.prop("skypesecret") errstr = self._spawn(JID(ujid), skypeuser, skypesecret) if errstr: err("_spawn error! errstr:%s" % (errstr, )) else: err("unknown command! command:%s\n%s" % ( command, fmt_evt(iq), )) self.safe_send( iq.make_error_response("feature-not-implemented")) return True self.safe_send(iq.make_result_response()) return True finally: StLock.release()