Grassroots Infrastructure
The Grassroots Infrastructure is a suite of computing tools to help users and developers use scientific data infrastructure that can easily be interconnected.
servers_manager.h
Go to the documentation of this file.
1 /*
2 ** Copyright 2014-2016 The Earlham Institute
3 **
4 ** Licensed under the Apache License, Version 2.0 (the "License");
5 ** you may not use this file except in compliance with the License.
6 ** You may obtain a copy of the License at
7 **
8 ** http://www.apache.org/licenses/LICENSE-2.0
9 **
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
15 */
16 
21 /*
22  * servers_pool.h
23  *
24  * Created on: 12 Jun 2015
25  * Author: tyrrells
26  */
27 
28 #ifndef SERVERS_POOL_H_
29 #define SERVERS_POOL_H_
30 
31 #include "uuid_defs.h"
32 
33 #include "connection.h"
35 #include "linked_list.h"
36 #include "operation.h"
37 #include "memory_allocations.h"
38 #include "string_utils.h"
39 
40 
48 typedef struct ExternalServer
49 {
51  char *es_name_s;
52 
54  char *es_uri_s;
55 
58 
66 
67 
75 
76 
78 
79 
87 typedef struct ExternalServerNode
88 {
91 
94 
102 
103 
104 /* forward declaration */
105 struct ServersManager;
106 struct GrassrootsServer;
107 
108 
117 typedef ExternalServer *(*ExternalServerDeserialiser) (const unsigned char *data_p);
118 
119 
120 
131 typedef unsigned char *(*ExternalServerSerialiser) (ExternalServer *server_p, uint32 *length_p);
132 
133 
141 typedef struct ServersManager
142 {
145 
146 
149 
156 
157 
172  int (*sm_add_server_fn) (struct ServersManager *manager_p, ExternalServer *server_p, ExternalServerSerialiser serialise_fn);
173 
188  ExternalServer *(*sm_get_server_fn) (struct ServersManager *manager_p, const char * const server_uri_s, ExternalServerDeserialiser deserialise_fn);
189 
204  ExternalServer *(*sm_remove_server_fn) (struct ServersManager *manager_p, const char * const server_uri_s, ExternalServerDeserialiser deserialise_fn);
205 
206 
207 
219  LinkedList *(*sm_get_all_servers_fn) (struct ServersManager *manager_p, ExternalServerDeserialiser deserialise_fn);
220 
221 
227  void (*sm_free_servers_manager_fn) (struct ServersManager *manager_p);
228 
229 
237  LinkedList *(*sm_get_all_matching_servers_fn) (struct ServersManager *manager_p, const char * const local_service_name_s);
238 
239 
241 
242 
243 #ifdef __cplusplus
244 extern "C"
245 {
246 #endif
247 
248 
249 GRASSROOTS_SERVICE_MANAGER_API ServersManager *LoadServersManager (const char *servers_manager_s, struct GrassrootsServer *server_p);
250 
251 
253 
254 
262 
263 
271 
272 
287  int (*add_server_fn) (ServersManager *manager_p, ExternalServer *server_p, ExternalServerSerialiser serialise_fn),
288  ExternalServer *(*get_server_fn) (ServersManager *manager_p, const char * const server_uri_s, ExternalServerDeserialiser deserialise_fn),
289  ExternalServer *(*remove_server_fn) (ServersManager *manager_p, const char * const server_uri_s, ExternalServerDeserialiser deserialise_fn),
290  LinkedList *(*get_all_servers_fn) (struct ServersManager *manager_p, ExternalServerDeserialiser deserialise_fn),
291  void (*free_servers_manager_fn) (struct ServersManager *manager_p));
292 
293 
311 
312 
329 
330 
348 
349 
364 
365 
366 
377 
378 
390 
391 
403 GRASSROOTS_SERVICE_MANAGER_API ExternalServer *AllocateExternalServer (const char *name_s, const char *uri_s, const char *uuid_s, ConnectionType ct);
404 
405 
413 
414 
425 
426 
434 
435 
450 
451 
466 GRASSROOTS_SERVICE_MANAGER_API bool AddExternalServerFromJSON (ServersManager *manager_p, const json_t *json_p);
467 
468 
478 GRASSROOTS_SERVICE_MANAGER_API const char *GetRemotePairedServiceName (const ExternalServer * const src_p, const char * const local_service_name_s);
479 
480 
481 
493 
494 
506 GRASSROOTS_SERVICE_MANAGER_API unsigned char *SerialiseExternalServerToJSON (ExternalServer * const external_server_p, unsigned int *value_length_p);
507 
508 
518 
519 
528 
529 
530 #ifdef __cplusplus
531 }
532 #endif
533 
534 
535 #endif /* SERVERS_POOL_H_ */
ExternalServerNode
A datatype for storing ExternalServers in a LinkedList.
Definition: servers_manager.h:87
ExternalServerNode::AllocateExternalServerNode
ExternalServerNode * AllocateExternalServerNode(ExternalServer *server_p, MEM_FLAG mf)
Allocate an ExternalServerNode.
ExternalServer::SerialiseExternalServerToJSON
unsigned char * SerialiseExternalServerToJSON(ExternalServer *const external_server_p, unsigned int *value_length_p)
Get a raw unsigned char array that allows the ExternalServer to be stored in the ServersManager.
ServersManager::sm_server_id_s
char sm_server_id_s[UUID_STRING_BUFFER_SIZE]
The UUID of this ExternalServer as a string.
Definition: servers_manager.h:155
ServersManager
A datatype for monitoring ExternalServers.
Definition: servers_manager.h:141
ExternalServer::MakeRemoteJSONCallToExternalServer
json_t * MakeRemoteJSONCallToExternalServer(ExternalServer *server_p, json_t *request_p)
Call a remote server.
ExternalServer::CreateExternalServerFromJSON
ExternalServer * CreateExternalServerFromJSON(const json_t *json_p)
Create a ExternalServer from a json_t object.
ServersManager::RemoveExternalServerFromServersManager
ExternalServer * RemoveExternalServerFromServersManager(ServersManager *manager_p, const char *const server_uri_s, ExternalServerDeserialiser deserialise_fn)
Remove a ExternalServer.
ExternalServer
A datatype to allow access to an external Grassroots Server.
Definition: servers_manager.h:48
MEM_FLAG
MEM_FLAG
An enum specifying the particular status of a piece of dynamically allocated memory for a particular ...
Definition: memory_allocations.h:38
GetLocalServerIdAsString
const char * GetLocalServerIdAsString(struct GrassrootsServer *grassroots_p)
Get the current Server uuid as a c-style string.
ExternalServer::es_name_s
char * es_name_s
The user-friendly name of the server.
Definition: servers_manager.h:51
ServersManager::FreeServersManager
void FreeServersManager(ServersManager *manager_p)
Free a ServersManager.
string_utils.h
A set of string functions.
ServersManager::sm_add_server_fn
int(* sm_add_server_fn)(struct ServersManager *manager_p, ExternalServer *server_p, ExternalServerSerialiser serialise_fn)
Add an ExternalServer to the ServersManager.
Definition: servers_manager.h:172
Operation
Operation
The various Operations that a Server can perform.
Definition: operation.h:46
operation.h
ExternalServer::FreeExternalServer
void FreeExternalServer(ExternalServer *server_p)
Free an ExternalServer.
grassroots_service_manager_library.h
ExternalServer::es_uri_s
char * es_uri_s
The URI for the Server.
Definition: servers_manager.h:54
ServersManager::AddExternalServerToServersManager
int AddExternalServerToServersManager(ServersManager *manager_p, ExternalServer *server_p, ExternalServerSerialiser serialise_fn)
Add an ExternalServer to the ServersManager.
ServersManager::sm_server_id
uuid_t sm_server_id
The UUID for this Server.
Definition: servers_manager.h:148
ExternalServer::es_id
uuid_t es_id
A unique id to identify the ExternalServer.
Definition: servers_manager.h:65
ExternalServerDeserialiser
ExternalServer *(* ExternalServerDeserialiser)(const unsigned char *data_p)
A function to take a raw binary data representation of a previously stored ExternalServer and recreat...
Definition: servers_manager.h:117
ExternalServer::es_connection_p
Connection * es_connection_p
The Connection to the ExternalServer.
Definition: servers_manager.h:57
GetRemotePairedServiceName
const char * GetRemotePairedServiceName(const ExternalServer *const src_p, const char *const local_service_name_s)
Get the name of the remote paired service corresponding to a given local service name.
ServersManager::GetAllExternalServersFromServersManager
LinkedList * GetAllExternalServersFromServersManager(ServersManager *manager_p, ExternalServerDeserialiser deserialise_fn)
Get all ExternalServers.
ExternalServer::DeserialiseExternalServerFromJSON
ExternalServer * DeserialiseExternalServerFromJSON(const unsigned char *raw_json_data_s)
Create an ExternalServer from a raw data memory block.
uuid_defs.h
ExternalServerNode::FreeExternalServerNode
void FreeExternalServerNode(ListItem *node_p)
Free an ExternalServerNode.
ExternalServer::GetExternalServerAsJSON
json_t * GetExternalServerAsJSON(ExternalServer *server_p)
Get the JSON fragment that describes the given ExternalServer.
ExternalServerNode::esn_server_mem
MEM_FLAG esn_server_mem
The MEM_FLAG indicating the ownership of the ExternalServer from this ExternalServerNode and whether ...
Definition: servers_manager.h:100
GetLocalServerId
uuid_t * GetLocalServerId(struct GrassrootsServer *grassroots_p)
Get the current Server uuid.
LoadServersManager
ServersManager * LoadServersManager(const char *servers_manager_s, struct GrassrootsServer *server_p)
ExternalServerSerialiser
unsigned char *(* ExternalServerSerialiser)(ExternalServer *server_p, uint32 *length_p)
A function to generate a raw binary data representation of a ExternalServer allowing it to be recreat...
Definition: servers_manager.h:131
ExternalServer::es_paired_services_p
LinkedList * es_paired_services_p
A List of KeyValuePairNodes where the key is the name of the Service on the local Server and the valu...
Definition: servers_manager.h:74
Connection
The base class for building a Server-Client connection.
Definition: connection.h:65
LinkedList
A doubly-linked list that can be traversed in either direction.
Definition: linked_list.h:56
ExternalServer::AddExternalServerFromJSON
bool AddExternalServerFromJSON(ServersManager *manager_p, const json_t *json_p)
Add an ExternalServer from a JSON-based definition.
UUID_STRING_BUFFER_SIZE
#define UUID_STRING_BUFFER_SIZE
The number of bytes required to store a c-style string representation of a UUID.
Definition: uuid_defs.h:32
GRASSROOTS_SERVICE_MANAGER_LOCAL
#define GRASSROOTS_SERVICE_MANAGER_LOCAL
Definition: grassroots_service_manager_library.h:47
Plugin
A Plugin is a dynamically-loaded component to provide a piece of functionality.
Definition: plugin.h:150
GrassrootsServer
Definition: grassroots_server.h:45
ExternalServerNode::esn_server_p
ExternalServer * esn_server_p
The ExternalServer.
Definition: servers_manager.h:93
ServersManager::InitServersManager
void InitServersManager(ServersManager *manager_p, int(*add_server_fn)(ServersManager *manager_p, ExternalServer *server_p, ExternalServerSerialiser serialise_fn), ExternalServer *(*get_server_fn)(ServersManager *manager_p, const char *const server_uri_s, ExternalServerDeserialiser deserialise_fn), ExternalServer *(*remove_server_fn)(ServersManager *manager_p, const char *const server_uri_s, ExternalServerDeserialiser deserialise_fn), LinkedList *(*get_all_servers_fn)(struct ServersManager *manager_p, ExternalServerDeserialiser deserialise_fn), void(*free_servers_manager_fn)(struct ServersManager *manager_p))
Initialise a ServersManager.
connection.h
ExternalServerNode::esn_node
ListItem esn_node
The base node.
Definition: servers_manager.h:90
memory_allocations.h
linked_list.h
A doubly-linked list.
ServersManager::sm_plugin_p
struct Plugin * sm_plugin_p
The plugin that thjs JobsManager was loaded from.
Definition: servers_manager.h:144
GRASSROOTS_SERVICE_MANAGER_API
#define GRASSROOTS_SERVICE_MANAGER_API
Definition: grassroots_service_manager_library.h:46
ExternalServer::AllocateExternalServer
ExternalServer * AllocateExternalServer(const char *name_s, const char *uri_s, const char *uuid_s, ConnectionType ct)
Allocate an ExternalServer.
ServersManager::GetExternalServerFromServersManager
ExternalServer * GetExternalServerFromServersManager(ServersManager *manager_p, const char *const server_uri_s, ExternalServerDeserialiser deserialise_fn)
Find a ExternalServer.
ServersManager::AddExternalServerOperationsToJSON
json_t * AddExternalServerOperationsToJSON(ServersManager *manager_p, Operation op)
Get the JSON fragment which will form part of a response to other servers and clients.
ConnectionType
ConnectionType
An enumeration listing the different types of Connections.
Definition: connection.h:47
ServersManager::sm_free_servers_manager_fn
void(* sm_free_servers_manager_fn)(struct ServersManager *manager_p)
Free a given ServersManager.
Definition: servers_manager.h:227
ListItem
A doubly-linked node that points to its predecessor and successor.
Definition: linked_list.h:43
uuid_t
Definition: windows_uuid.h:43
GetServersManagerFromPlugin
GRASSROOTS_SERVICE_MANAGER_LOCAL ServersManager * GetServersManagerFromPlugin(struct Plugin *const plugin_p)