Я использую сервер openfire в облаке Amazon Web Services EC2 и написал небольшой клиент xmpp на базе strophe.js для подключения к серверу и отправки сообщений туда и обратно. Это прекрасно работает.
Однако я также хочу выполнить внутриполосную регистрацию (XEP-0077) с этим клиентом. Для этого я пытаюсь использовать strophe.register.js.
Вот код, который я использую:
var tempConn = new Strophe.Connection("http://myAWSDNS.compute.amazonaws.com:7070/http-bind/");
tempConn.register.connect("http://myAWSDNS.us-west-2.compute.amazonaws.com/", function (status) {
if (status === Strophe.Status.REGISTER) {
// fill out the fields
connection.register.fields.username = "juliet";
connection.register.fields.password = "R0m30";
// calling submit will continue the registration process
connection.register.submit();
} else if (status === Strophe.Status.REGISTERED) {
console.log("registered!");
// calling login will authenticate the registered JID.
connection.authenticate();
} else if (status === Strophe.Status.CONFLICT) {
console.log("Contact already existed!");
} else if (status === Strophe.Status.NOTACCEPTABLE) {
console.log("Registration form not properly filled out.")
} else if (status === Strophe.Status.REGIFAIL) {
console.log("The Server does not support In-Band Registration")
} else if (status === Strophe.Status.CONNECTED) {
// do something after successful authentication
} else {
// Do other stuff
}
});
Я включил внутриполосную регистрацию на сервере openfire (см. образ)
Однако я всегда получаю вывод: «Сервер не поддерживает внутриполосную регистрацию» (т.е. status === Strophe.Status.REGIFAIL.
Я вошел в код strophe.register.js и вижу, что он пытается найти регистровый тег в <stream:features>
, но не могу его найти, и устанавливает статус REGIFAIL.
var register, mechanisms;
register = bodyWrap.getElementsByTagName("register");
mechanisms = bodyWrap.getElementsByTagName("mechanism");
if (register.length === 0) {
that._changeConnectStatus(Strophe.Status.REGIFAIL, null);
return;
Это xml, который я получаю, который содержит функции потока:
<body xmlns="http://jabber.org/protocol/httpbind" xmlns:stream="http://etherx.jabber.org/streams" from="win-lv4k7bsupjo" authid="747df9ee" sid="747df9ee" secure="true" requests="2" inactivity="30" polling="5" wait="60" hold="1" ack="913534085" maxpause="300" ver="1.6"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features></body>
Как видите, он содержит множество механизмов, но не содержит регистров.
Итак, мой вопрос: почему он не содержит тега регистрации, если я включил внутриполосную регистрацию, и как я могу настроить его для включения этого тега регистрации, чтобы я мог выполнять регистрацию внутри полосы?
Любая помощь приветствуется!
Спасибо,
наилучшие пожелания,
Крис
Вы пробовали включать http: // в свой Strophe.Connection, полный URL + ": 7070 / http-bind /"
например. Strophe.Connection ("http://myAWSDNS.compute.amazonaws.com:7070/http-bind/")
а также закомментировать в strophe.register
/ * if (register.length === 0) {that._changeConnectStatus (Strophe.Status.REGIFAIL, null); возвращение; } else * / this.enabled = true;
работал у меня.
С уважением, Маринус