AMPS C/C++ Client Class Reference
AMPS C/C++ Client Version 5.3.4.2
amps.h
Go to the documentation of this file.
1 /* ////////////////////////////////////////////////////////////////////////
2  *
3  * Copyright (c) 2010-2024 60East Technologies Inc., All Rights Reserved.
4  *
5  * This computer software is owned by 60East Technologies Inc. and is
6  * protected by U.S. copyright laws and other laws and by international
7  * treaties. This computer software is furnished by 60East Technologies
8  * Inc. pursuant to a written license agreement and may be used, copied,
9  * transmitted, and stored only in accordance with the terms of such
10  * license agreement and with the inclusion of the above copyright notice.
11  * This computer software or any other copies thereof may not be provided
12  * or otherwise made available to any other person.
13  *
14  * U.S. Government Restricted Rights. This computer software: (a) was
15  * developed at private expense and is in all respects the proprietary
16  * information of 60East Technologies Inc.; (b) was not developed with
17  * government funds; (c) is a trade secret of 60East Technologies Inc.
18  * for all purposes of the Freedom of Information Act; and (d) is a
19  * commercial item and thus, pursuant to Section 12.212 of the Federal
20  * Acquisition Regulations (FAR) and DFAR Supplement Section 227.7202,
21  * Government's use, duplication or disclosure of the computer software
22  * is subject to the restrictions set forth by 60East Technologies Inc..
23  *
24  * ////////////////////////////////////////////////////////////////////// */
25 
26 #ifndef _AMPS_H_
27 #define _AMPS_H_
28 
29 #ifdef _WIN32
30  #include <WinSock2.h>
31 #else
32  #include <netdb.h>
33  #include <netinet/ip.h>
34  #include <errno.h>
35  #include <pthread.h>
36  #include <unistd.h>
37  #include <time.h>
38 #endif
39 #include <string.h>
40 #include <time.h>
41 #include <stdio.h>
42 #include "amps/amps_generated.h"
43 
44 //Avoid compiler warnings on win
45 #ifdef INVALID_SOCKET
46  #define AMPS_INVALID_SOCKET INVALID_SOCKET
47 #else
48  #define AMPS_INVALID_SOCKET -1
49 #endif
50 
51 #ifdef _WIN32
52  #ifdef AMPS_SHARED
53  #ifdef AMPS_BUILD
54  #define AMPSDLL __declspec(dllexport)
55  #else
56  #define AMPSDLL __declspec(dllimport)
57  #endif
58  #else
59  #define AMPSDLL
60  #endif
61  #define AMPS_USLEEP(x) Sleep((DWORD)(x)/(DWORD)1000);
62  #define AMPS_YIELD() SwitchToThread()
63  #define AMPS_CURRENT_THREAD() GetCurrentThreadId()
64  typedef HANDLE AMPS_THREAD_T;
65  typedef DWORD AMPS_THREAD_ID;
66  typedef SOCKET AMPS_SOCKET;
67  typedef __int32 amps_int32_t;
68  typedef unsigned __int32 amps_uint32_t;
69  typedef __int64 amps_int64_t;
70  typedef unsigned __int64 amps_uint64_t;
71 #else
72  #define AMPSDLL
73  #define AMPS_USLEEP(x) usleep((useconds_t)x)
74  #define AMPS_YIELD() sched_yield()
75  #define AMPS_CURRENT_THREAD() pthread_self()
76  typedef pthread_t AMPS_THREAD_T;
77  typedef pthread_t AMPS_THREAD_ID;
78  typedef int AMPS_SOCKET;
79  typedef int32_t amps_int32_t;
80  typedef uint32_t amps_uint32_t;
81  typedef int64_t amps_int64_t;
82  typedef uint64_t amps_uint64_t;
83 #endif
84 
85 #if defined(_WIN32) || defined(__SSE_4_2__)
86  #define AMPS_SSE_42 1
87 #endif
88 
187 #ifdef __cplusplus
188 extern "C" {
189 #endif
190 
191 typedef char amps_char;
192 
199 typedef void* amps_handle;
200 
204 typedef enum
205 {
262 } amps_result;
263 
264 typedef amps_result(*amps_handler)(amps_handle, void*);
265 typedef void(*amps_predisconnect_handler)(amps_handle, unsigned, void*);
266 
267 
277 AMPSDLL amps_handle amps_client_create(
278  const amps_char* clientName);
279 
290 AMPSDLL amps_result amps_client_set_name(
291  amps_handle handle,
292  const amps_char* clientName);
293 
301 AMPSDLL amps_result amps_client_connect(
302  amps_handle handle,
303  const amps_char* uri);
304 
309 AMPSDLL void amps_client_disconnect(
310  amps_handle handle);
311 
318 AMPSDLL void amps_client_destroy(
319  amps_handle handle);
320 
329 AMPSDLL size_t amps_client_get_error(
330  amps_handle client,
331  amps_char* errorMessageOut,
332  size_t bufferSize);
333 
341 AMPSDLL amps_result amps_client_send(
342  amps_handle client,
343  amps_handle message);
344 
353 AMPSDLL amps_result amps_client_send_with_version(
354  amps_handle client,
355  amps_handle message,
356  unsigned* version_out);
357 
358 
368  amps_handle client,
369  amps_handler messageHandler,
370  void* userData);
371 
381  amps_handle client,
382  amps_predisconnect_handler predisconnectHandler,
383  void* userData);
384 
394  amps_handle client,
395  amps_handler disconnectHandler,
396  void* userData);
397 
404 AMPSDLL amps_handle amps_client_get_transport(
405  amps_handle client);
406 
414 AMPSDLL amps_result
415 amps_client_attempt_reconnect(amps_handle client, unsigned version);
416 
423 AMPSDLL AMPS_SOCKET
424 amps_client_get_socket(amps_handle client);
425 
435 AMPSDLL amps_handle amps_message_create(amps_handle client);
436 
442 AMPSDLL amps_handle amps_message_copy(amps_handle message);
443 
448 AMPSDLL void amps_message_destroy(amps_handle message);
449 
456 AMPSDLL void amps_message_reset(amps_handle message);
457 
472 AMPSDLL void amps_message_get_field_value(
473  amps_handle message,
474  FieldId field,
475  const amps_char** value_ptr,
476  size_t* length_ptr);
477 
485 AMPSDLL void amps_message_set_field_value(
486  amps_handle message,
487  FieldId field,
488  const amps_char* value,
489  size_t length);
490 
499  amps_handle message,
500  FieldId field,
501  const amps_char* value,
502  size_t length);
503 
512  amps_handle message,
513  FieldId field,
514  const amps_char* value);
515 
516 
523 AMPSDLL void amps_message_set_field_guid(
524  amps_handle message,
525  FieldId field);
526 
533 AMPSDLL void amps_message_set_data(
534  amps_handle message,
535  const amps_char* value,
536  size_t length);
537 
544 AMPSDLL void amps_message_assign_data(
545  amps_handle message,
546  const amps_char* value,
547  size_t length);
548 
554 AMPSDLL void amps_message_set_data_nts(
555  amps_handle message,
556  const amps_char* value);
557 
570 AMPSDLL void amps_message_get_data(
571  amps_handle message,
572  amps_char** value_ptr,
573  size_t* length_ptr);
574 
581 AMPSDLL unsigned long amps_message_get_field_long(
582  amps_handle message,
583  FieldId field);
584 
591 AMPSDLL amps_uint64_t amps_message_get_field_uint64(
592  amps_handle message,
593  FieldId field);
594 
604 AMPSDLL amps_result amps_client_set_read_timeout(
605  amps_handle client,
606  int readTimeout);
607 
608 
618 AMPSDLL amps_result amps_client_set_idle_time(
619  amps_handle client,
620  int idleTime);
621 
630 typedef void(*amps_transport_filter_function)(const unsigned char*, size_t, short, void*);
631 
646  amps_handle client,
648  void* userData);
649 
656 typedef amps_result(*amps_thread_created_callback)(AMPS_THREAD_T, void*);
657 
669 AMPSDLL amps_result amps_client_set_thread_created_callback(
670  amps_handle client,
672  void* userData);
673 
680 typedef amps_result(*amps_thread_exit_callback)(AMPS_THREAD_ID, void*);
681 
693 AMPSDLL amps_result amps_client_set_thread_exit_callback(
694  amps_handle client,
695  amps_thread_exit_callback callback,
696  void* userData);
697 
703 AMPSDLL AMPS_SOCKET
704 amps_tcp_get_socket(amps_handle transport);
705 
706 AMPSDLL AMPS_SOCKET
707 amps_tcps_get_socket(amps_handle transport);
708 
714 AMPSDLL void*
715 amps_tcps_get_SSL(amps_handle transport);
716 
717 /*
718  * Returns the current wall-clock time in milliseconds
719  */
720 AMPSDLL amps_uint64_t
721 amps_now(void);
722 
723 
747 AMPSDLL int amps_ssl_init(const char* dllPath_);
748 
756 AMPSDLL int amps_ssl_set_verify(int mode_);
757 
768 AMPSDLL int amps_ssl_load_verify_locations(const char* caFile_, const char* caPath_);
769 
775 AMPSDLL void amps_ssl_free(void);
776 
782 AMPSDLL const char* amps_ssl_get_error(void);
783 
784 AMPSDLL void amps_noOpFn(void*);
785 
786 /*
787  * Internal API for use by the python client.
788  */
789 AMPSDLL void amps_set_waiting_function(void*);
790 AMPSDLL void amps_invoke_waiting_function(void);
791 AMPSDLL void amps_set_remove_route_function(void*);
792 AMPSDLL void amps_invoke_remove_route_function(void*);
793 AMPSDLL void amps_set_copy_route_function(void*);
794 AMPSDLL void* amps_invoke_copy_route_function(void*);
795 
796 #ifdef __cplusplus
797 }
798 #if !defined(_AMPS_BUILD_C_CLIENT) && !defined(_AMPS_SKIP_AMPSPLUSPLUS)
799  #include <amps/ampsplusplus.hpp>
800 #endif
801 #endif
802 
803 #endif
AMPSDLL void amps_ssl_free(void)
Frees OpenSSL context and shared library.
A connection error occurred.
Definition: amps.h:221
AMPSDLL void amps_client_set_disconnect_handler(amps_handle client, amps_handler disconnectHandler, void *userData)
Sets the disconnect handler function to be called when a disconnect occurs.
AMPSDLL amps_handle amps_message_create(amps_handle client)
Functions for creation and manipulation of AMPS messages.
AMPSDLL amps_result amps_client_set_thread_exit_callback(amps_handle client, amps_thread_exit_callback callback, void *userData)
Sets a user-supplied callback function for when a thread created for a connection is exiting...
AMPSDLL int amps_ssl_set_verify(int mode_)
Configures OpenSSL to validate the server&#39;s certificate when connecting.
The specified URI is invalid.
Definition: amps.h:249
AMPSDLL amps_result amps_client_set_name(amps_handle handle, const amps_char *clientName)
Sets the name on an amps client object.
AMPSDLL amps_handle amps_message_copy(amps_handle message)
Creates and returns a handle to a new AMPS message object that is a deep copy of the message passed i...
AMPSDLL amps_result amps_client_connect(amps_handle handle, const amps_char *uri)
Connects to the AMPS server specified in uri.
AMPSDLL void amps_client_disconnect(amps_handle handle)
Disconnects from the AMPS server, if connected.
AMPSDLL AMPS_SOCKET amps_client_get_socket(amps_handle client)
Returns the socket from the underlying transport in client, or NULL if no transport is associated wit...
A Secure Sockets Layer (SSL) error occurred.
Definition: amps.h:261
AMPSDLL amps_result amps_client_set_transport_filter_function(amps_handle client, amps_transport_filter_function filter, void *userData)
Sets a user-supplied callback function for filtering data before it is sent and after it is received...
AMPSDLL amps_uint64_t amps_message_get_field_uint64(amps_handle message, FieldId field)
Gets the unsigned 64-bit int value of a header field in an AMPS message.
AMPSDLL amps_result amps_client_set_idle_time(amps_handle client, int idleTime)
Sets an idle-time (milliseconds).
AMPSDLL unsigned long amps_message_get_field_long(amps_handle message, FieldId field)
Gets the long integer value of a header field in an AMPS message.
AMPSDLL void amps_message_set_field_value(amps_handle message, FieldId field, const amps_char *value, size_t length)
Sets the value of a header field in an AMPS message.
Success.
Definition: amps.h:209
The specified topic was invalid.
Definition: amps.h:225
void * amps_handle
Opaque handle type used to refer to objects in the AMPS api.
Definition: amps.h:199
AMPSDLL void amps_message_assign_data(amps_handle message, const amps_char *value, size_t length)
Assigns the data component of an AMPS message, without copying the value.
amps_result
Return values from amps_xxx functions.
Definition: amps.h:204
AMPSDLL amps_handle amps_client_create(const amps_char *clientName)
Functions for creation of an AMPS client.
void(* amps_transport_filter_function)(const unsigned char *, size_t, short, void *)
Prototype for a user-supplied callback function for filtering data before it is sent and after it is ...
Definition: amps.h:630
AMPSDLL size_t amps_client_get_error(amps_handle client, amps_char *errorMessageOut, size_t bufferSize)
Returns the last error set on this client.
AMPSDLL amps_result amps_client_send_with_version(amps_handle client, amps_handle message, unsigned *version_out)
Sends a message to the AMPS server.
AMPSDLL void amps_client_set_message_handler(amps_handle client, amps_handler messageHandler, void *userData)
Sets the message handler function for this client.
A memory error occurred.
Definition: amps.h:213
AMPSDLL void amps_message_set_data_nts(amps_handle message, const amps_char *value)
Sets the data component of an AMPS message.
AMPSDLL void amps_message_reset(amps_handle message)
Clears all fields and data in a message.
Core type, function, and class declarations for the AMPS C++ client.
The specified filter was invalid.
Definition: amps.h:229
An error with a command occurred.
Definition: amps.h:217
AMPSDLL void amps_message_get_field_value(amps_handle message, FieldId field, const amps_char **value_ptr, size_t *length_ptr)
Retrieves the value of a header field in an AMPS message.
AMPSDLL void * amps_tcps_get_SSL(amps_handle transport)
Retrieves the SSL object from the underlying TCPS transport.
AMPSDLL void amps_message_get_data(amps_handle message, amps_char **value_ptr, size_t *length_ptr)
Gets the data component of an AMPS message.
AMPSDLL AMPS_SOCKET amps_tcp_get_socket(amps_handle transport)
TRANSPORT-SPECIFIC APIS.
AMPSDLL void amps_message_destroy(amps_handle message)
Destroys and frees the memory associated with an AMPS message object.
The server could not be found, or it actively refused our connection.
Definition: amps.h:241
AMPSDLL void amps_message_assign_field_value(amps_handle message, FieldId field, const amps_char *value, size_t length)
Assigns the value of a header field in an AMPS message, without copying the value.
AMPSDLL void amps_message_set_data(amps_handle message, const amps_char *value, size_t length)
Sets the data component of an AMPS message.
AMPSDLL void amps_client_set_predisconnect_handler(amps_handle client, amps_predisconnect_handler predisconnectHandler, void *userData)
Sets the predisconnect handler function to be called when a disconnect occurs.
AMPSDLL amps_handle amps_client_get_transport(amps_handle client)
Returns a handle to the transport set in client, or NULL if no transport is associated with this tran...
AMPSDLL void amps_message_set_field_guid(amps_handle message, FieldId field)
Sets the value of a header field in an AMPS message to a new, globally unique identifier("GUID") ...
The usage of this function is invalid.
Definition: amps.h:257
AMPSDLL void amps_message_set_field_value_nts(amps_handle message, FieldId field, const amps_char *value)
Sets the value of a header field in an AMPS message from a null-terminated string.
AMPSDLL amps_result amps_client_send(amps_handle client, amps_handle message)
Sends a message to the AMPS server.
AMPSDLL amps_result amps_client_set_thread_created_callback(amps_handle client, amps_thread_created_callback callback, void *userData)
Sets a user-supplied callback function to allow thread attributes to set when a new thread is created...
amps_result(* amps_thread_exit_callback)(AMPS_THREAD_ID, void *)
Prototype for a user-supplied callback function when a thread created for a connection is exiting...
Definition: amps.h:680
amps_result(* amps_thread_created_callback)(AMPS_THREAD_T, void *)
Prototype for a user-supplied callback function to allow thread attributes to be set when a new threa...
Definition: amps.h:656
A stream error has occurred.
Definition: amps.h:245
The operation has not succeeded, but ought to be retried.
Definition: amps.h:233
AMPSDLL amps_result amps_client_set_read_timeout(amps_handle client, int readTimeout)
Sets a read timeout (seconds), in which if no message is received, the connection is presumed dead...
AMPSDLL const char * amps_ssl_get_error(void)
Returns the description of the last error from calling amps_ssl_init().
AMPSDLL int amps_ssl_init(const char *dllPath_)
Initializes SSL support in the AMPS Client.
AMPSDLL amps_result amps_client_attempt_reconnect(amps_handle client, unsigned version)
Manually invokes the user-supplied disconnect handler for this client.
AMPSDLL void amps_client_destroy(amps_handle handle)
Disconnects and destroys an AMPS client object.
AMPSDLL int amps_ssl_load_verify_locations(const char *caFile_, const char *caPath_)
Configures OpenSSL to use the specified locations for locating CA certificates.
The client and server are disconnected.
Definition: amps.h:237
The specified transport type is invalid.
Definition: amps.h:253