#ifndef EXTENSIONS_H #define EXTENSIONS_H #include #include #include "common.h" namespace xrme { template class XRMEExtension : public gloox::StanzaExtension { public: XRMEExtension(); // gloox::StanzaExtension const std::string& filterString() const; StanzaExtension* newInstance(const gloox::Tag* tag) const; gloox::Tag* tag() const; StanzaExtension* clone() const; int extension_type() const { return T::kExtensionType; } protected: explicit XRMEExtension(const gloox::Tag* tag); explicit XRMEExtension(const XRMEExtension& other); static const char* kMediaPlayerFilterString; static const char* kRemoteControlFilterString; const std::string filter_string_; const gloox::Tag* tag_; }; class RemoteControlExtension : public XRMEExtension { public: static const int kExtensionType = gloox::ExtUser + 1; static const char* kFilterString; }; class MediaPlayerExtension : public XRMEExtension { public: static const int kExtensionType = gloox::ExtUser + 2; static const char* kFilterString; }; class MediaStorageExtension : public XRMEExtension { public: static const int kExtensionType = gloox::ExtUser + 3; static const char* kFilterString; }; class SIPNegotiation : public XRMEExtension { public: static const int kExtensionType = gloox::ExtUser + 4; static const char* kFilterString; }; template XRMEExtension::XRMEExtension() : StanzaExtension(T::kExtensionType), filter_string_(T::kFilterString), tag_(NULL) { } template const std::string& XRMEExtension::filterString() const { return filter_string_; } template gloox::StanzaExtension* XRMEExtension::newInstance(const gloox::Tag* tag) const { return new XRMEExtension(tag); } template gloox::Tag* XRMEExtension::tag() const { return tag_ ? tag_->clone() : NULL; } template gloox::StanzaExtension* XRMEExtension::clone() const { return new XRMEExtension(*this); } template XRMEExtension::XRMEExtension(const gloox::Tag* tag) : StanzaExtension(T::kExtensionType), filter_string_(T::kFilterString), tag_(tag) { } template XRMEExtension::XRMEExtension(const XRMEExtension& other) : StanzaExtension(T::kExtensionType), filter_string_(T::kFilterString), tag_(other.tag_) { } } // namespace xrme #endif // EXTENSIONS_H