11#if !defined(_RESTAPI_H_)
60 bool setCreateTime(uint64 created) {this->createTime = created;
return true;}
64 bool setTime(
const char* key, uint64 val) {
return storage->setTime(key, val);}
65 bool setInt(
const char* key, int64 val) {
return storage->setInt(key, val);}
67 bool setString(
const char* key,
const char* val) {
return storage->setString(key, val);}
68 bool setBinary(
const char* key,
const char* data, uint32 size,
const char* contentType) {
69 if (!
storage->setData(key, data, size))
116 uint64
getTime(
const char* key,
bool& success) {
return storage->getTime(key, success);}
117 const char*
getString(
const char* key,
bool& success) {
return storage->getString(key, success);}
118 int64
getInt(
const char* key,
bool& success) {
return storage->getInt(key, success);}
119 double getDouble(
const char* key,
bool& success) {
return storage->getDouble(key, success);}
120 const char*
getData(
const char* key, uint32& size,
bool& success) {
return storage->getData(key, size, success);}
121 char*
getDataCopy(
const char* key, uint32& size,
bool& success) {
return storage->getDataCopy(key, size, success);}
167 bool init(
const char* restDefinition);
186 std::map<std::string, std::map<std::string, RESTParam> >
paramSets;
Wire-protocol layer: HTTP request/reply, WebSocket frames, Telnet lines, binary DataMessages,...
The central Psyclone data container: a self-contained binary message with typed, named user entries.
A parsed or generated HTTP request (also used for WebSocket upgrade handshakes).
Definition of an outbound HTTP call template from the REST API XML.
std::map< std::string, std::string > headerParams
Headers filled from request parameters.
~RESTHTTPCall()
Destructor.
HTTPRequest * generateHTTPRequest(RESTRequest *restReq)
Build the outbound HTTP request for a parsed REST request, substituting parameters into URL,...
uint8 ops
Allowed HTTP operations bitmask (GET/POST/...).
std::string name
Call name from the API definition.
std::map< std::string, std::string > headerEntries
Fixed header key/values.
bool init(XMLNode objectNode)
Populate this call definition from its XML node in the API definition.
std::string contentType
Content-Type for the request body.
std::map< std::string, std::string > bodyContentTypes
Per-body-part content types (e.g.
std::string cacheControl
Cache-Control header value, if any.
RESTHTTPCall()
Create an empty call definition; populate with init().
std::map< std::string, std::string > bodyParams
Body fields filled from request parameters.
std::map< std::string, std::string > bodyEntries
Fixed body key/values.
std::string url
URL template (with parameter placeholders).
Parses and validates incoming requests against an XML REST API definition.
RESTParser()
Create an uninitialised parser; call init() before use.
std::map< std::string, RESTHTTPCall * > httpCalls
virtual ~RESTParser()
Destructor; deletes the owned RESTHTTPCall objects.
bool init(const char *restDefinition)
Load and validate the XML REST API definition.
const char * getLastErrorString()
XMLNode findTopNodeForRequest(const char *requestString)
bool extractParameters(HTTPRequest *req, std::map< std::string, RESTParam > ¶mSet, RESTRequest *restReq)
std::map< std::string, std::map< std::string, RESTParam > > paramSets
bool extractArrayParameters(HTTPRequest *req, std::map< std::string, RESTParam > ¶mSet, RESTRequest *restReq, int entryNum, const char *content, uint32 contentSize, const char *contentType)
std::string lastErrorString
bool setParameterValue(HTTPRequest *req, RESTParam ¶m, std::string value, RESTRequest *restReq, uint32 entryNum=0)
RESTRequest * parseRequest(HTTPRequest *req)
Parse an incoming HTTP request against the API definition.
static bool UnitTest()
Run the RESTParser unit tests.
std::map< std::string, RESTParam > parseParamSet(XMLNode objectNode)
A parsed and validated REST request with typed access to its parameters.
virtual ~RESTRequest()
Destructor; deletes the internal storage message.
bool addToErrorString(const char *errorLine)
const char * getSignature(bool &success)
Get the request signature (canonical "name(paramtypes)" string from the API definition).
const char * getOrigin(bool &success)
Get the request origin (e.g.
bool setRequestSignature(const char *signature)
RESTRequest()
Create an empty request (status FAILED_EMPTY) with fresh internal storage.
uint64 getTime(const char *key, bool &success)
double getDouble(const char *key, bool &success)
int64 getInt(const char *key, bool &success)
bool setBinary(const char *key, const char *data, uint32 size, const char *contentType)
bool setDouble(const char *key, double val)
bool requireAuthentication
enum cmlabs::RESTRequest::Status status
bool setString(const char *key, const char *val)
char * getDataCopy(const char *key, uint32 &size, bool &success)
bool setInt(const char *key, int64 val)
std::string getHTTPCallURL()
bool setStatus(Status status)
bool setFilter(const char *key, const char *val)
bool setTime(const char *key, uint64 val)
bool setOrigin(const char *origin)
RESTRequest(DataMessage *msg)
Reconstruct a request from a DataMessage previously produced by getStorageMessageCopy().
uint64 getCreateTime(bool &success)
Get the creation timestamp (PsyTime µs).
bool setCreateTime(uint64 created)
std::map< std::string, std::string > filterMap
int64 getFilterInt(const char *key, bool &success)
const char * getData(const char *key, uint32 &size, bool &success)
const char * getString(const char *key, bool &success)
bool setRequireAuthentication(bool auth)
HTTPRequest * generateHTTPCallRequest()
Generate the outbound HTTPRequest for an HTTP-call request.
bool getRequireAuthentication()
bool setFilter(const char *key, float64 val)
const char * getErrorString()
DataMessage * getStorageMessageCopy()
const char * getFilterString(const char *key, bool &success)
Status
Parse/validation outcome of the request.
float64 getFilterFloat(const char *key, bool &success)
bool setFilter(const char *key, int64 val)
std::string StringFormat(const char *format,...)
printf into a std::string.
int64 Ascii2Int64(const char *ascii, uint32 start=0, uint32 end=0)
Parse a signed 64-bit decimal integer from a substring.
float64 Ascii2Float64(const char *ascii, uint32 start=0, uint32 end=0)
Parse a 64-bit float from a substring (decimal point, not locale dependent).
Third-party (vendored): jsmn minimalistic JSON tokenizer by Serge Zaitsev (MIT licence),...
Definition of one parameter of a REST request, as declared in the API XML.
bool allowEmpty
true if an empty value is acceptable.
std::string name
Parameter name.
std::string objects
For ARRAY parameters: the nested object/param-set name.
bool optional
true if the parameter may be omitted.
Small recursive XML DOM parser (XMLNode) used by CMSDK for all PsySpec XML parsing.