正在显示
9 个修改的文件
包含
68 行增加
和
20 行删除
| @@ -39,7 +39,6 @@ SET (DMAP_SERVER_SRCS | @@ -39,7 +39,6 @@ SET (DMAP_SERVER_SRCS | ||
| 39 | python/dmpserverwrapper.cpp | 39 | python/dmpserverwrapper.cpp |
| 40 | dmphttpbase.cpp | 40 | dmphttpbase.cpp |
| 41 | dmphttputils.cpp | 41 | dmphttputils.cpp |
| 42 | - | ||
| 43 | ) | 42 | ) |
| 44 | 43 | ||
| 45 | SET (DMAP_SERVER_HDRS | 44 | SET (DMAP_SERVER_HDRS |
| @@ -71,7 +70,6 @@ SET (DMAP_SERVER_HDRS | @@ -71,7 +70,6 @@ SET (DMAP_SERVER_HDRS | ||
| 71 | python/dmppythonutils.h | 70 | python/dmppythonutils.h |
| 72 | dmphttpbase.h | 71 | dmphttpbase.h |
| 73 | dmphttputils.h | 72 | dmphttputils.h |
| 74 | - | ||
| 75 | ) | 73 | ) |
| 76 | 74 | ||
| 77 | ############################################################# | 75 | ############################################################# |
| @@ -49,7 +49,8 @@ public: | @@ -49,7 +49,8 @@ public: | ||
| 49 | { | 49 | { |
| 50 | return; | 50 | return; |
| 51 | } | 51 | } |
| 52 | - | 52 | + |
| 53 | + | ||
| 53 | DmpSpServerRequest dmpRequest(request); | 54 | DmpSpServerRequest dmpRequest(request); |
| 54 | DmpSpServerResponse dmpResponse(response); | 55 | DmpSpServerResponse dmpResponse(response); |
| 55 | pDmpServer->HandleRequest(dmpRequest, dmpResponse); | 56 | pDmpServer->HandleRequest(dmpRequest, dmpResponse); |
| @@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
| 20 | #include "dmpserverregistry.h" | 20 | #include "dmpserverregistry.h" |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | -#define URI_RELOAD ("/API/Service/TileService/Reload") //加载已注册服务接口 | 23 | +#define URI_RELOAD ("/API/Service/Reload") //加载已注册服务接口 |
| 24 | class SERVER_EXPORT DmpServerManager | 24 | class SERVER_EXPORT DmpServerManager |
| 25 | { | 25 | { |
| 26 | public: | 26 | public: |
| @@ -16,6 +16,8 @@ | @@ -16,6 +16,8 @@ | ||
| 16 | // #include <boost/algorithm/string.hpp> | 16 | // #include <boost/algorithm/string.hpp> |
| 17 | #include "dmplogger.h" | 17 | #include "dmplogger.h" |
| 18 | 18 | ||
| 19 | + | ||
| 20 | + | ||
| 19 | DmpServerRequest::DmpServerRequest() | 21 | DmpServerRequest::DmpServerRequest() |
| 20 | { | 22 | { |
| 21 | isRestful_ = false; | 23 | isRestful_ = false; |
| @@ -39,19 +39,21 @@ DmpSpServerRequest::DmpSpServerRequest(SP_HttpRequest* request) | @@ -39,19 +39,21 @@ DmpSpServerRequest::DmpSpServerRequest(SP_HttpRequest* request) | ||
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | //获取querystring | 41 | //获取querystring |
| 42 | - std::string url(request->getURL()); | ||
| 43 | - //std::string deurl=Percent::decode( url); | ||
| 44 | - std::string::size_type pos = url.find("?"); | 42 | + std::string url(request->getURL()); |
| 43 | + std::string deurl; | ||
| 44 | + this->UrlDecode(url,deurl); | ||
| 45 | + | ||
| 46 | + std::string::size_type pos = deurl.find("?"); | ||
| 45 | if (pos != std::string::npos) { | 47 | if (pos != std::string::npos) { |
| 46 | - std::string path = url.substr(0, pos); | 48 | + std::string path = deurl.substr(0, pos); |
| 47 | setPath(path); | 49 | setPath(path); |
| 48 | std::string queryString; | 50 | std::string queryString; |
| 49 | - queryString = url.substr(pos+1,url.length()); | 51 | + queryString = deurl.substr(pos+1,deurl.length()); |
| 50 | setQuery(queryString); | 52 | setQuery(queryString); |
| 51 | } | 53 | } |
| 52 | else { | 54 | else { |
| 53 | isRestful_ = true; | 55 | isRestful_ = true; |
| 54 | - setPath(url); | 56 | + setPath(deurl); |
| 55 | } | 57 | } |
| 56 | 58 | ||
| 57 | // for(int i=0; i< request->getParamCount(); i++) { | 59 | // for(int i=0; i< request->getParamCount(); i++) { |
| @@ -71,4 +73,50 @@ const void * DmpSpServerRequest::GetData() const | @@ -71,4 +73,50 @@ const void * DmpSpServerRequest::GetData() const | ||
| 71 | int DmpSpServerRequest::GetDataLength() const | 73 | int DmpSpServerRequest::GetDataLength() const |
| 72 | { | 74 | { |
| 73 | return dataLen_; | 75 | return dataLen_; |
| 76 | +} | ||
| 77 | +bool DmpSpServerRequest::UrlDecode(const std::string& src, std::string& dst) | ||
| 78 | +{ | ||
| 79 | + if(src.size() == 0) | ||
| 80 | + return false; | ||
| 81 | + int hex = 0; | ||
| 82 | + for (size_t i = 0; i < src.length(); ++i) | ||
| 83 | + { | ||
| 84 | + switch (src[i]) | ||
| 85 | + { | ||
| 86 | + case '+': | ||
| 87 | + dst += ' '; | ||
| 88 | + break; | ||
| 89 | + case '%': | ||
| 90 | + { | ||
| 91 | + if (isxdigit(src[i + 1]) && isxdigit(src[i + 2])) | ||
| 92 | + { | ||
| 93 | + std::string hexStr = src.substr(i + 1, 2); | ||
| 94 | + hex = strtol(hexStr.c_str(), 0, 16); | ||
| 95 | + //字母和数字[0-9a-zA-Z]、一些特殊符号[$-_.+!*'(),] 、以及某些保留字[$&+,/:;=?@] | ||
| 96 | + //可以不经过编码直接用于URL | ||
| 97 | + if (!((hex >= 48 && hex <= 57) || //0-9 | ||
| 98 | + (hex >=97 && hex <= 122) || //a-z | ||
| 99 | + (hex >=65 && hex <= 90) || //A-Z | ||
| 100 | + //一些特殊符号及保留字[$-_.+!*'(),] [$&+,/:;=?@] | ||
| 101 | + hex == 0x21 || hex == 0x24 || hex == 0x26 || hex == 0x27 || hex == 0x28 || hex == 0x29 | ||
| 102 | + || hex == 0x2a || hex == 0x2b|| hex == 0x2c || hex == 0x2d || hex == 0x2e || hex == 0x2f | ||
| 103 | + || hex == 0x3A || hex == 0x3B|| hex == 0x3D || hex == 0x3f || hex == 0x40 || hex == 0x5f | ||
| 104 | + )) | ||
| 105 | + { | ||
| 106 | + dst += char(hex); | ||
| 107 | + i += 2; | ||
| 108 | + } | ||
| 109 | + else | ||
| 110 | + dst += '%'; | ||
| 111 | + } | ||
| 112 | + else | ||
| 113 | + dst += '%'; | ||
| 114 | + } | ||
| 115 | + break; | ||
| 116 | + default: | ||
| 117 | + dst += src[i]; | ||
| 118 | + break; | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return true; | ||
| 74 | } | 122 | } |
| @@ -23,6 +23,7 @@ public: | @@ -23,6 +23,7 @@ public: | ||
| 23 | DmpSpServerRequest(SP_HttpRequest* request); | 23 | DmpSpServerRequest(SP_HttpRequest* request); |
| 24 | const void * GetData() const override; | 24 | const void * GetData() const override; |
| 25 | int GetDataLength() const override; | 25 | int GetDataLength() const override; |
| 26 | + bool UrlDecode(const std::string& src, std::string& dst); | ||
| 26 | private: | 27 | private: |
| 27 | const void* data_; | 28 | const void* data_; |
| 28 | int dataLen_; | 29 | int dataLen_; |
| @@ -134,16 +134,12 @@ void DmpManagerApiHandler::regService(const DmpServerApiContext &context) const | @@ -134,16 +134,12 @@ void DmpManagerApiHandler::regService(const DmpServerApiContext &context) const | ||
| 134 | break; | 134 | break; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | - context.response()->write("{\"status\":\""+std::to_string(flag)+"\",\"url\":\""+url+"\",\"message\":\"Pulish service successful!\"}"); | ||
| 138 | // std::string projData; | 137 | // std::string projData; |
| 139 | // DmpServerUtils::Base64Decode(project, &projData); | 138 | // DmpServerUtils::Base64Decode(project, &projData); |
| 140 | - // context.response()->removeHeader("Content-Type"); | ||
| 141 | - // context.response()->setHeader("Content-Type", "text/xml;charset=utf-8"); | ||
| 142 | - // context.response()->write(projData); | ||
| 143 | - | ||
| 144 | - | ||
| 145 | - | ||
| 146 | - | 139 | + context.response()->removeHeader("Content-Type"); |
| 140 | + context.response()->setHeader("Content-Type", "text/xml;charset=utf-8"); | ||
| 141 | + // context.response()->write(projData); | ||
| 142 | + context.response()->write("{\"status\":\""+std::to_string(flag)+"\",\"url\":\""+url+"\",\"message\":\"Pulish service successful!\"}"); | ||
| 147 | } | 143 | } |
| 148 | else | 144 | else |
| 149 | { | 145 | { |
| @@ -34,7 +34,8 @@ public: | @@ -34,7 +34,8 @@ public: | ||
| 34 | ~DmpMapServer(); | 34 | ~DmpMapServer(); |
| 35 | std::string name() const override { return std::string("MapServer");} | 35 | std::string name() const override { return std::string("MapServer");} |
| 36 | std::string alias() const override { return std::string("矢量地图服务");} | 36 | std::string alias() const override { return std::string("矢量地图服务");} |
| 37 | - std::string path() const override { return std::string("^/DMap/Services/?([\\w./]*)/MapServer/([\\w]+)"); } | 37 | + //std::string path() const override { return std::string("^/DMap/Services/?([\\w./]*)/MapServer/([\\w]+)"); } |
| 38 | + std::string path() const override { return std::string("^/DMap/Services/?([\\w\\W./]*)/MapServer/([\\w]+)"); } | ||
| 38 | std::string capability() const override; | 39 | std::string capability() const override; |
| 39 | void executeRequest(DmpServerRequest &request, DmpServerResponse &response) override; | 40 | void executeRequest(DmpServerRequest &request, DmpServerResponse &response) override; |
| 40 | bool publish(const std::string &serviceName, const std::string &title, unsigned int capability, const DmpProject &project) override; | 41 | bool publish(const std::string &serviceName, const std::string &title, unsigned int capability, const DmpProject &project) override; |
| @@ -35,7 +35,8 @@ public: | @@ -35,7 +35,8 @@ public: | ||
| 35 | ~DmpTileServer(); | 35 | ~DmpTileServer(); |
| 36 | std::string name() const override { return std::string("TileServer");} | 36 | std::string name() const override { return std::string("TileServer");} |
| 37 | std::string alias() const override { return std::string("瓦片服务");} | 37 | std::string alias() const override { return std::string("瓦片服务");} |
| 38 | - std::string path() const override { return std::string("^/DMap/Services/?([\\w./]*)/TileServer/([\\w.]+)([\\w./]*)"); } | 38 | + //std::string path() const override { return std::string("^/DMap/Services/?([\\w./]*)/TileServer/([\\w.]+)([\\w./]*)"); } |
| 39 | + std::string path() const override { return std::string("^/DMap/Services/?([\\w\\W./]*)/TileServer/([\\w.]+)([\\w./]*)"); } | ||
| 39 | std::string capability() const override; | 40 | std::string capability() const override; |
| 40 | void executeRequest(DmpServerRequest &request, DmpServerResponse &response) override; | 41 | void executeRequest(DmpServerRequest &request, DmpServerResponse &response) override; |
| 41 | bool publish(const std::string &serviceName, const std::string &title, unsigned int capability, const DmpProject &project) override; | 42 | bool publish(const std::string &serviceName, const std::string &title, unsigned int capability, const DmpProject &project) override; |
请
注册
或
登录
后发表评论