#include "qcp.h" #define SERVICETYPE "_qcp._tcp" namespace QCP { class ShareFile : public QCP::ShareDetails { public: ShareFile(const Avahi::Service &s) : ShareDetails(s) { } virtual QString methodName() { return "File"; } }; QCP::ShareDetails *createDetails(const Avahi::Service &s) { QString methodName = s.txt("m"); if (methodName == "file") { return new ShareFile(s); } qDebug() << "Unknown share method: " << methodName; return 0; } Browse::Browse(QObject *parent) : QObject(parent), m_av_browse(new Avahi::Browse(SERVICETYPE, this)) { connect(m_av_browse, SIGNAL(found(Avahi::Service)), this, SLOT(foundService(Avahi::Service))); connect(m_av_browse, SIGNAL(lost(Avahi::Service)), this, SLOT(lostService(Avahi::Service))); connect(m_av_browse, SIGNAL(started()), this, SIGNAL(started())); connect(m_av_browse, SIGNAL(stopped()), this, SIGNAL(stopped())); } void Browse::foundService(Avahi::Service s) { ShareDetails *details = createDetails(s); if (!details) return; ShareData *sd = new ShareData(); sd->details = details; s.setData(sd); emit found(Share(s)); } void Browse::lostService(Avahi::Service s) { ShareData *sd = shareData(s); if (0 != sd) { emit lost(Share(s)); sd->data = 0; delete sd; } } }