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?

¿Fue útil?

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;
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top