Index: webrtc/libjingle/xmpp/xmpppump.cc |
diff --git a/webrtc/libjingle/xmpp/xmpppump.cc b/webrtc/libjingle/xmpp/xmpppump.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..abd740639ada0f160726c5f12bbeb021298fefc4 |
--- /dev/null |
+++ b/webrtc/libjingle/xmpp/xmpppump.cc |
@@ -0,0 +1,67 @@ |
+/* |
+ * 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 |
+ |