File: irisnetplugin.h

package info (click to toggle)
psi 0.11-9
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 11,036 kB
  • ctags: 19,340
  • sloc: cpp: 130,316; ansic: 26,008; xml: 900; sh: 558; makefile: 225; python: 178; ruby: 21
file content (127 lines) | stat: -rw-r--r-- 4,224 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
 * Copyright (C) 2006  Justin Karneges
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * 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., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301  USA
 *
 */

#ifndef IRISNETPLUGIN_H
#define IRISNETPLUGIN_H

#include "irisnetglobal.h"
#include "netinterface.h"
#include "netnames.h"

namespace XMPP {

class NetInterfaceProvider;
class NameProvider;
class ServiceProvider;

class IRISNET_EXPORT IrisNetProvider : public QObject
{
	Q_OBJECT
public:
	virtual ~IrisNetProvider();

	virtual NetInterfaceProvider *createNetInterfaceProvider();
	virtual NameProvider *createNameProviderInternet();
	virtual NameProvider *createNameProviderLocal();
	virtual ServiceProvider *createServiceProvider();
};

class IRISNET_EXPORT NetInterfaceProvider : public QObject
{
	Q_OBJECT
public:
	class Info
	{
	public:
		QString id, name;
		bool isLoopback;
		QList<QHostAddress> addresses;
		QHostAddress gateway;
	};

	NetInterfaceProvider(QObject *parent = 0) : QObject(parent) {}

	// calling start should populate an initial list that can be
	//   immediately fetched.  do not signal updated() for this.
	virtual void start() = 0;
	virtual QList<Info> interfaces() const = 0;

signals:
	void updated();
};

class IRISNET_EXPORT NameProvider : public QObject
{
	Q_OBJECT
public:
	NameProvider(QObject *parent = 0) : QObject(parent) {}

	virtual int resolve_start(const QByteArray &name, int qType, bool longLived) = 0;
	virtual void resolve_stop(int id) = 0;

	// transfer from local back to internet
	virtual void resolve_localResultsReady(int id, const QList<XMPP::NameRecord> &results) = 0;
	virtual void resolve_localError(int id, XMPP::NameResolver::Error e) = 0;

signals:
	void resolve_resultsReady(int id, const QList<XMPP::NameRecord> &results);
	void resolve_error(int id, XMPP::NameResolver::Error e);

	// transfer from internet to local provider
	void resolve_useLocal(int id, const QByteArray &name);
};

class IRISNET_EXPORT ServiceProvider : public QObject
{
	Q_OBJECT
public:
	ServiceProvider(QObject *parent = 0) : QObject(parent) {}

	virtual int browse_start(const QString &type, const QString &domain) = 0;
	virtual void browse_stop(int id) = 0;
	virtual int resolve_start(const QByteArray &name) = 0;
	virtual void resolve_stop(int id) = 0;
	virtual int publish_start(const QString &instance, const QString &type, int port, const QMap<QString,QByteArray> &attributes) = 0;
	virtual int publish_update(const QMap<QString,QByteArray> &attributes) = 0;
	virtual void publish_cancel(int id) = 0;
	virtual int publish_extra_start(int pub_id, const NameRecord &name) = 0;
	virtual int publish_extra_update(int id, const NameRecord &name) = 0;
	virtual void publish_extra_cancel(int id) = 0;

signals:
	void browse_instanceAvailable(int id, const XMPP::ServiceInstance &instance);
	void browse_instanceUnavailable(int id, const XMPP::ServiceInstance &instance);
	void browse_error(int id);
	void resolve_resultsReady(int id, const QHostAddress &address, int port);
	void resolve_error(int id);
	void publish_published(int id);
	void publish_error(int id, XMPP::ServiceLocalPublisher::Error e);
	void publish_extra_published(int id);
	void publish_extra_error(int id, XMPP::ServiceLocalPublisher::Error e);
};

}

Q_DECLARE_INTERFACE(XMPP::IrisNetProvider,      "com.affinix.irisnet.IrisNetProvider/1.0")
Q_DECLARE_INTERFACE(XMPP::NetInterfaceProvider, "com.affinix.irisnet.NetInterfaceProvider/1.0")
Q_DECLARE_INTERFACE(XMPP::NameProvider,         "com.affinix.irisnet.NameProvider/1.0")
Q_DECLARE_INTERFACE(XMPP::ServiceProvider,      "com.affinix.irisnet.ServiceProvider/1.0")

#endif