Fix bug preventing XMPP client from connecting

This commit is contained in:
Zaid Humaimidi committed 2024-03-27 13:57:09 -07:00
1 parent 3134b63b68
commit ab80a62c5c
1 file changed
+36 -42
+36 -42
View File
@@ -321,50 +321,44 @@ export default class XmppClient extends EventEmitter {
this._iqStanzaCallbacks = new Map(); this._iqStanzaCallbacks = new Map();
} }
static connect(opts: XmppClientOptions): Promise<XmppClient> { static async connect(opts: XmppClientOptions): Promise<XmppClient> {
return new Promise((resolve, reject) => { function connectSocket(host: string, port: number): Promise<net.Socket> {
let socket = new net.Socket(); return new Promise((resolve, reject) => {
socket.on("error", reject); const socket = new net.Socket();
socket.on("error", reject);
socket.connect( socket.connect(port, host, () => {
opts.port || 5222,
opts.host,
void async function () {
socket.removeListener("error", reject); socket.removeListener("error", reject);
try { resolve(socket);
let status = 1; });
while (status) { });
if (status === STATUS_STARTTLS) }
socket = await upgradeTls(socket, opts.host);
status = await xmppStream(
socket,
init(
socket,
opts.host,
opts.username,
opts.password,
opts.resource,
),
);
}
const client = new XmppClient(); let socket = await connectSocket(opts.host, opts.port || 5222);
client._socket = socket; try {
client._host = opts.host; let status = 1;
client._username = opts.username; while (status) {
client._resource = opts.resource; if (status === STATUS_STARTTLS)
socket.on("data", client._onData.bind(client)); socket = await upgradeTls(socket, opts.host);
socket.on("error", client._onError.bind(client)); status = await xmppStream(
if (opts.timeout) socket,
socket.setTimeout(opts.timeout, client.close.bind(client)); init(socket, opts.host, opts.username, opts.password, opts.resource),
resolve(client); );
} catch (err) { }
socket.destroy(); } catch (err) {
reject(err); socket.destroy();
} throw err;
}, }
);
}); const client = new XmppClient();
client._socket = socket;
client._host = opts.host;
client._username = opts.username;
client._resource = opts.resource;
socket.on("data", client._onData.bind(client));
socket.on("error", client._onError.bind(client));
if (opts.timeout)
socket.setTimeout(opts.timeout, client.close.bind(client));
return client;
} }
close(): void { close(): void {