68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
/*
|
|
* Copyright 2004 The WebRTC Project Authors. All rights reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "webrtc/libjingle/xmpp/xmpppump.h"
|
|
|
|
#include "webrtc/libjingle/xmpp/xmppauth.h"
|
|
|
|
namespace buzz {
|
|
|
|
XmppPump::XmppPump(XmppPumpNotify * notify) {
|
|
state_ = buzz::XmppEngine::STATE_NONE;
|
|
notify_ = notify;
|
|
client_ = new buzz::XmppClient(this); // NOTE: deleted by TaskRunner
|
|
}
|
|
|
|
void XmppPump::DoLogin(const buzz::XmppClientSettings & xcs,
|
|
buzz::AsyncSocket* socket,
|
|
buzz::PreXmppAuth* auth) {
|
|
OnStateChange(buzz::XmppEngine::STATE_START);
|
|
if (!AllChildrenDone()) {
|
|
client_->SignalStateChange.connect(this, &XmppPump::OnStateChange);
|
|
client_->Connect(xcs, "", socket, auth);
|
|
client_->Start();
|
|
}
|
|
}
|
|
|
|
void XmppPump::DoDisconnect() {
|
|
if (!AllChildrenDone())
|
|
client_->Disconnect();
|
|
OnStateChange(buzz::XmppEngine::STATE_CLOSED);
|
|
}
|
|
|
|
void XmppPump::OnStateChange(buzz::XmppEngine::State state) {
|
|
if (state_ == state)
|
|
return;
|
|
state_ = state;
|
|
if (notify_ != NULL)
|
|
notify_->OnStateChange(state);
|
|
}
|
|
|
|
void XmppPump::WakeTasks() {
|
|
rtc::Thread::Current()->Post(RTC_FROM_HERE, this);
|
|
}
|
|
|
|
int64_t XmppPump::CurrentTime() {
|
|
return (int64_t)rtc::TimeMillis();
|
|
}
|
|
|
|
void XmppPump::OnMessage(rtc::Message *pmsg) {
|
|
RunTasks();
|
|
}
|
|
|
|
buzz::XmppReturnStatus XmppPump::SendStanza(const buzz::XmlElement *stanza) {
|
|
if (!AllChildrenDone())
|
|
return client_->SendStanza(stanza);
|
|
return buzz::XMPP_RETURN_BADSTATE;
|
|
}
|
|
|
|
} // namespace buzz
|
|
|