blob: abd740639ada0f160726c5f12bbeb021298fefc4 [file] [log] [blame]
/*
* 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