00001 
00002 
00003 
00004 
00005 
00006 
00007 #pragma once
00008 
00009 #include <boost/optional.hpp>
00010 #include <boost/shared_ptr.hpp>
00011 #include <string>
00012 #include <vector>
00013 
00014 #include <Swiften/JID/JID.h>
00015 #include <Swiften/Elements/Payload.h>
00016 #include <Swiften/Elements/MUCOccupant.h>
00017 #include <Swiften/Elements/MUCItem.h>
00018 
00019 namespace Swift {
00020   class MUCUserPayload : public Payload {
00021     public:
00022       typedef boost::shared_ptr<MUCUserPayload> ref;
00023 
00024       struct StatusCode {
00025         StatusCode() : code(0) {}
00026         StatusCode(int code) : code(code) {}
00027         int code;
00028       };
00029 
00030       
00031 
00032       
00033 
00034       
00035 
00036       
00037 
00045       struct Invite {
00046         std::string reason;
00047         JID from;
00048         JID to;
00049       };
00050 
00051       MUCUserPayload() {
00052       }
00053 
00054       void addItem(const MUCItem& item) {items_.push_back(item);}
00055     
00056       void addStatusCode(StatusCode code) {statusCodes_.push_back(code);}
00057 
00058       const std::vector<MUCItem>& getItems() const {return items_;}
00059 
00060       const std::vector<StatusCode>& getStatusCodes() const {return statusCodes_;}
00061 
00062       boost::shared_ptr<Payload> getPayload() const {
00063         return payload_;
00064       }
00065 
00066       void setPayload(boost::shared_ptr<Payload> p) {
00067         payload_ = p;
00068       }
00069 
00070       const boost::optional<std::string>& getPassword() const {
00071         return password_;
00072       }
00073 
00074       void setPassword(const std::string& password) {
00075         password_ = password;
00076       }
00077 
00078 
00079       const boost::optional<Invite>& getInvite() const {
00080         return invite_;
00081       }
00082 
00083       void setInvite(const Invite& invite) {
00084         invite_ = invite;
00085       }
00086 
00087 
00088     private:
00089       std::vector<MUCItem> items_;
00090       std::vector<StatusCode> statusCodes_;
00091       boost::shared_ptr<Payload> payload_;
00092       boost::optional<std::string> password_;
00093       boost::optional<Invite> invite_;
00094   };
00095 }