/* -*- C++ -*- * Copyright (C) 2001-2003, Christof Meerwald * http://JabXPCOM.sunsite.dk */ /* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; version 2 dated June, * 1991. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ #include "jabxpcom-iq.h" #include "judoxpcom-wrapper.h" #include #include #include #include NS_IMPL_ISUPPORTS_INHERITED1(Jabber_ConstInfoQuery_Wrapper, Jabber_ConstPacket_Wrapper, jabIConstInfoQuery) Jabber_ConstInfoQuery_Wrapper::Jabber_ConstInfoQuery_Wrapper(const jabberoo::Packet *packet) : Jabber_ConstPacket_Wrapper(packet) { /* member initializers and constructor code */ #ifdef JABXPCOM_DEBUG printf("constructing Jabber_ConstInfoQuery_Wrapper()\n"); #endif } Jabber_ConstInfoQuery_Wrapper::~Jabber_ConstInfoQuery_Wrapper() { /* destructor code */ #ifdef JABXPCOM_DEBUG printf("deleting Jabber_ConstInfoQuery_Wrapper()\n"); #endif } /* readonly attribute InfoQueryType type; */ NS_IMETHODIMP Jabber_ConstInfoQuery_Wrapper::GetType(InfoQueryType *aType) { const std::string iqt_string = packet()->getBaseElement().getAttrib("type"); if (iqt_string == "get") { *aType = iqtGet; } else if (iqt_string == "set") { *aType = iqtSet; } else if (iqt_string == "result") { *aType = iqtResult; } else if (iqt_string == "error") { *aType = iqtError; } else { return NS_ERROR_FAILURE; } return NS_OK; } /* judoITag getQuery(); */ NS_IMETHODIMP Jabber_ConstInfoQuery_Wrapper::GetQuery(judoIConstElement **_retval) { const judo::Element *element_query = packet()->getBaseElement().findElement("query"); if (element_query) { *_retval = new Judo_ConstElement_Wrapper(element_query); NS_IF_ADDREF(*_retval); } else { return NS_ERROR_FAILURE; } return NS_OK; } /* jabIInfoQuery reply (); */ NS_IMETHODIMP Jabber_ConstInfoQuery_Wrapper::Reply(jabIInfoQuery **_retval) { *_retval = new Jabber_InfoQuery_Wrapper(packet()->getFrom().c_str(), iqtResult); NS_IF_ADDREF(*_retval); return NS_OK; } NS_IMPL_ADDREF_INHERITED(Jabber_InfoQuery_Wrapper, Jabber_ConstInfoQuery_Wrapper) NS_IMPL_RELEASE_INHERITED(Jabber_InfoQuery_Wrapper, Jabber_ConstInfoQuery_Wrapper) NS_INTERFACE_MAP_BEGIN(Jabber_InfoQuery_Wrapper) NS_INTERFACE_MAP_ENTRY(jabIInfoQuery) NS_INTERFACE_MAP_ENTRY_AGGREGATED(jabIPacket, &packet_wrapper_) NS_INTERFACE_MAP_END_INHERITING(Jabber_ConstInfoQuery_Wrapper) Jabber_InfoQuery_Wrapper::Jabber_InfoQuery_Wrapper(const char *jid, InfoQueryType iqtype) : packet_("iq"), packet_wrapper_(static_cast(this), packet_), Jabber_ConstInfoQuery_Wrapper(&packet_) { /* member initializers and constructor code */ #ifdef JABXPCOM_DEBUG printf("constructing Jabber_InfoQuery_Wrapper()\n"); #endif const char *iqt_string = NULL; switch (iqtype) { case iqtGet: iqt_string = "get"; break; case iqtSet: iqt_string = "set"; break; case iqtResult: iqt_string = "result"; break; case iqtError: iqt_string = "error"; break; } if (*jid) // check for empty string { packet_.getBaseElement().putAttrib("to", jid); } packet_.getBaseElement().putAttrib("type", iqt_string); } Jabber_InfoQuery_Wrapper::~Jabber_InfoQuery_Wrapper() { /* destructor code */ #ifdef JABXPCOM_DEBUG printf("deleting Jabber_InfoQuery_Wrapper()\n"); #endif } /* judoITag query(in string iq_ns); */ NS_IMETHODIMP Jabber_InfoQuery_Wrapper::AddQuery(const nsACString &iq_ns, judoIElement **_retval) { judo::Element *element_query = packet_.getBaseElement().addElement("query"); std::string xmlns("jabber:iq:"); xmlns += PromiseFlatCString(iq_ns).get(); element_query->putAttrib("xmlns", xmlns); *_retval = new Judo_Element_Wrapper(element_query); NS_IF_ADDREF(*_retval); return NS_OK; }