#pragma once #include #include #include #include "Swiften/Base/String.h" #include "Swiften/JID/JID.h" #include "Swiften/LinkLocal/DNSSDService.h" #include "Swiften/Elements/RosterPayload.h" #include "Swiften/Elements/Presence.h" namespace Swift { class HostAddress; class LinkLocalRoster { public: LinkLocalRoster(boost::shared_ptr service); boost::shared_ptr getRoster() const; std::vector > getAllPresence() const; boost::signal)> onRosterChanged; boost::signal)> onPresenceChanged; bool hasItem(const JID&) const; String getHostname(const JID&) const; int getPort(const JID&) const; private: RosterItemPayload getRosterItem(const DNSSDServiceID& service, const DNSSDService::ResolveResult& info) const; String getRosterName(const DNSSDServiceID& service, const DNSSDService::ResolveResult& info) const; JID getJIDForService(const DNSSDServiceID& service) const; boost::shared_ptr getPresence(const DNSSDServiceID& service, const DNSSDService::ResolveResult& info) const; void handleStopped(bool); void handleServiceRegistered(const DNSSDServiceID& service); void handleServiceAdded(const DNSSDServiceID&); void handleServiceRemoved(const DNSSDServiceID&); void handleServiceResolved(const DNSSDServiceID& service, const DNSSDService::ResolveResult& result); private: boost::shared_ptr dnsSDService; boost::optional selfService; typedef std::map ServiceMap; ServiceMap services; }; }