1 /* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "webrtc/libjingle/xmpp/xmpppump.h" 12 13 #include "webrtc/libjingle/xmpp/xmppauth.h" 14 15 namespace buzz { 16 XmppPump(XmppPumpNotify * notify)17XmppPump::XmppPump(XmppPumpNotify * notify) { 18 state_ = buzz::XmppEngine::STATE_NONE; 19 notify_ = notify; 20 client_ = new buzz::XmppClient(this); // NOTE: deleted by TaskRunner 21 } 22 DoLogin(const buzz::XmppClientSettings & xcs,buzz::AsyncSocket * socket,buzz::PreXmppAuth * auth)23void XmppPump::DoLogin(const buzz::XmppClientSettings & xcs, 24 buzz::AsyncSocket* socket, 25 buzz::PreXmppAuth* auth) { 26 OnStateChange(buzz::XmppEngine::STATE_START); 27 if (!AllChildrenDone()) { 28 client_->SignalStateChange.connect(this, &XmppPump::OnStateChange); 29 client_->Connect(xcs, "", socket, auth); 30 client_->Start(); 31 } 32 } 33 DoDisconnect()34void XmppPump::DoDisconnect() { 35 if (!AllChildrenDone()) 36 client_->Disconnect(); 37 OnStateChange(buzz::XmppEngine::STATE_CLOSED); 38 } 39 OnStateChange(buzz::XmppEngine::State state)40void XmppPump::OnStateChange(buzz::XmppEngine::State state) { 41 if (state_ == state) 42 return; 43 state_ = state; 44 if (notify_ != NULL) 45 notify_->OnStateChange(state); 46 } 47 WakeTasks()48void XmppPump::WakeTasks() { 49 rtc::Thread::Current()->Post(this); 50 } 51 CurrentTime()52int64_t XmppPump::CurrentTime() { 53 return (int64_t)rtc::Time(); 54 } 55 OnMessage(rtc::Message * pmsg)56void XmppPump::OnMessage(rtc::Message *pmsg) { 57 RunTasks(); 58 } 59 SendStanza(const buzz::XmlElement * stanza)60buzz::XmppReturnStatus XmppPump::SendStanza(const buzz::XmlElement *stanza) { 61 if (!AllChildrenDone()) 62 return client_->SendStanza(stanza); 63 return buzz::XMPP_RETURN_BADSTATE; 64 } 65 66 } // namespace buzz 67 68