Skip to content

Commit f4cb295

Browse files
committedOct 1, 2016
server sip sync
1 parent a5adb66 commit f4cb295

12 files changed

+244
-58
lines changed
 

‎doc/api_break.dox

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ This page tries to maintain a list with incompatible changes that happened in pr
172172
<tr><td>QgsVectorLayer<td>rendererV2<td>renderer
173173
<tr><td>QgsVectorLayerEditUtils<td>deleteVertexV2<td>deleteVertex
174174
<tr><td>QgsComposerSymbolItem<td>symbolV2<td>symbol
175+
<tr><td>QgsServerInterface<td>capabiblitiesCache<td>capabilitiesCache
175176
</table>
176177

177178
\subsection qgis_api_break_3_0_removed_classes Removed Classes

‎python/server/qgsaccesscontrolfilter.sip

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@
1818
***************************************************************************/
1919

2020
/**
21+
* \ingroup server
2122
* \class QgsAccessControlFilter
22-
* \brief Class defining access control interface for QGIS Server.
23+
* \brief Class defining access control interface for QGIS Server plugins.
2324
*
2425
* Security can define any (or none) of the following method:
25-
* * layerFilterExpression()
26-
* * layerFilterSubsetString()
27-
* * layerPermissions()
28-
* * authorizedLayerAttributes()
29-
* * allowToEdit()
26+
* * layerFilterExpression() - To get an additional expression filter (WMS/GetMap, WMS/GetFeatureInfo, WFS/GetFeature)
27+
* * layerFilterSQL() - To get an additional SQL filter (WMS/GetMap, WMS/GetFeatureInfo, WFS/GetFeature) for layer that support SQL
28+
* * layerPermissions() - To give the general layer permissins (read / update / insert / delete)
29+
* * authorizedLayerAttributes() - Tho filter the attributes (WMS/GetFeatureInfo, WFS/GetFeature)
30+
* * allowToEdit() - (all WFS-T requests)
3031
* * cacheKey()
3132
*/
3233

@@ -39,7 +40,7 @@ class QgsAccessControlFilter
3940
public:
4041
/** Constructor
4142
* QgsServerInterface passed to plugins constructors
42-
* and must be passed to QgsAccessControlPlugin instances.
43+
* and must be passed to QgsAccessControlFilter instances.
4344
*/
4445
QgsAccessControlFilter( const QgsServerInterface* serverInterface );
4546
/** Destructor */
@@ -56,18 +57,42 @@ class QgsAccessControlFilter
5657

5758
/** Return the QgsServerInterface instance*/
5859
const QgsServerInterface* serverInterface() const;
59-
/** Return an additional expression filter */
60+
61+
/** Return an additional expression filter
62+
* @param layer the layer to control
63+
* @return the filter expression
64+
*/
6065
virtual QString layerFilterExpression( const QgsVectorLayer* layer ) const;
61-
/** Return an additional the subset string (typically SQL) filter.
62-
Faster than the layerFilterExpression but not supported on all the type of layer */
66+
67+
/** Return an additional subset string (typically SQL) filter
68+
* @param layer the layer to control
69+
* @return the subset string
70+
*/
6371
virtual QString layerFilterSubsetString( const QgsVectorLayer* layer ) const;
64-
/** Return the layer permissions */
72+
73+
/** Return the layer permissions
74+
* @param layer the layer to control
75+
* @return the permission to use on the layer
76+
*/
6577
virtual LayerPermissions layerPermissions( const QgsMapLayer* layer ) const;
66-
/** Return the authorized layer attributes */
78+
79+
/** Return the authorized layer attributes
80+
* @param layer the layer to control
81+
* @param attributes the current list of visible attribute
82+
* @return the new list of visible attributes
83+
*/
6784
virtual QStringList authorizedLayerAttributes( const QgsVectorLayer* layer, const QStringList& attributes ) const;
68-
/** Are we authorize to modify the following geometry */
85+
86+
/** Are we authorized to modify the following geometry
87+
* @param layer the layer to control
88+
* @param feature the concerned feature
89+
* @return true if we are allowed to edit
90+
*/
6991
virtual bool allowToEdit( const QgsVectorLayer* layer, const QgsFeature& feature ) const;
70-
/** Cache key to used to create the capabilities cache, "" for no cache, shouldn't any contains "-", default to "" */
92+
93+
/** Cache key to used to create the capabilities cache
94+
* @return the cache key, "" for no cache
95+
*/
7196
virtual QString cacheKey() const;
7297
};
7398

‎python/server/qgscapabilitiescache.sip

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,28 @@
1515
* *
1616
***************************************************************************/
1717

18-
/**
19-
* \class QgsCapabilitiesCache
20-
* \brief A cache for capabilities xml documents (by configuration file path)
21-
*/
18+
/** \ingroup server
19+
* A cache for capabilities xml documents (by configuration file path)
20+
*/
2221
class QgsCapabilitiesCache: QObject
2322
{
2423
%TypeHeaderCode
2524
#include "qgscapabilitiescache.h"
2625
%End
2726
public:
2827

29-
/** Returns cached capabilities document (or 0 if document for configuration file not in cache)*/
30-
const QDomDocument* searchCapabilitiesDocument( const QString& configFilePath, const QString& version );
31-
/** Inserts new capabilities document (creates a copy of the document, does not take ownership)*/
32-
void insertCapabilitiesDocument( const QString& configFilePath, const QString& version, const QDomDocument* doc );
28+
/** Returns cached capabilities document (or 0 if document for configuration file not in cache)
29+
* @param configFilePath the progect file path
30+
* @param key key used to separate different version in different cache
31+
*/
32+
const QDomDocument* searchCapabilitiesDocument( const QString& configFilePath, const QString& key );
33+
34+
/** Inserts new capabilities document (creates a copy of the document, does not take ownership)
35+
* @param configFilePath the project file path
36+
* @param key key used to separate different version in different cache
37+
* @param doc the DOM document
38+
*/
39+
void insertCapabilitiesDocument( const QString& configFilePath, const QString& key, const QDomDocument* doc );
3340

3441
/** Remove capabilities document
3542
* @param path the project file path

‎python/server/qgsmapserviceexception.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
***************************************************************************/
1717

1818

19-
/**
19+
/** \ingroup server
2020
* \class QgsMapServiceException
2121
* \brief Exception class for WMS service exceptions.
2222
*

‎python/server/qgsrequesthandler.sip

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,46 +26,106 @@ class QgsRequestHandler
2626

2727
public:
2828

29+
/** Parses the input and creates a request neutral Parameter/Value map
30+
* @note not available in Python bindings
31+
*/
32+
// virtual void parseInput() = 0;
33+
34+
/** Sends the map image back to the client
35+
* @note not available in Python bindings
36+
*/
37+
// virtual void setGetMapResponse( const QString& service, QImage* img, int imageQuality ) = 0;
38+
39+
//! @note not available in Python bindings
40+
// virtual void setGetCapabilitiesResponse( const QDomDocument& doc ) = 0;
41+
42+
//! @note not available in Python bindings
43+
// virtual void setGetFeatureInfoResponse( const QDomDocument& infoDoc, const QString& infoFormat ) = 0;
44+
2945
/** Allow plugins to return a QgsMapServiceException*/
3046
virtual void setServiceException( QgsMapServiceException ex /Transfer/ ) = 0;
47+
48+
//! @note not available in Python bindings
49+
// virtual void setXmlResponse( const QDomDocument& doc ) = 0;
50+
51+
//! @note not available in Python bindings
52+
// virtual void setXmlResponse( const QDomDocument& doc, const QString& mimeType ) = 0;
53+
54+
//! @note not available in Python bindings
55+
// virtual void setGetPrintResponse( QByteArray* b ) = 0;
56+
57+
//! @note not available in Python bindings
58+
// virtual bool startGetFeatureResponse( QByteArray* ba, const QString& infoFormat ) = 0;
59+
60+
//! @note not available in Python bindings
61+
// virtual void setGetFeatureResponse( QByteArray* ba ) = 0;
62+
63+
//! @note not available in Python bindings
64+
virtual void endGetFeatureResponse( QByteArray* ba ) = 0;
65+
66+
//! @note not available in Python bindings
67+
virtual void setGetCoverageResponse( QByteArray* ba ) = 0;
68+
3169
virtual void setDefaultHeaders();
70+
3271
/** Set an HTTP header*/
3372
virtual void setHeader( const QString &name, const QString &value ) = 0;
73+
3474
/** Remove an HTTP header*/
3575
virtual int removeHeader( const QString &name ) = 0;
76+
3677
/** Delete all HTTP headers*/
3778
virtual void clearHeaders() = 0;
79+
3880
/** Append the bytestream to response body*/
3981
virtual void appendBody( const QByteArray &body ) = 0;
82+
4083
/** Clears the response body*/
4184
virtual void clearBody() = 0;
85+
4286
/** Return the response body*/
4387
virtual QByteArray body();
88+
4489
/** Set the info format string such as "text/xml"*/
4590
virtual void setInfoFormat( const QString &format ) = 0;
91+
4692
/** Check whether there is any header set or the body is not empty*/
4793
virtual bool responseReady() const = 0;
94+
4895
/** Send out HTTP headers and flush output buffer*/
4996
virtual void sendResponse() = 0;
97+
5098
/** Pointer to last raised exception*/
5199
virtual bool exceptionRaised() const = 0;
100+
52101
/** Return a copy of the parsed parameters as a key-value pair, to modify
53102
* a parameter setParameter( const QString &key, const QString &value)
54103
* and removeParameter(const QString &key) must be used
55104
*/
56105
QMap<QString, QString> parameterMap();
106+
57107
/** Set a request parameter*/
58108
virtual void setParameter( const QString &key, const QString &value ) = 0;
109+
59110
/** Remove a request parameter*/
60111
virtual int removeParameter( const QString &key ) = 0;
112+
61113
/** Return a request parameter*/
62114
virtual QString parameter( const QString &key ) const = 0;
115+
63116
/** Return the requested format string*/
64117
QString format() const;
118+
65119
/** Return the mime type for the response*/
66120
QString infoFormat() const;
121+
67122
/** Return true if the HTTP headers were already sent to the client*/
68123
bool headersSent();
124+
125+
126+
//! @note not available in Python bindings
127+
// virtual QPair<QByteArray, QByteArray> getResponse() = 0;
128+
69129
private:
70130
/** Parses the input and creates a request neutral Parameter/Value map*/
71131
virtual void parseInput() = 0;

‎python/server/qgsserverfilter.sip

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/***************************************************************************
22
qgsserverfilter.h
3-
Server I/O filters class for Qgis Mapserver for use by plugins
3+
Server I/O filters class for QGIS Server for use by plugins
44
-------------------
55
begin : 2014-09-10
66
copyright : (C) 2014 by Alessandro Pasotti
@@ -17,8 +17,9 @@
1717
***************************************************************************/
1818

1919
/**
20+
* \ingroup server
2021
* \class QgsServerFilter
21-
* \brief Class defining I/O filters for Qgis Mapserver and
22+
* \brief Class defining I/O filters for QGIS Server and
2223
* implemented in plugins.
2324
*
2425
* Filters can define any (or none) of the following hooks:

‎python/server/qgsserverinterface.sip

Lines changed: 75 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@
1818
***************************************************************************/
1919

2020
/**
21-
* \class QgsServerInterface
22-
* \brief Class defining the interface made available to server plugins.
21+
* \ingroup server
22+
* QgsServerInterface
23+
* Class defining interfaces exposed by QGIS Server and
24+
* made available to plugins.
2325
*
2426
* This class provides methods to access the request handler and
2527
* the capabilties cache. A method to read the environment
2628
* variables set in the main FCGI loop is also available.
2729
* Plugins can add listeners (instances of QgsServerFilter) with
2830
* a certain priority through the registerFilter( QgsServerFilter* , int) method.
31+
*
2932
*/
3033

3134

@@ -40,39 +43,89 @@ class QgsServerInterface
4043
%End
4144

4245
public:
43-
/** Returns the current request handler*/
46+
/**
47+
* Set the request handler
48+
* @param requestHandler request handler
49+
* @note not available in Python bindings
50+
*/
51+
// virtual void setRequestHandler( QgsRequestHandler* requestHandler ) = 0;
52+
53+
/**
54+
* Clear the request handler
55+
*
56+
* @note not available in python bindings
57+
*/
58+
// virtual void clearRequestHandler() = 0;
59+
60+
/**
61+
* Get pointer to the capabiblities cache
62+
* @return QgsCapabilitiesCache
63+
*/
64+
virtual QgsCapabilitiesCache* capabilitiesCache() = 0 /KeepReference/;
65+
66+
/**
67+
* Get pointer to the request handler
68+
* @return QgsRequestHandler
69+
*/
4470
virtual QgsRequestHandler* requestHandler() = 0 /KeepReference/;
45-
/** Returns the capabilities cache*/
46-
virtual QgsCapabilitiesCache* capabiblitiesCache() = 0 /KeepReference/;
47-
// Tansfer ownership to avoid garbage collector to call dtor
48-
/** Register a filter with the given priority. The filter's requestReady()
49-
* and responseReady() methods will be called from the loop*/
71+
72+
/**
73+
* Register a QgsServerFilter
74+
* @param filter the QgsServerFilter to add
75+
* @param priority an optional priority for the filter order
76+
*/
5077
virtual void registerFilter( QgsServerFilter* filter /Transfer/, int priority = 0 ) = 0;
51-
/** Set the filters map */
78+
79+
/**
80+
* Set the filters map
81+
* @param filters the QgsServerFiltersMap
82+
*/
5283
virtual void setFilters( QgsServerFiltersMap* filters /Transfer/) = 0;
53-
/** Register a security module with the given priority.*/
84+
85+
/**
86+
* Return the list of current QgsServerFilter
87+
* @return QgsServerFiltersMap list of QgsServerFilter
88+
*/
89+
virtual QgsServerFiltersMap filters() = 0;
90+
91+
/** Register an access control filter
92+
* @param accessControl the access control to register
93+
* @param priority the priority used to order them
94+
*/
5495
virtual void registerAccessControl( QgsAccessControlFilter* accessControl /Transfer/, int priority = 0 ) = 0;
96+
5597
/** Gets the registred access control filters */
5698
virtual const QgsAccessControl* accessControls() const = 0;
57-
/** Return an environment variable set by FCGI*/
99+
100+
//! Return an enrironment variable, used to pass environment variables to python
58101
virtual QString getEnv(const QString& name ) const = 0;
59-
// Commented because of problems with typedef QgsServerFiltersMap, provided
60-
// methods to alter the filters map into QgsRequestHandler API
61-
virtual QgsServerFiltersMap filters() = 0;
62-
/** Returns the configFilePath as seen by the server, this value is only
63-
* available after requestReady has been called.*/
102+
103+
/**
104+
* Return the configuration file path
105+
* @return QString containing the configuration file path
106+
*/
64107
virtual QString configFilePath() = 0;
65-
/** Set the config file path */
108+
109+
/**
110+
* Set the configuration file path
111+
* @param configFilePath QString with the configuration file path
112+
*/
66113
virtual void setConfigFilePath( const QString& configFilePath) = 0;
67-
/** Remove entry from config cache */
114+
115+
/**
116+
* Remove entry from config cache
117+
* @param path the path of the file to remove
118+
*/
68119
virtual void removeConfigCacheEntry( const QString& path ) = 0;
69-
/** Remove entry from layer cache */
70-
virtual void removeProjectLayers( const QString& path ) = 0;
71120

121+
/**
122+
* Remove entries from layer cache
123+
* @param path the path of the project which own the layers to be removed
124+
*/
125+
virtual void removeProjectLayers( const QString& path ) = 0;
72126

73-
private:
127+
private:
74128
/** Constructor */
75129
QgsServerInterface();
76-
77130
};
78131

‎src/server/qgsaccesscontrolfilter.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/***************************************************************************
22
qgsaccesscontrolfilter.h
33
------------------------
4+
Access control interface for Qgis Server plugins
5+
46
begin : 2015-05-19
57
copyright : (C) 2015 by Stéphane Brunner
68
email : stephane dot brunner at camptocamp dot org
@@ -40,6 +42,7 @@ class QgsFeature;
4042
* * layerPermissions() - To give the general layer permissins (read / update / insert / delete)
4143
* * authorizedLayerAttributes() - Tho filter the attributes (WMS/GetFeatureInfo, WFS/GetFeature)
4244
* * allowToEdit() - (all WFS-T requests)
45+
* * cacheKey()
4346
*/
4447
class SERVER_EXPORT QgsAccessControlFilter
4548
{

‎src/server/qgscapabilitiescache.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
#include <QObject>
2525

2626
/** \ingroup server
27-
* A cache for capabilities xml documents (by configuration file path)*/
27+
* A cache for capabilities xml documents (by configuration file path)
28+
*/
2829
class SERVER_EXPORT QgsCapabilitiesCache : public QObject
2930
{
3031
Q_OBJECT

‎src/server/qgsrequesthandler.h

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,77 +59,106 @@ class QgsRequestHandler
5959
* @note not available in Python bindings
6060
*/
6161
virtual void parseInput() = 0;
62+
6263
/** Sends the map image back to the client
6364
* @note not available in Python bindings
6465
*/
6566
virtual void setGetMapResponse( const QString& service, QImage* img, int imageQuality ) = 0;
67+
6668
//! @note not available in Python bindings
6769
virtual void setGetCapabilitiesResponse( const QDomDocument& doc ) = 0;
68-
//! @note not availabe in Python bindings
70+
71+
//! @note not available in Python bindings
6972
virtual void setGetFeatureInfoResponse( const QDomDocument& infoDoc, const QString& infoFormat ) = 0;
73+
7074
/** Allow plugins to return a QgsMapServiceException*/
7175
virtual void setServiceException( QgsMapServiceException ex ) = 0;
76+
7277
//! @note not available in Python bindings
7378
virtual void setXmlResponse( const QDomDocument& doc ) = 0;
79+
7480
//! @note not available in Python bindings
7581
virtual void setXmlResponse( const QDomDocument& doc, const QString& mimeType ) = 0;
82+
7683
//! @note not available in Python bindings
7784
virtual void setGetPrintResponse( QByteArray* b ) = 0;
85+
7886
//! @note not available in Python bindings
7987
virtual bool startGetFeatureResponse( QByteArray* ba, const QString& infoFormat ) = 0;
88+
8089
//! @note not available in Python bindings
8190
virtual void setGetFeatureResponse( QByteArray* ba ) = 0;
8291

8392
//! @note not available in Python bindings
8493
virtual void endGetFeatureResponse( QByteArray* ba ) = 0;
94+
8595
//! @note not available in Python bindings
8696
virtual void setGetCoverageResponse( QByteArray* ba ) = 0;
97+
8798
virtual void setDefaultHeaders() {}
99+
88100
/** Set an HTTP header*/
89101
virtual void setHeader( const QString &name, const QString &value ) = 0;
102+
90103
/** Remove an HTTP header*/
91104
virtual int removeHeader( const QString &name ) = 0;
105+
92106
/** Delete all HTTP headers*/
93107
virtual void clearHeaders() = 0;
108+
94109
/** Append the bytestream to response body*/
95110
virtual void appendBody( const QByteArray &body ) = 0;
111+
96112
/** Clears the response body*/
97113
virtual void clearBody() = 0;
114+
98115
/** Return the response body*/
99116
virtual QByteArray body() { return mBody; }
117+
100118
/** Set the info format string such as "text/xml"*/
101119
virtual void setInfoFormat( const QString &format ) = 0;
120+
102121
/** Check whether there is any header set or the body is not empty*/
103122
virtual bool responseReady() const = 0;
123+
104124
/** Send out HTTP headers and flush output buffer*/
105125
virtual void sendResponse() = 0;
126+
106127
/** Pointer to last raised exception*/
107128
virtual bool exceptionRaised() const = 0;
129+
108130
/** Return a copy of the parsed parameters as a key-value pair, to modify
109131
* a parameter setParameter( const QString &key, const QString &value)
110132
* and removeParameter(const QString &key) must be used
111133
*/
112134
QMap<QString, QString> parameterMap() { return mParameterMap; }
135+
113136
/** Set a request parameter*/
114137
virtual void setParameter( const QString &key, const QString &value ) = 0;
138+
115139
/** Remove a request parameter*/
116140
virtual int removeParameter( const QString &key ) = 0;
141+
117142
/** Return a request parameter*/
118143
virtual QString parameter( const QString &key ) const = 0;
144+
119145
/** Return the requested format string*/
120146
QString format() const { return mFormat; }
147+
121148
/** Return the mime type for the response*/
122149
QString infoFormat() const { return mInfoFormat; }
150+
123151
/** Return true if the HTTP headers were already sent to the client*/
124152
bool headersSent() { return mHeadersSent; }
153+
125154
#ifdef HAVE_SERVER_PYTHON_PLUGINS
126155
/** Allow core services to call plugin hooks through sendResponse()
127156
* @note not available in Python bindings
128157
*/
129158
virtual void setPluginFilters( QgsServerFiltersMap pluginFilters ) = 0;
130159
#endif
131160

132-
//! @note not availabe in Python bindings
161+
//! @note not available in Python bindings
133162
virtual QPair<QByteArray, QByteArray> getResponse() = 0;
134163

135164
protected:

‎src/server/qgsserverinterface.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/***************************************************************************
2-
qgsseerversinterface.h
3-
Interface class for exposing functions in QGIS Server for use by plugins
4-
-------------------
2+
qgsserverinterface.h
3+
4+
Class defining the interface made available to QGIS Server plugins.
5+
-------------------
56
begin : 2014-09-10
67
copyright : (C) 2014 by Alessandro Pasotti
78
email : a dot pasotti at itopen dot it
@@ -32,6 +33,12 @@
3233
* Class defining interfaces exposed by QGIS Server and
3334
* made available to plugins.
3435
*
36+
* This class provides methods to access the request handler and
37+
* the capabilties cache. A method to read the environment
38+
* variables set in the main FCGI loop is also available.
39+
* Plugins can add listeners (instances of QgsServerFilter) with
40+
* a certain priority through the registerFilter( QgsServerFilter* , int) method.
41+
*
3542
*/
3643
class SERVER_EXPORT QgsServerInterface
3744
{
@@ -62,7 +69,7 @@ class SERVER_EXPORT QgsServerInterface
6269
* Get pointer to the capabiblities cache
6370
* @return QgsCapabilitiesCache
6471
*/
65-
virtual QgsCapabilitiesCache* capabiblitiesCache() = 0;
72+
virtual QgsCapabilitiesCache* capabilitiesCache() = 0;
6673

6774
/**
6875
* Get pointer to the request handler
@@ -88,11 +95,13 @@ class SERVER_EXPORT QgsServerInterface
8895
* @return QgsServerFiltersMap list of QgsServerFilter
8996
*/
9097
virtual QgsServerFiltersMap filters() = 0;
98+
9199
/** Register an access control filter
92100
* @param accessControl the access control to register
93101
* @param priority the priority used to order them
94102
*/
95103
virtual void registerAccessControl( QgsAccessControlFilter* accessControl, int priority = 0 ) = 0;
104+
96105
/** Gets the registred access control filters */
97106
virtual const QgsAccessControl* accessControls() const = 0;
98107

@@ -123,9 +132,6 @@ class SERVER_EXPORT QgsServerInterface
123132
*/
124133
virtual void removeProjectLayers( const QString& path ) = 0;
125134

126-
127-
128-
129135
private:
130136
QString mConfigFilePath;
131137
};

‎src/server/qgsserverinterfaceimpl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class QgsServerInterfaceImpl : public QgsServerInterface
4646

4747
void setRequestHandler( QgsRequestHandler* requestHandler ) override;
4848
void clearRequestHandler() override;
49-
QgsCapabilitiesCache* capabiblitiesCache() override { return mCapabilitiesCache; }
49+
QgsCapabilitiesCache* capabilitiesCache() override { return mCapabilitiesCache; }
5050
//! Return the QgsRequestHandler, to be used only in server plugins
5151
QgsRequestHandler* requestHandler() override { return mRequestHandler; }
5252
void registerFilter( QgsServerFilter *filter, int priority = 0 ) override;

0 commit comments

Comments
 (0)
Please sign in to comment.