1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/*
20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * libjingle
30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright 2004--2005, Google Inc.
40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without
60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions are met:
70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *  1. Redistributions of source code must retain the above copyright notice,
90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *     this list of conditions and the following disclaimer.
100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *  2. Redistributions in binary form must reproduce the above copyright notice,
110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *     this list of conditions and the following disclaimer in the documentation
120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *     and/or other materials provided with the distribution.
130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *  3. The name of the author may not be used to endorse or promote products
140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *     derived from this software without specific prior written permission.
150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */
270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef TALK_XMPP_XMPPPUMP_H_
290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define TALK_XMPP_XMPPPUMP_H_
300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/base/messagequeue.h"
320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/base/taskrunner.h"
330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/base/thread.h"
340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/base/timeutils.h"
350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/xmpp/xmppclient.h"
360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/xmpp/xmppengine.h"
370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "talk/xmpp/xmpptask.h"
380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
39c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehnamespace buzz {
40c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh
410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang// Simple xmpp pump
420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangclass XmppPumpNotify {
440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpublic:
450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  virtual ~XmppPumpNotify() {}
460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  virtual void OnStateChange(buzz::XmppEngine::State state) = 0;
470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang};
480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangclass XmppPump : public talk_base::MessageHandler, public talk_base::TaskRunner {
500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpublic:
510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  XmppPump(buzz::XmppPumpNotify * notify = NULL);
520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  buzz::XmppClient *client() { return client_; }
540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  void DoLogin(const buzz::XmppClientSettings & xcs,
560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang               buzz::AsyncSocket* socket,
570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang               buzz::PreXmppAuth* auth);
580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  void DoDisconnect();
590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  void OnStateChange(buzz::XmppEngine::State state);
610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  void WakeTasks();
630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  int64 CurrentTime();
650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  void OnMessage(talk_base::Message *pmsg);
670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  buzz::XmppReturnStatus SendStanza(const buzz::XmlElement *stanza);
690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangprivate:
710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  buzz::XmppClient *client_;
720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  buzz::XmppEngine::State state_;
730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang  buzz::XmppPumpNotify *notify_;
740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang};
750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}  // namespace buzz
770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif // TALK_XMPP_XMPPPUMP_H_
790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang