У меня есть фрагмент кода, довольно простой, для входа на сервер xmpp в libjingle.
Я не могу войти на сервер. Я уверен, что параметры верны, так как я проверил с помощью клиентской программы xmpp.
Моя последовательность такова:
XmppPump
,xmppPump.client().SignalStateChange
, который следует вызывать, когда прогресс осуществляется через различные состояния в XmppEngine
,XmppPump::DoLogin
готово.buzz::XmppClient * xmppClient = mI->xmppPump.client();
assert(xmppClient != nullptr);
buzz::Jid jid = buzz::Jid(user);
std::string server = serverHost + ":" +
std::to_string(kXmppClientDefaultPort);
bool allow_plain = true;
buzz::XmppClientSettings xcs;
xcs.set_user(jid.node());
xcs.set_resource(jid.resource());
xcs.set_host(jid.domain());
xcs.set_allow_plain(allow_plain);
xcs.set_use_tls(buzz::TLS_DISABLED);
talk_base::InsecureCryptStringImpl pass;
pass.password() = password;
xcs.set_pass(talk_base::CryptString(pass));
std::string server_;
int port;
std::size_t colon = server.find(':');
if (colon == std::string::npos) {
server_ = server;
port = kXmppClientDefaultPort;
}
else {
server_ = server.substr(0, colon);
port = atoi(server.substr(colon + 1).c_str());
}
std::cout << "Logging in as user " << jid.node() << std::endl;
std::cout << "User domain is " << jid.domain() << std::endl;
std::cout << "Resource is " << jid.resource() << std::endl;
std::cout << "Password is " << password << std::endl;
std::cout << "Logging into server " << server_;
std::cout << " port " << port << std::endl;
xcs.set_server(talk_base::SocketAddress(server_, port));
xcs.set_protocol(cricket::PROTO_SSLTCP);
talk_base::InitializeSSL();
std::future<buzz::XmppEngine::State> result =
mI->xmppLoginState.get_future();
//Callback is setup here
xmppClient->SignalStateChange.connect(mI.get(),
&Impl::OnStateChange);
std::cout << std::endl;
std::cout << "About to call buzz::XmppPump::DoLogin " << std::endl;
//Logging in async.
mI->xmppPump.DoLogin(xcs, new buzz::XmppSocket(buzz::TLS_DISABLED), nullptr);
std::cout << "Called buzz::XmppPump::DoLogin " << std::endl;
mI->signalingThread.Start();
std::cout << "Blocked waiting for buzz::xmppPump::DoLogin to finish."<< std::endl;
//Forever here and XmppEngine::STATE_STARTED always.
result.get();
std::cout << "buzz::XmppPump::DoLogin finished.";
Задача ещё не решена.