1// Copyright 2012 Google Inc. All Rights Reserved.
2
3
4#include "talk/xmpp/mucroomuniquehangoutidtask.h"
5
6#include "talk/xmpp/constants.h"
7
8namespace buzz {
9
10MucRoomUniqueHangoutIdTask::MucRoomUniqueHangoutIdTask(XmppTaskParentInterface* parent,
11                                             const Jid& lookup_server_jid)
12    : IqTask(parent, STR_GET, lookup_server_jid, MakeUniqueRequestXml()) {
13}
14
15// Construct a stanza to request a unique room id. eg:
16//
17// <unique hangout-id="true" xmlns="http://jabber.org/protocol/muc#unique"/>
18XmlElement* MucRoomUniqueHangoutIdTask::MakeUniqueRequestXml() {
19  XmlElement* xml = new XmlElement(QN_MUC_UNIQUE_QUERY, false);
20  xml->SetAttr(QN_HANGOUT_ID, STR_TRUE);
21  return xml;
22}
23
24// Handle a response like the following:
25//
26// <unique hangout-id="hangout_id"
27//    xmlns="http://jabber.org/protocol/muc#unique"/>
28//  muvc-private-chat-guid@groupchat.google.com
29// </unique>
30void MucRoomUniqueHangoutIdTask::HandleResult(const XmlElement* stanza) {
31
32  const XmlElement* unique_elem = stanza->FirstNamed(QN_MUC_UNIQUE_QUERY);
33  if (unique_elem == NULL ||
34      !unique_elem->HasAttr(QN_HANGOUT_ID)) {
35    SignalError(this, stanza);
36    return;
37  }
38
39  std::string hangout_id = unique_elem->Attr(QN_HANGOUT_ID);
40
41  SignalResult(this, hangout_id);
42}
43
44} // namespace buzz
45