2
* Copyright (C) 2010, 2011 Tuomo Penttinen, all rights reserved.
4
* Author: Tuomo Penttinen <tp@herqq.org>
6
* This file is part of Herqq UPnP (HUPnP) library.
8
* Herqq UPnP is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU Lesser General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
13
* Herqq UPnP is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU Lesser General Public License for more details.
18
* You should have received a copy of the GNU Lesser General Public License
19
* along with Herqq UPnP. If not, see <http://www.gnu.org/licenses/>.
22
#include "hdevicehost_configuration.h"
23
#include "hdevicehost_configuration_p.h"
25
#include "../../devicemodel/hdevicemodel_infoprovider.h"
26
#include "../../devicemodel/server/hdevicemodelcreator.h"
28
#include "../../general/hupnp_global_p.h"
29
#include "../../utils/hmisc_utils_p.h"
37
/*******************************************************************************
38
* HDeviceConfigurationPrivate
39
******************************************************************************/
40
HDeviceConfigurationPrivate::HDeviceConfigurationPrivate() :
41
m_pathToDeviceDescriptor(), m_cacheControlMaxAgeInSecs(1800)
45
HDeviceConfigurationPrivate::~HDeviceConfigurationPrivate()
49
/*******************************************************************************
50
* HDeviceConfiguration
51
******************************************************************************/
52
HDeviceConfiguration::HDeviceConfiguration() :
53
h_ptr(new HDeviceConfigurationPrivate())
57
HDeviceConfiguration::~HDeviceConfiguration()
62
HDeviceConfiguration* HDeviceConfiguration::newInstance() const
64
return new HDeviceConfiguration();
67
void HDeviceConfiguration::doClone(HClonable* target) const
69
HDeviceConfiguration* conf = dynamic_cast<HDeviceConfiguration*>(target);
76
conf->h_ptr->m_cacheControlMaxAgeInSecs = h_ptr->m_cacheControlMaxAgeInSecs;
77
conf->h_ptr->m_pathToDeviceDescriptor = h_ptr->m_pathToDeviceDescriptor;
80
HDeviceConfiguration* HDeviceConfiguration::clone() const
82
return static_cast<HDeviceConfiguration*>(HClonable::clone());
85
QString HDeviceConfiguration::pathToDeviceDescription() const
87
return h_ptr->m_pathToDeviceDescriptor;
90
void HDeviceConfiguration::setPathToDeviceDescription(
91
const QString& pathToDeviceDescriptor)
93
h_ptr->m_pathToDeviceDescriptor = pathToDeviceDescriptor;
96
void HDeviceConfiguration::setCacheControlMaxAge(qint32 maxAgeInSecs)
98
static const qint32 max = 60*60*24;
100
if (maxAgeInSecs < 5)
104
else if (maxAgeInSecs > max)
109
h_ptr->m_cacheControlMaxAgeInSecs = maxAgeInSecs;
112
qint32 HDeviceConfiguration::cacheControlMaxAge() const
114
return h_ptr->m_cacheControlMaxAgeInSecs;
117
bool HDeviceConfiguration::isValid() const
119
return !h_ptr->m_pathToDeviceDescriptor.isEmpty();
122
/*******************************************************************************
123
* HDeviceHostConfigurationPrivate
124
******************************************************************************/
125
HDeviceHostConfigurationPrivate::HDeviceHostConfigurationPrivate() :
127
m_individualAdvertisementCount(2),
128
m_subscriptionExpirationTimeout(0),
129
m_networkAddresses(),
133
QHostAddress ha = findBindableHostAddress();
134
m_networkAddresses.append(ha);
137
/*******************************************************************************
138
* HDeviceHostConfiguration
139
******************************************************************************/
140
HDeviceHostConfiguration::HDeviceHostConfiguration() :
141
h_ptr(new HDeviceHostConfigurationPrivate())
145
HDeviceHostConfiguration::HDeviceHostConfiguration(
146
const HDeviceConfiguration& arg) :
147
h_ptr(new HDeviceHostConfigurationPrivate())
152
HDeviceHostConfiguration::~HDeviceHostConfiguration()
154
qDeleteAll(h_ptr->m_collection);
158
HDeviceHostConfiguration* HDeviceHostConfiguration::newInstance() const
160
return new HDeviceHostConfiguration();
163
void HDeviceHostConfiguration::doClone(HClonable* target) const
165
HDeviceHostConfiguration* conf =
166
dynamic_cast<HDeviceHostConfiguration*>(target);
173
conf->h_ptr->m_individualAdvertisementCount =
174
h_ptr->m_individualAdvertisementCount;
176
conf->h_ptr->m_networkAddresses = h_ptr->m_networkAddresses;
178
conf->h_ptr->m_subscriptionExpirationTimeout =
179
h_ptr->m_subscriptionExpirationTimeout;
181
QList<const HDeviceConfiguration*> confCollection;
182
foreach(const HDeviceConfiguration* conf, h_ptr->m_collection)
184
confCollection.append(conf->clone());
187
qDeleteAll(conf->h_ptr->m_collection);
188
conf->h_ptr->m_collection = confCollection;
190
conf->h_ptr->m_deviceCreator.reset(
191
h_ptr->m_deviceCreator ? h_ptr->m_deviceCreator->clone() : 0);
193
conf->h_ptr->m_infoProvider.reset(
194
h_ptr->m_infoProvider ? h_ptr->m_infoProvider->clone() : 0);
197
HDeviceHostConfiguration* HDeviceHostConfiguration::clone() const
199
return static_cast<HDeviceHostConfiguration*>(HClonable::clone());
202
bool HDeviceHostConfiguration::add(const HDeviceConfiguration& arg)
206
h_ptr->m_collection.push_back(arg.clone());
213
void HDeviceHostConfiguration::clear()
215
qDeleteAll(h_ptr->m_collection);
216
h_ptr->m_collection.clear();
219
QList<const HDeviceConfiguration*> HDeviceHostConfiguration::deviceConfigurations() const
221
return h_ptr->m_collection;
224
qint32 HDeviceHostConfiguration::individualAdvertisementCount() const
226
return h_ptr->m_individualAdvertisementCount;
229
QList<QHostAddress> HDeviceHostConfiguration::networkAddressesToUse() const
231
return h_ptr->m_networkAddresses;
234
HDeviceModelCreator* HDeviceHostConfiguration::deviceModelCreator() const
236
return h_ptr->m_deviceCreator.data();
239
HDeviceModelInfoProvider* HDeviceHostConfiguration::deviceModelInfoProvider() const
241
return h_ptr->m_infoProvider.data();
244
void HDeviceHostConfiguration::setDeviceModelCreator(
245
const HDeviceModelCreator& deviceCreator)
247
h_ptr->m_deviceCreator.reset(deviceCreator.clone());
250
void HDeviceHostConfiguration::setDeviceModelInfoProvider(
251
const HDeviceModelInfoProvider& infoProvider)
253
h_ptr->m_infoProvider.reset(infoProvider.clone());
256
void HDeviceHostConfiguration::setIndividualAdvertisementCount(qint32 arg)
263
h_ptr->m_individualAdvertisementCount = arg;
266
qint32 HDeviceHostConfiguration::subscriptionExpirationTimeout() const
268
return h_ptr->m_subscriptionExpirationTimeout;
271
void HDeviceHostConfiguration::setSubscriptionExpirationTimeout(qint32 arg)
273
static const qint32 max = 60*60*24;
280
h_ptr->m_subscriptionExpirationTimeout = arg;
283
bool HDeviceHostConfiguration::setNetworkAddressesToUse(
284
const QList<QHostAddress>& addresses)
286
if (!HSysInfo::instance().areLocalAddresses(addresses))
291
h_ptr->m_networkAddresses = addresses;
295
bool HDeviceHostConfiguration::isEmpty() const
297
return h_ptr->m_collection.isEmpty();
300
bool HDeviceHostConfiguration::isValid() const
302
return !isEmpty() && deviceModelCreator();