10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*
20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle
30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2011, Google Inc.
40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *
50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without
60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met:
70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *
80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *     this list of conditions and the following disclaimer.
100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *     this list of conditions and the following disclaimer in the documentation
120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *     and/or other materials provided with the distribution.
130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *  3. The name of the author may not be used to endorse or promote products
140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *     derived from this software without specific prior written permission.
150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *
160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */
270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string>
290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector>
300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/xmpp/mucroomconfigtask.h"
320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/xmpp/constants.h"
34cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/scoped_ptr.h"
350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace buzz {
370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgMucRoomConfigTask::MucRoomConfigTask(
390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    XmppTaskParentInterface* parent,
400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    const Jid& room_jid,
410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    const std::string& room_name,
420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    const std::vector<std::string>& room_features)
430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    : IqTask(parent, STR_SET, room_jid,
440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org             MakeRequest(room_name, room_features)),
450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org      room_jid_(room_jid) {
460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}
470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgXmlElement* MucRoomConfigTask::MakeRequest(
490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    const std::string& room_name,
500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    const std::vector<std::string>& room_features) {
510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  buzz::XmlElement* owner_query = new
520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org      buzz::XmlElement(buzz::QN_MUC_OWNER_QUERY, true);
530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  buzz::XmlElement* x_form = new buzz::XmlElement(buzz::QN_XDATA_X, true);
550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  x_form->SetAttr(buzz::QN_TYPE, buzz::STR_FORM);
560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  buzz::XmlElement* roomname_field =
580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org      new buzz::XmlElement(buzz::QN_XDATA_FIELD, false);
590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  roomname_field->SetAttr(buzz::QN_VAR, buzz::STR_MUC_ROOMCONFIG_ROOMNAME);
600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  roomname_field->SetAttr(buzz::QN_TYPE, buzz::STR_TEXT_SINGLE);
610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  buzz::XmlElement* roomname_value =
630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org      new buzz::XmlElement(buzz::QN_XDATA_VALUE, false);
640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  roomname_value->SetBodyText(room_name);
650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  roomname_field->AddElement(roomname_value);
670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  x_form->AddElement(roomname_field);
680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  buzz::XmlElement* features_field =
700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org      new buzz::XmlElement(buzz::QN_XDATA_FIELD, false);
710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  features_field->SetAttr(buzz::QN_VAR, buzz::STR_MUC_ROOMCONFIG_FEATURES);
720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  features_field->SetAttr(buzz::QN_TYPE, buzz::STR_LIST_MULTI);
730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  for (std::vector<std::string>::const_iterator feature = room_features.begin();
750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org       feature != room_features.end(); ++feature) {
760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    buzz::XmlElement* features_value =
770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        new buzz::XmlElement(buzz::QN_XDATA_VALUE, false);
780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    features_value->SetBodyText(*feature);
790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    features_field->AddElement(features_value);
800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  }
810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  x_form->AddElement(features_field);
830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  owner_query->AddElement(x_form);
840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  return owner_query;
850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}
860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid MucRoomConfigTask::HandleResult(const XmlElement* element) {
880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org  SignalResult(this);
890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}
900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}  // namespace buzz
92