Pregunta
Estoy tratando de bloquear las comunicaciones en mi cliente XMPP (construido en la parte superior de Strophe.js).El problema es que solo bloquea mis mensajes en un contacto, estoy tratando de "MUTE", pero no bloquea ningún mensaje entrante de ese contacto.
Aquí está la lógica (basada en http://xmpp.org/rfcs/RFC3921.html#privacia ):
1) Agregue "bill@domain.me" a mi lista de "bloque"
var recipient = "bill@domain.me"
var block = $iq({type: 'set'}).c('query', {xmlns: 'jabber:iq:privacy'}).
c('list', {name: 'block'}).
c('item', {type: 'jid', value: recipient, action: 'deny', order: 1}).
c('message');
2) Haz que esta lista activa
var setListActive = $iq({type: 'set'}).c('query', {xmlns: 'jabber:iq:privacy'}).c("active", {name: "block"});
SGN.connection.sendIQ(setListActive);
¿Cuál podría ser el problema?
Solución
Podría estar equivocado Pero lo que he entendido es que es la forma en que debería funcionar.
Si verifica la lista, estaba agregando Jids a ver que están todos allí:
var getMyPrivacyList = $iq({type: 'get'}).c('query', {xmlns: 'jabber:iq:privacy'}).c("list", {name: "block"});
APP.connection.sendIQ(getMyPrivacyList,function success(response) { console.log(response) });
Sin embargo, si desea bloquear los mensajes entrantes, tendría que manualmente verifique los Jids de los remitentes contra esta lista cada vez que llega el mensaje.
Otros consejos
Tienes que enviar la presencia de suscripción a ese amigo también.y tenga que poner un manejador para manejar el tipo de presencia="No suscrito".En ese controlador, envíe la presencia de cancelación de suscripción.
Código para bloquear amigo
const blockFriend_Stanza=function(fromJid, friendJid,cb_success){
connection.send($pres({ to: friendJid, type: "unavailable", }));
connection.send($pres({ to: friendJid, type: "unsubscribe" }));
let UnblockIq=$iq({ 'type': 'set', 'id': 'blockFriend', from: fromJid })
.c("block", {xmlns: "urn:xmpp:blocking"}).c("item", {jid: friendJid});
connection.sendIQ(UnblockIq,
response=>{
console.log("onClick_lnkBlockFriend",response)
if(response.getAttribute("type")=="result"){
cb_success();
}
},
error=>{
console.log("onClick_lnkBlockFriend Error",error)
}
);
let updateRosterIq=$iq({ 'type': 'set', 'id': 'acceptedReq' })
.c("query", {xmlns: Strophe.NS.ROSTER}).c("item", {jid: friendJid,ask:null, subscription: "remove"});
connection.sendIQ(updateRosterIq,response=>{ console.log("onClick_lnkBlockFriend_rosterRemoval",response)},error=>{ console.log("onClick_lnkBlockFriend_rosterRemoval Error",error)});
}
Código para el manipulador de cancelación de suscripción
function onPresence(presence) {
console.log("presense obj",presence);
var presence_type = $(presence).attr('type'); // unavailable, subscribed, etc...
var from = $(presence).attr('from'); // presence coming from jabber_id
var to = $(presence).attr('to'); // presence coming to jabber_id
if(presence_type == 'unsubscribe')
{
connection.send($pres({ to: from, type: "unsubscribed" }));
connection.send($pres({ to: from, type: "unavailable", }));
}
return true;
}