15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/*
25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle
35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2004--2005, Google Inc.
45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without
65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met:
75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer.
105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer in the documentation
125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     and/or other materials provided with the distribution.
135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  3. The name of the author may not be used to endorse or promote products
145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     derived from this software without specific prior written permission.
155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */
275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifndef TALK_EXAMPLES_CALL_CALLCLIENT_H_
295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#define TALK_EXAMPLES_CALL_CALLCLIENT_H_
305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <map>
325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string>
335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <vector>
345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/scoped_ptr.h"
365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/sslidentity.h"
375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/examples/call/console.h"
385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/mediachannel.h"
395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/p2p/base/session.h"
405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/mediamessages.h"
415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/mediasessionclient.h"
425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/hangoutpubsubclient.h"
435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/presencestatus.h"
445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/xmppclient.h"
455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace buzz {
475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass PresencePushTask;
485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass PresenceOutTask;
495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MucInviteRecvTask;
505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MucInviteSendTask;
515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass FriendInviteSendTask;
525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DiscoInfoQueryTask;
535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass Muc;
545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass PresenceStatus;
555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass IqTask;
565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MucRoomConfigTask;
575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MucRoomLookupTask;
585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MucPresenceStatus;
595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass XmlElement;
605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass HangoutPubSubClient;
615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct AvailableMediaEntry;
625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct MucRoomInfo;
635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}  // namespace buzz
645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace talk_base {
665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass Thread;
675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass NetworkManager;
685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}  // namespace talk_base
695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace cricket {
715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass PortAllocator;
725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MediaEngineInterface;
735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MediaSessionClient;
745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass Call;
755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass SessionManagerTask;
765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct CallOptions;
775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct MediaStreams;
785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct StreamParams;
795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}  // namespace cricket
805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct RosterItem {
825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::Jid jid;
835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::PresenceStatus::Show show;
845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::string status;
855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct StaticRenderedView {
885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  StaticRenderedView(const cricket::StaticVideoView& view,
895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                     cricket::VideoRenderer* renderer) :
905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      view(view),
915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      renderer(renderer) {
925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StaticVideoView view;
955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::VideoRenderer* renderer;
965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Maintain a mapping of (session, ssrc) to rendered view.
995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgtypedef std::map<std::pair<cricket::Session*, uint32>,
1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                 StaticRenderedView> StaticRenderedViews;
1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass CallClient: public sigslot::has_slots<> {
1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CallClient(buzz::XmppClient* xmpp_client,
1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org             const std::string& caps_node,
1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org             const std::string& version);
1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ~CallClient();
1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::MediaSessionClient* media_client() const { return media_client_; }
1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetMediaEngine(cricket::MediaEngineInterface* media_engine) {
1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    media_engine_ = media_engine;
1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetAutoAccept(bool auto_accept) {
1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    auto_accept_ = auto_accept;
1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetPmucDomain(const std::string &pmuc_domain) {
1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    pmuc_domain_ = pmuc_domain;
1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetRender(bool render) {
1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    render_ = render;
1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetDataChannelType(cricket::DataChannelType data_channel_type) {
1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    data_channel_type_ = data_channel_type;
1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetMultiSessionEnabled(bool multisession_enabled) {
1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    multisession_enabled_ = multisession_enabled;
1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetConsole(Console *console) {
1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    console_ = console;
1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetPriority(int priority) {
1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    my_status_.set_priority(priority);
1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SendStatus() {
1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    SendStatus(my_status_);
1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SendStatus(const buzz::PresenceStatus& status);
1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void ParseLine(const std::string &str);
1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SendChat(const std::string& to, const std::string msg);
1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SendData(const std::string& stream_name,
1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                const std::string& text);
1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void InviteFriend(const std::string& user);
1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void JoinMuc(const buzz::Jid& room_jid);
1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void JoinMuc(const std::string& room_jid_str);
1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void LookupAndJoinMuc(const std::string& room_name);
1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void InviteToMuc(const std::string& user, const std::string& room);
1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool InMuc();
1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  const buzz::Jid* FirstMucJid();
1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void LeaveMuc(const std::string& room);
1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetNick(const std::string& muc_nick);
1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetPortAllocatorFlags(uint32 flags) { portallocator_flags_ = flags; }
1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetAllowLocalIps(bool allow_local_ips) {
1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    allow_local_ips_ = allow_local_ips;
1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetSignalingProtocol(cricket::SignalingProtocol protocol) {
1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    signaling_protocol_ = protocol;
1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetTransportProtocol(cricket::TransportProtocol protocol) {
1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    transport_protocol_ = protocol;
1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetSecurePolicy(cricket::SecurePolicy sdes_policy,
1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                       cricket::SecurePolicy dtls_policy) {
1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    sdes_policy_ = sdes_policy;
1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    dtls_policy_ = dtls_policy;
1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetSslIdentity(talk_base::SSLIdentity* identity) {
1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ssl_identity_.reset(identity);
1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  typedef std::map<buzz::Jid, buzz::Muc*> MucMap;
1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  const MucMap& mucs() const {
1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    return mucs_;
1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetShowRosterMessages(bool show_roster_messages) {
1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    show_roster_messages_ = show_roster_messages;
1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private:
1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void AddStream(uint32 audio_src_id, uint32 video_src_id);
1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void RemoveStream(uint32 audio_src_id, uint32 video_src_id);
1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnStateChange(buzz::XmppEngine::State state);
1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void InitMedia();
1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void InitPresence();
1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void StartXmppPing();
1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnPingTimeout();
1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRequestSignaling();
1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnSessionCreate(cricket::Session* session, bool initiate);
1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnCallCreate(cricket::Call* call);
1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnCallDestroy(cricket::Call* call);
1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnSessionState(cricket::Call* call,
1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                      cricket::Session* session,
1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                      cricket::Session::State state);
1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnStatusUpdate(const buzz::PresenceStatus& status);
2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnMucInviteReceived(const buzz::Jid& inviter, const buzz::Jid& room,
2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      const std::vector<buzz::AvailableMediaEntry>& avail);
2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnMucJoined(const buzz::Jid& endpoint);
2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnMucStatusUpdate(const buzz::Jid& jid,
2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                         const buzz::MucPresenceStatus& status);
2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnMucLeft(const buzz::Jid& endpoint, int error);
2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnPresenterStateChange(const std::string& nick,
2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                              bool was_presenting, bool is_presenting);
2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnAudioMuteStateChange(const std::string& nick,
2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                              bool was_muted, bool is_muted);
2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRecordingStateChange(const std::string& nick,
2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                              bool was_recording, bool is_recording);
2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRemoteMuted(const std::string& mutee_nick,
2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                     const std::string& muter_nick,
2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                     bool should_mute_locally);
2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnMediaBlocked(const std::string& blockee_nick,
2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                      const std::string& blocker_nick);
2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnHangoutRequestError(const std::string& node,
2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                             const buzz::XmlElement* stanza);
2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnHangoutPublishAudioMuteError(const std::string& task_id,
2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                      const buzz::XmlElement* stanza);
2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnHangoutPublishPresenterError(const std::string& task_id,
2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                      const buzz::XmlElement* stanza);
2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnHangoutPublishRecordingError(const std::string& task_id,
2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                      const buzz::XmlElement* stanza);
2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnHangoutRemoteMuteError(const std::string& task_id,
2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                const std::string& mutee_nick,
2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                const buzz::XmlElement* stanza);
2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnDevicesChange();
2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnMediaStreamsUpdate(cricket::Call* call,
2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                            cricket::Session* session,
2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                            const cricket::MediaStreams& added,
2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                            const cricket::MediaStreams& removed);
2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnSpeakerChanged(cricket::Call* call,
2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                        cricket::Session* session,
2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                        const cricket::StreamParams& speaker_stream);
2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRoomLookupResponse(buzz::MucRoomLookupTask* task,
2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                            const buzz::MucRoomInfo& room_info);
2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRoomLookupError(buzz::IqTask* task,
2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                         const buzz::XmlElement* stanza);
2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRoomConfigResult(buzz::MucRoomConfigTask* task);
2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnRoomConfigError(buzz::IqTask* task,
2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                         const buzz::XmlElement* stanza);
2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void OnDataReceived(cricket::Call*,
2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                      const cricket::ReceiveDataParams& params,
2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                      const talk_base::Buffer& payload);
2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::Jid GenerateRandomMucJid();
2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Depending on |enable|, render (or don't) all the streams in |session|.
2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void RenderAllStreams(cricket::Call* call,
2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                        cricket::Session* session,
2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                        bool enable);
2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Depending on |enable|, render (or don't) the streams in |video_streams|.
2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void RenderStreams(cricket::Call* call,
2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                     cricket::Session* session,
2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                     const std::vector<cricket::StreamParams>& video_streams,
2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                     bool enable);
2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Depending on |enable|, render (or don't) the supplied |stream|.
2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void RenderStream(cricket::Call* call,
2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                    cricket::Session* session,
2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                    const cricket::StreamParams& stream,
2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                    bool enable);
2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void AddStaticRenderedView(
2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      cricket::Session* session,
2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      uint32 ssrc, int width, int height, int framerate,
2675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      int x_offset, int y_offset);
2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool RemoveStaticRenderedView(uint32 ssrc);
2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void RemoveCallsStaticRenderedViews(cricket::Call* call);
2705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SendViewRequest(cricket::Call* call, cricket::Session* session);
2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool SelectFirstDesktopScreencastId(cricket::ScreencastId* screencastid);
2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  static const std::string strerror(buzz::XmppEngine::Error err);
2745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void PrintRoster();
2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool FindJid(const std::string& name,
2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org               buzz::Jid* found_jid,
2785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org               cricket::CallOptions* options);
2795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool PlaceCall(const std::string& name, cricket::CallOptions options);
2805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool InitiateAdditionalSession(const std::string& name,
2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                 cricket::CallOptions options);
2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void TerminateAndRemoveSession(cricket::Call* call, const std::string& id);
2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void PrintCalls();
2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SwitchToCall(uint32 call_id);
2855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void Accept(const cricket::CallOptions& options);
2865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void Reject();
2875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void Quit();
2885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void GetDevices();
2905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void PrintDevices(const std::vector<std::string>& names);
2915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetVolume(const std::string& level);
2935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::Session* GetFirstSession() { return sessions_[call_->id()][0]; }
2955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void AddSession(cricket::Session* session) {
2965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    sessions_[call_->id()].push_back(session);
2975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
2985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void PrintStats() const;
3005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void SetupAcceptedCall();
3015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  typedef std::map<std::string, RosterItem> RosterMap;
3035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  Console *console_;
3055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::XmppClient* xmpp_client_;
3065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  talk_base::Thread* worker_thread_;
3075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  talk_base::NetworkManager* network_manager_;
3085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::PortAllocator* port_allocator_;
3095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SessionManager* session_manager_;
3105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SessionManagerTask* session_manager_task_;
3115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::MediaEngineInterface* media_engine_;
3125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::DataEngineInterface* data_engine_;
3135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::MediaSessionClient* media_client_;
3145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  MucMap mucs_;
3155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::Call* call_;
3175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  typedef std::map<uint32, std::vector<cricket::Session *> > SessionMap;
3185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  SessionMap sessions_;
3195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::HangoutPubSubClient* hangout_pubsub_client_;
3215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool incoming_call_;
3225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool auto_accept_;
3235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::string pmuc_domain_;
3245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool render_;
3255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::DataChannelType data_channel_type_;
3265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool multisession_enabled_;
3275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::VideoRenderer* local_renderer_;
3285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  StaticRenderedViews static_rendered_views_;
3295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  uint32 static_views_accumulated_count_;
3305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  uint32 screencast_ssrc_;
3315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::PresenceStatus my_status_;
3335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::PresencePushTask* presence_push_;
3345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::PresenceOutTask* presence_out_;
3355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::MucInviteRecvTask* muc_invite_recv_;
3365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::MucInviteSendTask* muc_invite_send_;
3375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  buzz::FriendInviteSendTask* friend_invite_send_;
3385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  RosterMap* roster_;
3395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  uint32 portallocator_flags_;
3405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool allow_local_ips_;
3425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SignalingProtocol signaling_protocol_;
3435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::TransportProtocol transport_protocol_;
3445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SecurePolicy sdes_policy_;
3455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SecurePolicy dtls_policy_;
3465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  talk_base::scoped_ptr<talk_base::SSLIdentity> ssl_identity_;
3475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::string last_sent_to_;
3485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool show_roster_messages_;
3505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
3515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif  // TALK_EXAMPLES_CALL_CALLCLIENT_H_
353