aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDmitry Yudenich <dmitry.yudenich@orioninc.com>2020-07-10 14:40:15 +0300
committerDmitry Yudenich <dmitry.yudenich@orioninc.com>2020-07-16 16:39:27 +0300
commitaee2ff16cc87a939e68aa2900e23d6705dda5408 (patch)
tree2ba8cfe056758e60f5e003e45b4352b6f759f2cf /include
parentd42a34b42837129dc98cd9ae115711da63eb6d62 (diff)
Add client proxy for cloudproxy servicejellyfish_9.99.4jellyfish/9.99.49.99.4
Library with client proxy which hides communication with cloud proxy service has been added. It allows users to integrate cloudproxy service in their applications faster. Simple test applications have been added to demonstrate how to use libcloudproxy library. Bug-AGL: SPEC-3472 Signed-off-by: Dmitry Yudenich <dmitry.yudenich@orioninc.com> Change-Id: I84ab5e61ce09326e3dc49c927d402e6ec12ea1b0
Diffstat (limited to 'include')
-rw-r--r--include/CMakeLists.txt19
-rw-r--r--include/hmi-debug.h82
-rw-r--r--include/libcloudproxy.h74
3 files changed, 175 insertions, 0 deletions
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
new file mode 100644
index 0000000..45244f5
--- /dev/null
+++ b/include/CMakeLists.txt
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2020 Orion Innovation, formerly MERA
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+if(DEFINED CMAKE_INSTALL_INCLUDEDIR)
+ INSTALL(FILES libcloudproxy.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+endif(DEFINED CMAKE_INSTALL_INCLUDEDIR)
diff --git a/include/hmi-debug.h b/include/hmi-debug.h
new file mode 100644
index 0000000..c8e8638
--- /dev/null
+++ b/include/hmi-debug.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HMI_DEBUG_H__
+#define __HMI_DEBUG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <time.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <sys/types.h> // gettid()
+#include <unistd.h>
+#include <sys/syscall.h>
+
+ enum LOG_LEVEL{
+ LOG_LEVEL_NONE = 0,
+ LOG_LEVEL_ERROR,
+ LOG_LEVEL_WARNING,
+ LOG_LEVEL_NOTICE,
+ LOG_LEVEL_INFO,
+ LOG_LEVEL_DEBUG,
+ LOG_LEVEL_MAX = LOG_LEVEL_DEBUG
+ };
+
+#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
+
+#define HMI_ERROR(prefix, args,...) _HMI_LOG(LOG_LEVEL_ERROR, __FILENAME__, __FUNCTION__, __LINE__, prefix, args, ##__VA_ARGS__)
+#define HMI_WARNING(prefix, args,...) _HMI_LOG(LOG_LEVEL_WARNING, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__)
+#define HMI_NOTICE(prefix, args,...) _HMI_LOG(LOG_LEVEL_NOTICE, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__)
+#define HMI_INFO(prefix, args,...) _HMI_LOG(LOG_LEVEL_INFO, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__)
+#define HMI_DEBUG(prefix, args,...) _HMI_LOG(LOG_LEVEL_DEBUG, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__)
+
+ static char ERROR_FLAG[6][20] = {"NONE", "ERROR", "WARNING", "NOTICE", "INFO", "DEBUG"};
+
+ static void _HMI_LOG(enum LOG_LEVEL level, const char* file, const char* func, const int line, const char* prefix, const char* log, ...)
+ {
+ //SA: WARN: const int log_level = (getenv("USE_HMI_DEBUG") == NULL)?LOG_LEVEL_ERROR:atoi(getenv("USE_HMI_DEBUG"));
+ const int log_level = LOG_LEVEL_MAX;
+ if(log_level < level)
+ {
+ return;
+ }
+
+ char *message;
+ struct timespec tp;
+ unsigned int time;
+
+ clock_gettime(CLOCK_REALTIME, &tp);
+ time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000);
+
+ va_list args;
+ va_start(args, log);
+ if (log == NULL || vasprintf(&message, log, args) < 0)
+ message = NULL;
+ fprintf(stderr, "[%10.3f] [%s %s] [%s, %s(), Line:%d] [thread %llx]>>> %s \n", time / 1000.0, prefix, ERROR_FLAG[level], file, func, line, (unsigned long long)syscall(__NR_gettid), message);
+ va_end(args);
+ free(message);
+ }
+
+#ifdef __cplusplus
+}
+#endif
+#endif //__HMI_DEBUG_H__
diff --git a/include/libcloudproxy.h b/include/libcloudproxy.h
new file mode 100644
index 0000000..b333a14
--- /dev/null
+++ b/include/libcloudproxy.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2020 MERA
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <vector>
+#include <map>
+#include <string>
+#include <functional>
+#include <json-c/json.h>
+#include <systemd/sd-event.h>
+
+extern "C"
+{
+#include <afb/afb-wsj1.h>
+#include <afb/afb-ws-client.h>
+}
+
+class CloudProxyClient
+{
+public:
+ using handler_func = std::function<void(json_object*)>;
+
+ enum EventType {
+ Event_Min,
+ Event_SendMessageConfirmation = 1,
+ Event_ReceivedMessage,
+ Event_Max
+ };
+
+
+ CloudProxyClient();
+ ~CloudProxyClient();
+
+ CloudProxyClient(const CloudProxyClient &) = delete;
+ CloudProxyClient &operator=(const CloudProxyClient &) = delete;
+
+ int init(const int port, const std::string& token);
+
+ int sendMessage(const std::string& data);
+
+ void set_event_handler(enum EventType et, handler_func f);
+
+ void on_event(void *closure, const char *event, struct afb_wsj1_msg *msg);
+
+ int subscribe(const std::string& event_name);
+ int unsubscribe(const std::string& event_name);
+
+private:
+ int call(const std::string& verb, struct json_object* arg);
+
+private:
+ static const std::vector<std::string> m_api_list;
+ static const std::vector<std::string> m_event_list;
+
+ std::map<EventType, handler_func> handlers;
+ struct afb_wsj1_itf m_itf;
+ struct afb_wsj1* m_websock{nullptr};
+ sd_event* m_loop{nullptr};
+ std::string m_uri;
+};