Index: third_party/libjingle_xmpp/xmpp/xmppthread.cc |
diff --git a/third_party/libjingle_xmpp/xmpp/xmppthread.cc b/third_party/libjingle_xmpp/xmpp/xmppthread.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e85269e5c54afb05bd98b2f2d095a2af149448b4 |
--- /dev/null |
+++ b/third_party/libjingle_xmpp/xmpp/xmppthread.cc |
@@ -0,0 +1,63 @@ |
+// Copyright 2004 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "third_party/libjingle_xmpp/xmpp/xmppthread.h" |
+ |
+#include "third_party/libjingle_xmpp/xmpp/xmppauth.h" |
+#include "third_party/libjingle_xmpp/xmpp/xmppclientsettings.h" |
+ |
+namespace buzz { |
+namespace { |
+ |
+const uint32_t MSG_LOGIN = 1; |
+const uint32_t MSG_DISCONNECT = 2; |
+ |
+struct LoginData: public rtc::MessageData { |
+ LoginData(const buzz::XmppClientSettings& s) : xcs(s) {} |
+ virtual ~LoginData() {} |
+ |
+ buzz::XmppClientSettings xcs; |
+}; |
+ |
+} // namespace |
+ |
+XmppThread::XmppThread() { |
+ pump_ = new buzz::XmppPump(this); |
+} |
+ |
+XmppThread::~XmppThread() { |
+ Stop(); |
+ delete pump_; |
+} |
+ |
+void XmppThread::ProcessMessages(int cms) { |
+ rtc::Thread::ProcessMessages(cms); |
+} |
+ |
+void XmppThread::Login(const buzz::XmppClientSettings& xcs) { |
+ Post(RTC_FROM_HERE, this, MSG_LOGIN, new LoginData(xcs)); |
+} |
+ |
+void XmppThread::Disconnect() { |
+ Post(RTC_FROM_HERE, this, MSG_DISCONNECT); |
+} |
+ |
+void XmppThread::OnStateChange(buzz::XmppEngine::State state) { |
+} |
+ |
+void XmppThread::OnMessage(rtc::Message* pmsg) { |
+ if (pmsg->message_id == MSG_LOGIN) { |
+ ASSERT(pmsg->pdata != NULL); |
+ LoginData* data = reinterpret_cast<LoginData*>(pmsg->pdata); |
+ pump_->DoLogin(data->xcs, new XmppSocket(buzz::TLS_DISABLED), |
+ new XmppAuth()); |
+ delete data; |
+ } else if (pmsg->message_id == MSG_DISCONNECT) { |
+ pump_->DoDisconnect(); |
+ } else { |
+ ASSERT(false); |
+ } |
+} |
+ |
+} // namespace buzz |