From 3102f5cfc5dd97e3e60bbbfccfcf240059bd05e2 Mon Sep 17 00:00:00 2001 From: Kristine Bujold Date: Tue, 16 Apr 2019 16:26:10 -0400 Subject: [PATCH] Remove wrs-guest-heartbeat SDK Module With the StarlingX move to supporting pure upstream OpenStack, the majority of the SDK Modules are related to functionality no longer supported. The remaining SDK Modules will be moved to StarlingX documentation. Story: 2005275 Task: 30545 Depends-On: https://review.openstack.org/#/c/653521 Change-Id: I842596dab79bff79313671e3e0b7aa7e4a93c493 Signed-off-by: Kristine Bujold --- .zuul.yaml | 1 - centos_guest_image.inc | 4 - centos_guest_image_rt.inc | 4 - centos_pkg_dirs | 1 - devstack/lib/stx-nfv | 54 +- devstack/settings | 5 +- guest-client/LICENSE | 202 --- guest-client/PKG-INFO | 12 - guest-client/centos/build_srpm.data | 3 - guest-client/centos/guest-client.spec | 92 -- guest-client/guest-client-3.0.1/LICENSE | 202 --- guest-client/guest-client-3.0.1/Makefile | 136 -- guest-client/guest-client-3.0.1/README | 72 - guest-client/guest-client-3.0.1/README.build | 296 ---- guest-client/guest-client-3.0.1/README.usage | 385 ----- .../TiS-Guest-Heartbeat-Service.doc | Bin 393728 -> 0 bytes .../TiS-Guest-Heartbeat-Service.pdf | Bin 1105859 -> 0 bytes .../guest-client-3.0.1/guest_client/Makefile | 84 - .../guest_client/scripts/guest-client.init | 183 --- .../guest_client/scripts/guest-client.service | 57 - .../guest_client/scripts/guest-client.systemd | 171 -- .../guest_client/scripts/guest_heartbeat.conf | 116 -- .../scripts/sample_event_handling_script | 165 -- .../scripts/sample_health_check_script | 42 - .../guest_client/src/Makefile | 95 -- .../guest_client/src/guest_channel.c | 351 ----- .../guest_client/src/guest_channel.h | 95 -- .../guest_client/src/guest_child_death.c | 312 ---- .../guest_client/src/guest_child_death.h | 79 - .../guest_client/src/guest_client.c | 67 - .../guest_client/src/guest_config.c | 163 -- .../guest_client/src/guest_config.h | 73 - .../guest_client/src/guest_debug.c | 146 -- .../guest_client/src/guest_debug.h | 102 -- .../guest_client/src/guest_limits.h | 55 - .../guest_client/src/guest_process.c | 375 ----- .../guest_client/src/guest_process.h | 50 - .../guest_client/src/guest_script.c | 410 ----- .../guest_client/src/guest_script.h | 75 - .../guest_client/src/guest_selobj.c | 254 --- .../guest_client/src/guest_selobj.h | 83 - .../guest_client/src/guest_signal.c | 129 -- .../guest_client/src/guest_signal.h | 63 - .../guest_client/src/guest_stream.c | 203 --- .../guest_client/src/guest_stream.h | 104 -- .../guest_client/src/guest_time.c | 82 - .../guest_client/src/guest_time.h | 68 - .../guest_client/src/guest_timer.c | 323 ---- .../guest_client/src/guest_timer.h | 99 -- .../guest_client/src/guest_types.c | 47 - .../guest_client/src/guest_types.h | 54 - .../guest_client/src/guest_unix.c | 331 ---- .../guest_client/src/guest_unix.h | 94 -- .../guest_client/src/guest_utils.c | 137 -- .../guest_client/src/guest_utils.h | 70 - .../guest_client/src/heartbeat/Makefile | 62 - .../src/heartbeat/guest_heartbeat.c | 318 ---- .../src/heartbeat/guest_heartbeat.h | 55 - .../src/heartbeat/guest_heartbeat_config.c | 235 --- .../src/heartbeat/guest_heartbeat_config.h | 78 - .../guest_heartbeat_disabled_state.c | 118 -- .../guest_heartbeat_disabled_state.h | 81 - .../heartbeat/guest_heartbeat_enabled_state.c | 698 -------- .../heartbeat/guest_heartbeat_enabled_state.h | 81 - .../guest_heartbeat_enabling_state.c | 211 --- .../guest_heartbeat_enabling_state.h | 81 - .../heartbeat/guest_heartbeat_event_script.c | 204 --- .../heartbeat/guest_heartbeat_event_script.h | 73 - .../src/heartbeat/guest_heartbeat_fsm.c | 369 ----- .../src/heartbeat/guest_heartbeat_fsm.h | 105 -- .../heartbeat/guest_heartbeat_health_script.c | 124 -- .../heartbeat/guest_heartbeat_health_script.h | 71 - .../heartbeat/guest_heartbeat_initial_state.c | 112 -- .../heartbeat/guest_heartbeat_initial_state.h | 81 - .../src/heartbeat/guest_heartbeat_mgmt_api.c | 1400 ----------------- .../src/heartbeat/guest_heartbeat_mgmt_api.h | 83 - .../src/heartbeat/guest_heartbeat_msg.c | 1212 -------------- .../src/heartbeat/guest_heartbeat_msg.h | 150 -- .../src/heartbeat/guest_heartbeat_types.c | 132 -- .../src/heartbeat/guest_heartbeat_types.h | 114 -- .../guest_client/src/test/Makefile | 77 - .../guest_client/src/test/guest_test.c | 316 ---- .../guest_client/src/test/guest_test.h | 54 - .../guest_client/src/test/guest_test_cli.c | 189 --- .../guest_client/src/test/guest_test_cli.h | 60 - .../guest_client/src/test/guest_test_client.c | 68 - .../src/test/guest_test_process.c | 264 ---- .../src/test/guest_test_process.h | 50 - .../guest_client_api/Makefile | 123 -- .../guest_client_api/guest_api_debug.c | 138 -- .../guest_client_api/guest_api_debug.h | 101 -- .../guest_client_api/guest_api_stream.c | 185 --- .../guest_client_api/guest_api_stream.h | 92 -- .../guest_client_api/guest_api_types.c | 46 - .../guest_client_api/guest_api_types.h | 53 - .../guest_client_api/guest_api_unix.c | 204 --- .../guest_client_api/guest_api_unix.h | 73 - .../guest_client_api/guest_heartbeat_api.c | 748 --------- .../guest_client_api/guest_heartbeat_api.h | 330 ---- .../guest_client_api/sample_guest_app.c | 360 ----- .../include/guest_heartbeat_api_msg_defs.h | 172 -- .../packaging/guest-client.pkg | 108 -- mtce-guest/centos/build_srpm.data | 2 +- mtce-guest/centos/mtce-guest.spec | 1 - mtce-guest/src/guestBase.h | 4 +- .../src}/guest_heartbeat_msg_defs.h | 30 +- 106 files changed, 12 insertions(+), 16960 deletions(-) delete mode 100644 guest-client/LICENSE delete mode 100644 guest-client/PKG-INFO delete mode 100644 guest-client/centos/build_srpm.data delete mode 100644 guest-client/centos/guest-client.spec delete mode 100644 guest-client/guest-client-3.0.1/LICENSE delete mode 100755 guest-client/guest-client-3.0.1/Makefile delete mode 100755 guest-client/guest-client-3.0.1/README delete mode 100755 guest-client/guest-client-3.0.1/README.build delete mode 100755 guest-client/guest-client-3.0.1/README.usage delete mode 100644 guest-client/guest-client-3.0.1/TiS-Guest-Heartbeat-Service.doc delete mode 100644 guest-client/guest-client-3.0.1/TiS-Guest-Heartbeat-Service.pdf delete mode 100755 guest-client/guest-client-3.0.1/guest_client/Makefile delete mode 100755 guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.init delete mode 100755 guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.service delete mode 100755 guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.systemd delete mode 100755 guest-client/guest-client-3.0.1/guest_client/scripts/guest_heartbeat.conf delete mode 100755 guest-client/guest-client-3.0.1/guest_client/scripts/sample_event_handling_script delete mode 100755 guest-client/guest-client-3.0.1/guest_client/scripts/sample_health_check_script delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/Makefile delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_channel.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_channel.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_client.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_config.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_config.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_debug.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_debug.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_limits.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_process.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_process.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_script.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_script.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_signal.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_signal.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_stream.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_stream.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_time.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_time.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_timer.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_timer.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_types.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_types.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_unix.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_unix.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_utils.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/guest_utils.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/Makefile delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/Makefile delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_client.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/Makefile delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.c delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.h delete mode 100755 guest-client/guest-client-3.0.1/guest_client_api/sample_guest_app.c delete mode 100755 guest-client/guest-client-3.0.1/include/guest_heartbeat_api_msg_defs.h delete mode 100755 guest-client/guest-client-3.0.1/packaging/guest-client.pkg rename {guest-client/guest-client-3.0.1/guest_client/src/heartbeat => mtce-guest/src}/guest_heartbeat_msg_defs.h (79%) mode change 100755 => 100644 diff --git a/.zuul.yaml b/.zuul.yaml index 54d3abe3..d1c54e1e 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -110,7 +110,6 @@ fm-api: true fm-rest-api: true fm-mgr: true - guest-client: true nfv-common: true nfv-vim: true nfv-client: true diff --git a/centos_guest_image.inc b/centos_guest_image.inc index 035f2897..99df1589 100644 --- a/centos_guest_image.inc +++ b/centos_guest_image.inc @@ -5,7 +5,3 @@ # # guest extensions # - -# guest-client -guest-client - diff --git a/centos_guest_image_rt.inc b/centos_guest_image_rt.inc index 93efb565..7d24528b 100644 --- a/centos_guest_image_rt.inc +++ b/centos_guest_image_rt.inc @@ -5,7 +5,3 @@ # # guest extensions # - -# guest-client -guest-client - diff --git a/centos_pkg_dirs b/centos_pkg_dirs index 5673ceb5..9a2062c0 100644 --- a/centos_pkg_dirs +++ b/centos_pkg_dirs @@ -1,4 +1,3 @@ nova-api-proxy -guest-client nfv mtce-guest diff --git a/devstack/lib/stx-nfv b/devstack/lib/stx-nfv index 07d0ff74..9fedbce0 100644 --- a/devstack/lib/stx-nfv +++ b/devstack/lib/stx-nfv @@ -4,6 +4,8 @@ # # Copyright (C) 2019 Intel Corporation # +# Copyright (c) 2019 Wind River Systems, Inc. +# # lib/stx-nfv @@ -35,11 +37,6 @@ MTCE_GUEST_DIR=$STXNFV_DIR/mtce-guest MTCE_GUEST_CONF=$STXNFV_SYSCONFDIR/mtc MTCE_GUEST_OCF_DIR=$STXNFV_OCF_ROOT/resource.d/platform -# guest-client -GUEST_CLIENT_VERSION="3.0.1" - -STX_SDK_DEPLOY_DIR=${STX_SDK_DEPLOY_DIR:-/opt/deploy/cgcs_sdk} - # STX_INST_DIR should be a non-root-writable place to install build artifacts STX_INST_DIR=${STX_INST_DIR:-/usr/local} STX_BIN_DIR=$STX_INST_DIR/bin @@ -61,16 +58,6 @@ function cleanup_guest_agent { sudo rm -rf $STXNFV_SYSCONFDIR/logrotate.d/guestAgent.logrotate } -function cleanup_guest_client { - $STX_SUDO rm -rf $STX_INST_DIR/include/guest-client - sudo rm -rf $STX_SDK_DEPLOY_DIR - sudo rm -rf $STXNFV_SYSCONFDIR/systemd/system/guest-client.service - sudo rm -rf $STXNFV_SYSCONFDIR/guest-client - $STX_SUDO rm -rf $STX_INST_DIR/bin/guest-client - $STX_SUDO rm -rf $STX_INST_DIR/lib/libguest_common_api.so.$GUEST_CLIENT_VERSION - $STX_SUDO rm -rf $STX_INST_DIR/lib/libguest_heartbeat_api.so.$GUEST_CLIENT_VERSION -} - function cleanup_guest_server { sudo rm -rf $MTCE_GUEST_CONF/guestServer.ini $STX_SUDO rm -rf $STX_INST_DIR/bin/guestServer @@ -105,10 +92,6 @@ function cleanup_nfv { cleanup_nova_api_proxy fi - if is_service_enabled guest-client; then - cleanup_guest_client - fi - if is_service_enabled guest-agent || is_service_enabled guest-server; then pushd $MTCE_GUEST_DIR/src make clean @@ -291,36 +274,6 @@ function install_guest_agent { popd } -function install_guest_client { - pushd $STXNFV_DIR/guest-client/guest-client-$GUEST_CLIENT_VERSION - - make clean - make build sysconfdir=$STXNFV_SYSCONFDIR - make sample - make tar ARCHIVE_NAME=wrs-guest-heartbeat-$GUEST_CLIENT_VERSION - find build - - # Sudo Install for guest-client package - $STX_SUDO install -m 755 -d $STX_INST_DIR/include/guest-client - $STX_SUDO install -m 644 -p -D guest_client/src/heartbeat/guest_heartbeat_msg_defs.h $STX_INST_DIR/include/guest-client/guest_heartbeat_msg_defs.h - sudo install -d $STX_SDK_DEPLOY_DIR - sudo install -m 640 build/wrs-guest-heartbeat-$GUEST_CLIENT_VERSION.tgz $STX_SDK_DEPLOY_DIR - - # Systemd services - sudo install -m 644 -p -D guest_client/scripts/guest-client.service $STXNFV_SYSCONFDIR/systemd/system/guest-client.service - sudo install -m 744 -p -D guest_client/scripts/guest-client.systemd $STXNFV_SYSCONFDIR/guest-client/guest-client.systemd - - sudo install -m 750 -d $STXNFV_SYSCONFDIR/guest-client/heartbeat - sudo install -m 755 -p -D guest_client/scripts/guest_heartbeat.conf $STXNFV_SYSCONFDIR/guest-client/heartbeat/guest_heartbeat.conf - sudo install -m 755 -p -D guest_client/scripts/sample_event_handling_script $STXNFV_SYSCONFDIR/guest-client/heartbeat/sample_event_handling_script - sudo install -m 755 -p -D guest_client/scripts/sample_health_check_script $STXNFV_SYSCONFDIR/guest-client/heartbeat/sample_health_check_script - $STX_SUDO install -m 640 -p -D build/guest-client $STX_INST_DIR/bin/guest-client - $STX_SUDO install -m 640 -p -D build/libguest_common_api.so.$GUEST_CLIENT_VERSION $STX_INST_DIR/lib/libguest_common_api.so.$GUEST_CLIENT_VERSION - $STX_SUDO install -m 640 -p -D build/libguest_heartbeat_api.so.$GUEST_CLIENT_VERSION $STX_INST_DIR/lib/libguest_heartbeat_api.so.$GUEST_CLIENT_VERSION - - popd -} - function install_guest_server { pushd $MTCE_GUEST_DIR/src @@ -354,9 +307,6 @@ function install_nfv { if is_service_enabled nova-api-proxy; then install_nova_api_proxy fi - if is_service_enabled guest-client; then - install_guest_client - fi if is_service_enabled guest-agent || is_service_enabled guest-server; then install_mtce_guest_common diff --git a/devstack/settings b/devstack/settings index 2dce8596..b99733b0 100644 --- a/devstack/settings +++ b/devstack/settings @@ -4,6 +4,8 @@ # # Copyright (C) 2019 Intel Corporation # +# Copyright (c) 2019 Wind River Systems, Inc. +# # Devstack settings @@ -38,10 +40,9 @@ fi # prereqs are not configured? if is_service_enabled guest-agent || is_service_enabled guest-server; then # These guest- services require additional prerequisites - # guest-client: to install guest_heartbeat_api_msg_defs.h # stx-metal: to install mtce_common header files and libraries # fm-common: to install fmcommon library - local req_services="guest-client stx-metal fm-common" + local req_services="stx-metal fm-common" for srv in $req_services;do if ! is_service_enabled "$srv"; then die $LINENO "$srv should be enabled for guestAgent/guestServer" diff --git a/guest-client/LICENSE b/guest-client/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/guest-client/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/guest-client/PKG-INFO b/guest-client/PKG-INFO deleted file mode 100644 index e738a302..00000000 --- a/guest-client/PKG-INFO +++ /dev/null @@ -1,12 +0,0 @@ -Metadata-Version: 1.1 -Name: guest-client -Version: 3.0.1 -Summary: Titanium Cloud Platform Guest-Client Heartbeat Package -Home-page: -Author: Windriver -Author-email: info@windriver.com -License: Apache-2.0 - -Description: Guest-Client with heartbeat functionality. - -Platform: UNKNOWN diff --git a/guest-client/centos/build_srpm.data b/guest-client/centos/build_srpm.data deleted file mode 100644 index 6b9c084e..00000000 --- a/guest-client/centos/build_srpm.data +++ /dev/null @@ -1,3 +0,0 @@ -SRC_DIR="$PKG_BASE/guest-client-3.0.1" -COPY_LIST="$PKG_BASE/LICENSE" -TIS_PATCH_VER=6 diff --git a/guest-client/centos/guest-client.spec b/guest-client/centos/guest-client.spec deleted file mode 100644 index 300deb52..00000000 --- a/guest-client/centos/guest-client.spec +++ /dev/null @@ -1,92 +0,0 @@ -Summary: Guest-Client -Name: guest-client -Version: 3.0.1 -Release: %{tis_patch_ver}%{?_tis_dist} -License: Apache-2.0 -Group: base -Packager: Wind River -URL: unknown - -Source0: %{name}-%{version}.tar.gz - -%define cgcs_sdk_deploy_dir /opt/deploy/cgcs_sdk - -%bcond_without systemd - -%if %{with systemd} -Requires(post): systemd -Requires(preun): systemd -Requires(postun): systemd -BuildRequires: systemd -%endif - -%package -n %{name}-devel -Summary: Guest-Client - Development files -Group: devel -Provides: guest-client-dev(x86_64) = 3.0.1-r1.0 - -%package -n %{name}-cgts-sdk -Summary: Guest-Client - SDK files -Group: devel -BuildRequires: json-c-devel - -%description -Guest-Client with heartbeat functionality. - -%description -n %{name}-devel -Guest-Client with heartbeat functionality. This package contains symbolic -links, header files, and related items necessary for software development. - -%description -n %{name}-cgts-sdk -Guest-Client SDK files - -%prep -%setup -# Build for guest-client package -make build sysconfdir=%{_sysconfdir} -make sample -make tar ARCHIVE_NAME=wrs-guest-heartbeat-%{version} - -# Install for guest-client package -%install -make install \ - prefix=%{buildroot}/usr \ - includedir=%{buildroot}%{_includedir} \ - SDK_DEPLOY_DIR=%{buildroot}%{cgcs_sdk_deploy_dir} \ - unitdir=%{buildroot}%{_unitdir} \ - sysconfdir=%{buildroot}%{_sysconfdir} - -%files -%defattr(755,root,root,-) -%{_sysconfdir}/guest-client/heartbeat/guest_heartbeat.conf -%{_sysconfdir}/guest-client/heartbeat/sample_event_handling_script -%{_sysconfdir}/guest-client/heartbeat/sample_health_check_script -%defattr(644,root,root,-) -/usr/local/lib/libguest_common_api.so.%{version} -/usr/local/lib/libguest_heartbeat_api.so.%{version} -%attr(744,-,-) /usr/local/bin/guest-client -%if %{with systemd} -%{_unitdir}/guest-client.service -%attr(744,-,-) %{_sysconfdir}/guest-client/guest-client.systemd -%endif - -%preun -%if %{with systemd} -/usr/bin/systemctl stop guest-client >/dev/null 2>&1 -%systemd_preun guest-client.service -systemctl reload -%endif - -%post -%if %{with systemd} -%systemd_post guest-client.service -systemctl reload -/usr/bin/systemctl enable guest-client >/dev/null 2>&1 -%endif - -%files -n guest-client-devel -%defattr(644,root,root,-) -/usr/include/guest-client/guest_heartbeat_msg_defs.h - -%files -n %{name}-cgts-sdk -%{cgcs_sdk_deploy_dir}/wrs-guest-heartbeat-%{version}.tgz diff --git a/guest-client/guest-client-3.0.1/LICENSE b/guest-client/guest-client-3.0.1/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/guest-client/guest-client-3.0.1/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/guest-client/guest-client-3.0.1/Makefile b/guest-client/guest-client-3.0.1/Makefile deleted file mode 100755 index 403d1c2f..00000000 --- a/guest-client/guest-client-3.0.1/Makefile +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -SHELL = /bin/sh - -VERSION := 3.0.1 - -## Configuration Directory Variables -prefix := /usr -exec_prefix := $(prefix) -sysconfdir := /etc -includedir := $(prefix)/include -libdir := $(exec_prefix)/lib -bindir := $(exec_prefix)/bin -unitdir := /usr/lib/systemd/system - -MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) -CURRENT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) -PARENT_DIR := $(patsubst %/,%,$(dir $(CURRENT_DIR))) -BUILD_DIR := $(CURRENT_DIR)/build -PACKAGE_DIR := $(BUILD_DIR)/package -PACKAGE_ROOT_DIR := $(PACKAGE_DIR)/rootdir -SDK_DEPLOY_DIR := /opt/deploy/cgcs_sdk - -ARCHIVE_NAME := wrs-guest-client-3.0.1 -ARCHIVE_PKG_NAME := wrs-guest-client-3.0.1_pkg - -INIT_TYPE := sysv - -.PHONY: all build sample clean distclean tar package install uninstall - -all: build - -build: - mkdir -p --mode 755 $(BUILD_DIR) - @(cd guest_client_api; make --no-print-directory build \ - sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - @(cd guest_client; make --no-print-directory build \ - sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - -tar: - @(mkdir -p --mode 755 $(BUILD_DIR)) - @(ln -sf $(CURRENT_DIR) $(BUILD_DIR)/$(ARCHIVE_NAME)) - @(cd $(BUILD_DIR); tar -pczf $(ARCHIVE_NAME).tgz \ - $(ARCHIVE_NAME)/Makefile \ - $(ARCHIVE_NAME)/LICENSE \ - $(ARCHIVE_NAME)/README \ - $(ARCHIVE_NAME)/README.build \ - $(ARCHIVE_NAME)/README.usage \ - $(ARCHIVE_NAME)/TiS-Guest-Heartbeat-Service.pdf \ - $(ARCHIVE_NAME)/packaging \ - $(ARCHIVE_NAME)/include \ - $(ARCHIVE_NAME)/guest_client \ - $(ARCHIVE_NAME)/guest_client_api \ - --exclude $(ARCHIVE_NAME)/guest_client/build \ - --exclude $(ARCHIVE_NAME)/guest_client/src/test \ - --exclude $(ARCHIVE_NAME)/guest_client_api/build \ - --directory $(BUILD_DIR)) - -sample: - mkdir -p --mode 755 $(BUILD_DIR) - @(cd guest_client_api; make --no-print-directory sample \ - sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - @(cd guest_client; make --no-print-directory sample \ - sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - -clean: - @-(cd guest_client_api; make --no-print-directory clean BUILD_DIR=$(BUILD_DIR)) - @-(cd guest_client; make --no-print-directory clean BUILD_DIR=$(BUILD_DIR)) - -distclean: clean - -package: - @(mkdir -p --mode 755 $(PACKAGE_DIR)) - @(mkdir -p --mode 755 $(PACKAGE_ROOT_DIR)) - @(ln -sf $(PACKAGE_DIR) $(BUILD_DIR)/$(ARCHIVE_PKG_NAME)) - @(echo "Packaging guest-client.pkg in $(PACKAGE_DIR)") - @(cp $(CURRENT_DIR)/packaging/guest-client.pkg $(PACKAGE_DIR)/guest-client.pkg) - @(chmod 755 $(PACKAGE_DIR)/guest-client.pkg) - @-(cd guest_client_api; make --no-print-directory package BUILD_DIR=$(BUILD_DIR) \ - PACKAGE_DIR=$(PACKAGE_DIR) prefix=$(prefix) exec_prefix=$(exec_prefix) \ - sysconfdir=$(sysconfdir) includedir=$(includedir) libdir=$(libdir) \ - bindir=$(bindir)) - @-(cd guest_client; make --no-print-directory package BUILD_DIR=$(BUILD_DIR) \ - PACKAGE_DIR=$(PACKAGE_DIR) prefix=$(prefix) exec_prefix=$(exec_prefix) \ - sysconfdir=$(sysconfdir) includedir=$(includedir) libdir=$(libdir) \ - bindir=$(bindir)) - @(cd $(BUILD_DIR); tar -pczf $(ARCHIVE_PKG_NAME).tgz \ - $(ARCHIVE_PKG_NAME)/* --directory $(PACKAGE_DIR)) - -install: - install -m 750 -d $(prefix) - install -m 750 -d $(includedir) - install -m 750 -d $(includedir)/guest-client - install -m 640 -p -D guest_client/src/heartbeat/guest_heartbeat_msg_defs.h $(includedir)/guest-client/guest_heartbeat_msg_defs.h - install -m 755 -d $(SDK_DEPLOY_DIR) - install -m 640 build/wrs-guest-heartbeat-$(VERSION).tgz $(SDK_DEPLOY_DIR) - install -m 644 -p -D guest_client/scripts/guest-client.service $(unitdir)/guest-client.service - install -m 744 -p -D guest_client/scripts/guest-client.systemd $(sysconfdir)/guest-client/guest-client.systemd - install -m 750 -d $(sysconfdir)/guest-client/heartbeat - install -m 755 -p -D guest_client/scripts/guest_heartbeat.conf $(sysconfdir)/guest-client/heartbeat/guest_heartbeat.conf - install -m 755 -p -D guest_client/scripts/sample_event_handling_script $(sysconfdir)/guest-client/heartbeat/sample_event_handling_script - install -m 755 -p -D guest_client/scripts/sample_health_check_script $(sysconfdir)/guest-client/heartbeat/sample_health_check_script - install -m 640 -p -D build/guest-client $(prefix)/local/bin/guest-client - install -m 640 -p -D build/libguest_common_api.so.$(VERSION) $(prefix)/local/lib/libguest_common_api.so.$(VERSION) - install -m 640 -p -D build/libguest_heartbeat_api.so.$(VERSION) $(prefix)/local/lib/libguest_heartbeat_api.so.$(VERSION) - -uninstall: package - @(echo "Uninstalling ...") - @(cd $(PACKAGE_DIR); ./guest-client.pkg uninstall $(INIT_TYPE) $(DESTDIR)) diff --git a/guest-client/guest-client-3.0.1/README b/guest-client/guest-client-3.0.1/README deleted file mode 100755 index 178d7f58..00000000 --- a/guest-client/guest-client-3.0.1/README +++ /dev/null @@ -1,72 +0,0 @@ -Copyright(c) 2013-2017, Wind River Systems, Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of Wind River Systems nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------ - -TITANIUM CLOUD - GUEST HEARTBEAT SDK -=========================================== - -DESCRIPTION -=========== - Titanium Cloud Guest-Client provides a heartbeat service to monitor the - health of guest application(s) within a VM running under WindRiver's - Titanium Cloud. Loss of heartbeat will result in a corrective action - being taken against the VM. The heartbeat interval and corrective action - is specified by the VM. - - Titanium Cloud Guest-Client also provides guest application(s) within - a VM running under WindRiver's Titanium Cloud, the ability to receive - notification of and vote to accept or reject actions about to be performed - against the VM. On notifications, the guest application within the VM can - take this opportunity to cleanly shut down or transfer its service to a - peer VM. - - +-------- Virtual Machine ------------------------+ - | | - | VM-Health-Check-Script | - | / | - | / Guest-Application-1 | - Titanium Cloud <----> TiS-Guest-Client <-----> ... | - | \ Guest-Application-8 | - | \ | - | VM-Event-Script | - | | - +-------------------------------------------------+ - - See also: - - README.build - building and installing. - - README.usage - configuring and using the heartbeat, notification - and voting functionality. - - -DELIVERY -======== - Titanium Cloud Guest-Client is delivered as source in a compressed - tarball, wrs-guest-client-v3.0.0.tgz, such that it can be compiled for - the applicable VM Linux distribution. diff --git a/guest-client/guest-client-3.0.1/README.build b/guest-client/guest-client-3.0.1/README.build deleted file mode 100755 index f08a2397..00000000 --- a/guest-client/guest-client-3.0.1/README.build +++ /dev/null @@ -1,296 +0,0 @@ -Copyright(c) 2013-2017, Wind River Systems, Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of Wind River Systems nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------ - -This file contains instructions for building and installing the Titanium Cloud -Guest-Client. - - -REQUIREMENTS -============ - The Guest-Client uses the SIGIO functionality of the virtio-serial device - to track host connection up, down and port unplug events. This functionality - requires a kernel version equal to or greater than 2.6.37. - - Compilation: - Linux OS ## Same architecture as the VM. - - gnu make - gcc compiler - - development libraries and headers for: - libc ## C library - rt ## Real-Time library - json-c ## JSON-C library - - VM Runtime: - Linux OS - - runtime libraries: - libc ## C library - rt ## Real-Time library - json-c ## JSON-C library - - -COMPILE -======= - Extract the tarball contents ... - - tar -xvf wrs-guest-heartbeat-v3.0.0.tgz - - To compile, simply run ... - - cd wrs-guest-heartbeat-3.0.0 - make - - This will create a build output directory called "build" in the - wrs-guest-heartbeat-3.0.0 directory. The build output directory - contains the following relevant files: - - libguest_common_api.so.3.0.0 - libguest_heartbeat_api.so.3.0.0 - guest-client - - The libguest_common_api library contains all the common code for - the Guest-Client API libraries. - - The libguest_heartbeat_api library contains the heartbeat, voting, - and notification functionality to interact with the Guest-Client. - A guest application wanting to use this functionality needs to link - in the libguest_common_api and libguest_heartbeat_api libraries. - - The guest-client executable is the Guest-Client daemon that heartbeats - guest applications, and orchestrates votes on and notifications of - pending actions against the VM. The Guest-Client reports the health, - notification and voting results of guest application(s) to the - Titanium Cloud. - - The following variables are available to change the build output - directory and where the system configuration files will be located: - - BUILD_DIR - used to change the build output directory, defaults - to the wrs-guest-heartbeat-3.0.0/build directory. - - prefix - used to construct other variables below, defaults to - the /usr/local directory. - - sysconfdir - directory for configuration files, set to - $(prefix)/etc - - Note: all directory variables must specify an absolute path. - - Usage: make = - - To compile the sample-guest-app, simply run ... - - cd wrs-guest-heartbeat-3.0.0 - make sample - - The sample-guest-app executable is for demonstration purposes only. - It demonstrates how a guest application can use the guest heartbeat - library, libguest_heartbeat_api, to interact with the Guest-Client. - - To compile with a different compiler, simply run ... - - cd wrs-guest-heartbeat-3.0.0 - make CC=/x86_64/buildroot/host/usr/bin/x86_64-buildroot-linux-uclibc-cc - - -PACKAGE -======= - To build a tar package for installation, simply run ... - - cd wrs-guest-heartbeat-3.0.0 - make package - - This will create a tar file called wrs-guest-heartbeat-3.0.0_pkg.tgz - in the wrs-guest-heartbeat-3.0.0 build directory. - - If you changed the build output directory during compile, the BUILD_DIR - variable will have to be specified on the make package. Also if you - specified a different system configuration directory, the sysconfdir - variable, during compile, it will also have to be specified on the - make package. - - The following package configuration variables are available to customize - the package for installation: - - prefix - used to construct other variables below, defaults to - the /usr/local directory. - - exec_prefix - used to construct other executable variables, set to - the 'prefix' variable. - - sysconfdir - directory for configuration files, set to - $(prefix)/etc - - includedir - directory for installing header files, set to - $(prefix)/include - - libdir - directory for installing libraries, set to - $(exec_prefix)/lib - - bindir - directory for installing executable programs, set to - $(exec_prefix)/bin - - Note: all directory variables must specify an absolute path. - - Usage: make package = ... - - -INSTALL -======= - To install from source directories, simply run ... - - cd wrs-guest-heartbeat-3.0.0 - make install - - This will install the default configuration file, include files, - compiled libraries and executable into the following directories: - - guest_heartbeat.conf --> /etc/guest-client/heartbeat - guest_api_types.h --> /usr/include/ - guest_heartbeat_api.h --> /usr/include - libguest_common_api.so.3.0.0 --> /usr/local/lib - libguest_heartbeat_api.so.3.0.0 --> /usr/local/lib - guest-client --> /usr/local/bin - - If you changed the build output directory during compile, the BUILD_DIR - variable will have to be specified on the make install. Also if you - specified a different system configuration directory, the sysconfdir - variable, during compile, it will also have to be specified on the - make install. - - The following install configuration variables are available to customize - installation: - - INIT_TYPE - the type of initialization the OS is using, one of - ( systemd or sysv ). Default to sysv. - - DESTDIR - prepended to each install target file, used to provide - an alternate environment to install in (i.e. support - for staged installs). - - prefix - used to construct other variables below, defaults to - the /usr/local directory. - - exec_prefix - used to construct other executable variables, set to - the 'prefix' variable. - - sysconfdir - directory for configuration files, set to - $(prefix)/etc - - includedir - directory for installing header files, set to - $(prefix)/include - - libdir - directory for installing libraries, set to - $(exec_prefix)/lib - - bindir - directory for installing executable programs, set to - $(exec_prefix)/bin - - unitdir - directory for installing systemd unit files, set by - default to /usr/lib/systemd/system - - SDK_DEPLOY_DIR - directory to store the cgcs sdk file. - - Note: all directory variables must specify an absolute path. - - Usage: make = ... - - - - To install from a tar package file, simply run ... - - tar -xvf wrs-guest-heartbeat-v3.0.0_pkg.tgz - - cd wrs-guest-heartbeat-v3.0.0_pkg - guest-client.pkg install - - This will install the default configuration file, include files, - compiled libraries and executable into the following directories: - - guest_heartbeat.conf --> /usr/local/etc/guest-client/heartbeat - guest_api_types.h --> /usr/local/include - guest_heartbeat_api.h --> /usr/local/include - libguest_common_api.so.3.0.0 --> /usr/local/lib - libguest_heartbeat_api.so.3.0.0 --> /usr/local/lib - guest-client --> /usr/local/bin - - To uninstall: guest-client.pkg uninstall - - The following install configuration variables can be provided to - customize installation: - - INIT_TYPE - the type of initialization the OS is using, one of - ( systemd, sysv ). Optional parameter, defaults to - sysv. - - DESTDIR - prepended to each install target file, used to provide - an alternate environment to install in (i.e. support - for staged installs). Optional parameter. - - Note: all directory variables must specify an absolute path. - - guest-client.pkg [DESTDIR] - - -POST-INSTALL -============ - Running in the VM: - - Test if your platform is using systemd. First look for the systemd - process and then verify that the systemctl tool is available - - ps -ef | grep systemd - systemctl --version - - In this case use the systemd instructions, otherwise the sysv - instructions. - - systemd: - As the root user, - systemctl daemon-reload - systemctl start guest-client.service - systemctl enable guest-client.service - - sysv: - As the root user, - chkconfig --add guest-client - /etc/init.d/guest-client start - - Building into the VM Image: - - systemd: - No post install steps required. - - sysv: - ln -s /etc/init.d/guest-client /etc/rc#.d/K##guest-client - ln -s /etc/init.d/guest-client /etc/rc#.d/S##guest-client - - ... and build the VM image. diff --git a/guest-client/guest-client-3.0.1/README.usage b/guest-client/guest-client-3.0.1/README.usage deleted file mode 100755 index 184d5429..00000000 --- a/guest-client/guest-client-3.0.1/README.usage +++ /dev/null @@ -1,385 +0,0 @@ -Copyright(c) 2013-2017, Wind River Systems, Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of Wind River Systems nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------ - -This file contains instructions for using the Titanium Cloud Guest-Client. - - -Titanium Cloud Setup -===================== - The following steps are required to setup the Titanium Cloud to heartbeat - a VM. - - 1. Create and modify a Flavor for your VM. - - A flavor extraspec, 'Guest Heartbeat', is used to indicate - that VMs of this flavor support Titanium Cloud Guest Heartbeat. - The default value is 'False'. - - If support is indicated, then as soon as the VM's Titanium Cloud - Guest-Client daemon registers with the Titanium Cloud Compute - Services on the worker node host, heartbeating will be enabled. - - a) Create a new flavor: - - via dashboard ... - - Select 'Admin->Flavors' to bring up the list of flavors - - Select '+ Create Flavor' in the upper right. - - Fill in the fields as desired - - Select 'Create Flavor' - - via command line ... - - nova flavor-create ... - - b) Modify the newly created flavor or an existing flavor: - - via dashboard ... - - Select 'Admin->Flavors' to bring up the list of flavors - - Choose a flavor to modify. - - Select the to go to the Flavor Detail page - - Select the Extra Specs TAB - - Select '+ Create' - - Select 'Guest Heartbeat' from pull-down Extra Spec menu - - Check the 'Guest Heartbeat' checkbox - - Select 'Create' - - via command line ... - - nova flavor-key set sw:wrs:guest:heartbeat=True - - Note: already running instances that were launched with this - flavor are NOT affected. - - 2) Launch a new instance of your VM. - - 3) Verify your VM is running with Guest Heartbeat enabled. - - Log into the VM. - - Guest-Client logs are written to syslog's 'daemon' facility, which - are typically logged by the syslog service to /var/log/daemon.log. - Please refer to syslog for details on log settings in order to - determine location of logged Guest-Client messages. - - Guest-Client logs are easy to identify. The logs always contain the - string 'Guest-Client'. A recursive grep of /var/log is one way to - determine where your syslog is sending the Guest-Client logs. - - LOG=`grep -r -l 'Guest-Client' /var/log` - echo $LOG - - /var/log/daemon.log - - A successful connection can be verified by looking for the - following log. - - grep "Guest-Client" $USER_LOG | grep "heartbeat state change" - - Guest-Client heartbeat state change from enabling to enabled - - -VM Setup -======== - Configuring Guest-Client Initialization/Start Scripts - ----------------------------------------------------- - The Titanium Cloud communicates with the Guest-Client through a character - device. The packaged initialization/startup scripts need to be updated to - specify the character device exposed by QEMU to the VM. - - +-- Virtual Machine ---+ - | | - | | - Titanium Cloud <-------------------> QEMU <------------> Guest-Client | - unix-stream-socket char-device | - | | - +----------------------+ - - The variable that needs updating in the initialization/start scripts is - called GUEST_CLIENT_DEVICE. - - Also the location of the Guest-Client binary needs to be updated in the - initialization/start scripts. The variable that needs updating is called - GUEST_CLIENT. - - - Configuring Guest Heartbeat & Application Health Check - ------------------------------------------------------ - The Guest-Client within your VM will register with the Titanium Cloud - Compute Services on the worker node host. Part of that registration - process is the specification of a heartbeat interval and a corrective - action for a failed/unhealthy VM. The values of heartbeat interval and - corrective action come from the guest_heartbeat.conf file and is located - in /etc/guest-client/heartbeat directory by default. - - Guest heartbeat works on a challenge response model. The Titanium - Server Compute Services on the worker node host will challenge the - Guest-Client daemon with a message each interval. The Guest-Client - must respond prior to the next interval with a message indicating good - health. If the Titanium Cloud Compute Services does not receive a valid - response, or if the response specifies that the VM is in ill health, then - corrective action is taken. - - The mechanism can be extended by allowing additional VM resident application - specific scripts and processes, to register for heartbeating. Each script - or process can specify its own heartbeat interval, and its own corrective - action to be taken against the VM as a whole. On ill health the Guest-Client - reports ill health to the Titanium Cloud Compute Services on the worker node - host on the next challenge, and provoke the corrective action. - - This mechanism allows for detection of a failed or hung QEMU/KVM instance, - or a failure of the OS within the VM to schedule the Guest-Client process - or to route basic IO, or an application level error/failure. - - Configuring the Guest-Client Heartbeat & Application Health Check ... - - The heartbeat interval defaults to every second and can be overridden - by the VM in the guest_heartbeat.conf. - - /etc/guest-client/heartbeat/guest_heartbeat.conf: - ## This specifies the interval between heartbeats in milliseconds between the - ## guest-client heartbeat and the Titanium Cloud Compute Services on the - ## worker node host. - HB_INTERVAL=1000 - - The corrective action defaults to 'reboot' and can be overridden by the - VM in the guest_heartbeat.conf. - - /etc/guest-client/heartbeat/guest_heartbeat.conf: - ## This specifies the corrective action against the VM in the case of a - ## heartbeat failure between the guest-client and Titanium Cloud Compute - ## Services on the worker node host and also when the health script - ## configured below fails. - ## - ## Your options are: - ## "log" Only a log is issued. - ## "reboot" Issue a reboot against this VM. - ## "stop" Issue a stop against this VM. - ## - CORRECTIVE_ACTION="reboot" - - A health check script can be registered to run periodically to verify - the health of the VM. This is specified in the guest_heartbeat.conf. - - /etc/guest-client/heartbeat/guest_heartbeat.conf: - ## The Path to the health check script. This is optional. - ## The script will be called periodically to check for the health of the VM. - ## The health check interval is specified in seconds. - HEALTH_CHECK_INTERVAL=30 - HEALTH_CHECK_SCRIPT="/etc/guest-client/heartbeat/sample_health_check_script" - - - Configuring Guest Notifications and Voting - ------------------------------------------ - The Guest-Client running in the VM can be used as a conduit for - notifications of VM lifecycle events being taken by the Titanium Cloud that - will impact this VM. Reboots, pause/resume and migrations are examples of - the types of events your VM can be notified of. Depending on the event, a - vote on the event maybe required before a notification is sent. Notifications - may precede the event, follow it or both. The full table of events and - notifications is found below. - - Titanium Action Event Name Vote* Pre-notification Post-notification Timeout - --------------- ----------------- ---- ---------------- ----------------- ------- - stop stop yes yes no shutdown - reboot reboot yes yes no shutdown - pause pause yes yes no suspend - unpause unpause no no yes resume - suspend suspend yes yes no suspend - resume resume no no yes resume - resize resize_begin yes yes no suspend - resize_end no no yes resume - live-migrate live_migrate_begin yes yes no suspend - live_migrate_end no no yes resume - cold-migrate cold_migrate_begin yes yes no suspend - cold_migrate_end no no yes resume** - - * voting has its own timeout called 'vote' that is event independent. - ** after VM reboot and reconnection which is subject to the 'restart' timeout. - - Notifications are an opportunity for the VM to take preparatory actions - in anticipation of the forthcoming event, or recovery actions after - the event has completed. A few examples - - A reboot or stop notification might allow the application to stop - accepting transactions and cleanly wrap up existing transactions. - - A 'resume' notification after a suspend might trigger a time - adjustment. - - Pre and post migrate notifications might trigger the application - to de-register and then re-register with a network load balancer. - - If you register a notification handler, it will receive all events. If - an event is not of interest, it should return immediately with a - successful return code. - - A process may only register a single notification handler. However - multiple processes may independently register handlers. Also a script - based handler may be registered via the guest_heartbeat.conf. When - multiple processes and scripts register notification handlers, they - will be run in parallel. - - Notifications are subject to configurable timeouts. Timeouts are - specified by each registered process and in the guest_heartbeat.conf. - The timeouts in the guest_heartbeat.conf govern the maximum time all - registered notification handlers have to complete. - - While pre-notification handlers are running, the event will be delayed. - If the timeout is reached, the event will be allowed to proceed. - - While post-notification handlers are running, or waiting to be run, - the Titanium Cloud will not be able to declare the action complete. - Keep in mind that many events that offer a post notification will - require the VM's Guest-Client to reconnect to the worker host, and - that may be further delayed while the VM is rebooted as in a cold - migration. When post-notification is finally triggered, it is subject - to a timeout as well. If the timeout is reached, the event will be - declared complete. - - NOTE: A post-event notification that follows a reboot, as in the - cold_migrate_end event, is a special case. It will be triggered as - soon as the local heartbeat server reconnects with the worker host, - and likely before any processes have a chance to register a handler. - The only handler guaranteed to see such a notification is a script - directly registered by the Guest-Client itself via guest_heartbeat.conf. - - - In addition to notifications, there is also an opportunity for the VM - to vote on any proposed event. Voting precedes all notifications, - and offers the VM a chance to reject the event the Titanium Cloud wishes - to initiate. If multiple handlers are registered, it only takes one - rejection to abort the event. - - The same handler that handles notifications also handles voting. - - Voting is subject to a configurable timeout. The same timeout applies - regardless of the event. The timeout is specified when the Guest-Client - registers with compute services on the host. The timeout is specified in - the guest_heartbeat.conf file. This timeout governs the maximum time all - registered voting handlers have to complete the vote. - - Any voters that fail to vote within the timeout are assumed to have agreed - with the proposed action. - - Rejecting an event should be the exception, not the rule, reserved for - cases when the VM is handling an exceptionally sensitive operation, - as well as a slow operation that can't complete in the notification timeout. - An example - - an active-standby application deployment (1:1), where the active - rejects a shutdown or pause or ... due to its peer standby is not - ready or synchronized. - - A vote handler should generally not take any action beyond returning its - vote. Just because you vote to accept, doesn't mean all your peers - will also accept (i.e. the event might not happen). Taking an action - against an event that never happens is almost certainly NOT what you want. - Instead save your actions for the notification that follows if no one - rejects. The one exception might be to temporarily block the initiation of - any new task that would cause you to vote to reject an event in the near - future. The theory being that the requester of the event may retry in - the near future. - - The Titanium Cloud is not required to offer a vote. Voting may be - bypassed on certain recovery scenarios. - - Configuring Guest-Client Notification and Voting ... - - ## The overall time to vote in seconds regardless of the event being voted - ## upon. It should reflect the slowest of all expected voters when in a sane - ## and healthy condition, plus some allowance for scheduling and messaging. - VOTE=8 - - ## The overall time to handle a stop or reboot notification in seconds. - ## It should reflect the slowest of all expected notification handlers - ## when in a sane and healthy condition, plus some allowance for scheduling - ## and messaging. - SHUTDOWN_NOTICE=8 - - ## The overall time to handle a pause, suspend or migrate-begin notification - ## in seconds. It should reflect the slowest of all expected notification - ## handlers when in a sane and healthy condition, plus some allowance for - ## scheduling and messaging. - SUSPEND_NOTICE=8 - - ## The overall time to handle an unpause, resume or migrate-end notification - ## in seconds. It should reflect the slowest of all expected notification - ## handlers when in a sane and healthy condition, plus some allowance for - ## scheduling and messaging. It does not include reboot time. - RESUME_NOTICE=13 - - ## The overall time to reboot, up to the point the guest-client heartbeat - ## starts in seconds. Allow for some I/O contention. - RESTART=300 - - ## The Path to the event notification script. This is optional. - ## The script will be called when an action is initiated that will impact - ## the VM. - ## - ## The event handling script is invoked with two parameters: - ## - ## event_handling_script - ## - ## MSG_TYPE is one of: - ## 'revocable' Indicating a vote is called for. Return zero to accept, - ## non-zero to reject. For a rejection, the first line of - ## stdout emitted by the script will be captured and logged - ## logged indicating why the event was rejected. - ## - ## 'irrevocable' Indicating this is a notification only. Take preparatory - ## actions and return zero if successful, or non-zero on - ## failure. For a failure, the first line of stdout - ## emitted by the script will be captured and logged - ## indicating the cause of the failure. - ## - ## EVENT is one of: ( 'stop', 'reboot', 'pause', 'unpause', 'suspend', - ## 'resume', 'live_migrate_begin', - ## 'live_migrate_end', 'cold_migrate_begin', - ## 'cold_migrate_end' ) - ## - EVENT_NOTIFICATION_SCRIPT="/etc/guest-client/heartbeat/sample_event_handling_script" - - -VM Application Setup -==================== - An application running in the VM may wish to register directly for voting - and notifications. See the guest_heartbeat_api.h for more details. A - working example can be found in the guest_client_api source directory in the - sample_guest_app.c file. - - To compile the sample-guest-app run ... - cd wrs-guest-heartbeat-3.0.0 - make sample - - This will create an executable called sample-guest-app in the 'build' - directory. - - When compiling the guest application ... - - include headers: - #include - #include - #include - - link with: - -lguest_common_api -lguest_heartbeat_api diff --git a/guest-client/guest-client-3.0.1/TiS-Guest-Heartbeat-Service.doc b/guest-client/guest-client-3.0.1/TiS-Guest-Heartbeat-Service.doc deleted file mode 100644 index 17bf86caf840844ee4c448eeae047084c2abf72a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393728 zcmeF42|yI(`^N`GKykgrTPHMALvA%OEd&&dLjf(*v;`J+61qHPA8p3~qJa8TS1#STBcKk|d z4qW(fqfqsmiq4R1jSZ4$AzA#~1mWF%PC^wSVL-xw5089!MB1tRzoN5;uyTR3@WXN^ zM%5Rjy_=K=Db@=Ls+vRg*7*Tnv6Y)rS_E3gHkS6?Z&{08%9ec^rSuOAz*A|K`?$ zkc#ECF@k{2LLQd%E6Ng=6tr&%!cv@AbDSWoMYt}~^9V&y=*RQH-@DKbIrtpX^)%Kg zee~nU@g>Ep{PFnslHVskhQeb}PTJ!<$`9u@(w@RgihneYD;!VZFy)W($Kz3ME6O^* zAA9jpyaSM*Zwy45NgyTkJ8P68;`zkO+uWRrsdZv^kzr&%zI~;?Ah=-b*fhw3@5J&5 z@`1{24D!_%ODcc#TaV*fA-y|L4(PWwKq`+EPC}SppY8ky|4}?OpkMqtJSr})+am?x zcNgpO!{x>EpD+3O_Lls(!b@Hr`O@C`d^^8B58GQ7z77xbeCA<$OCB$mW8vk4_7^_B zq{3WY_R?){J5O(Mm-gZ#+bmXwooXZqK`7r9gc|stY81z>^yfglAxoQX$W9aEbeTE2 zOjp-%oi;NoL8r}PTMUUhcTKp_l-0Uxw$79#M(Io@ZHlgSXRS$>BnEen&@|Ubdt!CT zx=dYqqE3uR%ShFw>C&^bSq5XeD}J%MR2@zT5=Fl@-hTeBuD*Uget|yzzJ6_8T{W6M zaT&TqL$V=}ogf;M#Vox}R9w|6O>||G_^uS4_X~*RSwnh~7;C^SXf#d;SJu!k#F&wr zX-Ls$iP6R^+>2^ci^P^9k`U0E(%~gqVi4nUOAx)R*jU@P6CjpmInP}K~3Zc>+1+)~Sb&wlQquuG+G#%xMb-@tRAz6M1%XveViSkY=BgRY< zuA3_+K*%U3$VQ{6OHaaP#Ft44Ni$~YXo-BmiAhLd4h~Dk4nzxan2gC;gGtwTpOeh|71M%SzabjFdm-uIcW5YzOcaM$f6%iU1Dt7KI#)pTA zAu-*1$3}Dwj~ByZB16Ms0zJcHwKrsrID+7lezTMT=ydu&)- zoEQ@;MnrXwj6iINJ~lWyJ|Zj*DiR$M*)udEx~rFn7{ut9crh{}Dk2_-#m9KjRp+`} zpC`t25u?IlL&6bFaOa4~i1^+tDP1Dsqv>K@aJ68udvI)gL`cub;8?MH&)DuUafplV zEHol6Br-T6DlF6+*T*%*uwG%&@nT$faAc&-8>Q5%ZnHC@ii`;E92q8E3pW}X5gQf~ zPj_Tl3qkH7g^^xjT=%e$2wDkyE)3Za9NXJVjx;W;M^7AtopaqogQJ4GhQ*039*`{% zOi0hzuqaA3vLdc$=eYQY_@41$V%M0MP|EDN?r~wUy&^)w;yQ?tF_iyZ#GY|sUSeo) zd@#E-;y`v`H}0)-&$tMdaS_q+VX?72yT?bwM7M;LpGD3fu8?4yOY#gAW1^W@A()uh z-V`fk1Cs!3V0aj|L(tJuZUs|*#G!D6kW~3$bKP-86qb0!ZHm!hT_Yp9hDC>jQF>x1 znr9>8!di;Ku@OjHSBjI0)3d?2C<+QL%*qDRC9NxpE;1SN6eGHb!J)kn2@=hY7EuJ^ zBIM$NO>sR#!jT`8<=%5EYvQ#DsZ3)-poyq|Od3s1q%%b9YZN{GS_gQFef47Bp<>@` zu~tnnym$Ao*vN?JXT-j#qG$hjV`5;SZyW!1f$g906rE~CK$)3-Lboc`L{aP-78}+@ zR2@h0In@fNT^rZ2A6*Ox9Q*VAHr zZiWsO2TXaKE=`+`I?!Y@cAO@~-sSnBCq{sGbY zQ?%XUP&RqW<8t9Z46zfdzZ9#V-vgqB$en714bhTEV(-QSzas)f>w>4q%1?$YbDspO+1 ziz&>t(`IC($}U(7Q%hF!pnlbgdX!vLPQ9YMMKRK7V$~ham7T=FhSXHJ8K&&iEUJ#R zs0A}Kb%|N1&_pd3aF-HvRIanM15saTQ{az46R7fJF~(!X5}N^fo0)?$MJ3icCaM{w ziVz7($mOwE<9NPy|{h@J55TMiWf=Z%9u}%_hH>IdaN~ zv5p&n$BJa=22&xW`zovq_B1Xo^cgV<#v8T4V7(zxZxOUsj5MTY50R6SX>PNa)k@U_ zVez*%!8NydWOQHVqglbG95LH(%T03cltlvFp^~mhnC$bDug97Y%xR}`lLo2zBxD;> zDO=F$fQ!hyf9Xz0t|%|et)wPNVix46HKAdOXQP}UGII`3!Z8NZWJ**nE+`u- zLmC=$NL!a|XfeB{7rUqyK{`E~8hh$w$O%X`X0zy-Tw=q5L!-jPWCN_M<&sRO%6n#+ zpp>$SGBQ^o9cz(W?#rC%Ohn$A%EhTttxSYPhW~p*iuND!4vH_A0c&NpZGis;^FssbWDaWWDVA#V(AeU)sr2MbyjK zHoPPh$xNL#iFuP|>%|)OXq~In5WN}(D!^Ja?O?hgRm+XZ_nV$8>d^xsrs{HZsdUMd zOl?}4bdTvN*`!}m1<6!e))}5?v4ze%#aj&V61(T3A(-wZcGKo)y+mDBqIXNEQ%`D9 zO19BX{@A$3Bm-5@u-$2Cs1f8&mqfibJsk<;`DxC>6y_XAcMZv+n?;v_#w^@xer1+e zRJoDpjd)5VaIjYh5? z9OJ^Kos_$1ehn^CSu($NkIhv;E3b?K0$5BgPqSOciHhaZyntg z@{K@H5%As==RunA>F72L7H7wR)IjwNL#3`9%lYJrnNTLEP}8MV>4KS~Z6r@GO|Y1r zot8kF&AOVBN&ZaDpg~%6ZRs-6b3z?gsN$?VJ?V}H>!I!TuGT?h`a%~pyOQP-Z5BVu zx+E==)aAm`#!_kRa#HfijbfLzII787Ln;+rs?Ct>M0m)Ob1Lqp|>6#(Vcz1;EBSngTAMJB8kHd1bNq}h66x<>~aV5cnB!jg}ySqCLd z(xJzf3IY{)xr(FXtrew3rY^x~%<>XVsItApRAWj@dn#-rJ!rj<2MRMbM3jJ0UEJ;G*7CMI&DU?bnNvNO{~4V`A9Vork`vK?cN z9JbqtM{I!xRgy8SB{M}S&_B6ep*VvE`+OAm*S?2UA)>{*&}(-V=WloxDRgqr#&S=`o=znW!4)=*1d z_7>poB&TMZ^vq{TOf|xSu!f)Pm5Q&qlTs*+6|*psDA_n1e4tqFB(ZuGDMJTcmd;BP zAvv>B2}m-cI3eTAk;#T*l3dA7Ru~w07q9WyCFMJ1B& z9XX4uv09T_)yP#O5IHCf_ejYaY|KX6Jk>y*E4I3K(96Z7<0Wds$a^ONNN3WZ5Zw># z9MX$6jY*rV!(FiaCy#*+l~awVSt;nCF}pODNDu)XN_mRX97i1#D3e;zFUU^}w)Er4 zjTM+ex~d_)H4`@zGR(7j-*M_iL9@IrxMNu3S5j8dX`}8(^J3=8Dd&j${%vyo95G$dZ_BR<=a+ z4SKN}koB9QbWx9Ti^83!E#;Pyq9*gEnvAuan0sKO>Oww|e9cvrBsOWVRce`#B3oq0 zY!U^TlPCA_DkG3IC|!1fL}(R;Dp1O(QH@pJAEXA&xq*=aAQ-&7O2ytuJV@V zgi$WBTDpIlDFwclDG_rHxWBH;%rvq(f$oK72Phq3rP8BoM3-uWvq^WAq)W(7!R?#S z5Re)%@@^h2D{fLBCmO@Jfg~Nur>3&4F&?Qmh;4nv0 z9Yv@gsSr@~Qnym;j6?(SiuZY&sO@ZY=U6&$sA59vR4%#fj->n``Q@NNz+4^VNUn&sHH(eOgW3TWPg!|7 zI{w)J0xJNBJv~XAnIv_|Gr{;g(<@3$#^fWktywPdnv+TmnGc@FRFaq$QXbeTNvfV| z_?gNvT2FmeRz{GI&)~s>y;IqUz`&d|Z)0YPPX>DAe5AtPTIy@;kBfVXwTgL0Z4o!X zhaM>pr4qrq`RPuepy{{^a#6L^bAl;DnA5>lSpNXoP#+W|yFH(DdrVj045)hJl>-WL z<`?c=n-p&D42hFRdMp}h8KjuZOR8m)veWb-45e^+-!FX-2h!D5m#)i%9n7WT%sVo9 zsj!=AD0r;AqQ4i#msv>l={W{1vOL3(fyM)*q{VcakZ1a13Pf0N6ozUN2kNp|A?A$& zy>T$iEghJQaVl++G*=7u9W?Y7%`>iCfGx83EMVltyyu zrG6gLBq=H{4HZQlPESb19b@>A`i`WCTKh?Q$7&-eIUB$X3+@^m5qI&G>^q_Rpa3#bq*^xA~j;R_%&QS7Mjv-<) zz$u8DMb|osthRa(mGn^^EzZb9BN0R0Xs6?T<0867#NayNl6;waOfEayE_*=iPMDKU z8(;;QY%KW*iKB3#-sPhS-fR$%y2o2A^gZeMkNKH1Ws)wN( zNLi4bLI2alFq+vYm8@*^x!}s_XbVd*z|^C9RNN$5YBbo0dr&!SEd8=;KuKp8k&>MN z>+j8*WXu<$8Gurmky0etG`YQC%A$rmYiLnnMJqKS8x1S!o{&8uxxdwtLtYxm?4Tu1 z*`dueAh*!p#7ZZtW-%#M?pc+tm5xRn%QMuDNf_UiV@BVKHihN@QeK-(y0nDUTu3hp zPNV@%OMV#YK3GjCqEwubGL$+}FsYpa)QbLOcXAJ1j+X<$QGc3rtoDcmv}b= zr5A-r5(lblida6AWr$tdOY5ObBy~6*)sCU?34X3|*$J)Xm~aeK zvp==trn*isU>vMJOyg9p?{EEh9MgG8R&9mEzPdck`>trSBV5cNNj2Kpk%a!+-o z`8eq*C>5?@)K=$W^A_Wz4mH{3VhWM28;qJ3Z5Nf{D7qkEyhHei1$tAZ9!pKdQm8Jl ziqdE+la3-(91;2cLm8Rtmi~$aSj>Z8`!?;`1-5I~KEO3tl!k5KKvDyP^idk?DYA~h zwAt))E0xkgeFan5pSgs&OhSdW6hle@|4>Nw&Ds;bf&Ndl4|pO#ZPq%#+clu*OZ_HN z!uiOY*?98qd~Q5hqd>OhlE!MLPzU!^4Jrcay1r5K9gZ&3`{_mXS$`_<)71h#D-;QPcAZPjHS-S304(cXaDlm(B2 z8ZXFfcyBodV>UH4*^Fd!lS``kS@VKC2kL&N%1Tv2xF0js)y6&HD)8@^({Ftd=BJt? zx2_1M$kPUpST;wFI$tDDOI1S_xpcT!mYN;1*T}piwbNJ{3l2GqOxdIr8<|X^vE?W# z3XUB|QOXaqu`9BtXs2`)$)YmnoSRc>)hS$`DLH9=Q(dF6k$c*`;15l))W6K}hSy%m zocNJBiQv=!c@MX(c@;DVv9NKOLW4&AVQbVTN@btexDrk^Tcjy8{hhj#SnZeip!50B ztosB#`s%2pi3dfDNjlhOL^SY~rn481U!dxiq=W6nLv22*JZbCe$D&}JTsWUK3{|&c znc9O!4mk%?UE`QztE?ZT`VtB+S0b$5bPch3_Jgd{eWuUxxpPG}0PwA7idIQ!d0A4e$S?1)^?(Nb{~rqh!o3e}5EsHaC|_t*y$=o*jO06Y&8Ove-XM5-iOR|8`Hb z^Y?$EExZ-#>7ec-s@qLuMdiL<*3UsERbfia_chhhz7OH8E#4@kTe4goYnWKZ?X`yX zAe;-w&^)t@X*AyslZ*+AYm;fpIWTj>Jn6nCl5%LTr zbUK)_ygmOXYR6~o#ma@bq*SgXePy{3X({Yzxmay0h9mUgrsV?^u-I)&ONlYN)WOm; z9Nya^7a}S=WxP$v)lk)_#BC{?bgC8uxdQSOp8K{b?KLTxyN1Gn;Tel9lIHp#K570K zRxk|3<^^I^ZiHfujXW|VC7*!Ti?GQ;a?^_9wxiE-#9pE~I;=|ZwRD{_6%omu;aU^M zO<-9hpOIQsv_qHF0Ym!Au04JXRV?fYSQC$r#!SsuK@llp|Ei`kpE5v>j`Z9zS^aQ6 zHbM_wvso%qvxmCtSwFs97+KFcnK*iP35EdCg)U9mAg?J1Jy4RGzG(SYb>Yw{v6n(<-d{B(&V35F5ZrOPT`FnX%W0abCoYCRykg@!@gCuH{LrRlb;#3ew)Y8mdsw_)f%%}_ti5VFu z*RRMfDP3_85>0mzLuo)?$~<`YHhQ&b*eX`8>yU%N*3;+d?l5jgrb!ic~OJ+zWg$Z=BLSO8S3kV*JkH>T(pM*NEU z88kZ>6m2K}O+_>vT)eu+!x$m6*!0=Jymt@Hd%gsgsGE9I0Xm=M}xRt0T`I zMMcj}vCN;fes2I~Z9Ih6JWz*o>!LphFU`+mw}lxGY+jJP_ZjfXIjWhQg{QzgFoP5? zn84f=c0u_)80NfE&JLxT_5c6tCU|lAM{k>e^e{crprxnxF+&K`?=3T7$=%RqCh9Ri zD3N9^n~#%QB=%$;RHUcl{V_+zuGR!AFH55U4=f_^v7V(z+Jf*9iq+8}sRr_-y3@l_ zn8Rl-H2eh#mbYe@mDcQQiR>{XEA91mm*&GsuX-_ITB|hi8IMIv^PYX=dC$yIkOti` zn@*dKdDv`1A8*##c>MzeAw3RYNdy&X3X!IIX~;OSN7l(Dvm9iVNaZ|9jCRp!(qvBf zl;k<{(<5jH?>s^+Mp05tMpu&_UZMUw_KGChm4gY5G$@B5P@9jsqu-qlQ^l%9`H>!! zWS*l|^ucs+pA?!O*gBDk#|KWF{Prbjdw=r=Z@QA@a?DE7!+BmBlMd0c)MD1X<$a%4 zCBV9QS!i0Jj<-rFr|HpbOd7_F7QA2)Mx3sIQb@DtWU;Y?7fzs*B;;+9E?J9qGn=|< zm6Sq-k&PiUxRpX)9R>r7X?p+!jF1TY~C6?1VAF9X?%!UzMzmwE0d=C{jYQa*4LC%>E$>ZsRZ7&=oUiAHrN8rTr& zmT1}{X4NoBq(gR@DQJA-VH_!Usqska#&-L$VJb_1E0sB4woMkkhI#I-ZRCpW>(Mj3 z<_kiST=2+ZrQ}rc(WE{pZB)E5j*YkI;ejH|%`-m-he3II($nU{$?RzkSR$qzmMcmR zyxF*0sjrDyL+Mr}_nXI{Or{h^l98JyJY zZonjWi@~U%cuB9$rMVHfzchNL6?27QI@n}f<+E6P+#r$aI;!(@D2A{Ls%HVr=9O}c zZbuTlvXH>r(uC1eO*tCo&PfW1hph0R89mNsjt4r0S;A-(v0`Q3Z)uV%9s;IEeKCTH zXAe}b&Lab;#bYFRK>*%wQTWPIAvI)BL6A$HREqe^NYKFJ;>YtYh+OihmA53e;BN!T zPDhoIhKfvj$POuzj)M{_3zoXb!TuxO>f;TYA~u}e%MofADj829Yl?6C;9AY#Uyb`Xr%P!DYR7)Nzdqr=fqG< z%4Tk#^!Se#bwODYYUziKG$fGt=}pd*fDrl8tVAT?JvXWB*+44Su%xm_xD!{JP6AzG1Vx@FJwfjAt94qOKpC8nxrn4$mOR@k&AdAVUDf?5?AaT zkvlr=+_Jam?*6~BD{6;?o_InY*pUR&WXYSsY<;+!us!898fT6CzlOiShAo}oH=Exv z?j_O-Q!QcfSuJYt;8b*2C*k#6A;I2aPwzPIU~ez6ePA13KfF;PHAsBI*SB?>z&5R) z#T$n4LX{ywVjDkSZ@h5U8*d<|Pe1${KYZuK4O9iyKy}~=nu2D)2Xq8lkN|Wb17v}0 zkOPK*Trdob1f#&q;L5RWTULKGWmLwf7q;|@3EvVN6cZjCE(n!9^Z}WF3T@n8?(6n4 zg}$vfQ4#7H;-?6ef6h%2n&F(uL(OXI=}5#?b)gW_%}a>sR$l1dO%Qru*$+!Cwh4_r z^o?C>VSh8*`w&LWCd;OiDxmTkG&0LcEhu?%hICp6ecAFC*6C@mUEi@<#@f>Q+?#8xVm zPZhLuN^TZq_glDfWvf)CBvlNoB1mba>)TH2+zP6+@`Um<-zTk@(_EKHZ&&d&(eiU;K&K4!RtEle>$dWp42aN$%1CXL7~A=-ce0u9JmE#ocbrgg z|9rPsIy7Og$f?|nNJ>L01!t1?E8tZy8f*qXfFHpguotMx!%CiEv{VJ=Dfg%fhw88> zgr1JscTf+Sx}+o!8c%`d1rHLsxB)UO4V zNq{xLNeT_4kSyuOIM|LwsLj(^cXWP1z0r9E4VpjQv{^Zy(O(N@`<0SJCZByQkCoD- zLaDb{vj1%<72HVvuYsB1L$DHj2T1j_WV*in!15czcu3!R=*Ru0Zqh1IppE zT^{-)IU{Wy)6>m~yc3Fxj!+yIXjR2GlCI0HWWCoM1EtN*F-SQpdRUV0M0Y~|04=E^ zt4{i@l^SFe=7U%cLMM6 zm}qG~f+@Sxg0_|o->YBGbGyk-E z5sX!lt&<(gl$%BN(q3)EY-u%;sV8LG6g&!Y!B8*^EC(d-uYdrVJArbb9iTE01jc~Z z!5iRL@EbS)Dxz#q8L15Vf&Sn{um~&$OTbn@WoR3yi!X@P1NA{7NCG;r2rLFmz-@2` z7nc1f2Nxi+}L%lMkgb0*&hW z%mK4z2`!cOjoF*A}G;I2}cZYl%U>;^6< z_t+1dRvxB`?YMG}DsV`-2Zr79`#XW%meXM|m4R)_fa);SbyRzlr_j2y6D-VFkI%41 zwq~>EMR~2e_Bna&avg|^9mn=o2oN-zD+o?wnpF}icq`UhTh>`zH5=tZoxKF14wwBg z$o~eo32uSgzyp!f1?qx&;8D;VJO+Y6XAlBHK^W))s0@XJ2%rPWAO+~bRPYYCe(~JJ zeLrsa@soW&zCYpp;S(|^?CVG2aD-cxb9=e`fVRHSBfKG8e=qVm)R5D=bP;^J)f7;5 zriBa6=^)$9NqDTbKFza|yg#Iy2h__M{)01o2MPs{#KY%1*XRj15ou#-KzS&84@T3&)1MZ-@bZ?5&8x%f6v9Fnwn!-n@lT0-` zvqM#-qoojzsa0D~V)tPGr-xT}&H@cd9`Az1U(>1z5yEn)hFM9@4+!} z99%rQchlZwn?Bxjaq7jRZy(KO;Y4$ow66$1sRYamxL^KAC7_vfOtDKqQKfu8`7M-6 zvmI-4e@WSv?mxB`O-KeOz)5f(TmTn=E9!YSP!YI;%0L6iAE*kd0WZ)Rcmp4h3erG2 zcmuo%-U4I6I4~ZNFY(9zE$bJppS@`EqWvTGZ^_=$pM|4X*dlC6rtjeE&8P|N1{d1)u$zvjz1e8ABPY53Zr@?vP1^><)kiVA$$md%J zeg=EN6>t}{sEzs`bO*ga3aAEuupU?q$VdDU{02^f-@zHc{l=_1XoG;EU^o~Js=<%s z{$v2wLqRmy26ljY^)N;O!a#5EJm?Sl)yERN2(;kZr9Vy{J-C0*!5w>c{B-cA9Y6f^ z-A^0v_ubdu9Xf^o#$W=gH z>uT(Q65yf#smBqv4DR8>mUY~5=h)61I4n2ihO_XL&L`RO#7kPXoYBI-mc62o%Q&uo zg}!Xbx{?uQ&K{Pp=i>Y8Sn}39bNCQuE@0)_dJ4-SZ1rk`_79d->u*Jys*oq3a4CYw zM_1<4aOBf>;CrwMoB$`mtOkPc9+(YQ0oR7mbMO+r`aBDq262s{=in50qzQaTo^7-& zV&GcQ&Vegz`Kh8lYuS!cWjAn4x#!oS1ytwkRGy;>{AhR2H_AQIx*J;7&7Iu4RELNE z{nMc|98;;eP$(?#kIZ^R+AoLmyI)fsZ)qWXS`E!6eC%FsHMj~ipn`Fflq4#+iuQyD z>BSI`3xvOH`?n99R>kO!)uEYt+GKvNJ3bYKja38>sqnVARXgN5K@ z@Co=5ECP$c60icS1YZFvV`l)BvlifSkP6a3B+6PA7z%~~DubiJYhVm`8;k`L!6Yyl zOaaru3@{T=nLP#a^G+Yh%RjI$e|P@&-P^Zr-@N_Xt(&)Q-oAP3?)6)Df4loDkiUED zvaO4@eg@Vr*t&iE?nE+s)y2r?aaEs8r5h^J&m$8GV8ePPxD4(B*QRJgfF|G(&Oj|l1p-Dk6&20p#im=S^lgv;B0lNU}}r4 zY>5&zsQ)%dmzN|~R?IQ*62g`^mX4CkOYPcvDs>+En+YS(m*kS6FObs8%Az@53Uwm6 zk*wYWB&%;hEy#l8L^2}TkUZW8l=shoWH1}>e6JwqFXe3j^7U148Vr66ZGBwX{5x-6 z!-^_U#KVp&BTxm37=h}dstEQgqqZL?;yJ4RAN#SX_9zoT>*#fLY35X^xwBLoumZ)m zmAA32oQ-XAO`$qhu3gx+I;00AGm_PGFayj3Ra?OC0?A+?NCjiTI4~Ye2H$~S!EfMj zOXw&x!2{F*bwNGg1A2mFkO3xvMPM!10uF%e#|6QN&ZyDgEpQ%O04-a?W`N${c`yLv zf_dNrum=1D{sI_(x|nzF)Vbs5jvqdL>iBQFf7^b1>*nQ)KmT~a=W{=Q@AK(X@i%t* z*fC>YnTo&ZuPAaG8h5ICHY#2Z{hV5}SWlD1UeXrH(>or9V{j~Op(XeD-fK~Vg}JSs z^=lG~o7sEcenvoVMz{*jJ~vsAVQdzF^TkK|7Bz6D6$BxjQE58wodgj|;ZE>myF zi)5Ms`3wSW;O({rv%s&w!?(yfuTmvdK&2Kt6p|8tC|clKaBeJ_USrJc5~ygbr*hLeRjo_6-!oJSh0Kc z7prB_L(?Mr&u4ncEd;j+rXDxh_UX#B_6kb#TE*xC=XC z`IA`I;78DLuq2&YIg!nv5G}b~O3zs-g{inTV;oEW%ld=ar*xb}n-*0LVOm1RkoGLBHW<>Xt*0!O+HI)7&Edhh z&k6|R8cz*)gVw~_dPC(GaO8r%uVL0@EtMuy!YEFr%~;ae6sBWo$$M>hYma*p+C=%1&UNW+_P_6(5!T3|4@k^wlwM7N}1}oqdxgH*d zj86en1(qLtLd#DTuxwVX*+|EB)GtXNAZF!!N1ClyVP9PsJ{rBY!fjusP+@9;!EI-i zrL}%&@Og8=h320X`njZ_PAv3uIZ>g|7ARJ2SLpsTk71!Sf6&I+zt)hYL%?)jDZe)A2ooPN9`%q__FIU91+^hzJ;GC2vnV$jYK)H5> z=5pDu>sanM{wtk1V6BCfSqHG$M6jMSPo7DmnY!I z12<3wR0WR!AJ7iyfdNbhGr(G~4qOD6K!x@=4?GQmL1!=#Oajxubnq$o3akRF!5Z*2 z_!(>i+rbX76F3DS{lE|SgPx!lmgHA`t9Z9B5- zi;w4j@&2@l=6xhx^p=sIA^8lJ5Nm0p)+Zw>`4|>&gN~QBk%x`7Djxa{9{rg&z&rrV z#GuSCwDmrojO@Q49*Ud0I0E9i>9zs!sJ7y$j%b;ikAh!8`{`)us>-9E;Igj**?NG7 zWB*4}?20Eh9QI$b*Z;o#Cz;m;^#SSspGuSFu>Z>3C^PHDvH#rW`$P5}!Nbx2WLSQO z{+oR?vupV8>p#i-DbNj2z3130XwO+PJyKVmmKN_q9rZs7P${hcN#ODC4*f>~Duwkw$-F$Ec{wy6$D#jaNYU*iwK)3E=U_!b_Hp3h=zq>r z4*f5k`cE?N33>sVhv(3LJ4#iCHWx?#`P@rB*HWebCD#A{+|v&IFP-|&=hxDlTAEM0 z7aRa*z;!_LYyVP~eN_ODomzgsTUPOofWHw?p5j<9UJh96JU#5i-Uisp1;cS{!m?__ zjy?b3#^+C0hMa2wmHw-`{8a%viL;RkHvShB?9hK?St<1YN#-7)E}%K|j{4tD(Jn)q zt+mj8|380jq9bG<1|E+7H|*@t|I(@dB=fEy0?@NF4*f4fif$*V#nFHMyp$HQPXiA} z|L-~Uzm$&ulgy1^7@%k79QtoZsmjpi;^;qrPVzm-egSwm`hN`XRB(*{l}7)cWd0GL z=VVU-hyIr#MYogG;^;rgeJS`|mj7uiAIEGxFW?UXKp2Pvy+A5R2Xnw&umkJ_e}X*F z7BhX?foSk7coVz@-UjQyWpD*t1v4-!;0y2r_z^sUQ9@793#0%&FaRUS0Iz_FU<#N4 zwt}C)^@}HtoH(-Qr#(M?zhTwqSY>}~EA3gpf-|HeCXai0xRh;pE}Fev&HUUoh1745 zp)GiR8}Epb_aR_;j{0T4iI%6V@zixxpEOI@94k$;RK#k2o}52HEiu75 zm4_Yurvc^pj&&P3V6Ev78uejrheBhyANMI_ycDSPUp3^T3fM>sZL*ObHvTiF%iq!e z3U1leM30pX>HS}WFm_ew=R)71F7$Kx%*Ok_-o;}ug?=u7A*t%$fAjrcB=hB9B_Lnk zQU9w;MOh44YoYz|AKrdD2-%+m4@dv?T^;(5l2i))f0Fqra0XBt-l6|xQRCHVE{^{5 zewzZwzAE};9*+KZ3wP*$>C}Icd3EpzpuRhY{;PGVEQX4s|GdApGi2WlJRJS^ig4(E z>C}Icc_g6zdg`Zl=zm$%cy*eKqyKztW)@^WA3PlWuhPw-|D{v^N#-Ad#el};9Qv=; zrLq_*j{ftp*n5zD1&qN~21T?1HaY~YuPnX)<%&c9OXvJAXOeeq&;&dN{6G+h0KGsO zcm>c{{g+@dSOsXzUiB!*zaLP&pw51B%A!UWFU|IP`)p`u6+ZXk5af9hTm~ht|GS@Y z)c=rS>FfV zq}GOoVdHjE3HchSl;?d+XOcMN77h6hx!-D_%JvMyp>69QM3R* z3fDHLW*2?>Z%FjtQT?*`>A$*vmB)9KY=6416n_7&X;?#)1e!m;7m)l90V)GW0F{Gd z;5fJiZi73Z!c!<*Km)3Ps-POE4r+i#pfP9yT7p)<7x)2x5CGbPAP@~=KzHyw=mQc! zB1i%{kPK452rv?i0u#VQFbzxxGr&wRA1nYDz(sHg+y(c5^V3K>Z~?AB1FC=s&<#8T z;z3W)2lNFmfPP>w7y@1cW5DZR92gJgf-k`$aPvI>JHuCQp8vb6hxQ)Yy8~aCBZZZ| zAxCTGuezDP{ifQACjxdF&a!VwyEj{hFT+uY>IGnSBR0qscy(X#L-%yTcZgT3aAElf0=e=Jhbu!S+?Yi1xpA4~NW4t<2T>Px2;zi+nBe zv&hG?FMs=cO1sr_q>tx-TK?RpCV!fIY4W2>)c)6sb=ZPZYYPNtk~g)PczcQ3O7^w9 zi1z=EL+0r0FBASh$(!26)F!6(a5rFI{`U6>j$awc0k!=nc~jp9^?OjC2laQ9sQo_? z=dk~!))olPByZ~5;{96oHC$!;1$#f%|Fb3DA@fozbCv#=r@l<;zx)aO40eItU>`UH z&Vd`CJl^1{`WB#S*yp^U_?=L!3x}0~z5g_zJpaG7ZatM77O-(>9csbaKbzT-o_Rb&x1cGP5bKni|CYTF80f)e0 za0FDv8~-|ir@+%d2a>@u@IBZBHiO&X4hX{=!n%O*U;@|&_JeAnxHs@Rcms?F6Tm#M z2rLFmz^%)-E}uVr{I_kJ)~sZIpUuaDSh;38`(N6O|Hr*H?zNYX3;c&Z^P?}O!29vg z)4O`Cd)NzaZ7^s)de#fS{pZ2&+7a&mzMiVJ^>G6#AZGcELH6DtWIm1rjW-KnjDXfK zMu0W>Z9=#b6Ml`_Y$=6sEWN)-^`;>|F54=QnFmnS{g3iIqNOUJ+##=9mrzz0EXH`_ zf8*6}Wo-P9im_0hWL_842c+MQ`9C&_b{X4bt%;Q(>1Iymfq5-`6IPNxx9Lwo_FX}V z>;JS~4*f5czMv$3l6eGp22j23(El=~>^72H9R26MTq0yY0F=1?k9gLh|D{;}N#?1* z1jwIv=)VnxDr1|9qyM}OHx;sf50tq6>z;Gye<{{~lKK09+VIqNx3B-l%a|7YSCXsN zcIt*uZwaaRs9@j!=lwO8Ap5^SiR*u4Z-@SuV*MwX-vs5*2Sy+i-Yq{^!jT^#-A<1!;4`!S%z^}l`} zhyIsh{U@2f0mcCulXK|5N|nlFpg8)^$6%UW9hyIsh{U@0p0!ILi#XI!B zOsc#p(Z$h!KL4Ty=33MTC9eNx9r|B7=K@RPesY)nN)dIqKl*de7@xZ$o_Ls;`+a`-{05&T@C2d zKfhplYoVV@3T81E`njB_P-qL@_Rz%DdfP#~6Gio}(fdK2Pvibj`Uv%hy>D7N{lJ}FKGYADyfS$Ecy~|e>P|X8S?NJ5PMbZ)aALf9) z**?}9DpcUlRq*(4una5*`@yfET30;p3H(43(1B!d02~J=!S5g<9Pg?C!@x^m1Na7P1TGO6 z%esE$!m&fU*x%;$o7e0*v}hszuH62h@Q!Khpb5JsESz9f#_&vN$3b4IXF{plywKC1 zc|5oZ$<~9^Z|9P8k zC}jT%C~^IF)j9OP6zf09d^8vXs6B6A|BshBJ@{`VSgq|TO~P&T6WRCwc^}Sp$o>~l z;`)C{=g|LBtp6nQ{oq$X{do5EUp4OY-%zbGdY5X8aR2AOdEYJd)v9#ASutTEJmu)p}!MQM&?)-Y}E9{ z91*I-$6>}pzV8B+4R}>#n^#7C0r-PY*#^N0Hzg2-La~rHR(Z2uB$6q%<_CJ6U*Z=u? zhyIt|`oBEMd<*yq&=|Z!|I3`ZTP3(S`p@TGoP_Lef)dyNw+s&bFU9&#GQSP(0GfN_ z(0?m+Dsvl(qyK!qRYS0%``mqJ6- z)gD!#lq<=9DtY#L`>ZuoaOTfZ^n=`WARUyb{x?r^=zl5Jf0B1Lpyz0YgE4@fp>d5U zWCv8*UPPmyI_E#7g8%Bx7DNAC=vgU}wHv4pT7WmfTVNuX1m=S!U@2GzmV@uW_h1wF z3)}$By9vT$pc{AwOaha^Qg8~K24_IMX9OVxgn}?|5jaH(LIcncWPxn3AN&gb02QO~ zeIk$yQh*+$10#4Dj0Y3I^{c0koW8o}r#(My-njOwrC)w<^)&mNHeuS^#OYV1FpiRs z+XGqQNvxf9bXV%67m1$89~?ca`p!)cmhJhyIu1_kWgC*6X}J--5ER0~`W> z0IJ_ruAC}xL8$_#l>ybapZ`uk8JT0fP!3eI(sJ~5y3m(BBcAFdRATFvuR_x{^>?Br z*M$3SPVmbr0+kI=_3)?yh0;Pn>-4bt|Df^j)c-DSIn^HVSkC%?Gu^DN=8|D!+h;cB ze@(H`|9cZDRsa6O@Bbs2y8{g%|J_mltBXci3|VWU{raD`+592{~;)G{hyfW(En1b|0MH;;1fXo^Y-=MG5@P{+5)w<7kB;_ACtKO*%yEk z*Z;vLhyIsh{U@0_Vf?K!pz%0|{+CWIx1TDt{ulTA-+T-<7P9XRUIaz70fjmQ)#)&g z|Mkmq=zri_3@WjmvN)*32Q;d3s0A@H5y3wu6@41)&x20^T4VJO^|j1sFgEFo8F~o8WCQ7K{V=H}kIK zUAb^2@6^HldHeV5*uP^>-p0irEZ(>np;>v;HqzRjY1sBAw!Vo!gjor%@1f7`{uz4~ zAf}s(&;#@X+HSQlrOrctQU{A!xwgJTv$goH3oH6KBcxw}?K8yM`g67XairZiarWG_ z?zYdy^}A%}3}+1M8BjD`jewq$9=_Lus+ z&cf+AD}^?s^D_a-emB?yNZurCl5;3zNHXQ}<1*uN+5uVJR$7MZ|1@x+Xc26(d)Qj# z9#vqH-92NKd)T@&J;lH>y_FzT9lf($vm|FH!Rb-@-?=$ke~hh1Z>G7312_Nawg7jmP=~FcB;POTjU49E9}{gf3tZ$ONi#pbA`7X0K|GDzH^~m`cD! z41A-Epojt0MOEi~rHoA#Q0^$!x=QM-bTO$M7M_49r4siLOG3SByhK~db`7$XT)vC2 zPBLB&jsTMJNzeqceFSs{p@7SsWS&LgSlE0J4xRy#ART0YLEuBM5S#($Kx7>11P}wd zgO|Vv@D2DDw2#L-Nx_q#Bj^O40{J(uo;i8+=s}f$&brw8016pQp#qp zQU!ie1~&hVz((acD)X%hykqw;RSHxA`w5+>j7_!9bcKqNP_p*fqJtK_XKPH5)^_6I z)I!xruR=f==mWCAO7I=n0`kCL;9F$C_h1v)1NMVo!2xgxTnDv#p&S7{7zolpIxvC^ z@CKL+=7TT5BH;Zj$`XhI&jLNTb@}|U^Sjr5z8in%Kc07f_rzBw?w*MC5kqq_(}xa7 zPUts)WCUNPqH8_2q~S&ie_X2(TLw1$lP$lj_ZnLciRs9eUTrjN$-FomPdXq#KS{v! zeLgFX5BmSu(?3A}>3^F?n0-Myg3`bWi`nn9dtOUr%$-}g*or(uUx52W`s~J1yHG6B z8At_7joBVhh}%MGpA>3Fwv}Yx6|4Xxdy?^H@Eaicav6Rp%WME-G!V4tU8v5#s?;1+ z&8`ZlYFyPGmF}wo?<%8K?U|(9qw?e6=30LC1D0dtI+zt6ri-kYz~M_tVrwO?gG@*& zU1wWL%+m1qEuJ9T!tRZ&RV95hfGJ=Z_#SKrhrlr~@;T@&7y((21n+`rU^*kwV^S0jncI&t6x8|+E-%9+^a?R2;E5BUH!kbra zUim4$G`fB>*?{D>2beAB8##(CeVXiJ%MThM-Pr%M@F82?!goU{JSqisES9@Fqc~&9 z?N}Z6+PKH^1C9?tFRH$m=Dg6;&8dEQX8t_%R8SFCxGQw5fS-9E;yUpX@&HS2Be`uP z+ZjSS+!By{XMt;gC#B> zDfkXleNob*XJj2pmvx2oBoKPi22|DITfLwLs0C_+8_L^K1uiT1oKXhs?>VA83>swl zZMUq#VA&0*9MJX3!&WE*Unm3UXR-W>7_gimtvSgOl_kQ=07O)Ew3}-`kdj1On9O7u z7Y>u5VEbhmo5OO9%#f&JG#}wCl?pOBEC#t$nZxpaW`b&x%?kirrtPr)GzbUJgA6bj zyaJYi@4(Ms5BL)_PlEjgNk9iuz-sV4*a0*s6I4#B0V*do0hJREP#4q#4M0oK3U~n_ z8SHZs$^n1S4Mc)y&>f5bqX6~s-Mn()_X{`icMSg>I(G9H{9V|#Mf%&cZqxFmA1l6TwAi0we_z(H3b%v)GDN#2U*l=g|`W{E&CPbwi4f3%}#99D7Ny}G2(bw z>Or|=sp+~nLSdoD4V=aHQ<6RO6vBS^nN&zT*#BhDTR*jk+4bhNX5whRca#1DdY1_H z(;6Lj*$sXfmb^}3g%M$@d%Q^&bpXktJ|I~%1djuf#YE)uWH1%H3+^hjv4{bcejisx za8Mc8qYT)OTGgUcp7Q@_o$0O8cDPm-$~P;gZHC@MDy%|<8n7jK?)`wEsUc`KS1fm| z+Bc6lwP;$d>gXTu)LihAQ$H*V@2fI;`n{S9^iD5eDZoYv?&Zb70{wXdgODyH37J^t z2s$jig+#$9qzPh?{#xUxnxMN7EOf=^q@}a^3azjfg>Wp}+C_-LS`?0n$M#x+zfc=X zI+y-5^56d>QI_&sAv^jC7!BS4<3VAa&pWf7oq{rYhWH6h z7Vq>C7a!~R$l|#bJVDcmZm!M1ql-~nfVzu!ma9B*XE`Cg@s)@VoP@WIu4<5cq3M;i z8iIA*;Fk)!?@b^h?qrJX+FAH=d&6@G zIHv?h1*7|Uf_uKU0>TwD!h4%=vFe1=*5-dcg)x>7BSM4YhxEH}x8lTxzsz2w8CiY5 z`T=S(WzorVKK=62 z_UK=(<$Jz=_RFnP9*arV&G~%jA9-5}sy;HhTIcX(?T2mtW5?Jv$)}!3%*#8{r%Tl3 z7gEPwI`=}Sp+k?lUa$Mho*Q4^OmW7&z{3u{GW_ca1tUhr?|AF83(LNlUhlKqb)Y~%BH_N{KWwBx!BZ;c#t1YovhTBR zrw%$WcKvs|Cp17JaC&8*`N>`d1M)ZjS#I6&u}5FJ1n&9Y_^1{;eQs#rbItGNUmf4+ z)v@Q!&EBdvvP+M;VnVmmo@+VJAhrhEkWoq{Pg^O18X}WgL1V46( z1+y~$8XM+1r0J42P5PZ3cXII)C&w(DzbyI7XQr>{RDb0DXX>3f`gQ9y8TT%YiR_&} zB2c%bsuRUFw}RWc6rU3t&OCMIuWc)Kl=qvrqw=Fy+%-QBifgw0xqH9lovcC`>2_|a zetpoo-=67`IL&wVk1IaQ{C4Px_ntk};I|0(8x@Yq`S8Y;w~v_SGz$E6Q=Mapi~2OW zcfqgj(4iw66ui`P{+b`6&v$5l_lZ!-&CUl}-oCN+=D5Sxj=z<#-9Rh6SAKn0owT=-|t}G}m@%uI!o6O}g24KA82Xe*A@-nnT;?{XC&# z&gPT9xm|F-badm{fh>#k6;r3)82xqsoTh8rT-2Toh^m>Nus3i0t+A(@Qv|>5nDq0$ zCx2UG8geYEPssMQhN!IVjrz?0^Yr?czo)V+jxk zW8OytLNjZUY~pJjt`#=FvdiPkt|!OLUvfCh^U!oC0e(T1hwmE{H~r`5o8(8v*J;*{ zZuZ9?L;d@-d%E7wFa0+2?dXD!7T!7+IP;Ob%~jbMbK_QL9El#hVQz5L3$Ogn(pPUp z)|4qd_6$2(asBa1b7y^~Khpki#-n+gt4Jp_SpEC)!G{CKo=iXZ`z4=Rx1a3U?3T}O zNBXR~+Ket2UUSg=Wy6L}du;HPDjPOlt2g*3mm4nQdi=&t7Pig1wfcIKFSmtX`u%kN zx;`-*k~f{rOKiY|yrgn+R$KoD(p8*2HeCM5xHtULuKizD8gcKMwidgY@b{Lbcm;j4 zZT8{s&!!&EuRa5PwfOn^pI!EDCsP~KpAq9u?CX1I;kL6KyzUO^O48naYu8tI=6`f! zTa$48d6$W6e%rF(wL7mE*Rm6Zxi2;En3ofH@5^Z)1bjKN)y>}9d^dj4^3gpLhA~;s zo))UV;obP~o;!=?wF?{5#qI3T$=|1Oc!UngSLEkxyzZue;yb$e^p|?MjgJm{CnO> zk!9YUu%r7X{Bf?&{_gtzUj@y~xbf4^v!z?y*<9~^DZu!A&HS-vmekxBgsUg=Lw2Zx5P8wqU{a4~!>IwrkzN z-I$Ph_UOL6i=8^lIUcYI>Us9_8RuV_Z}{sUHu0%QcmC;?v+u8W?{XvWUfV0Dzkg)j7q|9xHfGAV z^5=}@8U3@iU!3*ooO+Eqt}6%{di$-f_e_|$&aM8?rcfImH zVtOP9YbHcgU3d7ojF`)JPo3NUdEMC~E;OT)TKde)Ng|b;KlJv9IzyZK|F!0qu{))c zMy=614?a07@~`xcWW5(O31JBwQzxo}|ECLYJbS!dLq~S_bm8SSd5Mp+ zQr7y?>4_bOpMS;ZnUJShvmSYbnF;Jy*L&KN`RP(tN5qYo*D_$wge8=)bAOGUvE+|m zht6MqecY|w8*4pY+9RLRy=|TCM;px^^xdAjo#q4u>XKuQRyg-VZ!%O_1G`-ReATB% z`X0FbQQxD}Uq7Okt|E-B`}WZZ%@5tp47`1y=iN@91q~fKZDEsvl+nAR41w3*SYI#Y zfMn8yUynu(J$v!&=e^J08J-@c9Z-Xc@vPnYKPCLLkckOMKIJDQ7`$l>% zY%-4Bg?Bw9kkw9grFewp?&YJR{0D5lw&yxfQub*#RV94A1WkIcVx99iodO812LBqShyk7A7olkxk+V7{3^TDP= z`Fopuo!GMRu)995>Ri5El(^-mk-Lnm`_0cb-i=y0?&~>s_KeWEy!}V~3!j?yd_A(x z;d>W+UOB}Q88mxy+?2c{lSjNnbw>DSp#{%>Xq@+Uo%D|ypR3&Lse%ia3!dE@8K3@f z?8<|aYOTzFs^D^g&zhHhbKRIZZf70MyG`zG8hP=nzWuw@nxFmFshMFl?iAelx}e<` zE#ExQ>5CgbY?OL@4?n%`lL+#f-WxHNuJhx)?YQIfonwdPU#Rm+ogw-r&3ZlB_4Uae zM_%*U7}R0LopuFZr!LRy-lg@xP(;T7LuvOnt)*l6KLr@Th=YTR+%;DNUX&7=}?=W+6KzAgw`vtxLNMr#&_ z+?iYbtC4@sDhT*xYDBZBHfx@Z>-}pjj~c70uD^07efd@6y)y-~-;Ip@eA%9>8=NN| zs`5@fw~?VM77Y40vSVJ*bAfLK1)exK!Dr*^yZdd)c)S0!SAJ!M^QJcI_}baozvmp? zPR3Kbt7o>oRlu5sgL99a_&Lh6!{|Br*GE26TUVpv{^Ty#2kc#1@#@ZN(H~V_@`aDa z>($x2zne2=!I3=A5i1KW%-MakhF_yrN8LsaAGhm~H@?9=(+ z2eUHAY<=xY*QkMcIUkR0^3JWx1-HM>>oMey$wT#ltI}dF{^B;`sW;N7XpE{q#pBZ3 z+gIKDBtJ#p^|H^TgH%8&?Ap-nT%S`XHa&N=Q~$hgE*-1T@PK>8XZq*dyZu$cvy1zF z)^t~^L49Jbw0$*dnP=)B?{t~^$jaA7&X2y^xK&(e+Va5q!!LF{|MBd1H%1Qs;MRuL z2aIo~^6Nc0rSZ@XL4SVKX7!HUymkEgu<<@?HniwB`uZ2k?yYE* zb$rZUCpR_85BaqDl)$E0uCMxpo{yTQy*Ynco0P1N$4>Yt`0AOD|7sds@ay@J_4@AU zdT_5>_Q<`SXWss0aS*PsVjO-z%qU?l_J(PXPHg-}Z$(Cg>ma;R3EHjoddHkNr?W#htt!~U^XbYv z$5>idZ%A=BjD+p0<_<#2&O{s)2__$a8se?%a&*f?PH5WSOmhAZw-r@GguCTw5@R<- z4S8hrG7W+ye>jM#1j^I5D&UCbW=7Yy?%q5 zIJTWyW!Zi+b3pj>G(2O5;#~dRGCTBp3%BPYcMIgTZ3Pn(oo5$2Bg22X;z>5|d=`Ok+s4shQo<4?=+D?yG$?#Od#|mM@w}wQ! z!WbxLC4*P`xr+-h40^W%MVm1{RL!u_1nL>Gm47Wa!hyVMB{_sfS06{aUNPH+c6Vo! z0FD^8c2w0~awH;p=UQBWg#8a6Qzt+u|E#HA%LwM|gWsNYq@BsfYgXwbmAp1p#K)e+ z@F9fSztGEeWji2-a^(=)5=w(+IL9KUsOI`@)bz&)-(YfX$OUP>wZY1Ur4+Ow25nTIsxOQ3uSd(kah*A~Lk4e+vG?;?|!A}#`cKj3p;hFvisWS}u~w2U(f zSAQL&mc$^&;{|IXky0tThUPmGNV z*dO&Z=%>}3i2$JalaGY9C&1*8+a7I$@?bEFraA$jH_qBmiZd(L=$(d};!+!lXO8GQ z*c+vZepE2SrAouZ%GFqHq+{hb`*zeSqF$#w=cX+d+OBG#co8%X)@ik0kKx(&Z^G=b zZ4tLJ29$Jrf9dg>#WK0u;1YI9E+gcktRQ&U3Fu)(tFxA#j5j-jbdnLmvOtfxo0eg) zvVwSRC)%ozk?WJdh>NJB#?5`*>Un%}ZxB-bwtVxH<#@!Mem#yfQC>cb`1@fq7X-P* z>y^mChtSDg66c4OtV}Qc5^>dRLzcL>&GPD2_FP>^PsA!PA+`1CHGBO~E{HK1e!4Pr ztNZDy2aQO67w3i~t=>Fs7f*X2vLO`C5%BqB)CXThOIW-R)7vyr%Nt2(X&8#K`BtgN z?Ql%GSpOP~DhBh5ryJ3(!}hVvu?a0k+$pLM`gQi^Y(qA2thcIj;o?>ie$8AKJn&Z^ zR;WY+CbeT&t6+NB(fY@eLnD6Z423oYNv&hx;66fDN~rKPB%hwv?}MUU2Y-D37J{T4 zZZ9Q7%*P%U7Un)uE%jQZ%gT-Ba%>-2 zz-Co%M|S#dOK-1G=|ygN)Oj}E(kH~Z3U{arT`eSGqwDHz;w+BDEIV4Ay|~b3Ql67? z40T|K_~T6}+ONgxhpr<+#mUs^P4^kspVD~uDJ@5lIMzp<@t~}iQ|V+VFL&?d+mTW{ z`$z|{P%9#VX4@tr`$b-L)v4(Rz!wdJd2repiBelG5=MG){>A8M#dZUN{EmbwgT$Y8=+89^`7=s zcW+vEO<1~4)7~J>Fa;E>UEI!S3fQM&$skKtSh{CM2rq`unY~=K`{8KREY(XzF=|Bg zWz}1y4c?LC<<@UA-ciJuaPQ;RqE^#H5B!Rzlig?o7WvMWZN58abAG+r^X2>&I6~e0WJ0rM8kA z#^zJtc3n^70ls+N4(7sVUhad2RX0`l_kAK*t!qY^;P1$8<=9?%cIkM~Td%OkFzvjz+CM#VvjSP6O_`-$i@OiKKHbRh#X{%2^%a;m(mtXU~uN~?- z?;onCIK#fjl{UWDcg*Kx!$xC83B!zbEfGqDHow=n&r7pK;eM`|04u=XzD1}vllU0W z@(F9->Sy13$}mFk&9A9289F8xpDTii-@RPRQ_pfBvAYdC#RRy01GCB6yOh~&@3CDp zahM6(JJ++^&7_am*MzxSj|6h(WS;H=82=GPQl-%-;W21bMbe4;YeVxcFiNbMyP4y+P5qD+6S9X~r)*RUpH_$3d*qh#jYYyBv; zpSjzFInz;5a8`Xc)Kv;Y#_A?&=QZ|l=Lz51l4@EAq&bD-yD8~egozA|AVz$QG=SHi zxpMVO$Ik`g&JfmEYtKU$OV5NCG}7&^x%IDWngI{B`UYcuU3;mwQVyJAu_I7_fv_fW za|=$23K*j|-5veO{T+(O7alGQNgXQ|>PV;(7Qm>kulalmgMrkyu-?S-n$DRe`z7FN z8Eaoc{-Z|=g@wBt1LZE+W@L!o0)*vfPd^BNOh|)8&ne74AEY7Th}t~&B@uf-!~!ha zb8ELWJ1OT*;K&^~F=5^CoEewU;rb=?R?9~sL~-;1OflL_eX2h8Za#6KOXVp2 zFf9#O{T^b?z1Q`R=}mTNP!i3q!oQniJH7`ao%-{MQpK{>S?d))e{b0>nOjAt^JV|~ z(m~TQ==LO*K;)yx@#M9d?&eF=s@9rSXQk(xE*_!yQp=>ek!@oK3-|6Bd1@llb`%Gy zLA(cVD}*3gh>)4`vin3!0}!FK!y~pBOW#Nb`c`}1QTG+oAI)59N8cacil*U?qG``m!7k3b9V6mS-}Frc{N$SkLPdZg#l zD*RXk!H$n8KsB%A*`AJsb_uTp`NrG_YAGg8G55ECE8?k}dlVNTs*aE>x;K)9358%yMvM%c>p8F7Jx`%;gz zTBrvAT7JT=4y+>wmaufrqcNxoP`2Ni!ONU`UL6NBvrIl@#(t_1Y;XdX#;y*E9EqUA$9Q{FE~P9@!(hpYLmdr{hI zX7<9%W}M^e5wguf>umuT7DfCP{x{ci?i~^S1NETmKn@$SDuj-E!&m?If+6JQLr1`! zdE5xKEPlyPUb8-AywYW3H}d@J=lRT-G*LyO8i&!Km)a0Zb6Lcsr;RMPx+9viU4ZM{ zZDlf{h^8xNKuR7Ixohm@vUTfm%Oofyez)umokFxD?!GkIJz;N?#5>2NE0|SNrptO( zl`n)aAsJuzQi>3jtzjJ}60SAJjk48ovQ-HMIZA%%?aYxB`8<@BXgfb0Z|AM!fbdyo zE<{!vWFnPjrMSym5e%<%iyIzCGU3v6aOPfKSs!r_MKAT~lONSRbL@ zQ4hecIncq8z}wD>L%k3OJ?*ij?U1%z5B3Lp?=hr@p32!pBckrU*W1vpS#z|QGh@)b zk#`r%Q1NC)yhX?t<(d0z#R4#J3nLT5tN}T+ky6#YU;2mNbhu;(rR`+bM*kX-7p+iWQg1L?(#)LeZ*z=rf+X<#E_yGo5JqK32j?R*0SWSS`_pa+FLcp@yt2ZZ z!1qeYl1-<40A+RUh1W4v2lk=xb{v8CqUqAd$X^@W3M6!86N-Dbw8ASO;Cwhqr-wW} zBg}&>IAVH#R|~A*`o1Z)-Rslx``Y@<(ZR^DQT=$U%B@8Kw#7u0Vor|QHsh$`dn5d_ ze!!W)2F4VQn;BhzME~jeZqF68lPLvg#`w!KG2faYLh)4$_~ABx0tn87o+1fVr!zY5 zHj@-|A0F0Al|LSYf*BZ_9$*^uP2{U^OA4L>`GJ-sc_U`Ps#gLS|7pv$wc{Q$!dz?x zb%2uob4S=lNo7h?f$AkQGH_5nL0w1bqvo%+V596pB6K6lH(eg!Fv2Mp8xYVV0gdSK zVfJTWKmt5`F0>y4L0XVhPF=-!UM#43lb9U!nibUItItnK1dB@Pje&4%*(NTe?&KN2 zf&1!vA`X9Y&^e97(zeHSFSy>Df%^MY6v9sCCr;pmV%JXS{9H{(gUv6)fzG8@w~*O+ zx^GpX=UJdt6KQ}h%i40j)kgi^4m_4P-(x(GdU;mYApSA@5d#gvA);ZMbe9#awb&Ty zN;3;9X^1}5jJXVm#NF)Y;W>N+sQop1oUU19JLDta84j5mLs}d94LT}Jj^y~|j99Rd z;yPx^ag9Cfe30NhLdb}hnfEKt+Va{;q)w3>;&NV?7sojPF*Xz8G5lBR098Gf+~!av z-$^3UNfHHlw{7+7J^LqzMUgo4VGxeS6#C4_Pskp}nn{kt)M+OpC?XlU@;)2h&pW*f zRQ|jITI^P!yiiaC3?t$lB32!5?j(kRo7jJ5MjXaVAq=t1xTqggFGa#lAO7NUS+pUu z&?^4<7ZMihOzTk~cyEb&Z{JiAexl;`9ho&?4itG*1W>Y{ow zZN+sX6azH_j#O#Et!`h7y7sKJ$Nt5y0mJb{4ovaEfb=6sZSaP=k!%> zaM{+~=aG90)twYDkh0c=lPVUf3<8bp=jVsTpqwbp_y<;{9>po{=q$?6p?E;&4W{w% z-ls7!XA)gw2$X;oWOhqa2+<8A%n}pTK$@oIckTHEHGxF z`oD^7v2g8--|zq8_ML8br^G*Zax{~%+D;akZgT&U=adMP;pzfsl@1zeQ*JdSs{RuQLv*(ff-v2?mRr0{- zK~WguOs=jpftFmPWS)*MmwT`bUD`(V4+Kdz0xpApQ#+6{O4b^Nu=>c!%+nxMJ<>Yx z$8HVH?hmA+`ci{%aNs=vg(|02v2xF>T^cX=)GnZ+?FkYisDPg}B~xjrD&K0W9RKQc zr?9mAS^!$W9ZTCSoxZ0ZMDCv8@#hIJjQE?}B?&XRKpc?q>uAtRT2g9QZ2)y-V+d4% zE7bf^e>m_J`+$Ljt(!7mU*uVL-l4=-CIc&wzG!ZhFWtYip^B(Ex7(il^IE-kNL%Po zlo1s!wm#?K*Ope-h4&nvUCqeQ;$Ut!Ub*@9%Z)pgn=A%(t622W^Ls}EOk|AI9YO%M ziH^o4c!{F~fQM;)nVl0{B*{>~oDiKU2lNcmyOA~Mn#|6UVY$qm14982nlkOoTk_?( zV|C`d=Uit-#KVP&LQ~qs8?3W(3&!^1#j;>{Bszps z(Ubs#9BkfumHUb1Gcab6EExKO=H84_UJ!w9W~n2H02pmFYXxW}s|jRYZomlto)!XG zrh>qufoF|()4QJUqmQw_eSitav`M9=ice+wS`Ni)4K?6dP;A|lu3moq9gv=A+7vu? zcSULz%*z~UyaIsB*T<~l=9{-&IOSIDq0&6SZ{V3#w+&K8@^ILKkT-0B`Z}HwH)Ji? zb3{>>7cc(aw8z;$mc_P$k{7UJXs5MsBmTP?V$H@dN{hU-|Kt_-`tqcK@UtDIprl)R zQds~g_iT00ld-|PRR)vYAuwq`6o`euvXa>)8s5J2-6?HcA*fvfDDbiPO_P#4E74EXHd++!tjiHc8|?*S8NUlJWipLSkL<9~mW zAKcPD#VnbHty_k=f-7Bp9gRxCh7OaL<9<7LhB(EZ=^FxLVMz0ua&+O{@P$1Ig0J`2RY&fNX>bFn~cdWpF z8s!NjbiB&N>L4}-&?2+e0-9}m{aQMz^pD|ygW}?bx}i3DvaEUcZ%*C-vA8Ps=H$7o z%aFl98J+2$0{S4?nUIvs!hcA-*-ti$v837UK*;nD{SnKcPiei9QHpv|gF_i22NW&m z@8Ma~L{I0Qz`3OQdUPQj{Od31n0N^(wJB{#zT?Pu&^NGeu$iV~-%09bQAiW*;vDeo z3N|weO?0?v3)9WEmPvn6=$9Pm-h@S_kFUtW&=@nXRNhI(p|rEHlkeDNkR$V;>| zUQ`iR?AgkmwiS%u!ks)=C)Z3AXYk5)VC1YAuWnyV-B&8o$bMSN*zrYmL!FhWQh8N( zpvMj!3nl9+=;b2nxx)5U)jxXcoQ7qprjcPVyyc)>Nw(CslQ9j$0mkGtGnnXcOdf01 z2E#Hx%peQuQa^>cck1Et9gar4hzxotX}IL5zUg}`_vySD2xCab_)S)cSn*}x!^*gF zwwmrYVO}?2%%^(g!i@F3{e9QpRP4NYBp>svAd7I)5W(A95Q@=F5>+A>Vn1+eo?lCf zm|wv%w=bmbE8ABZqs#7^#5Y(T?t4Nt*B+tBTR|agrW-#o`g(^vuKm=!Etq(+{$yO) zk(i6FTzA-sy1cW5^5<8uzBcmgLCC&)I9<+P#*=GC2Gpfb4rdR!t+EdC@YBugs<}N3 zCJ=A5N17J+_xscgDY0rScRQz{X;a)wMV=cgC3iYl!qZ2OG4L87WOH!WS=CJhdC#)3 zwF|e}j}NArDs^i7xHh{r<)inJWrDb`aAzy%Mm!I={p-pY9hrGegLEQAS?E?iHLp_tdTwJDAxX-Tc8&rL1D&xMjcOn!8=4PI|cR<6o?QV-s*4)+Ly$X;sK*{1B27ig-cak2RzXP)fy$PWFXI(hBxGq@sqd!RXY&^(^Z(8djT=2DqSc-(f2NqzFk6iAm`&N%r~I%d{UdY;Cg2$~+m` zbS%t2dw`orulJF=v2ac?xQ!-cGT$P{bZ?Le5^>Bi*1!>%lcHtt;W9LJ#cI7%J}x+8 zi)JXLQ-L=>gly!oarc^Z{|9bbAy1B6?Za@h;Ky*9rHHKq=O(nrM3X!d#hFIs z3&U zI-Bhv$%7tO816cV6v;m!luIg@MEvoGYEJw6ze%R?Q+e`s)b)s8&~7#zAcl6$_LW5JY%13cGUSGDx?0ai5qOkG4G{uG!SOs-<@Wv)ZXH3CzJF+){xu){r zsqM{d_JSg$QI%JVH>?RGk`uCOiTxli8Jv+yv&tsHi)lM~QDhB4LoE|cW28QdVf2en zWS6D`K4Rh!QDdp3{S?r~pvYu12{itH z>ct$cy;Rq{)Z1BQZvQXhY2r39N|H!tY>ph=+kS5(+qZ8jPS$B{v(cH?VC+US#=i>9 z!PefHUy?v-j!UD`^WxjF`IP0X5S>KDDS!EEb@5VJG&ShGnib;}mtX;jQq%BDAoeVe zE(ET4ZJ5=J&U)_9B{x1~+?TBCURYK+kOG*X+JVJ6BbEw?pp&rz)40wJx~ZTm*x11h zwDyYms)Jv|>o;}O^vl)mr(o>Jk>``Ee3_@0=OR*KCy97QqW^+gzocHV(8H>8iY_`D z3BKd6w265wsq;!16(PKjhy!tBipZ6=jSWjThi%KfVYx*W=%`wKxPSeP=MS+g2le5i z!)TLGD~z=mFNU&nxvM_l^FdD4a&rGg;z`QR3oYC4dUO&k#Scfx-al|S`c z$&2m-f^6_G`cshKCbTbIe9@iNJSP{tN>66$Np)6wqSLlL6AI5jsg~4#4@3stM87V3 zE3t`ZufN-WQP%)nwXgVfVMF1(cxvq987^!o+a14tYf4!wZ>*3mF7N6M~hUN3EW|uZ8)jub`UYjAm+s>&Axkc zZNo|t5eyiwJ^oYH{EMH^-#z9*S5szS6DkK>c><9?mQ~lE!M{uRiMWRJNFL+M6#1%j z7kOw` zM{Fk1r8s5)=Dw%;ZI$rp!4I!(9gH~}o*?OZc%g0o#etpsk2>CW`02Aiy&=R=oKHgt z4r-2ag5b4Y;hQA~CeptDw1K^l4Zw4+O&-r$J$aZdK2KWN=|!Oklct%Se+ldjtRT!T z_8rIk!>$iG+T%u3;)f)~G*wF>(!QmyUhKJR-@&`Bc(070r{N7GB|zAzDdLOK*UJ%x za$TBC<(xjPuS$mM%TL3ifbBB1*agh5MpR)0Y{zW4o9|+>u=+TiO}J!#?=ogJJ#r6= zT|@FZCcNDGRCnPNM$2YR#+AigxU6;{oYi||K51AE2_L)XgoC1=(RRl}FnQvaEC-~k zko9EX*}3JZ?+RbvvVJaPklu^9ESV5)QMtkUDP$*k&xk76r>U6nOvCo#cAiM=B z0FtcMZh=MV*bc>~9&+CTJMDowB)K4*-s)a(g?(sD)u_Fkdc~C+toH-OciS_N7~R@G zJN>+b?#C~8-15ib@kVVovY_^PR}M(i*FZ2lPPLhToXN|2h^l#xuTshKRn6PgG|ncd zsofC*=Irp}7{DdlX3ZL@H(ZjppRT_9Z|f5>hEeZwQZ2Pr$2%uRZ0a3B9(ZU&1B%=Z z78f&b=q;jOTZDpu81q+m;Dg$6GV-pxZ8zf6PN^4G)!Zt|yuz9zRhw4#)}=tGiDV+; zd9y}@O}x&-Y1kc#sK+QZVPo;BV6^Gq?!!kXxx>TUWjQ*mvuca;^Z+feeV`b-H=`^Q zNB~{XNM_K(&@T+ffuW?=$?1-Kln&!D!)MYyKq!y20GV@36tIL^3L&EKs#p{5J@0N5 z+gn3RmquclaT!_bsIY%o`VhRs@Z=B8LOpW8ra90Q`+VOXN$GXhjjUy^NQPpX%GkB7 zWTac+ogcWkHsY|VC={K4Mgt~$_-J%tE;KV%nk zF%%!70FzEm9*fil?`FOIu$$TS{%zswfye-9?_I6_!Sw|V0K|GzJ($xoyL5Mv#s6LO ze+BV>Edq>>{D0OpMm`N^jfGhWd!DU445q#Y%6~C?b=LZ37E5L+&bO_^&PL>T==AvEDLs35CD89 zYJ8k^wR9DC8To$d*YA$~F2T*gl~=aLh1w%&!lhMx7b+{cJCgW6ZqRlq2Ba4^fc-l!H-K($t@}4To7TrAhqXFD|L*=o9)>fC8R zibS*Sd8crv;mKbF{;nLG$?}c~Fb6a0Xi(?!aK1fccondbXHYQOJ$~>1TFqJ(K(v)E zcX%=4Of{9Yqf)~01-2Sxp*pxd7f$|-CFzN6ZGndCzBqB|7I9=N(4=yk=}tr=crWSn z-z)b?)=9k;J;hi&ZLj9vJ!IpMvt{}u0d z4jNwAnctp0AqxHk1G_n$%-ATW#?Go-#dME$wyXtJ-mG| zVD*+al@{6}pkOh|UeptQ7BffvQN{g)0lSivJQ4 z;;!+RkA(<(&W181N^d;BH+dJ!iD!0Ti)nnvddo?WPNWufN0YTH@8oD zZ8xto=hRsudTX3+^J5S@)YRWxVI;XLWrw9B(Myc-zDu2@F5kLu@0>F%rZ{HA)cA%C zJiB*q=Geakp?b0H?jbr-HJ!=uzLp7*+8Md)P>WBmJ$I&AM$2v;ImBG>0Hq4HA6ysM z!x>b^z#!z;G1FJEBPK%wh01R8qMfX4FdU~ggM&MK=z9CVWptud47Q{aeWISzL=1h~ zbyT*2#CF!wbH^> z?(*&X%nlewUG!O9DxFhP{K|Cq)I!q#(wvF}ee3&*47wRYD1V2iRLze;nrrKqn1{g$ zdw8|A92^G>j^gSM{yxj`Q~npceNWUK%SZ(p00VJ0bAmgk4T~q1(qn3l;x4%U`{w)@ z@di?@WJZujKr@D2_6_6izQ^C*%)nICauSigf~>`L^*~6z_?bV1)C5PeG?V-ish7Pb zryA5|1|jkMn+ct$AE^I1LE8{#vSG(tPW)}v1YG%%os+YXi^Ed5e*RcW5TR?hY)|r| zpR%8rs_^~(DHC?p;lshZ|67;mK~HaS>~Rl6TpGI!c{f!guTBm>31iMMIEj@BTYq~N&tpCW*(dd)3`m!R|9hN|Tx_x))gHqcomt|EX zP73r8Oa5KQ?ZJdD8ZGGBk!CT0V}7&ppSFSs6+6dX@fNRtPqXZL3=;S6|0dM^5YXRa z2-tO3-k(N$v`IqmQL^s8Mu3vt5oQHJP)wtK8UzjaUs}r%l5AthA%v8{4b<%@;ra(ZHHlIACHfm-Aic7z`_vYxP~eR zYqIz9@$U32Q#btS$~0E!GIttS|3LLJiC`(LS^YlytrLB^#!Bpis@&E^f%oOU zlC6X{cz5Lrxwl`7&3Z=fvd%IcG8@Pn(HavyY+CH(ar+aJxzxO)>M{zk?#~<_QpQ%545k*;&7Vm?xwW$!`rZq zc^^prdiOU;ZrQ@lRS_%r|U$q;wh3`ycUSYP7JStH_@6FYq}Q#QbX%~7bH1!Guy9C-cOV5 z&pe(;Qf^6kkSpl@{;WBBY+uQ7_Vr3>?aP+eU1wPsJP13JSq$#@R7qljO=B+0e1Bvg zbH!@^rVpwnm555n8Pn!+!x&AInwPa)Tiy$dZ)t~yUzy&w&i5z=YdqT^2r4okZ5X7b(Pr3Lt9Nf%tm@sKRHeKgAJ_9RF z?$U}Y8ZH5}=|t-7QCDsK9ow;#msb$a+xewg^1b8)1?`^Hq7Br|qX&sy!(-Ty&HD|= zYU$yN53sHHu4*~08+k&@<+{4z{-6E3>T#F?$_;ONMqHQXora_T;Ay9nwa%eD1#6Zw zDmPYGTh$0N?v*-&L2rEpkM{?aX#r8YBAx<#NZ7tOK3kY=m) z3szWJsua{KA4v?Yw_W@?ob)ZgcUiDoipBJVW}+uT%xR?$^0cVDnHub9WbZ^@S__r_ zk{d@y(&fQEC)>_~MUOCQzbL^ExAcH}>B0RN_IRJk?iLof1NV4}OPiQ8`6Y9Pltzj= z20z5@D+{$lU3vR&`^R4W+faNkGH}GAj5HFG@}-b|yjtc2tS932%^LShY9^NsHDMVA zymh1S*SLbd38E@x@(?aJ@lrJh`jlO6V)yzax)53&<R2oF?p)Qgx)w{@JuXkt&SZiVP#Wqbg!gl4!NW z5P3MHJ~7fB@%^VD)DUuSKCP*1&x&vZ;amp~gIrZmya%S^`C7~#;sg)J5` zz!tOw5{^QdF~8`bklzu&>mC1hoC1+?H(-px{88)hv8w6Vg`rcia;v$~RZ^$fU3z3S zT&CtD3nt)qmt4NCtl+Jz+Zx14#sUxdVhPfd71pCGGtNXlq`Kp^oUQROB#NNi#q z_B12A$Zd*eu}^$riZXH;mrSt!UOsEJn;sF2|KPN*)c7&Fb5|(+o`dCAhpX<#FxR6j zT+ZbXT{c~0G7Q$`PqbG%8i?UXRhg%S!!k#%NLJJr%mkw2PS!vC$T_&;7$%#ApokaO z2_#fJ^eL1}%p0PeI*HDW+AHUDLyS7!ma!aN7|4IUS~TH)Q02KzR{8!_>m+X{ebZH2 zfpo8;Jl&Pe+(bJ`Oqu9}aHUv6gPD1Wi9i-#dGy>3rYf$b+qDc)#aW@OaRqr8n=%ir zk2tyNs-_P`>XN%4;-AC6N(s9-YH$X&gk06Pz#ecSYOY)G<|e=B`(!WqMvW(DM3YUN zXRFHMa|AiApuHgVOHgv)-JsdG1EW*1mS3?!1m&`I7M!Ei6NBOV*mt_=y&r;*NTZuF zBP@gu&2gRgGa5psBBZ_>bqlSFcpytL^I15_)`3do*h(|$bz3QEx=HqC4flUxLa)zY zxJ_2QwB}8JB&Sfp_aHo6yn34G`O7P+q%xO`s`-s>XNQJ4V9LL#3Fyoe2^6D7J z?bahzxl^4LT_-Pcc_j(SbWm!~qXIC5*BGFn8+~i1T}~8qsN1Ew2-jb!vobV_w$+7w zY!IJL%1?p^*7)>LarGCA+yOZFPl52v&0{z=AE7yWY=F`cvU8ck2&Q%*_F*Wu466e# z2J6TWg4E=U3LiQWM3~T)^Z8+BRC2{MGqs|;3sC}Z6puV#EJK`6EXDg({`hL|GHxJ`>~-gP>0zn3QLmcXUXTcy7p-F>Ri3pG zmse)5Q;(=P$X7bMpf*da5iW{DBg!jMBMPF8t@EyWRYINfUwt1CR#hJGv{tBSU~5k# zyAD;95^UI*JveSM**3I=DO89uCk<#hhUQSr%G^!<8>iDcgBryvmnko@G_3S3u%(@q zWddNiFM6Rpz{RaMIE$}KEo0Fl?c}lcO=r>OJ z!uF~<`#r_U*Ab#i#oK2VaNM(QcxyL}1V>Ln$e~?-%p7TtiFsWZgbXVjW#shuYCGsm zS%jNwSUC>N4IP7_R5k4cu7h|=N!kz+cmhDBJ^&Rh zYl0cX>kcxTf-s?p8R0}H@4|fL<)+r2@vTgitdxt5-qfQWdo{cln%t#_q;mvq?RDO3 z#A+u!baS0Z;_J>Q$Ej8{8G8{3-LzSu;W*;O+tab0f?w?s?*Uw#O~GytntwDoshQ}8 z5X0A7cISI@hY4?JX}i7?IP!VE6LmPp{ehX0i!ZqauMvQ5FIOVFEd*u30h+wvEVE~~ zjuQAMeA4?NjK6;tFO(1tW2G%%7m&k{h&CPRecg-*8EH_Z`N7^!me+VrPAfYI@Fp^| z7HsA=IL)&*y3x}jM?zQZ(f5r>Nv|J(^c8=eHW!m3?`C-8J$9nLB?Sx+Z_K>GjxwIV z4U1p2@aD(Z^J1dA7c)AfMJiLevhRE3?=8A2331>}TTlP7emE086kFydseOG419#M} z+nS!OjMgp^j1VV2vmoA*96m0)(!0*IiEqM87NI)sB!(Ee<#jBxAQs`4Eck9$9*tDr zW+ZO9EA~8t7BWifc>30&!P;wka}Yh2-+YJ&1>jYxdcB*do;Xg?R6}t|O@!0Wv`7FLvs|D{RTrUv1*XsLYrs1g2ohm-YxlaU+U7vOQCs@*TP{4?T`A z@^F3J*yL~ytXI%6ZCtwf36ToQ*X^-f^F?0!VTtIK1V@?r>H2r#*j+#PXJSI^{bYI} zjn*1!XhOLFmJ!{|gvH;iN~WEB;c9>xZXHX``7#n`YA(i8D`AH#s?Z;EXDI5}@Q`e9 zm)BXu#(hSnK42fxdY>5dJa%~W#dYg(Wfy)7!76fSrZRtMX2^#4hCDSC8Qve;+c9*r zMk-SjB*(z<){Pn}QT@-n2tU>Z({`%An~#N6nxEum z=H%vd1mf8H&*a*>yJrsJ94t!rl`@a)zkbE~{hbv|!#nYy_@YY%l4RL}mixpYs@wE@ zNNXQfk6c#xy@1GC^0%E2P|MShj8_NH0(S6|kVo>jl1nyF`e_Q(O z=?dO0_Qjq2|&ospf#pu0UX_s3Pxjnz%_S8#{uqYer?0`BlXQmg%kHEufw$*n|2 zSP=vLe3zoTb&cE)w6R=uxD8s0|B-V&Fy4F7+8Q5V17G362!f%GzbqgLPosU#rcLch z{vAr1kc#^cGFPRaaX}uFG^^SFH?*yS_o-Hoot3a|Yx$l105p3q$1J-n@l>Xn+n&Mb zvc6zsg6~1@>Mt)K2;X>J>Lx>zd-H3blVmCqVBf&$+*{;KMdKOdcRTN*C+y`=ql@9q3cp2B)u z&%$L2wH%f-nn+um-CyD_W%Ovv%Szk7Z|;_*^Nz%IIo;vrHq>W`uC)AQgK#K96Gvtz zXdd#|_ngh>2sIrdulnMTwTYjzCo<@Da6cZ+PWq8`_hMDVz=7<4>-U@owf7Bv{&YD& z4_NxNE(D}}nMBxd-otZlHGe22dZB#oz9UxuCL=K);TT`RBO`~9Cn-xt^|cZzIjW&+zGFBSY)vkFtvz`x~^v(y^-}zJ;-2b#5vjp^_(X%F@;2EA&`N_AlPfg^Jxes;VSV279W`PWv!-tS< z{$wf`htlf@{Qs%lHbv6UHU&iDTYgtg+qbZ~WI+k6bTcjTE=+mY-h?!s{^puM?=%&* z4#V3T+)LKFH&@Mx@~`eX16~4=k%;mxT|}gCrWSF#n3XxV8RZNw=9~9^aRT$UTAPTH zlU^vm>S%IH-cFTi7z@fYmd!)>m^J3k^lVjH#j31Gf1IJl`sgfWj&!dOap}?8a#AwW z+?0Wq^a2^*7jd}LPW!sx1Dl+NC*Dt@SbLryM97iNhPY#7R~MgFtq}c7$1=SLy`St5 z4meUsMyFE7*Mj^8O8Nr)ub%H)h%)URylRusdeM(b`+E7ag>fu6m#;)=N97X2`b!t# z4$^JjkmM`$FM6DwH>J3ZmE>=TB1iGzMp+ygRuLM!`Qcqv8?D;hNfbFiiMKlG z4k~i043j2G+9Ve~gY?Nnw}r95ezC$G3R5?2({pefJ}!hzt%hB1`qu^QQV$*g-i=p|yQ0CX6*6AC<<={@-HZZFSY zw=gLg%kuR$!!$5w8Be5?`e^=$=p41_uPcvqWx}yFpZiYe4{3Xb!3v9c8-q_Vz=-~x z&5jYNFDTSEyy0Jx<*|k!LQ8*r z>C!RnZT-Vv%hfHU^w_xr(wAA2F`webZlcHQ9aSVT~{tl-4 zsr)?dV0)iQ6J|v131|f=(EmkT5WWAkn>M>**toJkBG6!6*yXFC+1oP$Bj)O#gjzYO zY0!oI7?B35mH>Y=5k|L)b5Ok=#Xs(baGhsmE}&e%+5|` zTP#NFQ1$N1vU=OWwP-)KedYd)%1{x^j0~zE$B|`KEmT7#UZ8uOw0-_OhOn%#5oLQy z5iiN3N29PeUz=8lPUp?Qk=98sBCATV@p*(}b+p$2hK4N%d^hl~qRR#2>({Owy>?ea z!2oEv-Nf){uX<`!>zB&Z$fGY_gI5>uRxh15HoC~Ua|%`%quspor7FT=in+K>5bfYX&>A{wXD|B% z$z@@pFJV*>WF8M(LcJsHw+M|_;jdF(KB(%`y~5&HZGX>|?Edd z?2DcN_^^@<*I(Gl_i@;*VQrYGlVfkqJ?s96gROVe2gk+eDgC(0yi=GZwSMrLIkUN- z#9~n9^~B@J_dma!?GoWy?C%+F0il^4bO?)rPUL$v#^`z)VO!?oDP7Us@iUrkJ-P#= zr(E3L<2l`$F5GTN`o4^rMMQBoQrFmH=0jmVia*=kz$BHj%`zM&wsdEsl6^BTM|r#Z z!;pvUI?-JF%Y5}rq_uAGZB>Vs7Q>aD1cTM|v7N2rK~YK}#fgA=yYoK0k$O266V5eO z{DZb)Ns~LywT3eEEm>Fa(9C$4hj8ekugxve9mz=Jl`r;gmabnhlN)I7@kxg|d#jEx zE|XPfNbdEcbtlwKq!GxSD6eZ$^-k>It+$!*j1B=D##i36cMxTe9e%HfU0yz^fw6&$ zGay8`VU(~gaOBFFJk^=}x_UWmyKgo>23yD2{_-O4)=FFh2dDS@)^3l&YGE(ib!~DG z;Z|oI7v+0U*5&E*3vO*q`86zXYt72bTVEPeU2wfCbeYDivQ<;<4koG!(m^vG)XUY* z9}7@*dl|Os@(HS(E)OxX+(;Zk{_t(r~RePwMpW!B+VOt~{kq&=Hmt%#uo*Id2dh?Otx#lO7bEMf9%cx}7Q6 zn|US8)4wmuB8KPo95J*tJlt&6!L4~r z=X-SzmpIjM_j5c80#Cc?RcnL$a2I;I`z0O3Sd^dwWx)sWdTVM>!59H<(X1z_;*gv| zUYeH9>%)18C=DwSWVyL%Do>klI%uMULSbHiqzs*W)aij5M{MyVchn~7g@D?@P`Jkn`; z2jG+3`JX}yKq3Gve_6&smU)O`w`syAALv0J8^CNf5=E+3Ic7d-u6dTgiR6?Jb`-jI7O8*vtGbP5BD%mqqc;4sWhz@Yj~Wl3ebIHm@O9x$+!Ms?O_{n zPgt>^!-_@^W)$fRlmneMMJqa}ZGdADm0A|0F_AK()n$P!!LM@OBzW3%jFq^#x`5tw z#3mF^KYh-aliDnEA^TK^`$eoku0lHixj{C{a8jpFXn_mzRG)o6H<4N#hskP+h06Li z-`ISFmL0G_x+xIF$;xM!zErwZs<~wc-&tDIKhP>GH&4hP;fypSuNJ|;y6Y7QmpbZe zNI8+Iy+hxa!CgfMgvguATthiYv$_S!Bt2L*TBY9CW@)OUH`O@FL!Hd@UwJs5?%OfF zH%fWO0chIAR;jNs9L!!gGAHy6fP~UF|t$6n(dvL@d!x%7NzZ zQO(LuNmNJF-?3^y<@j`sqX!hNh7Kts1W&9CjrWax!XX-)DTd z3xnnd%UO#nV-|vE=NEt`ZC6oIEIuv|wvsnT;iQ%i&$f6B`{@w2){C7cV^E`i1wt`H zo>g#fK{s_+h&#g`ZdMEB`E3m97A|j5;dBM;Y&$ihgcvo zXSTJ@+5`2jh(0&IdqcG{&GS_7aJNR+cAedul`Wp$-(LULI2;RnkNnAyZg1Ln@Tg`# z=Qbk=i5u{+&#NXwyZ4z4RoUuVB)9&;Uo7}&G}H@W~@nG z0>(kx)@O9a)PObV39G-o0PKFtVOz`^~ug+K0ofT!JACD0fYcE-eOCM8s%WV5$1J#4Yq0)k*X|tGHelMQmK92v%B3_ znoH6$4rrOIs`SfzYbVG+6ndLaqlQMAw=9s{n7;&ac3k>A>-4MxQIj$2;mXcoZQVSd ziVpQK=K0#8^p0-`WYUBX1=NIX?bK|9*a;b*mPxOHMX4#gKS-cZVJF^FH5+#NRKU_a zn94BYS;{QeerqDq#XsoQPiYZfc=`}$07Xpubf<-3ZI1RVE$!HPa53S|aW2K9f#vU= z+;eOzZZfctzxr_NT?*niej{g&g6eW%45g+V_M->QFN@935@ph`r*$W^Dr6dDRcAK5 zH18oEBJzTT3MEx)0Il9~nBu-DJ$DJ`uoYTOo5wqiTpFgeVCP#6#|kyiT84&0{My8& z9W17!DlnS$%jUkD%0889qe}KiP;BAP0Y0q-C@-vLo3Rn{UxEEWfBd**dbVtg+L~S2}2+yZJfOw|7n{b~7>m*w@0ldZpPw1Z!OaE_0#}z8vsA z3-m*iEI-au=){8Aov^e>Ufx?Q8+9%*F6wQ{d6NISqu?)#BZt`YZ=*N-Yc*q%&0z|s z%1?lz1q}@ez9wRTt=hk!e^hMVKUwII5a#duXY46z!QjkdLT_ zj+fAm(1vtqTJZ;MLT%B#9GBvL;t5mGC(sbG-Z91RDhlgm;42?bn3>RusahYjZAo7$ zF@{3=E@+=r*MnU=IZH?R@TxGbZ0cvi2SB}J#udC@d#W080y9>eCiWGHIv3>5y2AFV z3wjWo9&Fxvy*-ZZ?|tqxv0-^vGuiS3nfKh+)MfMrWGE#i?aJq6J@(3G*lD>qM$fAy zXS);zQA#e&nd*=2UX#?7R3t9;j2OAPIck4Qs~9i?+11gErXsRCpDEJLcGnJXcMAxY zP`&F!{L_Aa@BZMnC&3|`su~-`F6!PPUE-=Bzed4ie1H;xH)txf|FsTXJ8V9EK;YTf zP9WteS}?{a@%e~m=zjC0X1~w&SEwRfFL2gus*7Xr=6=X#j4Cl9v43dZFe-LvvuE-W zm>Bj4yCLw#&521powLkuExO=J#r(}KI%c-Gja6Ccc&*ly|NOYaN*$@vB}e%AT~u#; zYri@OpgXNP3UEbnUagy=ET!^?e+N4G|IkSJ;BvI0Y)Wo05&_<+I4?%#B&eXaHVRsOc-@moo?9ha%}n3&yqiL-;)I&l@dr5MhbT(m zmc`*~xc&NqJWh3~(qYB;6|&RsVl0~f$Y^@hqHoJ?+WXbDfdiBSKkujA5P$9{jE)^>0{@ zJ+2=@)_cb2+l;HhcsLF<9D7x$GT$)M#Vug0js& zv_UO+8Q((+c>taAUdfy`2j%N|6C3{QAdc?5V|I(Hali7+Q2oR(al!HH>$3FBXU~?> z_B~0|N3xhHdc)+Btj zhAFvANHIscmFpjFhUl)0V(DDGWj8asv3$#6-^a7ykW-X#;W*9XOP%b!7~`+5^fF_f zbG+BqhV%^A=8r|7Rj7vuU78<`6@){Q)X;0Q?z0LVV`D4)D!Et(Jwc_?+WY+BNZx4u z*PT^`a$fSah#c!^)$7YZqcWQ9w|VsiGXts zq5}C@)p$9r`MMdJGH~dnkOdE1(6GK^#wk&}r@cQNzx~e#pxT>$dL#;`_CanwL!Ml> z><0-$-$Ks${dB|6f*OP-+9s)_zc=W`4S~`}4D?X#XmHE9wH5!rYckqckVctoTn&Na z)7>8R;jjDgE3M3I={qw9cTOIG%*56M`Vb^6j@d@9SUB-IzoDOgq;bI94XnQ2sJNQ$12~;mh)zbHKH01fSM&WWJ?eEm4C|+jHxnB92bd?Vj zmW|O-uh`rN$z$eJHpb1G8#;NUr$}Hu8aUIPuTWqjY3mGTgv$&V}|HYefAC{sS_z_j3;p5T-gJ zkW6v5W`nfHxs{fQiDJ zQ3eWOUG#y zA$OSliietWb9o%ab9N>*E+5F7v&ZV=O=0HJ!NAm(R36^EFAFP_DQ$>o-T}VM4|;HkXdQKb~sKCg8w@BRWmSI<$pA>&g%+ z>j|qq`ITT~0qWCpa&WCv-282Erg;2oL;3qWE?U>)6yq5nH0n}=)IHjni_=t)=<{m0 zH?oFs^7zThN1{Xp{2}X>X=`%>)v|xS;&p?J^jFk)aNoaoKGuGum16rOXX;uWvd367ul*}w`k+reRsH>sIZ1~(5zW>?c^3R zgwMz4E2P$kjm(g$Kq@!j&btOr@WHt?-j}_vR<;>KXb=n6 z%L^KRu!=Jmi_Sf-yM4)wsBQUtHw3)bOlmp^{M(H*!q>9N_+1_g+@~MvGw}|;$NRms zbE-h`{FAO!4nWQ8`%^zx@qax<>~n3qX3L6KB_@jw)mQf#-6DAwKkpS18Y}ij@}4xi z9CCyP@l18W3Q>KUTOZ@re|kGCtXV876exGSX21?7+Uaz}08?vVwWHDvcx@GOL$Wi~ zI>^{tWZKQX4aEgCxQg7VxzA~=Hhf7#*YmHNagBnf(Yz^ATSuy$--j%Gt;mc{ac_J= z43jHVIQp?Jb>2t+AnWlOKI>0!M?o_>8wKdB9R-H*11k*S1e!7`bpLQlkolHAIGEIb zvB5*ubF;dO3D}B0m+u2mX{3J&pI#PQRwmh+cc=el_NfsEcSZ-E0~3>jGR5C<8V3sv zkaB>e%KGr8%HfHfxs6V?x{=~Zv`H(lh?DDJ{m~LmOhlN5sE2uf`h8PCrgCPIbSlw* z8(22H?uh8Q(2q&#MArqT^Xo+JR4Dt3>k^JhA66OhBP8sxg5`*((tM?8UTV24vF59M zYrEON{UNp&Il1mPksKl7D4H{~iycw8cdO=Zwl_gRMZ@x<&8z~J zf6re9&DZ@dKNsY;r|B%dJ~c;|o}pMYWblggI#$1I!AC|jqj|J zcY~9x7Qf22RGTX zJJLSteIVH&L);OaHMRoig}2q&%ahxQcBQI>%Zf^w86+3b^K3Ye!Si0@z=q>^HlH8)r@F=1VR|D%TEcO(flS)=5*Mi->Hu+9S#OeNm-30|}C zQR|T{NvUAFW>(_19n+-lp;{Im06EpAcckPxvUyyw=mw** zh&YiN;}j3=>O1w(toD3Hh_%HM+XEdt0VI7kg6<( zY1BRJJ5~&to>|NX95Lr9%fwxIU2YCvCbkIUa6K)lEj$Mqq+h`c4>d!2$hta&T!wq- zDVe7ql-X_`_yy=@Mt>7JvLq{*&A|2R%gq9;ER)GOy5|u}7&N&fuG;Ua#t`19ae@eB zaEd{SXYK4BomZKkKhjM;#F(>}4lq|lF|;(sr*YmcmpV#=*_C7b-sAUZA>ynxijO07 zsA$YqW_{ia-yl+i4bBU;Z@yB#SZ%#>2`I<_GU^pe@S_8(2E2Y(2+NceJbjdLgPQCE zN*vbTk~W6tu*ij5hrT)Vz+aiy(S=&XhDPGVmwN2%hXEbd&$&UQ2A@7YK=xDfS9$zn z%fcZQGg_lkBXMVbV|tmDI4e8+88R3hA$=zp$X3i^)VzkBI)d^}izcs}4!!qQ+c%jS zql!y};b~p(fZI6-R-wGMHi$!4zb-=<FWa7u_LYfgos;22BwHcD70w7eWVSg{i&260Ey*t`j56PKodes+n?IcuS@} z#_on;h|UbZRv5pl3ge3eGEVvGIG{jnmJlFQf!#3nYg`_Etj2F5qLGWltoLc9*Mjeq)VP!Bt%k~3$! zS_3{aiWwOuBoH@NYhX-C2AZFr{a0BO4?9&4$}iL(Sp<5^Qp%I8q-SwlZ&nlu)mome z#b~=0!mV||mkB9S^RJzX?<(~QP5m$5^E6-4!>bMmg|O7w!TZfEVR6zjX{rW$ZlaCb z73cc*Puu#k7Mnt9>uOL%Ia2$d?{~H1r2%^6?z@6rTNJ!Es`Km> z7!a2x*2S-v#|Fy<6`pDKR|_Du+%>4_Q zw2##V_W5kK2KGDx{WO)p#vp*0eSPDY!+jSGCWil!k=3bLvH7L4=$zLkS$}_=Y_PYF z_s=wBJP)YW4hMFmNCyll4)`}!7G(#pE+RkNezOR!-YW*kMIL>pk$<};d?x{vB2r?o z_cGFCfiBLH(!#~xZ=(mFQ$2Pq*InVyti8#xRSWYzq&5dppnu(4F*5)WBOgq&0Oinb zl@w{_(M5=>MQ|C9>f-6k%p@aY@K?ubWe+R)GiHrSJ~t82YBK`0KjKNF2QltY8?BVr zfps=JX`GDPO&N8{yUz3D&3nEj!6y3(L`0%H0O#qEa-P9;#fZvn` zab4<2T0w}n`6{R9Mf)XI_NlbYV05q-73llE{y;cu&)`*&U=3)Ns+CF!qFE`0h5!65 z-t%T!aw9eG-vZ6^4>J3B)8$!V_hRVRu$aMKinc}RK6Kr&dOZD!FH0CQM;a6u)i&hf z3_qeoy|N5tu@`R&qq%dJ+c#H(qId&UZcxnzAr_KhlV74Cg>Xa|8JXNP(R6be+IVa1 zX`El%FN{haI$0w9CuM;Z28>%V4B>OF5fjSRDT6v{V4(AYdWcY{DcfiZP`S^#fc_tU zo9Cw2!;Xo#{d80Qq^RvwNQ3#__53uPoho^%Ks-@NH|xI1;gZAEc zXK4Y>z|AZK^RNw;Mo*8@6QTO5mog<7iN=P6W`Z57l*Y^p^b^<(y0H?FP^CkJESULg z?U7-ArU$~dy`Y?+9N~}#O=WH!)J?UgB7HHNqa!>MnF`o9t(41NRw}yt>B2zi0WUvR za_KTLC7KuNC&|><7?oy-dw!5{k{MniSOwb-1ZE9-nI-rU6Xu1l_8V>pUeF0X=BNO{ z`5MNJ4wD7yW+bU@wb-h1MMA2K?QjnPHMrVgT$G(y=Cj5RP~s(U`y}@(5fw`{;v#oe z7x1^GD^E*PXXu0dp@)s~qdpNK$5aW|a+MEfNAd#l z|H9&zG1$acV%9^=a7PDTP;_b~~0d9&;7d%JZqO3uPhga)kWeG2|(k))9}HoIOAb zsqEU^s^)pgMOJdSre)c35swelO{nn~*_gH)D-$7X<2rq4{p?0G19d&ZAt87s-mE(w zxw*>uLO1Jx1lW5}gdJ#X8X-BHUwcEj{_ddpODjEpSmUA|^8hSBKVtlg7fkOY7Q!@k|a7joRH0|g{?2S-GiX*giDKr6IY&lNM|$xU0*dLpn1M` z|96xUYHt!Nl|&RjiB-7dm1c*V(ias=%F;eLi9c16*sKi7of%7u$nH@C|CZ%$4*vzr z?+Y&^y7`?ykyhs6ZXHY0_DGw)itrYk9vSx%RQd-Ca4a{%F}54{@hEDXnT2W<&!pR1 z4H+@hSu54qgY|Aa(xH&Sv!XxCr7-e^NhM4+8`nMnhyF6L;tX&~?Y+X>;E;M!CJM3hVLcM=A zPNmtI5@w3Vk#ry(^`RDH0fY8YJVLpfBa3~eJDDlgXZ~AL0y_>AaF^_$6sFK@Ag?HI zJDz08G!DugR-|ke8^v!ta>^glP^E|tnLmUcldam^)%B<~+Z&QxUAb;|E$`KA0T$T0 z`=JpRTc__h-pC8sESZDL>3tEmhW)qjZeMCzBw@Je(s260)0`fop^W>Q``7C%;1;L> zt=r^l@T|jie{97aY>m3s+$-GketJ(75AGfGVu2rjVg6S16@)Y@_)l-F7$A=P^*cXV zrBQ*y$q(J4IYE|6XK#ho8I1Hfs9tcX<28<(zR-Giyx6tCyR6~<-rmHPhSKbrmDQlK zoUf#kCne1ylfFUBfY)_Rn`X;eN{nB_1R~Z{JG-;#W4-gn%;ainzkk@UK(2Wm)t}RR z6=g!}<1kV>%l8fG_AR%SIKA+B-6^~+uw`{Gn}4 zGws}iiJ>-z%fTD9^bVs0V;lSK^(RotWva;Ju?Vc9_QG@VJU}j(H=3M-kMlj4L39RM z34x9RGYB>+3I#4PyX67$hs!^yuDzus-l~;&{S+>-1#QgL+LP)6Nl>p}9aqS6vN*3b z+LN<}M3W1ZgD|b}zEaQR-13{MP!VGX|BTKu{96r)nSFe%ijR%fUS(Q-l^!_A>VH*g`J^8ouooE=IUhm;(Auc^?LcXLFJ|5p8Lh`ozS8o{S^5Ur1TO6yN;scdp!L5rgtl^uDV z=`QOy(y-NsYt8cDm8Vz*|LU%9ipO70aLLjfUoNi+4Ta@6;udxiA#b_oYZe|?+LM`~ z1eY&yP7UzTIseU#9b)i+8nZm@4a?Z2g|JlDsn z39tC0DgVwt$TCbRuFCaq{*oUqv;O9c_yQqhDOLT>s z;A7!A*ihfkB1Mf24&$;NnF1sE>KI~tn%wy4<lm@nVPJG(%pa0%o3qEoAwb-B^wTO} z?YpYS9$gJm_GumEs522gPhZLQrJ)ph_wP8cEi=D)K)mEw1!~a%a?YD#zXorW7V*gG z4C%X+QC4MIA*2246N3Kuw!%N_J6i}CIw_vaB3rVi_8r9rWqso9@OPpiW$y#m2%{p@ z&%Xv)s})<(AH1**~lM!RbYt5&knkyM42joMQpnZN(>c@rIQ-lB6%2v z^cem=(EGS|k-P`fr5BNc9(*`p6M}w6`3=~vHPHrv+KN%sd1viurpW9*skp58UgEF} z^jdBmRD$V$?lP|1IlPJZ$ykZT%K<5n0yYxG2NA?5=W72rxf+*~qlIz<{L$<8&XF|t z%Kp6`39bhG+fDwkVq06?eo1IWPAyS|~0N%@=^>Y%}2Y~9ReV3u~%uMZ)u^HOr z3b+!Jklc$NLdwx*e8Y(b{@#yTR$-B4(yAp_k>I=&iKa=t6p@0Rq(;Bp%E_Jd+m_fLG5|Uyx@0;Rlp5LM4%co%}k7L?hOr1 zTDZ27nLJ?b?(t0Xs`QiizkiO1s2gARAjPXOLuvT90{odE#IsJ}(vkXp!onrd(uD}@ z)VCQjW;}eXX87Y3YllEd)|GOU5<8{?qWvqskwPf8w*&6#8{hdVcI<#BG50BYB(drm zzEyC{+@Z(t{N+de2eY4c`PSK|{VKnW z$v5$(QanM0F{_UKX$zOy>+Zi6OtrdvH9_X&Z+(-Vb*pkjtcpQ_89+>t|MM0Hus$b0 z!S6%w%Dh!JX>l1J<*;?wz~tx;lD$eVK$JbFY;sPD6ax~~Gm73H_FJl3$^S*ZUT!^!l6ezep7g|Fo% z;02Ke{Ez>C1BhS-h=H+D) zIU7swx}xKfSb)FfPXFJQBcb|_yVg72-aa!>Grbm&cdY?-mg;)QYUq5kvObz|ivnES zfWbuuc$Iyr4}^a|ss4X>QgL0#2RtyqM)sNAxmYLjjZ`4>BXpd{$V0K`24|7B`mAm0SAaM(ZaxJo=rk}v7MrH%<2R(;4_4*{y_zj9A3 z0HV&AcIw!|WEYqO9}eb9Ua(d!wzHj!_2L*J{5OtcygE8Aiw@rObhoa`)Sf_EHFFMV zoyOc@SUhr}H>{(V=6}{rM0IfT=1fZv^_E#@cK+zAYI{m!Dhu-FmIgEIPPOZLUam&A zo$A_Xrn^=m1_hH$_i_5ie4^RG^8OkyWpaU=UoIzz8?0qFZ1J7gK9{z+R0S}<=?pd0 zO<#a91Q0<3Yf3mkRl2_{V5rw4@0Sw$NfO?ndGnO!1S$EqidlbBnz%MgJsS0lWAEN#l-R<-vy_4H7^v^6UU%WHv%Bz!7l-J7_$x zII6ON$5l4M6&WQy%lakx9ihTK1DLj>?@Il|b2G*CQjcn;+Z~8nG`+DItzGcB=`au>S?nb&m8*?S$S!Re$W+Lz(zd4Zwu!qWX= z3^*BZH(!s~9X08?w%*mOm5z(uYvD{Nls%COT@FvqCm$$}#W3o{Py_StLM2(-RzbSn z%KPG3H}@sN8B1)-t8-azRdpR~CI9i?6phWWadPmT%h#~<{dC76UKSy+sh+W(zqiDm zA|wtpM$dwt)v+r4cmM!E^}`7)^q!u zB#&pIL+Sx{ml6{~PoD~#lxz^o^7-oGWw%1s-qd>66i{BL0JPy-ZgwaGSQ8g@$nv`! zJ@w!Xz)$Ym6Yc(5BG}xW8j~H;RF-q3h?EZ~5Xa%J9<%cskv#oDA9Ok#-7GlgMmsk} zxo0Bm4>$*Git$nrNsjPi^ad_$F>#Vkj>!XJ(ysfx{ze92nnIlJT5m-ctw=FsEplVH zs-w3ApFpo&x~W9ckPE2zEO#XMqA#~DCjVs#$pA;(JgNfuwsbu14Mx8;<3i6(STcbApDRmChI!WdRVe{=;SWYY&%g6Vke-C9{q)y!)Uli5ix3 zAKArc61ZmL#70h9{CTw!ldC#bR_lVtY33a*Mj5KZZ%*AsL{De>Z7r0>9xDzNY}l9A zL-K)6Z!3=r0FL~5_ZypwJr`xILf6(&T_^IB*U(L5Nh}0|WJ}L4ve@1th!h3}FB8jb z{}VW$k_xwTx`E-?&RV9>>DXEs?jkxQzut6z)FhCFhxoElE0@mAVa`xC>lM-Ai-fA# zDU#WIu|=4Y&BiJm?57x}&zDiGfCX4C83CS|`mVzs%o5BCmnn0`R>&CMlVFX&nFh_#(8rdlT~yETw0+7o$*FU<<3m`BVKTpD&5CJRE$u9zkZk3dESBM5;LM@`uhzWR%U8 z)_jwyoG5$i(>+Mu`b${YkUnm7a>ja2L@v^-H(4OZN7oWSfjmROHKsxLKCTj ze3UZPzALZ7EhjD5K6ZVXobJ0{Wc&gAmWPx$JLKwBTkn-?4^CLr`|$U5Z5ZbGLtfi{ z>j%_Nh)YP^(`A?HH)^iL;m3_>ir-YBNbF;N%N1p)k*3SaiUp^+%YRY zMpK>&Zh7uyO&)E~YKgL!PAtt4quDe!6puWtH%kXWELF(Z`SEjru3Y8$bavX9??T|> zko&fr)LX=_O#u75$YE>+7grIrQq&u5#t37502Eb^5R_!AhAC$O6LZ6O2jYDc@L9e4 ztIZw)T26pz2J(CPo-LDHlNqMdt6Nrrx&ARu+adwz=s5)Lqa1GZU-4?qjPMS-mhr@y zxvwgpHEVZ-z4m8l#!;`yI}Xvahz*0K&wGL&_9X6goqh_~!U`O$QDGm;eAt@V*t-rU zF({Fl|Ms>|WFIg)B`*aOM}52%h$cU>tY1k$N+khN&ta14C;Wj7u>z&w0O-{53z@N3 zhGg05Zk9K1=D(7|j662|qHRoGQwIARX8DEQoShtPIIJAJ9A}_jQeQJfPS8nC9%gie zcC!EI21K2M{QJa^H|HzLmQCPA@|5$AP(2qTn|78}L;YH7j!!FUXH9a&JmueXEw+zM zs_CPLz4%>@RKfWvM7~ehwFvCmx5+20xr7Ow8hMOk&+_CRhu3CM=cU0At6u7?1OWZ= z(oO=(3tD?TwqzVbmH{#qWa#X0+j!k_aM>v$sztQH?oxC&%fQb)9$>%mL;;)jcRl-8 z4)C`q`;EF~x7up&OYI$=B5NeqWOQgJexeQ@M@4y_0!MA~qLTBYlFNZA&XQrI$$mjk zK)E|&SVf^7%%u4@N}lWVqpj8aK177f3nhJ=P)(QY1d*Y=4_1xuDi zXNQIcERAI6j04^)01V{aB5^K{>q#B%3w!tMl%S2PywsGDYGPw@#KeX)-KKz&<#qlc zFRv~m;z+&pqxd8Im6`rRsXIeR`gPyw?DO zi#N-9dB$U^wtrr`LlF}E2QY54L#rYS2cdRd2Q`DQK)mxV04DbO=XcVsU*Mh+R*}H0sq;la<0|#SkFiJ0Y2Vmp--|^UzD}( zh+481&*P%09dQR8fJn-!e9ZGyG)g)S`#1eVTJtrlP~ifSwEIVhWBI5nrf?;_PU;D& zN+h6I(3W7)d}WogWzzdYm2HR0&4sa8(@W?kQVo#p;*?7F!av9!%4SXpb zH)CO_cBo>rB0=uU&b4Z3SL$6$5J7|gsYi9jKfg(_4`GSS+0JY0htxrEuYdl5M=bQ! z?kwCG@ca6$eDi`@Uj&4reOMyPeB~G&+=G2JsJuc4Rn!13Q1EfZrySh{Q*`nbIi04nB&BqMjg^{_tHSmDfh0?GfSPTD7*$bRK+jG}RCOw~>zdg4G0 z9_`=$i=Gx&U2pI#4WQI&kMfI#ZE(3G z(#k<0$v6_CCs6&h=W&3n7&g=me$-kz)TzeHf!ljPbH_WM{3wGB@mBL%w1;#v@q0KH zWF~GxK}X&u&-x)^9Q4*t-w+YjJHTmn@duBO0PpYZ&;xnd8~HivS|QnAu|OejRPz-K zKwVnmYbPeNfn;y;qn1gY^@?f&I*Po+WaW#SAC~bvN46XU(zxDf>9ZAOL2n_P<;A~g zYGwkT|2IvI3cbZ2wCy9H2K$4P7q<<84cRTUB@ro-de(lLkCJcNITK6W!z zANM0F`8Q){N40%4fcp0tFERpf7|aTY;>?Ve5Acg%h>vfBCo?&kD}%ni0=ReE=xLeu z%QMnwta1aO+B)~OB=NH_5+#~6RmL@hb^kABGT@wdIIT(j_JNb0~kFNDE z*ML#!4!%4dL0U&PpnIygH}qWkh<+tRB{}Mj{=-`e#gJKV1rq19O%}~{Gn2HTWz~#Y zOm*wFF1!$u+i9_`LXWiz{%@b>bh#Hr5RLcG4te2d92Wdqdc!mI| zQz_&FBDSbmtS`2H^R8Wh?o!~*<<%NlFfr@ZEa0NG86^6=-S*PqnHkZ%>LFXf`;pCU zfVs^ZZxb7cH)~e~Tc-cGv%bS$Spl^1t~Eg6rt;i71$Pn@-m=DxG9Ko60e8c)p7&Ks zb|l?bAtTvFp-{2Hfw|aR{7G}+BI~#b(t|2hQO1|V-%3Nc^4B}o#<^y9enJ6r+P<4j zy=|u50A$C-TBcIa;>}EUqgOc?b7Lq{u9>k9vM)j$@OB)dg$$nU-~p^HRaqfn29r;& zLCwwro`i8?Bm)Y}0k2%J8oVDMpP(3jEecN@C#Dcrh-;?+DqWhkx{a+1+kLSHyE!p4 zRNG9u2l+|I&cTHsLzRs-MN)Z6E`9Ja+!5)9cBbzMG$!>>n+QJftB;&@a`b(ROn~(T zFy#Vt6Lc!H1XNAHO$dT;_@!D0TzbOY+qv??=UuKh_%(zsd38N(raJ?{Fepz$n^mZM z_eo_V@lE2i)B~QLC$I={T7Yy@Mg6@r^T-c4{(mJTlg!O={pJRq0Jl;hX;bv0hR%Em zUt?cHW1vzr!1QqEn+y=(`2>Lp@47p5q?t>+1kS?1iR}`M;S?hvL}D$0HAHg0GSQ%` zY#MLml}~c#U0iY{^xFIk&$D4PzmgWJbqC#(`YN^rqU?rB4h&d;$!yNjjh%t0_<$pI zu`3b@{FmxigD2Q~*ddIJFu|0h|8_mENDe4tF+JH~i=Mh8*F2sW=F7Ex9tnOQj9`F`$SmElLqFn2*Z;TqBKfmjxLEI@8;9&Njd&EUNBorO zA9JQV-w4Qn3SC2^`9p$dF>UC&F76E7Cnh^^sO=q!J4p34lYf-;Oq0w*nfSTe9RTNC zv$h*d+iR5o3ZirnN zEYp5|rWHti+tS`MI^P3ut(=M6h3`(Jx%lZN5Xd??ZMOhai53b8- z@3*n)u&%oaSD^53Db(_`CXfCos@2svi^{WtM3|z*tdp7iUrK34R)#0T6crVt%ziSN z44wa0?#jS@0KA^tZ2ZDJNMfTgISZ|VW;b@VP^7g#c7S=th6pMV!&;!P(02OTDv8oB ziSXvCB3q5FQ^)6Zr}}F~lRwdsxZKgv_zS}Gpys1@t>_2AA5e7#!cH$9{C8GXT%5sj zmpTYg=%`Wxx?WFCaRQ)0GB#H3vNK*ByYBM%?e5lgLK{yH^>nDdJ+Ph98YB0Vm19&g zF)6`F{`3lBLI)Uvv^w!5QRau=FBn{?=*f+d^cxy z3D`#SfbBx;?=mtYL91(?_TJsp3{g25B{{fm4l*&NE`va-{k;(VE zEMXzzox!~#!Nl0|+va9aU>T}j-C~lF8d%qPmIt5F>E5o}%Vyjh?H8{!#L@uTFeG2Bre zfd$#)lFP~3BObl*<&2kR7`dX$bL}*_HbP z7-zo%M}|m?@|2k(yX_AWSsFgH_NB#rqu^AYNSf{8I9Shm(mqJcYA ztA<48SJ#8ccKJ!XrD6N$zCpLcD)~NRtz)eRTfrTVTR*m`zQgGk?;0x|CCrwx|&~x!t?TK&By%zTKbseUv(+0+TT66 z6X-Wmf2Mtr&-ISm-FGa*PWRSDzo;t%u8EObn*beQD8eHY6*sm&D zJ8GyMH@?EnJbH-+FDF<-&pwlQJ6E1S#MQ5|LIY-eT|n;zY~)$IYPHPd-q&KRV;4mF z?#w~&jNPhnM1AYmCx@@6{i_ROBL}>Gm=3DdO<)fmt5sz%}eX-U3c#&df%5Ut*-(NQm1-$<>|7F4LQL`*CuIlMA5j0Q>tJO29mLI@(yPaPf8{6SE2J1i;gi+_I2 z&jo7IxoqtA6m!FSCKrKBBYy_lu_YYdl3xDVf8)+rf0dgBu!36sUN^(k+{wTQs_&-D zJKQh9uOb_&ISKh?p2Fiy03S0T$ll^N2qkBB&8&X-R1v%~`=uhn`^{*n&|tF#_yPdp zLF)Ve*xzW;5!`7wF1;r$l2P+0p<{XT>qU9<~js1_^Q)DnW^*Se+X$} z{138}P6NYcpwsM)n{+hr&)Z4*V&8aNn$-TOtPL3J4&?vhuzD|qe|vbi#P*mxxjbMA zqtWufD43i7xq{Ut{hF4!qCrWL2{0>x)kr71l^(4`$XUZwfRpLUe~N6)w8wUeeDUmOQC}fw|zWO53J|xTl_B+mC5x^Qjmjx+ip9H z7k!|K{!HeY+}3E=jvafYxca?0K#nQ#pQknNG?DGjGYigl;SR?hgz+!aXP-_2 zGL?TnREL6&pqlrGuyVN~)hYn@$$eMp0e}Wt@}JFjrVY|F2x?Q|l^~t6@?})jmA8L0 z<|r^3dzZg*r{B9cW_-E0ri}3<=BKhf0A7gsFRnhY{I9>W{J`+BBn?l4152njri_>j zFm+j`pYSK+F;M=`HZ>G;Q2m|7GwgE|G;FPG?cZ_6{rm5ueF3Q&x=wHpotr3SAL{}J zc>OQNzCDoX{r}%NT_jyyyCJtOZYzm$Ta+jjlIyS%Ax17Emu;n+TSOrh3Pmo{T!vvz zMQ-Jq+h&wIv&m(~X4~(z&iQ=4-`_bpzu$lTq4!>w=k@V?yq-_WZAak%$2Nw6R{SZi zvi<+I7e_BsTN8)RFbh%gE6nz_|2d4kc=B#Atg2*9_XBW}R)0UqRC&CXD{V_8n8Y@* zW!nBF^>^pW>bLe@yfWV6pn$;ohYZzAC0U5D%-QTq{qxXM~_=Hy(6ntC~fO7xupGnWHTlB%OVLN{JA8$d{&s5E~M5E`Q z53X&Ffb&>ADJv-O^Wm`W-96S_IcqYUMFE&XNi>R;ls%i7NLmI~k~ zz>ksF)M`3cl5zUru~b3SYNmewm7d>g1KF0Pz1%`z{XT3vgwyjKs-1vyN8#bFwNUOb zbZo>Y=bUnp&mi&K@4UwJl{4?oRnlNb*lWLBMS%e~{~%MfM>^|hB>XO*{a9w@n_&Cb zx0adyEywqh2uRO&o4`2p{~X9mFI=@Zg)n{e@cLYxlGvw5J+0qW4JJ8O1{z@)HW+cK zo8NBtg>Re-43E`c`SH;~Cn{!vxRrkl(@V0e2wDW<5O>jsr%A$H zHNLU)MBd!UW3y`*wvAJ;>(4dl{}iRbQ1hhT#pIroA|!bBfvl5v?-tb*Jdh4)c<8j) z6E7y6+lvN$a(3b0mT#?NP%SAs+oWc;LNiIeYwpNYbQyTv=EFDcxwi9^E-Gpd_V%;Y2D zXO2%C0}@xF^p8*kROWKe3Xo>6-^X38m$Q2CzJ^oA(+tvO9J{1;w?0UDIea#vWIES_ zZad|h3%Zm%~cSAxtNtyz)W@jJ8M z-z;#`^U>LQnXTQ2{l`A{&+BXER#>FSSr?Abp}cvhTPyD)bmio}=xD^jA=7X0l_AOZ z>R-Ov6rSs1t3B)6?=CInc6$}O!H2WOm91UsO-vjhw(s_`qHC6-F9$!|m7r1b_7GvV z_v{Zck!pLlNdw$i@cPitl}294NVUKw0z@IZ)_RA@?~)4{JT9P zpf~nbXB|Mt37$SC%eSjQ8O9=LZ4o1<^BpTSLpg@jZckVq;QO{7{b!g*guCRJ)TADP;Te_D2ShMw%jf1a| z#-n<&m7nYi z;~8aKJ+`k9%}{2(>YF;Gv6Vek7fqRK3;7g>Ss9)_*2ldrrH3cHF-w=`@Vjz$A7<9! zN!MFF*|~#wWXtjK^2wX)uLs3*f>n%%9H!U*+&16NW4Nuno%e6C_DVs8zG7I}n2kx> zF+3(Fy>ZYg&w4Z|rC%y1R&Gs!O(EhT>EcL1*+7%Rk5&wK{&LE-sXUuEQz*$V)1n%2 zvBjZ|px<1^-yF6u$TQ_{U#mYo@A{x=lOX$>LKtqxhvaDyz0}=jcve4d};cUTN}8u{#Dws*?)p{66=t9v2yR*1BB3_D=_JN4<8jxK*E;CX??jWkT5JhC zihPL6*WSgz2a{`7Mki!=voh?&w`Flat=;)1HDC{DZ}<pWH1G;uar7(PYKh7@itHKyhghty@4-N`#zl7F{~psB~Ew9VUNd(;DnCNEhD1SdV> z4bAQOJqAVA2n)SvNeDe?S}^o8hqi+h>q1Cu#~n!OboZ>0PPf)c%J{!bTFvqopUWFS zBldc}5N?I89I`#VLK);ZUf3s@Og-I0e6;zBUs)frL{DhcnY{kGY5aUEv<6Pul>)j- zmG)0rvb*!`9-o;$Oz6(ALxBqIC)tWg5O|vM zZc?kYZj$r6`q$5KKP@^inFe;w;&-cNdV)?S2IfTv;VB272Z;Y&w3rwSEc#+S*>>+??DB_2Asar|1@(LFfT_A0m5w9Cg&j;AKpa2CmI zRiC=62e*;Ic?$hhso!2oz57Kx6{IN=6zHHaYLF9iAl7BGh1sd(gLp-TSFrqcpQVfb zO-~M1xS}1M52(MBstru3_d2u`e)DB~>obykfPBHWkK4&>QZXNR&v$5fJ9yjWNt*(i zxU|j%Ao|(YaU2M54)SMu_6sBIu3%KAj^VCMmq&!m??eB1FGwGRM?0XGNBaoy-}%J2C-<{ zmenJ30P5_9vm%2AQChZG=>%`Qx43g<%0Y{%SKBA+SPF9}*@?oh-cT;gH76e8^J#)LC~+CcIy{eL}hV&1AbU8 zAd_HT5pqct&mpY8GiL2n;%-sH+Vn7gvyjolCkT!3N~zjKlRd>lCcN7dVmL}}{l&fb z=k;LbNF|4#s?0-qM+E+Oxq3|fmwJ6M8R)}JPEHCXy{)Gf_UQjG-SnVItS&Go=CC=+ zvpc^r$#g_Kd8=gCjIg2X!Q~d6nYGPqR~gL8Ebu8y%dMC+@|(X-epXox!hR|~igoIg zgooh<@f^rTLw4ryXpe=1Q`~#$`S;$&Z0FIVl!%&qtGL$(sQ+u=7${)lx>t4ff zdN8S7ir*nZyOs8nth_wWZc~Qq!eI>CjerKw>udNk$@*mq42*4SI;SuFIPO|~_OY{I z2u}n8uF@@9dmn1Ac_|&T=4i*t439g*PCO_KcfJmLr9S-WVRMs7#Qi3Xk0wzx^|-!I z4|f+60*=(0@4T8-yLdSc_zhH~sM4@}3S!i!YW7qA|Gy9hfb_8X`*h&gm*>e+GP19j zK^SJx`yzcKoSykkp@k3zw+qfm+`Uf69EDDKAcH<;`$ok}=X#KP#T##&I!o`;o1NUH zI8T|2cmKL8+?K?H)TbVfdBzFHE}fn@x@cVWV9~8B*Q(Dik~TCKvT5-to4h?_kJ5fF z2ju1zkYG)(-nPPX%F?D5-4(r?|2#jdXc|8X`CVX##_C!0&q#5)d^ol_HvZ8cojIfC z!B_i=T2&iIc7p`*kqz0< zbp^7P2)xevW^l66w4&G)cw9?dTe27{JY&f|=^!3BF3@>t+}Xs$6TV{6%5a(oX8V76 zt$)?-O2I}gp~E^C?$QH^QMU$)__|c{F=7 zc$-)&id?v@AW+4~?q{U5;or?VU!_An3LVv$>y-5Vk^$h$NEz;r2gl#;Ff`;R=q)a3 z==)P5xe$f#yJu&(l$z!)-#*vmbzpPl4?h(;({FAkBlXx+twJGm4@m}oj9Pj?&8PMX4;+LR}$L&%vWp48F5r7f>zD{Bj4btt%xB73%E3(aLIe1|NTM^_odT zw~iLJVr&=F=oa+o=|1PsL-qZGu~IUTo*2E8ROtNYBNdF@?Mn3>2Zs6PsQgdh=GW#3 z(Oco4E$W|8b${)5bE6amY?q`6F2O&9xYN$NSG!yP{N%P=ox8QKn#hD_Nru!d3MJ9* zQfDr8$sWI+LA2AbcSKIOxd-cc4KlRvCG}iAR)20{DW|G7zt+>&QL5)Ot!Na)8%=G5 zHB$Z<9qznR9-d6Nb9^vrdgiL#Dc1-7YJu8+!4kiQ@3a9%GjQW~ffGTO{|lKg3Nf31 ziLd?NP|UxC4Qm8W`~}0@>0N&-@DCOk_4$uP{?9aP|DSLnA5!9*iIsZH-F+4FEjq=+ z`>gYA!6d!7?6i>Uw$vbPzNMCu0v?6l+kbQTApps=dxK+EO%4Ix`uLsaZ_brrbo+&X z1s^a-X<}NKxZA-=GlJIr`T!ovnKUzo0vsybHG1NHnV|H|%igHkKxy8NhcZxoR%H#l z^73)_&C|N82iX5Xq#X6f&(nPC7h?rwwyHsP*9KCZokPFoShOFm-!qK%vA#fdr@hK2 zs~!TNU>j9ol^8Gj0*F(!Ui=AoUdBYwM2SZ=S+xc=l6vJ+_r9rnK5sYKMxK}$(zY46 zY4&b~kCMu;mwv;7(F-~nQ%%G-%B_8p^roVluS z!geHPZNpmm$3_WvPuy0BU;F8D!YTEgo8)#VY};^X$F|=$?R$Rt+@Z_rnwQ^w`P_R; z@BO!w*_+|xsdh8Gn(nYL{g!$(lQKlNtZboFR|YY$6bhSFfK&}2~pZ|wv%}&)S#yV z09EXS-o4&^cejZsppCtei&nRL*9+XzeAOCGh(OpJV~fRqQ%iDKEW0Z7L)}k%K|=w+ ztHg3=cA||_(c2t(s}~Ew_HxTG?6Qdl`M7CTpS^Kg2;U6#Owd$t9DYiH9q#bd;qLin_$&Z& zv42s#HW@V0V!fi$x%^a-Nl)d|C@2rkr zUU6ZRW)yD zD}$Ol!EhsVLZ}pGFzRa;s%%P0eWT;pr*5Q}o=tU||66K>Ga1oJnV}Ze=v$fFR6`%d zrX8u({3>3Zy^VZ#n_+nEOhZ8nQR$~q*tcM3z8|N`e(aW292<4vxiPFg1X~_hx0oyF z6vLwl&!OuU6HKi~NQJouUOkdNnCI@t`;9fQIVxJlQrI}Ifnq5q1jt!VWSYH zi-gQ{&efpim8)NeO-0*+Yw<%H(KZfjvPv<3C15b$uU8_7Q_Z<65z>fAy`N>HC)G#0 zU_2Csu)EecgRa9P9b`}NmvFJNS>^Cl>`iN-=Zbi%Ki-__E$T=Gbonmo?hl48TYu zwH}U$im#&!DM8m6h6yB7!9#AEJ#xJf&=P(m_(;^|5f=o+vB}k}sk}z_%iA-(QBqQ> z8TMllNv;6+kr6duSI?jd^N4s1y<$92HR$+Ig#4$jcE+hCF2J7Xxigko-jMwH_)>=@ z$_%yvAl=m$o>IWC zV@At}+uV?hZ&7+qAtc@EK6onNYarA))E3O$ilDI)_L*3HA~biN@=AKy6*%`T3SM?z z*3@3|ZQc@fX=(gpBFCftDW0P4OlF-7H@}A2D|Orl%#fRk8nBE&7;ca?7z!G(c7uz9 za*KewD3Ijmz1EjbP|>;l*pOPhN~b1LhZ8}&a{i>;UOd(GS#RKYf%WlR^)AUb9^v?8 z-9_AKB+OYCA?7zg2>EPhEB`9AAbDT5pe+6#nkm@P?*HJQ+cVl-hiBXt1y8-#pd`Lp zc`0iP;?G`#8^WjuxF%k*h^B1?%FQ!3rym+RlSL+E`9heONo+vA&fD0BUW*`U8(F;1 zb2*QTx9U+XUOY$(n+OS|SGcKPw8v!?H}3_>Ef9c(J#znMv7!;4ck%fU_JAj8YvPc1 zwFZv1abCEvI`dI49xs~E=FA@C(gyeLPlls|!&**_aGPsZqV4u&EG&a@H}AlTl8d>~gZFII$lG>IdlYdgs4IA%cRtgDvTmGsJQS?Cr3=EHwyU zAzoO5)=GajCmTV+Bv2v*4#d$bFCtK}I2PL?(yARr8oU4wy{9jjHPDW?tVuBSVje-9 z>Ed5TQZIMX45RI>@y-fj+Lrs2;-2|11J0SUadhQ8Dy`ACrZ_q46zHD6Fn;Bcb7lHZ zt=RZWt$0POS{{4ej;oj6Efq5HsvT4eyt;oAXo%JqHjF?3x`bd_PS#(Uh*2`PI$JzR;C}+(C!m&k5W#u+EO{HmUP+L z0MTWm5==4ms$?e^dr>tMs>j&U3P!by+v{J5A%2W*&U`KDbQJqp(bS7at>G$6G~R*0)k$1SwK&-lS=B}jwipSM31~Bz-LT||t=LD@ z>}Cldj4+Z>5wy;hnth}j!{>(?7mf`(7hl*_eb@I{KmDkPeO-}hx5obJTKqT6mDg6r zIUh9?47cM@3z6B1;~tf?Y@;3wlRZ2I?925DMZDwkRJ2{*g=a6tJ5KL}(cTDAi;&{* zjd`}1(L|ebxKzcb6uTeQDae*K*)vB)+jpK3sY8Du`=e6uScJ zo~1tAg?xJd)B$br#xAXbSbTp7c_f5h%$v5=r~tEhw{4UfrNt_hnTYmUS(b4;L`nRb z@IOPC`{?Z!N}1t|DrGqb*V=bKN(&zf$-Abb7ALRokLx7@vme_1R;Oq%WD|7d`_?bo z!STzdN>vS7-lq94m%-jNls;nQF9KsdFmLA!OOgre#hr27S)e*^Q`wqgae91MdJLQ` z)F1Rs9`niQY^l&lOFC6JGvt#drMKJ(|1=tb*l;g)=)!I()sdZjPU1*%y5=i>VRID& zJt4XL!B}rRd_$Mkz|E@;dcnbj(Ii*~sIAm8Mryo+rE#hzI$ZaeeX<>Pah9=txsQSK zhJCQd-qY!De3Z@!5kQ=rVQS!1EgzmEUG{Tu`%sI_{1~fqG!0J1w8SU{ztIpfN`b_Q zRcJ69h7;IV9-r5WYpGlbsnuM2(x|8(*8M~kdy0NEim-7C4@DUM%6GB8k0#fjy0te! z2eA+*H>%!)kC_Wh9v3H{-(S*e-5);`&Zrjzfg_Uu!9(nb+NA4b+T*#&P^oP_xU|FO zTbm*fqj+{&RA36x&5sh)@6j`HUq@QKZZVy=;&$uoaZrMN%vO#j`_xbzYOeE_V$iyK z^%D~eirNmpB)Jaf_(IMZHZ~kc#oFRNYEkMHgfWW2--g z;ZIcO7!=yv=(n=%nj;oR;yGQi`<`fh`Q8(ZtU;xcw^$aT)46_ zUEKPN;fUtWr|%~}Mo|4cENkDz+!T2==!tO&D8Xl1;x-f!)oeyEzu`&m9-%t$YlCD| z14$m)S#*!=R84HZw$t{Zx#AZ(2Hos0KIkLfjs~%oEd|};YUSU;mmJQdlwOeVyWmRp zODoay$m{V{a>Z85krPnI#-3hHKs~}Vb4XPCL_5i*OeX7S8FbedC~M>ZfZ!AIE8#v6WumRu)0u6iMHQ2c>us?#-oAVt_4al2lj!o&ZpnUHW6f)< zR}bQ&(c1j3w1&%hL?esIDJn*dI` zmMT|%u{6IoDV_lHYF8~jRU2)a$n!4$e!tQ0?S8qg>-Chh7%_?4g;3$71#wwwnSAD5 z4)AWYXd??8jb1bT7*3Zibg-l@t+nxLHkmG&{{~-UF!ko)l7!0>Jml_cDboNL)6uHO ziL^*=Yagc1HZA5lNamhwoe$LMW%}+?H;O!dv3$%{K7-ogF%G{PtIw=BWlPj1EU_vx zqKW>-0pE|70WNvK#m`NZ(yFzKM1^HW~Uhbxfk=T(l=G#+`ZdhsAM~qFzNoOM^~oZ zpr$Rwd!aB!)Qx(nAO%|FQhr8k!^ynZA6l4st;kzqP8bfu7ukg z_(mPR#HXvV8NjbkOB5Sgt@R8R&rlnEc_2rVv8jhTeHVl-y)O@m(owg&8_>PT!57Tm z1l?*CNB#7n?CD}(Vt)C7rBEA*fm(s<&w>xJj zg<+%0*Q8{Qj}u}c=@ifSGQH&7!fKri*dyqM2F;Za3D@p>Q*HC<`|ycAFHlCh*I`td zn-dnksIo1al7XjtBjsDO$1k1ZR-e#V_yFK~x$XR_;VMao*!%RWl^Z>5?)4JK(?S#G zGHlgLC!Jw;X|fOYh?w^4V!{siRnaFr`|exS*AK#jF5zR;A*3|Zt{$hwFS};dkbI=* z^Y+m{7c^k%C0qt&*$4FcX78K#F#}hP zmyC9kPyY;1n-T$>)5=?E6%e?$>i+)1Xf8cSb2G@wu*%+0Hi!=GNHgg|PnG+XY*0_U zA7Nipt;@~=+?<+;>z%ps#vBtIjc0FxEG5H`M@9Q8Go*z?b;8S zm00ZOefx?ZF+KX)YaqiXMtS#okbWSTdg5j$hc4(i13>LxF3RY1`c#DzA>gfD_6Dm6 zM9^342A7(u0}+VIv~RJ!Euq-K;PF%!sgzxHs?_YC@)B1vzEI#`J`6x0AX@M)q#B(hAJQxqo)WD@v_|QY{X*R%sSAlHI#Zt6vTT4x} zgBCzfGg-W=SbkFUO=fd+crTtRv{m=ViHlk@73i@Pw*;h%v{%_@gxTrim9D`#EK;^? z{a$%25@w_j0u=68NE%rI?@Hn0V=~FmXM~(yiTwCJJNb$S`~^I_wFsD)tD!eMfKG~T zdc-FrHdaWue8pQqAlOTK-|vdDa_2!7rZB25x5P(o>bnjarlBr|HF|Yzcj3Ah_;;Sy zNhzJViZZAL3!7j_E^*PWT*MLY+I1%L zGr@e5UMoVBoF{$rFt-faL6E@}xRR1$hgwMWSAa={F-1!RgSidJG$;nmM+crG9ZI-% zZmCDH(+Q?(XXv}5tH`$kU-n3?s(uT1h|@xH^66-nM{!!5Njnu=iS@J-cZS`_HkmE6 zcw!Ji^8wV)Gg8ZCR{J4fE{j|&rM-U6&!@|Bg{5vtR+T*LSfU3<+XT}>UyNRskRfYQM_ive z!yb7SFh-xTitM)wp%&VW_ai%F$v_m2G*4X1OH&yHN%SWU{C6uywy_LKV?Ivf;u~`O zL970vpMF2sJF~Ytonk@eL?Il_T5TMOhdMx`Gb{BCI7BI9C>nBFbpM5zW-XF?<^(`a zXOtc+%J$d;llylF8F&~rpIsy?z-L1y_+ujiUL0||u<{|hp;f75-EtYZC8&l?$vT&n z3$xCO-TT3u+8B81sXpVYWjmlq?n!QLe!Zf?R%0tMTv7%v4A6v%h~47(+TjsqWoa*V z_emO@z5!#$->>;12d04?cltiVrOyyf+X#{O zuSALJEAPzGdu`4jKz*q<;qNj~72FOmfot8qzIAx`KF&>R7`C6t=!VrNo~(RCT^+2y zukH{$n%EfJdMD(^&-1raxbj3Z$YmrK^ZHFpV>Go}OSUCQ?|jz(1~pN(jXB2G&{3pe#Nys z?MEJ*lRKj=!6&*^wbV(%_xSTT%z7vc=@{j0=92d{k!Cllf02nNdq*?Rv{=Spy%_L( z4xU%Ffs+Q8tZ0eToip)En@P@*K@|UTy@#1~oiaA6r zcSkKd3D%rrG4t^weQKlX^@{+}(!uT_-E;8#SA5dQt5QT8ajHb;cd~e|hcnE4XZ8F- zbtWPk{rXXF_jVG!iliN0c>&IUaG@lmh#!rPMWPX&j_xvk1*;wCe~S{5IMs4^$3!zN zA9CX}KomD#mo4n2E4J@P1^WdIKXZFL`Vqu1d_$007l&TR^raf;w0p+>GcX2d)8cqK z2Jrmlqy7ZZZ46FHqS*Mt~^KJBhfteU>r<_bkFHuiy2yA2Xgj}yJP{%D6Et@AAyi6NY$j6 zKxUY7W>=;1P*0P6a(^om|--6iVk1=7DcP!v1_!b<>k&~NaaLEbO@e7h4ZwZX?R?` zzPn9&WEW^2_76w97Y~ZE=l}c?Ul~BvDmxv$3q|vUn7e1{Vz+GlarRVeU_*@$G70++HKMc_JGy=Pjv6k0ws83Fb`^si8(nfAH=(Y zYXc#geD9GOG_bQwzeKot;Q!+cf?WaC$D=C8E`1tNa&GUE&MR-}mt^pvRvj z7qDYKT}tD(Rg(#j!zTG;gZESIr_$F&(8ff6Dzd-{$f{}8f9s~;FZuQSeJ@u96A@zM zxz|u2FVFsS%K~j{fAv8lK=#oY@~`@$Nj?QwVmLcNfjR&8>m+MyEVU>BkL|Y9wYwSA zIJ3JSI7N0l`f#$OlFw@mDiPR?L7y2fLw?HQ?*bF|ei_u!2Dz%6Zt)57?OA6Y5Baau zikdw|3cTFWsyly9ga06e|5!nvvtU`gMeJnyI!+W#*+y?i!I3M59kF#)MuUfXR6hXo zz2`h@Ze-%q(bi|9x4_=7t-kjNL_>2`@chtx=%<}-Pe&#AIf0*}ipvO-|K`S@f`2)F z`Qv7-n1QhQFTSGy9l(g5PuH)W@z0b;v+dxoucxu-Xskm;NB-mcX?HBj2aMXGJ6=;{ z%=d7l4k+XQQ>(6Qiq-Z#(}A`FuK?-i-EjztnSelb+b`0vkyptt&dZ-Cuu6j0mZz=p zJmp6YJ+*{z5u&QgFBZ4F&l%>vzr_>H*tLKLwUWT*=CdBPfj+=y{Nnof zK@hWsr+29V4qUG>C||(Byp6)_ksUXTgW0Zhckk_K>0xt?<=Tk7v_0kZGs%<3%UYtr z=-C!Zrx`RgrdFZ@`K~nVVNmQv(5L)$~^%$J7>w*OTx!3Q%!swkAlr;u1JPvj{(K?mSJubvQHzdid>mN0GO;pb8Y{~oP{ZYGy z&NvQ;#lyU&h!ud4XXd44^yE%(31owQ(q3+!QOoN?COAZwuMsW|1_2NwIq4C@H95SC zUg8)ulbh*W*$`Mt&tI;O$y46r-&8S%c1^YU(-i%S3O9U6%rtuaJa$)$yeU};Pl*Tp z$S=SKgoB<0NuQbSW|n2L_l|P`e`@MrIy-p=~^&REna7Fdfb9!dKF&*m(YS_*3ibv8xvL|I2P1Crvko(Pwm2#DQ-IR3ZaXZ&9 zvEAtOdExHBPLiMTBX<3ZK(!7q4dsOBuT;dv;&l1jr{`d0$r@&&52M1qr$wBtLBZ8o zw$9dZM;>NmTs)&ANXLze6GMo1tBUkYy{N=VTm_P|I3F>r5ke8v=QsofrIz?VE|oDV ztQolKr_V3vjZ_^p8ihJn0+?&lNiVlANXJWFH#8A&quy}VWtCGl@ z`@YdO4~5V{=wU*!Ul*D?NKMgrMCuxwOTyJHIJ}k1i2t+vz}7-{s^{sOT zSr%Kbm{*k!cpkfz`qE;^m}UG@eVeJ5WS^R| zjtq(SWD@#d*%(3-EO5KWSlMzWbRX{s9t7|&_9zx0IJZ;pd2x!6Q?tpmc=}nB+tSWWXDYq0;?NSHo|p7? z(ehnN8>5@fy%)z+->A!dWPG1MtE5&Yyz4<{H#*iOesFEQ-9;Rt7Z1slk*!I`aVDZ& zB&VczNak_VU2gHrJsVuHm5&q$3pfye4ie@;m5^=qJ$ZP61ZItSRw%zN9_v?A!bg{k zo*khqYVSS1SQ7uu&be~pFrUoAwA{JC)S<<>c}(~lbU#1te{B-_k`Y}gW3*Uvwxp&Y zl;`f~iHfytC4JEv)MYGFq5l1?Lfxg0++KKH1weQV)wWepFD^LUj@7Tij>(e`DPS#o zCEtIcyn2LZTMn_{#K?Wo5wV_Hf`oZM!qx0(l^qr)p*sWXTqQWfw(;XzB$+QZ(3`U= z3xnb66wis8s@JJdDxtDDD(YT7b>#7Qm}_aW^&4Qv^r`ns3)C?Sv%ZC)yVrd<)aI$R z0axH`ePi^U4yiA(#v5ho)jX$h_(isAV!K^tv*R4Vx%|QC)`10OS4SbcOD5Khd)HpJ zxI`KYj@=?kYo_?WZjEy4fwsyVqqyNhArpSV){TUV-YDoCjXhtXKge6Wf!@Henff4Aq2$< zsp7Fbkr@}*)vnpmKtf9cF_mGyXo!BR78F+xjn(LADSXKu^Zp2VEJ?C~qmFtQV-~4y z79)F}RMS1!Z>dZ5q!|VeFga5j?xE3IVJq{9uG`KNM^%*ZrBcGCn<{_r{UAwJx-TB| z1R0NC33Ld%{X!9NYw*#%_(_|zWpz6?#`I?HxkPoF*o_2q3X6cSd1BuzRs%03fu^cC zU4d4lH;i`r@@JAH4dxh?b~2Bm5fDn(T-Xu9u`ukRmFju!#+qXQJ#L7@oH<@C*@=A+ zm-e8F={-R8h@4Z2q{B~oViuMth>hK))?lGKe{XVbyQ`X5!2{L>(xU4iwh~#?jC$GD+nb$8vMq#o;oPgjh-kzG*kVw z3>{B>%ciHBAwKFE(~pqqc`6BkoPPh2OqwLe;qg6SVg3Q2@ogn=nmf+Ufr`XC(+wc* z;yA>*Cii3IpF_o z7#jo%yo$|?kP$?yUKtt{v^!(~wNQ7n<;C&#KDTrbSP>sJ<@x~0y5vjYXcm!F{5cH! z24P$bt7vNE^&op~QT+VD1!es6yG^d9i#_eEV3!-uUM$uXA|Wo0a2Zq3 zU^(CaO>>b;VRWffv|P^-giQXZ2lI|vP-|u=XD%wVS`E#1Z9}b+{DFi;Lg_RE2+rfv z(g*2LMmA3g&5pRd@(-FbL_3kmNc zrHv9W)$~5O27P{4$yGRs%`3OfV`1JEiu%cO&a(3H`Pv=}_DsMGFu9vu^?79>8%k4x zF0`HeqVA{$Im}WY1w6;O1i5*|DfJ+|8apeCS}MdrODU!!P54V?7oIg_027$nKu zbI^kgw6BK~pX?qK40VTj^lW6EETkTYpyhj5KB?+Ne~o_=MXM_6sT0A3EArMR`g7+> zkl^&B@06;q$-AQS^Q~x9q#OCU)rP6^EPNV+3^N@c!Tma3gWe6p2}Q5 zh!hw7DX0aaRZ%Q1ojNn%W;cFpD}7dillhxVW{;0pE&ipyJ=ItFy!6`w4J$9noiyc~ zb6+{{evCRMy(m_27iTca1MHlHNO@_B@ts)(Lo?CHO=?E1ksG?5>R-E@agwA6GHvIh z5WJh~5N2ssSo0w2RPX{dtDUO5(aO<`*Grjyd_OdnE&esQ&}Mr8ZxtkzpZf=MU+z(& zjJyV1E2qQMtaxK0zX!n>AxiN$GS$CTPm3G8JU2SrU5rUx`0c$v2_&q0rrpd<~Fb5_D#odB=?xQ>lwasOEHZ2thAyV1~sH3$J3X{UU zZJrivhgsX2o9#Lm{E>C_-9mh~%#moiX}o_1rgj?X5VbfSj4gv}wG!wuR+NzL!$S0m zn-i}d42@^N_iskUUhA3}583FKPjDz3c7jun+;XM}+A#wpjIcIN0nk-LuRHfPR-tP( z|9EGNN7B3tw({> zsGKJ$afvx%rFe^l7Zcn!XOPLdJ!ZJ6+!tR&8VTuKu1ln&qucCI-CLwee(0C%bn3wg zZqqWprCPDF*rXC|H&X2uEytE!l~%T1ILHMuwE5XBosK*@Ghg}Ojsi!${{?Qb4AAvP zPGie!o^uUacu-r1OPbfEm^*2U@>USZE1um2Q;~Gh=`RsE{(?+(#*Ktd04jP;Nl3fBS zyU&m%j#S%GW^F+_l2bH+M6iwGR;l>#E2b$Yw>4!#w0hu}YP&7wk^^WqZA1~~WL=<* z{0_CsY#uuqyFx_gBqI-Cbv&o!pCL%C}Y@$dYewm6GLeceW-- z`UbyGguE`A>iR7RzI>AZZz868cPPwUChV4vIbmnL) zy;E(Uz*FgN-9%eI9n+#WQfA$Z`Lgdbq0jnT2rXbRX2)7DXoEB=v6t$_ca2<@~iS2svcQO-MW$qq07lm>HlsI?;d?kX!)Hu z`M)6CDM5~7GK5~-)SN*Z=d7`7X9?W7+`DGq!u*H5Xvk~FRibqM4K9D!DIl=p{DR%B zUT^*L;$)>C>lG7_r+f#XW8wu{&5vqt?s>P~bYfAE@xXOe&=Dl!0wi8do`|^(efh}ER9QOTH zY52m(bpg1R3o7TT`M*LfFrwIcz+)FhNdWACYC`*q-9T|!PRx^z(d@rzSsQ4;2SB$f z{tNi`C-EDcO%V47&3&rGF}xWLT4HGa8^h$!`+5Ja7VlNr5JpnUa4gDNu-LCQnM-XR z(*RZdM$RZYl|vzeo@-x8&ALj=_wApvxB= z>P5(e0f4lcBvr@_)FXVJ)Z!TrLt_pji?_e#e&@-6;NmKv!7j8w(*8( zSYAM&F~Y4Y$hR)=Syp#D3A>Hiys~{bb1%LC`b0or!EjaS`A?bU&^cT|KdVi-oj@%} zpMHGS!_hm^HBZ;{6g#KaI_$0L65I8=59n1Va5-~TB%QXMY^KNtkCpbe-n$ZwFfzW7 zr(%us`jV--Bv+ZdA;{?^p0@K)5DXqry?O=Stm<{7jS>Dp9@ z%OH5B642-V_{-3^A$Y11bzS^p^{G<$Kx+gdC93vW$EgX$Zq?HUUND}Zz^|$S8I8^` zr%y&+&BCmxuGUjF6qb2FBO}OoT($D3HhV6yy~ETe0zUPdz+GBk??DpyvCK}$O03<$ z=~%tds)=`3&5kyc?k+GpW=wgI*4wUSD|^vu{j595!{fE@z;Wj!xgomukm(w7oX-!Zv62z<#I5IAMX8DjobDY_We!aogQ-ls>KCoi)R_o=mH)RXYl7IROETAel&P z`7*oRRjYruBVj0QB4IS|x68E^KS(o1yS=MCI?5t7blGIUJ0aI*JZ`xV8{G1}{yCBq zzQ9bTyxYfGJUq^{)1^4?aVV5hqxlbr=OpU)s>y>5leyf=8`3_ zwu}?Hv?%GByF#Lw(b$^ieDeCNnq&)72d`O7L2Horfz(a{{k|G}h9;IqZ(Wo{9Oox76v;T=SK|V$E&V`c~d)#(r9WlXiGPQX7 zLWW*%%@9lrK0=^=Z$TB0MY`8XK_iI%%_v+BVQef^K;U9L+K?qYsg=chgg(U*1t?AM zaN#f-Gy_E%{Ot)L(E6o&%*mju!LmG9X~d>wc&iU)p>$%=*eQB+y+DjwsMMkT^j0Fi z)!@wFn~osz+s@C(XDy5%y`ATuPBgAS(8PuNN5{0!8?!*c8N@yWx?aQMy#EaKKbYz(AsP5iN7snT3k}-sygHb$`mf;#LFy;j51)trwog*@lIz4ASs}jSksI z1O8n5iSaJ%{EE%8Y3`=Tk$d2u!)LvBPNt#AJBRg0({Y&bHMn?*7}T%0((=( zhk-2mG>9o|q|E_|q_4SJCaH9W-IJ;O2SK{YtuL2N!yM;6QZ(TdI0jH{v zi63O0Us3cit6I6Ta?eMu9P?wE+#^`1y7ke%MH5VUCC)^*l02?>vsW@ zlPn6N=5c$Em2Z-<|bdR^m$F7e7 zc&BZJM;5I3diodh!>Okik~e_z28^_zR_m_z|K>8oKD~EGuq+#Jxhf2rEiX;=4iq48;#ek_>lMmnDj1W#sEVJ%V|sgRF~#$Q~|N6x7fZLNAMK(+7T?+n*l)*d9lgt=c0Nz8Ghc%(QhyYtZBam>9ydG&kWNm@?a zc>;HCtlV^e_mtOpBe37QeWKDVvM5qr($t)W93Gbfxnd9gleT+oPgR$+1L+}ph}5Jv zhZq>Ehwbwlbl!RKy zzxMo{uNBxbpMv?PEI;3Q{>caYm0^^neNA zoJZXdzp>NTUL4r^dXJmU?|hwnmHhRc_6fMjZ;YgoV{6>9Da#SRu_pT-MPLrtG4Fjc zc>On|TJbn!>+6SuD!=iy@z=xZFVF7Zd5*yhuqg6w?Pw>y*;$UM z?@n!L2L?CD?+p7G4|$SrlxBDDJdol<^{s=TzsR=p`Z<*|nUI^7MdNIC6gr;Z)y1~E z^iMBC_um-Cku-u!2sWu_VCU7q@6L=rWao}VTUzft2&ac#Gk@B-JD_o}oj)c#=xU|0 zb3c!^{Ed&D9&`zTVJx=etafhs^P{dA_ECa)a!>Eh6KvU=X}~s0m`LjB`Hhb$GYwel z@#sr=IXkP=*!?%l-9i9Od0y6Ud`xxI{XR!A_Nk%9&H@yrP9uDjwJv6?OxQ_zglbuF z7yHoMlwhgHJEin={5!|)b!8U_V7o~SX2e44IRM2Dpa=n1#dj1T3Q@gLbT{++6|HDk z)11JT!OP{P{yUeNM41Hj{0#=O9oM9rzj4-xd9T+GhJy}BnBEWij_L;vOyE{K4?>d% zelV2u0VTjvo|2M~J152*7a!)s-bKCD8Tl`0!=8!`iR-R*okTlB*SU?Ducj{3f6HR> zM6#J7Z;eCTdaN9c?y06@b^Sn%_G(H9{A{qI>@cxPqv+#_dswt7wMm8Ur{*{zG2`qo z&nbWD9u19(b<@NNkpfjJ2A8F(XxA1p^2S%s%%xMI(WuqGBLFrx*2TV0-h@q z?B9>Vq{fK&Zek^NFgU34Q~ZkT$ptHRr`1mMx=MmC# zrHSf~!kHK-f#Rtx|0?7=g9^d52;=BY_vw#?T1r&$PAYcS16FoXn2T%4e6eQiA$?>- zF9olQCqRka<0M-6Y^01*7Iaeu`5C_%Gy@;sG`p(uz;L4Q$TuuZ{Bku;J}wEcm>}cT zSoB*8UultJjs#(BN}uSEd0}pj5C2 zAWv?vFY5klvOT&M%!@FWS@$}DZ-ezh6fgVvJ!wu0uSZe(S~$0N_tCh!|LXL*p>?)iF0OECqAscMZK5t6?CcJZ017HlDKY*ViX)m9%FF@75bTm-p5MQJNA^=wG^Vzx zeM9W!W9rpqEmMzQOX+#{uOP|60*W!T*~xG8o7}>sd%=h5@op(SZ-4n+A^46Bw3poT zt%>vB_UyrTLZH3mp1*(D-nmQncH5OpPplRLLoX?K^%=d50+FRypeiG>GPqn=+^BEC z5*lS!bw&q&iYn3Grnw@39f~y!5}^^_KpDgP5>unAW84j1lHZgR4}RDW$t2&jN&Qyc z`_22QQ-(YU8X6Tr2e_V9lUkm9US--_&Td=fI`sF)c6+knBg?+P&`G$0`cyC&E$U~o zG$&fwv+&}|)HQuXL0?c?G;cODteDt8@wd$&i=g3BGT$qji>_lOOHR-7&xjMeorj|@ zjyl$bD?S%!f@daKsy*HH2fY^b5-mlG2>XfU{dlCn0KPI{W@59ByWoq3LE7(u7t z4E6Yn+-7os6sEb z3Xvgpw#3#b)px0F9@6hCLTr?_| z-F~LKjoc5`h(QvT=ihlwO->!Yjie`vm$k#t1Di=S5eP`%kBOC z9>v1wLHd^JmHdg<;6h>0UwdbZrRU9F9-Bz&w0^4O-E^KCP%!`2>>Bi}5|M(w7o+I9 zNxt`Dq>Zb?HRXK_5~PbApZgBZrj4O1sM-C-+ofmTC)Np+OlR6UQm&?4Wo42c*;C`B zx9x@vp{gMq^M$oH_8IwtYC4 z%0t3a*gXDe_<8}bBrJ{g3lTp>bE9JS1G|kPN%DKm_dt>ZRd>niks$&Yp$CVb4R|Vq zSSTBlELT(NnNAw^+~&0^`G7R<4x3d_GFZ5|et4`{%Xlh8p{GhXcg8JT^eI7%^vVSj z2J9mG`~j}*G}`XbUHMXbjhGkL$cKxzuHp?Z_5}Vw?CfhZfhe;CTX%=i0>+dp%&@-O zLY<+?rOn|mRi&HqRgo#APn znv`oLdP>sQw-#P!(=sE%gZ!IFlgqy~UN-w~v=Ze5=pTKM2=Sq!xk;lf0DZnyp#y%zxHMjWHV} zTc!bX0TI}A9+XK}@jjdd6-!Uw=gItM1l&GhH;+7p=-kL|Mi~YbOHij`XX(ERcCBoP z<$)b&IDaAtX;?A!&b;Hjp5uoj;H=EcdzKsZ9mcwb@TpaaFE<+>kKoSr5E3V)FWUuE zI0sWt?JWIUuFdwXl@N>Twi%paYim6{RUD4Js~C%Y~m-9upqa2&(?YOI{h2cK8XSf{KEtJ>p1V3R^T7bB6c_!a1wep+zv$&rVWAV9X zgzl3>i#Q)cpRl-|F`??DKC{Y{4v=R{`9x^ZO}!w_RH+)LbK5HUZ;tDQNV2w*PKT&! zi+ZZhHFXB*$bWf{ojx4R>aYeIX@r|XD)}w44q~UB?w=ozb5B+1sf?<)_QKDcu8#=c zSlhbZSRF7qbLO);Dl>sS(GdTLyE3M=dX`G}Bp{~0qm_iQYKceKdk&pr2;x_fFl8DO zY&vO^FPBS)m6$F+13Jf9zg8FM2-YU7>v9fQNT|xUU7Ra(IkEOhOOlz@aY+SO=Y~N_ zW&uYT#o`Hv@AR5pxG-%~Q^(sG zP|}ohH^J#62J$c>bZ}<={3!MDB36^w0n^~v(=|qgtOSOEXVCa*%cb60F7Z~N97*6B-I5A4UmXn_O;(R5m*lER@`ZWJf|PTermCJWY` z^wJw|A&@WV@;aHOeKrPBPmrmdai>63oP0&Hx=g)tA>l?et0Y8JeSMTiA*#=Mi>hAZ zlFbwsgxpSuo7Q5{fk$Yue}P=hU*F2q!t{PDBe^~aY@5?;h0Pg)n@+XP5C_(1VAh<% zIM01RzcI@Rs%}=_gDT49fLz1kJts;;Q2kdjxK}NZv-^7j`IW35?RY&>b6JlaGl^IV z)v63(vB%uvseA@r#d98**lT@)nEOqvcV#PxbmMi<>5I#6eR@3e?{=%GXH17I%*OF7QcZaob#3_o zD`za$JT_jXi0U0s+!Pcy*uHxmOI-qSoVy$-*}Ur8-Ms13MNVo~t9HuE3DKKtP@%r? zR_b8ikCf5UOaT)cYPxLH!{j3vR5D*$#9i%PaTJ)Hvg?O=7Hpds)f@Z!x!#)zt{V1x zUo%O;K4Y@EtI*thZg!&L!Nw^e$cdDAcy5~1vE$p>#ot~mBAgHbQbq4tVc-O+yWw)x zM|DM6NXeql+$p>(qtx*>!2WmFOjRzd-PPi7jK}D0$b0U;#|^*SI6wPVDdnAz`)P5Y zv_}~E@1UIxpEBqZjP)6!p`>d!tx>V>8HJGrgul#pw41!IF{adIO`o}&tW(UGuU|2_ z;c^sNZ?&4|c_;1mkP(b|7LI;A73;6{xpynhu-?K(G?KV=e{@ziikA+t+{ZK$pF^121#TH8x{W>09aG73zgSxL z_)56wjQ+y)n>e3zAz~=wYU+aXUQ+#0J0n=j{H=IiJWqXeH0ciUirA7PF6|La&Rp#OB#E!^ z6J>5e@Xzrs4|RrWhY}ps7R5`K*2L;`!0WHSWXV5)C~QvL+Et|X?>raZZvID?i!CaR zBV?8KSrUbEUux22hJC1oG-1=rXQma*g0lEau*?y?t%WciRcY$nkU#lQo!y1Gi3)ui zn)3U1NrZ zW#EHDx;52h;~YuZYdXXTD%|q}3d`jarB@`Nm;3HsmBSp}deLkof9EZts{h|(cJCAG zPPc{$M$1+ccFXfQ7ltwHefZ*$Vbo;aY)7zz;N?)5*;DPd(~#4?0U(#Aj6oNQ`NGGI zB8rJ_=r0#c9`2#Aa z%1bo7v;j9)KwPY6uDi~n_LlnFdDPK{mpd-MNL5y~+(>~DxG(wuNuRLOUFE2C(llVq z8MjfH7-u08(QT!Z<7LqbzrPyv2?{6jgVyP7;qN~T1ur)oE_B@*wwzVDUGL#s3)r7G zt*AQy%AZeXxb#5&KpT0*L1re{Q3<~|gvnT>p>Si;VRTpmm#Bf?>5^f$tjzLf^M%T> z8~fBEOG#DqFD6iqF^J}w^B^1c17po)_566JT$4mp{|x_J!TGst+*;F<6r#am|Dyds z6Bi6nV*`KK&S&LKWCBA}ufvm<7sixBMTm59WkF#g1tp9M#RIsKY^MUk?WX<(^;=eE z_;9SZdy9a7+(-(Mb7fo+yY+NDPxVXP(5<3KKe5js`h5OG(A%P#;;@VsPs$7|is#`% z`z%WEN*vFfPQnEhT0p1kkH{75o1HCYDMsmxvY6qO2JJg%OCgVD0FLN)&Lc%T^9C!R zmjvp5r_-~W!Y#F0?)Mhx@696vgty}WP;CkH@+y?r#uxIJhS#CoUwUcc7DE%Er?fbnsnEzO^h+YDpzmM zR|nWvok8(naAKBryA`@2m`kDgFlXYFH7GZABfs)veIHt8bD7G(BsWlqzZftKnT!6` z2z~r55sjheX|W%|cu)iL1w_CK30_M(F5WA-F&jg5ygweidKq#GXL{G$vC|?Fx)oE8 zY;h|~9aHzP!t~xGz5C08HhNzCD0(g0@&dre&Erj}B0og@f`M1TTZ$U0pJb!E0pWNO z7KNECf^y+aRG zL5hi|q(fhghaa@#hh%$8qDDws^1OXGzDj&1fR_>)QtpMRi%!sWF2pZSyvl$vSg1U! zs3n+!Am4jQBVysEizo)3XVBtCik5iQoM3xtnG{Wr)r_woz91rJN#!TUPNSAQ*2a4n zu@(z?S+vpObvYiQ7#BTvM8De^$wfD9ldsn%#U-0XXL6PaMLYZV-ny52BST#?IO+6D zrw=qC`Bc-YAR?V894cM}uzdiI+1}G`aL#yewfWzHs_CV^98kyTq+r0l10}t-cI42} z?n;76&%ph6kdwr8BkX3XcfvU>D_jBa^x;+!z3p`UB)fgV`c!XDGan`2Z$Cewau-%K z)U_QwZvCY@Tv|V2L!V$hkc}#QjhR!pmOHZO7E5pB5m$n3E%hVXL7m$ z>bza}qvvq5m$g!(hd_S(g)-6WdJVQYG9p(?0jJ{Sz5(y+3F=)si`=MynP{uK@s3py z5e<$7twj*jk|bg6ozI2Y((9oz34j09Zh0s2&#!l(11)wV|4U%j@P_nK;{{VOho7h^ zxeJeJvEmAT0>!7ePz$IRDMf-t*gOq~YU88JQF^c_a!-mzL?ek=Ur*pO`k@E)$lgKA z?ziS0qfb*KufvU^iYb4hIbX?9W^6urXmOMdJ2P>w8m{7HR%DQt^GeCe?21{mtRF1? z>L}qt&wClh0m!Gn`-msTjiSYd0u_)lQoayWKv1t~S*Y8$E6joNp*F(i(ttP2!1vc- zviL32&#XlT@>XU~R|Ek?1nTw}3sy6xmZJt0RZhI&Q2jW(?IN!jBi0iivQkZA-v^Q( z5|ozv*A~ysv%me#PIPY>>Kfh5*u0UiBX3onnr(3Q)zbQy4vZ1jWFQ1+JJl;jw9-#> zI_%>@y$A~ObwZ;%X1dt?v&VBmRqt+?9*m(6@+pPCRT-n}{ODd6-;73I$E^? z+^=CK7E60dt3CV3f)6oxh#_9`5Z~GRWh@T&n%y&2Q*birUQnfeF+?? zX*q5)`S@sGNRs5cwGBYI}#VxtHw%fpQjSi~=-4kPW2ro(GSplU}TB3S2*E0<| z(pl$l`$>)uKP7>P=D#PmM7Wo}6WH0%!L+i87rl9|tUlOQPQ^z6X*eMtU{55O<~hfZW_Q zzm*Zm{J(2PRmmj#g0SwG9mau8Nc<0-^iLs)o$`gj)CEhCe=YjaA;H(OScHU z;B1l9fX$|hKmnmiu#F$p*~+v1nfmU*y>;n7SBnZPlE434UvoXQ-4l+evFj!T_`|Y- z$}7*8TB#THs)bJh3SMb&J{`UfB>(qmU@opB+|BrAMj3{XM?#X}{f-8G`tnwcZ!m_> z^-(W%t^Bw+ zKgvFm_Ow`WN3X(~gv$zFbPVLUs-np>czg1Wch|DtnZ9a8t!0(fyku))8)+obM$i|V z4c96uAG0vRzLkmY7KgD^=G2w6SQl=+&fqCOf1TCJW(+ad*f*-VJ3O6-?LN(_017r% zJmYnQmkKWRJ0TO6OoB=E#s+!WfJemYIy$t&9}-arHcW91Dm#2x|G-R@c4x);cqV(s zx;hc~o4&2Zl>QzS@ZH;b7=-3|7OaYGyF_luL71fd^<8lGb7HFud9h z=*gy;b5QZW9AvG6Ik}5&-?I^4vYZPL-Lg9o-=DGD=YV@R6-1LcF(8E0GGEpnv5`#; zh#;F}+%G=AXnWbA^~uTDEke#M^V5DEKtm*&kHylsu8|h*#*}V3x@eCHDjHY~t@X1T zCFj`RqmES@kRsy~wpQ*3UsskQKs(Jnn2s5(Z zpKmNN?A(0N5j6s!YQWQf%2@Ysygf4oNe2Dcu?M&28owW>2p|fc>qIU{|5hh<->*#8 zXi4O(BC}1o<#}Lq4y!-WWR1SlFqT4`Od(2=4gPu0WAd@LkKD9E5ZGrG%V&!$k@$$5 zl(x+UslwJXvQ}6}#r@>2l}D+06#8Kja5W@3N=l?W^NJilLDnMS!&N$lWlPS0v-m%r zN_gba_(3@n3-f#f)8k>DJV@URzi^SjAbrByk^)ccLBE;Q_TXM=4|E(T1OuE**4 z;a&Ly1`L44l;Y^NQ@j0g&oN+`1_30OYW`+Oe6PQyhE7<{mGZ(LeGi|W6lnFqZ zB@(gD=E@Ee=9drIRIPB@bfZJp`v`aGQsux#CONL|*$n0G)Zjfh(Auzk@o?0rs9(C$QW#G?WSR3CY{S~(u58e@T%iO3! zMJJV*4^a|jdP*L8OM9yElCbnEFxlKZ_d$=vew%^;tr6FOjin8Dq1laD6ztOwAj3$t zSRsn|jsX9_rRwcm|9O9~!YmpzBQ`kznaWFk9oQOff)Tp5RH%%VSr%W!pdj=EbRTk84DOFk3r*&X#`w#>Kz{JHerF>W zReo4kp^R7?UY5IQ65)#JLJwK9YIOtmf|omD(s3~_uY1;U)6!rw;e+M#?%W%n*_L{o zm2~x%Z+xiZG{&2qTGZDzp|~NlUASNC;Z*?@Wcn3TS)S;q%;thUg;Aw9TcFVTur3{9 zOtE0rp9WF92cM)EN#H5~QA~G8`*Z+w=)eDqGV+$(S81ectKeY zy;Mp0bQM-d(BxLF)N9+woD`eL6&@1AUM;KRqG`I^;E? zJ|6b49Sb5|dk0f_@?2(3V@l@_Ar;>-m`d~*Q~Xqz((!w-I(CDnd*IO``im8&_{1Si z49Xy1%652<{i{RZ`c`4fkJmh@dQESX9;<-q8aX0g285qu4<(Qo7oD45S^D7%md!)m z>jxMUJ%i=QqE+8+jiPIh&t;`ux%ncyx3H#E8In2P^g4Uv=sapn#oSrv19*^BMbTkB z^(?TULL+#oXqNVRuA0%*z3o4~l%o+b8rlx%B1>S578>mvo%TrwHLL)MPi>hEsKD1b z!|4q5Sd%(LPSjG^E({K3h_uh0xGkUqju&D6nnqFywoO;YQYKOowt5(2pb4xS37g7B zcmbi!hCc@;CHj^_(JCthmCng0Tqcfd;vV2r@<&c`;rx1gM5@JYEP7TK8^o7QW)K?# zVPK16Y_wiZu?gDI{5gCPI6Qu$Ihfr1EVXo3?XG^QjqHYS<@AU4662AQ)@_W&l?083 z&L~LofXQt?yy3VYxc>{LEMurQ#(%M-52A zboCu-nXX^~J|Gk4v1S}k6kbMP*f}1z8%f~Vj@Q@%Dkh3k+l8=*!Y}u=hMAns(6=3H z)Od6FWz@vsZI zefo1BN=QSWDNf5uh1F6Xr3Q*WRs~HE#)`Ac!CR@O$pPuq9j#q93bT*Jqoxm!j2q0i zxJZ4*%4< z0JkAT$}6veRKf*f#;%^xDq9`XA!aV#YXULJv}FFhlv>C2U<7fR$`h3V)iCzWi|#P@ zp$+HjC-TUrjkT6lA;(Ls&D^T^&szFU5+I$+Ovq@-&Q#q~3hlR_-sI%M4Zfaf;##hD z&(kfzo8o zxR=+W&!5Ey84+roLpP2VU=BMZ4hS1`tB91>jm`vrNH@Atja&%vE=SDFO$uAGa;jeR z_jRJQ1qIIl1DtHFZGwfee!s{b#B;jp{<`BW16eIdNYK$ymWI+-_i9jK%cSMJP%EY4 z$?m)_}Sq32HujLA)^YE zmW0BxQZ=t~igmW5al;YSo)vW_8 zh&5K#v+C#sYKUKkW+QR{dsw$%LgA*EVETXOUV)geEh>iFY_SNqzudDbK4`S zeA0dKv|r=>no+75o`M!bW&l~}`x(0K;sDYSmLnRXd}nIOkS>Clr;bDaQyKP?C8E8? zINK!}X<`C^2POuMiEtMuw{CZpe)}qGI4w> z`1&t_1Ojnw3C%e^P_2msvUDOqPAi)V)|ht;w3@Vy`t5w0UXn-#8C@PY{#GqEsOB)5$bz_ieqj+i>=;}z zReP*&rYv0KxRx`pkepS|0Tzm#n~yf2k&?2|3W3=56Q9{AVQ1}c_1N8soupch!;0UQ zPb?Dmr1OJb)`Zgr*AIfge%*(GwXAahw&x)#J~b6R>;^pG!aJ>&XWw7purQ}5EzZ5? zFykdA0CQ8_S){KGJW@uJ0^GS{CU31F8NM^?&H#7FqNSC7O6*J5Z893@A{m(ns#KeA zcXxmL*xNX>>;(!^ou20j<|+axF(?2rOpY{Wusf-(QwGmpzC(se%9CGQBU7GZNk@iD zOK3I;!DPQTP5z%x0XxKhUJKtrUuY!S))YI^IqVIa7^T?2Q^-YnS}LgQb(VfF8J`zt zKcgDi=&G=|uENF+ggo*x;8^~jIpmxFmxvk~oa&%}g+}ka@r@o&^hk_z_C{Ep3B)0i z`bam?&Y^v>SV2j^UD`AG3$~d%#SBtu*^i>sah@H?4Kz)#m9V#xHU```m)5Av4&`=0ssq@;kvnUyrDH;LY( zCCmu6YJq9T#W91W$AanjLQMh0_y=w2a=b2=IE}`#v?LqA?pTtsJbveutmMMCvzchV z!7I?qRz=tX)%vipsV)L2YoiY%7aY&#Cct{&6di3yie>niP{%lN0xULBG zqW&nSWyZli9*mWbR7y(*o;A2RYSYu=ZH?`cbBz7H^Rp>RDR(t11}?B(fq>edLDvR7 z?jakTpijw|ECvi$*Rss&`xO;Flg(fNpzq){Vt#&boA;9YKM3Sv_SK}^9v2c%a4>(5 zFrqX&1N#1yy%}*#T7#e;g8Tpxh7!n7GzLTB)gFfvQNDw?XH7>Q3f|OxX8X1X?Fp@x zPH;2s4wC>b5UJyW6`#kn@0CONb~wgT$EPKU%ySn89j0bR8W-1yO@-Zaq3WNY&tF@2 zXjW&Rv#oTASR$h#i(@Xl6;Ci7#r4#6#`%UsL3|?kls*Ia74l=j$<)+b(iO>hJ;NLQ z=phR{Cn}lm7b=}#{xPU33S#Hbw76E@WNch4RIKPqRF2iH7J!P~w-v|;)|u0sH@f3z z9$&5pRg_m|hi@>?xy|!L>OgpRnvggd@VX)%@G(e94w0{)SFNY@`Aw8b=OM`|OV{H7 z4;qe4CHr{dGB4)_)#kT>ObfQ+L0%1~fN@+DpFBCW&RXUl1sUo#fB0~<@2NrQGC+OO z@XIN2LWfWFxb?_gzaBNY)RQ&R8lAz(owi}24C+8fXx}5_OU*ws71#Zt zo0i|krex4nl)wSqQ@SZ??R%(vJ!X`eJ&OUo(nYmdB6x(~ zVhu$94DG>q7vOsiJq0x{JszeuM+;&P-;oSzop%)Nb?IM|m_b|vIf632L53vLbvxke zIQA=apb|~Ih&+j32DcQAnDwk#ovSu6E-qJNAfJ^EZ(-o9LwlYS3qO z6M?CP9(5Z*Y{evRJ=FkH01I^Jx&Wz#01*F!v!f(=vcodshiK#1qmM_+NtfWdIK{p6 zzC`QcbXPhm`=bHUW>?$}%kBvgzDnA0uJ`@(&@N5Ci~hX8^|j zr^vZr-ZhCNduwV9f-dc*mXh7L$$!~3VH}fO)~x(Twu8d{C*OU{lcfQ zy4ORasbVbMeVC|IVdB_9a391YApQh^(LE2mcq4Q}RGtf;%`$;lrG00ld{$+?)i_b0>A z`Jxp^5UZ(0hLJOvqh{Y8KBB|4)qnQCs<@9xgM zqB#wt;W+UNB`#IQ0$|t;MOwx|uq6^1; zGZe=Pat_Z5KW#{vtvJq#=p@dG$a}H_gmgRsfkdr0s;xTa)j~L)C^&$6MfhENeg!C0 ziUpTMxIQ9=xg6Ns7B9`iS6@>`qDv`lGZMO@m)>Js@>GO_hu*te*18VDTmY`}(y3qA z3GT=kkbcy#6iwH!8GpGx;DJ%(@>>I$oPPk74|e^^7Hg5uV>%clHa=*U;QrvwwqH)Q zkpU7Jk`wwJx*!eW2=<-gOaM|W0boxbnJ11!DFEFfjd6)JXkOZ-_^?55npU;XQg*%E z%Y$8YyJ5?1WQKP!00%C#a@b>`;^2{G&rq7@z=u1KO+{g;P`v)BZlm&{(@)0IT38+G z;d@L(&#F{s@jZl%oW%7dw$1anYG0K!!m8J4EpF5>lr9r@OQlO&A{CqMRfl29 ztQ3`5kJ|P7;#XJ3|9q8^yWDqyriwit(0iE!@S{>JOzJ}45ZP)Z{c)|h`iYa*HhxgH zsbF7#j21hy%E1}9_Ht6aHgT`Q3^lzySCQi?8Q=+!m*J}q9d6mSF(35iUEgK0ghTj| zfsn?D&d>7i>nBp)8!5TtXS zZH8_=CDM!-GJDT|GI`8F(jb~g!o>KvWfC-)=N;r)q@N(J~HvgQ)u3YM9 zB*v?|NZO;DJ~BnaxsP8L6jdKRb`)`9-XL$o{k-FN<@*muLcVd z0K$yB`mKY+k~*>ag_B47sI>mVxtX-dnlG;Wd}gd1#j)3AZtAtKb^ElH4L6!;MG2M9 z#%p((KE2Ux;^lAdT-vo{lH)(Xl^V2Bb`=eWc%fkU44%k^nMd7i?j--|N1I9y$*yRE z-fPe5B-U-$p75aGT4>`cOtvTg>!iAG9TT5gCa2XSH2LsN_lgDDj&htfEHZc#U3eAv zK+T2%!kjl`6RJ}{ots=hLJ|UJ{P`pdz$BEIG6g5x$dgF9*>yO%>H+F=6JhQ}&H=rw zTz;!2Ul6`Fd@QgFf9~Z%Pn+~9Rj|TrkCup(c#7>FGe{bcLVAk7h|-{E?Te1qUOtqg z_@S(X8(R4}bz;{5oKTv@ov<_~ZZV#&l&l!V5DEm@)_9Uco5+;!bopN!p0X0#TJLzuQUmC#FpL-K4tyn>U!f+u zv0IYct5A`p$H0nOVZ1nZZGFGOvTR#?t{GlqAasM_=Sw!gQH)cH1af!Erb%>s@sg$6 zBxtx z!+EhK{!}D^d+YI^&g}z-(48#hjy#s`&@LfODX4XmlS8a402f$i1>TyW+Pnx?mz-EI z`=E;TLCPG^2F?1jrT)BGpf^9AJq4PL?e@981qsushPEHt?&^AH{;>a08^;S&5?+^G zdKVeEXZ%xXrBc~Rusn(a(t^QP9)Gg^7kbjO)b{rIA98ie`q@~L(*O+awY0|{WcXP9&zoi*by@=SOkUP?plOOq^bjX* znHoc8iu=!+yNWC*bKh1hYUOn`RS5B@amsQyaQB5vBl2c zQrneZd`BKGIEXt9mwnX9(_65JasajT>Bttgw0o8jxqCa`BLzb}ey~gS9(5TU_wFRc zq9VfQr-x-%$0h3w4Mw0}q_x?lV_Q3LY(c@WK|jW4V~j~<{R!ZZ zZveF`!dgSP4>&0Fw$&{m(dtoHN1zmE!k0c3PHy4Dm@!`g)89up-5+oTru63)b}=|q z1KpuoN8d!|xIBf+^d0UP*&*8 zWWvadknx@+K|_BB;YT0Xuau&>*3wf zGZR)h=NzLeQyh7(HD_Z3B(X<~BapY-q%>icn4UuuufmnA+6)~`d&K>*(nidf?H@~? z$0$n&_5eYXbbz3P_#YX7_`yZOSPrCo7EryUW=hO{;4uLV^!p4zDNgJ1rWyB>31b(e#KDNazrIeq7N;3MdpdVhvFh(z_*y z>P!;{3%vc-Ic@%^-#Vp>fj3u1Y;Z^~k@#qJ7qY>)K^wZKoV#d)4qf$_VB6zpVo#TE zu*cHf!mcmnUVaNO4yzY_ew1&cjY|h^0jY_}IFE&YrfTN}LoB*hd%xRvT=KAPZ2`Ys zAquK!McqyCZ_PIV$h)=|LhO|JmB92IxeEne?$19}6Sq6$O9zZI1*hF6Cg(f@%!{NS zh%nLTdR>6|2xz(Dg1nq+UmpNQQg(F%1J-fBo=Tuu!$&R~6o)8q31ZH1C5~7GeF?WnB!10K10E5J>V$Brnv;S|7(3H)A;m8eutD90Rnutp zm~31mJ@#?}o=^Oy?%Wf*ZqL#&z#0WA6R5lyV6=Q5&1>KCXjbV6Z!RM{7PyT?5x^)6 zWW>r`ov{RHwo~4cN?Q~Wd)cbFi^bg^$f}!_4lrcqumI=t%0*s)CnIOGUGt+#RR!3l zd%j7D1)XejVxf~B*+cy1G^bI)AmK2caZW3h9BsguXXTw}1MO1O*R3&Iv&krpx%!g{ zZ-m=dSW7?j?LHVL-iSwCftdh*=kQ41{Z7GDY8!ZKgzFjL)2a)RA=P(D*-4XA`uIIJ zIhkEQfyDYpMMlK3o)qrfbz8EVGgWLn+Yh*<-5ow=W~J;_E9E0`bAlc(IwS(6)PoXc~rsS&DxNtKec78o#{H5gevC`9RT3fs`4{K)Yb6VLr_Be)M0Ue&uIkgI* z=YZ}Y_b%lz6JviiM9ejrx5{`rE(R?7`<`{+<=7(k5FhquuS4`c0~`t|WbTCX4H0=#$Q~MwF6GI9M&AXnw-~`w0*xy`?2vc zJNK?Mkc4{77sS6{)$EAA59p?$!0MH&dzRI;s*jRM8K7SPB$lEk8!p1;xO9D(EWoi< zCWM9Yxa;$4KQzdj)~|RER7D8%#cNw5XsZL8Dw663zo@NO-)wR|%F^ko9v$rnT016} z5PUZNYg2vT23e6#TaZ@X$C-9zi)V`J*j~<2k(>;05X~WxV~&fB+FI7I6+CZ~M4^%r zOFH+Y%`6|!%8AcD`DWGc2=6O>+6AfUhGpFzKF{Z=WbH_xa7+%|S{Cw;4~D^z-MRiZ zU*_P-$m1g z{#Bd2h^_xyM4zbpO%T1hIsPHlNNjr7Ojj`mECl%X!2k82lBF+s8J_-c8O$$2Jxa8* zv)5kVW^o>At82hNGM(*QDvVH(vV?E_9mUHBkU_Cnt`azyz4M93A^kDkpH8w45{HM3 z_kHCDW3J0~;eTGx<7EyYtSNxf;Z62#=$Be5>eZ0^rZ|mqW60N*E=5{Zx2gM$=9c#p z;L2v3`#Dc&$s2EKQQ_C4oH^utheGw@;RC%OO4uN0|40=jYn>6QjHe+7>SV+~iS4a_ zk1h|&j7cG9?6BY*!B0L8NdPRr_f@EbA8$#l=jp&_=eGF3ei7v~u!ns7@7k>E*j3FC z`!+juHLFR{=I{G!=WJ&#Sl(GLyiLaTgMY6ShQ!7;3itnCo6XucfeA?SRg#YH7_ooY zVMnO*;p;8czT;8SAiNxAZvv;VU@n$krm`3N+RDMb@bQS{>#j7B%j!V8qzPUL2RFRC z@;{3d)yoiqJ;a3?L4zU%V8tYKUGV%3t_9K$zWzByge-X!8dc0HgGytSM*$n0gG3hYk6@;R7o(cZ^33hpMq72EhH0}tf(MCo4 zwaEv<6A~E}i1(=|iP_W!hZFDJaj(H{G8>{wfJ-z(8Ws;(8}}(eUn?^pB~zU$j8~XW z7A3lnawiJ1$`uE=P(E84idY8j(9+;h&&$@%BWiMF61XkBZ|9j!!|~79P1>E+TsI?@ z+jA$C1DCt+jDQ_oMI*V1#BmTix<;i8FE{euzQ>Ki9U*I1V%Z%(*r=1}Y1G)Gnv~h~^Wy8^ zmTe9AZ`=O8Y>5F9z7&PZdvvLoBCS5qsZD=We7wXA4Y_c^N1{Wg+v46l8-&v&jIW3e zyX5zEvw{?!KkVEEM`{V@8pQH{5ap441Ib($w#O$d1A2Ll+b8(|3%rxm)**(90-WXp zz#&OiZUD=#y%>Kae*hF%czjT%G!6BjH&^MapcO&jFtF@@A1Z(S@Hq!+8P9>UKC*dB zRsO^Q)u6cONz2U`CNUd3(sRi=*Vu5qd%$1lwspT%S&!0T-=1m$+?Pww_ZE9WsAlGp0)>kFA2OYsp}wpn z8>&^Kdc!aYoXZ6}5;CaSGJ(GDWDfs=lU{?k_vU1h$tLy_=@6+j?!y}ypZVHoJL@Y_ zHP%*-c zHBXU{p~d>tN(I+=;q@^4Bj1_qyDQm`f*NO*>YilVE4@v7-NgVh^#9Q(AnWLfdIXmI z#vuRO=T~LVg(5bARGoSY9o~}ERE6{@yV~G#8DWg}l(IXQQ;vGS1$VKDRL;l&Gp0#_ z4y{JSe66s8;<=1kSR2Nsfuj~htouW3FW(X4M8{H&rv8m~`%`t(hSajH{7h3pu?%9EAUtc@tL_4e1I3buo{cuq8_X3wLcY#iOrf7Cam}u}(%`^i<*`d&K z>-h71vEwdOd?@-pZwW2bI+k(KznaEwdS*!(E5u~A7WHip8@{kR5u;mq;N(6or_9Fr z;z`5)tz2Qvk-0j!Qv5hb72vX0vW(^0ms3JK=}W5?&}=)9WtcF+itJSbMN-21b55qU z%;BxIK2r0%OON<=^(M5es8hL$w^Erw^R$QIYJQVu|ZjXykXr(H8dCWL=3%if;A$@UbrOUyAhkzpw0l|;UCt-BBeLVJk~3+f_T!F zr_f_pYNR9{rRYh!g3N|EOG)5qT!yTCb_DgW(eiU4LdcI?O5-*nCw>Mwd3FsFW8T}G|LjG@M^FS4+n5Wli3R9aJ6#31P*V=+F1N9E&xSDMoFva8>{Sg)Pf6Y$RF%cI{Qa%Ic@NG-J8vnd zm$bEGAB0RuoHQ!0etZ;L`8W&vd82@XTlf0wFz3w^VA^8RISWU0Lg-@T^l^Y`D*WM9 z*sgqo;D0V+kaCwS_@8xQLiRd6!P$Yo(ju5Xb#YR1qSlff6BgK}Y8Eec`{CwUKmNYm7r<-8S^pzQE%XS9@?Kq-sTL`CUC4H_MiyQP z>K7T`CK}*(#0CUS$MEZZZmZ%Cejo5WHbNH7-S7Pvz$%s~h)1i*h3a{0(A``{BQTl?uKR{NJx& z_aOu6KeDnOuwdlBBpE`cB}D+ZE&h*X_&}_^pq$-l;SoTh49xg0sCw%a{`>zmv3gRh z49WjvFpbOqH5eSlJz(^|gTc!FYyK`^W{Lk24hR{=!JO#d_v2&W2>CL{znGasCifxk zcLtMBY(PI!_#b3wXg~We^I(}3{kE$0Ut01_7>9aYp}{MP#0Cg8ih4%aafPqJ3ZXax8#YF8l{xBPrj^Qt)=L`HDPP|Fd+G0yJ7OK{pYrRuuN4P{iJk@E{yfk9 zuX(%=y?_V@Ck@8R8+0&|%xjGG&|q>`G)}iD#U|ftx!)RGfi@<9G(YgTxxhS6NU{^j zkWo?54s>3nfr$B9a;PXXMG7ICD+9ALm?XFPqhGUEnc243W9iN{+Koei>Q}>L*Cai1 z^gx;>!TI-+?}@NanKXl$+3M=kY0a0zRYX^@Pu1UBi5}V$-jd2b!^rr0;Jh{8>tE}# zzG(r{@(t8fhLGx0I<#O2N*X+kJp6s|CEKT!T#Btiw6f0wS6P|0zyz4?4gNiW^!$<9 z?Jix@RBtF)0CG+K1HPFE`yCdcuU37*PG*@jL+JAb^~_V$-s@-Qgsz&OR4h7GUo`au zaVJ%cyAhZZd#fpGidY?4(4`@lsXw-*ly!41$|4p^-wiMEEU@ zSzf{_!()k>*Byj~?dCP&;YVS3ei@@IT@>*qWy?>7vOnZMfRj9QyAvl*W@?bdq_;ni zZ5a!5$6B`OwTP_5Sc}s8x{CvA- z;jXEeq4`+{$7!(^nlTI5<`AM==FOT7ZQry{Y-SL=wts(AuFdeTgoQs_MDyx|Ecj3A2L^$f_$ua*6G(&h>&yPD(@CS*xWAYENrswvQt4Hdrll zF@4=*9C!v>a;cpfDti7gZ(MGkXt)Xxme2~=)hlPbB^lB6^EKC6Ti1U?UbA6}EtzgJ z2yfaf3A#Yx&PhBn)#Xo{U!gHV8_u1cZ9%$|ZF0z!o@*ghW{9)^_HM+_`n%`($$@Ky zIV${=*&)(F=clh^2Yb1$v{+l|zBAa4=zwBFaeakWy zE$|{1)keYGtJOf0X0na<$&RBHj=%}>G(tT6CIdRu_*kcW#JEcT{Irk|%z-3lk>QmA zGlG|qb4ztaRL{w%eSluiQEyuLDb+;6PGj&I#ghkE8&LEUwS0ApQeFc1W)w5&PbKQh zEFxfb@xuc^BZ5dozx77ZsqLA{@f+5SaYV2x#ybsDJW%a=Uia11g#BsMyCNz^`c`P z*K__=Gs-!JGU~721Lqrt7ZWb434uxg7<_(V74OOFckAhfi@hMjlG6KU>*bkcCJ<+=>0YsAm;B-jM~Uj7sX^_4#vAldWbaI|Au}3NJ&XqQ^6oFmY;d*= zt(qrOgHIXldQ#YuP}Sf>t)4g)tqwtlp;m4J3Hy*rmR02iyQlf6ICB%hJaQgL*~ zg{7#)jH)WBFxeZ;0s+YuP;-0CVD2#J$_tpf?F*MSSw{s^R*Q z|IvDlV+9LaV&&8X(|L zy;iy;4ZGiUC5O4u$jJ$P-&-0ZCyq*P4JAQ}uI&L&t~#yjUcxXHAGsIFHCdJEAO#($vlrJCWRD>bY-5&%%$*9AZ|ey@=dyUXQKHfa9aT7J4Cx=0$1! z#jdty7k^eX3Q5IDKNC(c?hjuSWQOIQ?AJ*t#_SPe2|Fj*@XOmpi|Y^jeDqKSFv+Wk zGjU2We@i@2Pw2a^f5unH*7zuZuYUGwB*}Lv(#X_vC}QwHYO0g z6ZbbL>$H(1a95&~2wiaGr$e8=`_=#aKJnJ zRReiqPiXrr1a^z*?SzYV?TR3?-hocGnYCHi7&i>p&e)&DNVM5vrTpyj5jX@pc`wBB z(!~A6QVvSTibJ~PrW{G*?)K3Fn~O(qRu?B)F3eVfXp}Pa0x<;%34ZI&G!bfVdD8cTR0t$}_ zXN`mA;Ng$(tyBi3WQIjwscM?ycm=_$9`rtqq0k||hcb>GJrO<#Bx0oKElstz{ zrIWv8_A(DTv~K^1Cr84z^_hcPa8S@QRaGxSq7hgjnOoO0X<3IcL0VYzL{)Ji7YQn_ zrMr;1Ttnv)#^h{Hg$ZkHbQR5gYVgbe-?1}ujV!+@waoW+oD#J?Z71dj5#%2mpwne; zA0LDzl|W?%F+=q4Mq>60%R(47N6EU1Lu&`f!2!f&LiBi}6%F0QX(Zi|p#kO%C3E-3 zxIi2T_a6j;p%8tZPZ-7@FiJa^@Rr8B$VS=xYzc3Be^~gSPTPa0MC-?rEfgm6DzqV~ zOVZEEX-tInA{y$6u{J9g9?JC@H?`xq(?zVNA`ju-1i*Nr6e?8gdaY>ecJvfTC0eC| z7FY9zvSV>b>$4eu;@BUhz{2V$c+(O*zwR5&1z_LN)bZAVj_>>>(;JXBc7Qw4+=t;zRr((Ag7)b!m7}v~<4@#;=FHVV)e2 zajm&$fT2v`tea>=zKtSC<}_H`nG4fTLU;GTy((*t9_-WkCytRKUv^+!DVD9P`zqUZp$;RKO%Nd3n$u4cRCp-jahxaC)CPCy49%FbWQj zco=8E+f9tlQRs(zsD2(XbJYWNa5=3PAzE;CLdsSGQ8etDI{MSm;Fr(!3UxRd_CgLn zFFjxGI&9)GQID!1zsS9%kFk(jW{0I)br{j8O!@k7O%#aoY|4ca($@&abizvJrWOjl z_+#T_vxviS4?JtNkS-Q=vSE9~YsDrSYRm0H`Jxb0-kTCx;XzXv?rH&}p;-UCI0=8B z^s`XPHN|H@+m}Alfv=P@@`(0{=3S*#N|GNFWa**fs+?GnqXWG`OJT=%>A9gK_P#1$ z8h2y&NMmzehYg*}kw~kUzN<_ON?^STDJCE9{a!QnT)~dBBTqsfEUmWTQsv)%Lv7&I z1M#5XO$p!f5y=D94UacL=Dd$y!_8cx$;wdD_rOW6TCTcB&lq>&?3>B)!h8m!1J1T&-}eN+xAt_n}^>x0gl4q zf0ifXh_M35NpEE<--}fK9qT{pXaTx=ZhGZNJe}A{gH*_27<5evTG+c<-63uGfeDR> zXX^x;>n<`Zyfy6_K)v-junDK_<0bF%{PYp%_M9h&`$uEAIVnIFz!|uPgxW8h1>n+) zeCtWDZtYR^&@KarkHJ=-wnumHA$kg6ZqeQQrU$WIwZ#0z(suX1Hv4*U$CZA;_o6k? z0g@-(dmW+{?jToPfrL%fkDNwC462myIlo^=CSgkb4}jX!_WItGzzREh!T6^&Kz*h8 zj!2?6i+Ki!OZ00ml;m6@hz4aKY=;VnqZ_Fa)lav-vmKdW_@{UNDdUC-nHZyQ5HiJZ z{ju%(YO}Q|vcN$Zf_tPAhQ;#Wz z15Z>`IIwF`#xf3d_W@@E@bb)gNS{_gXViSi-j{|LhXe}}=~4~gyhcazR#LW!dbBYv z6^&1Q2xZQb&AQUl)LN^0)yg~+<5vs_&~?kG663%Y2^{ns-N4dtX(VL<*o4ozi27gkS}!V(@{CkhR9{V?=bSnlg_9z`irgL6em zR$n6OIqu7yJ()nK-+V)!B z$?>4gTr2|xit0fq>*;0Hldu-WX(%erX|0W|Q*$J2>uN zkE>DJ9$Ye6%FQdjqw--l?qG~!1I(;#s>4iB2D;2BkMamgg<0;X*z zZX)ddM&>SZDE7l47Eb`U;I^WwiL1#b4e|c7L3Pm}AK(B=R)Dj} z5$N(1+-l~t{VZ=;Ers`e@4BX;JIg_(I>v)$X~8A@{8Rsv zJbxgwOWng>Ik_CpM-#3_O3NBrAD(&pN(Gc^z8%>eR>l?y_AT#~1p5pv?dikNo&v_t zil}LyZw7A=UN*A)rR15R=Qg^AJT@(w`C0t6ufw7E+S?DeskGQo5)0LYn1IaAEtm;uSfQiGZ6q`x-Eyn&9Gu>* zA7i8ese==-^;PY%SmIIo0*My;Qc@!0orY<5Y}5?tzQLe>@*v|nJ;C{CaJvxnxoC6z z3akb9s$xqfZ(IwN)85a{ao=;WH%HJbjupK{r*Hu!@zGXf`7s!n%B_K(`E<2#V7-Qa z(&qu8=S&N7yI6_$uM((7v%JEsCti*7__b+}rEv)LHx$Ux zQN`&flot(mG*5-5O>4_Jjgj6Wx5y}|J9(ggbi)*D&lZ@r;5P6HB6GJUdIo4^j|jny z?}McAvJkMq7Fk@D6W>o2dqZYf~kxUii#F)v<~6Y`bV#K81~=enzeKlw8Oi+oYYR zAb_60#3z>_+6n0v<#f8##u8rJ{#iTqja-vS>(+0A`0y^dP^LE{Ll)X5?dpvYW6%RZ zzR#hc*?UIdO8gip_aK(bX;|g{GObUWg^|X%+?f9Hh{AkT8#wpW3v3794sA`C0c0^VKvy!de_;xnZ)~E_t3UhLVAmi-uKauG3stfA;4W*_M9<`TsNC4_TmYHwZXiQUvPH5*JgnH; z!8ot=TipdmF*XimBgWi_A-t(lpiiS~+~-aXPLPgKOQSaQ5g}q3U3YY87S>E81Hb&b zA|_oiZXo9UUFd|fEE_lCTF2#BQjk4QH^)^xLeWDG^G6!*eHwlDE#S#0di6D?HUb^e zVof$-(;~S|-1qt}cq^QM;EjB;G`M;=7GxGcj&ol_3lW9KCVaZ4P3h)#^C}~Pv|_-i zF<)x#o&4DXY!UHM2!YL<)(rf`eHc%X&Xn-Vq)3vX)M2k-ci1a^Y-D(s-Udqri@x_4u2&-g7c9$@ z!i11zoFV5{DvofLw1E#Zr-#Zy(yy6fYlQT+zPIc@S4h*n6H&L!P%c)nIrKH+gJ_>{ zFb7DB2+$1#fAp-pFl02+VK4xP)yoiRry-#W9>Bb8UMTK9ZQqz%66TUNwi1_h{Q_U0 zmoM<^mJcbDv=?5`F*hlw3aATFbhka3FeC3X-%beu@3RvSr1o0%d}`dC)}|luxJm5K zX)k9U6D(DxH0Jk2cx`}UXwlA%zF*$OcAVFL^^VC4n5@`iCv}R^!iL0aa#?#n1mGx~ zF?Hoo&9UEiRXvS7rSCOh?jJu5Y^9j1s6V~vpqv0|6usho>p~4PKf*;56%C1e8e7t3 z0NWF0YVdJWKje~ohU*~%RM+`l@N<@;4mocA$G$Q9IR!3U=A8t*@&KTeFLIy|E67Z&JJ~kgYr(X|2V#&l z9e+9~1P9LU&a9d7GOmUwcHvknl3H_Fy0hss zB5il(p4}#NXABVK@|6tBk1XZ%nw#RMeP5Oo`fw|C1$ynlk``&4Hq4FmJ(we36RnYV z1Eo;s0vV4srRh$qZOf#0rvP)Zl0tHf8*M9e)xROS{8fjP5i5VOE;eHS<5oj-1uXuE zl&GUn{2DiU!mQkU8%%{W7sMgt$G;W(QzG;Ny=xdSvm;^9wJ^X_;`2syi*BqMmexB# zVfhk&mBDbUK$ZU3AU@{Jn!;HMz2*s%70Q+8;=o?jP6glta5MHkb-?rE68}yXwka&~ zl(uaxC1`aJoxgN9zeQ-m`$s=1C;_Xi+;iOk-af#kU(Q~=u ze$akac>rHwTF$;{5$5ChnjE{vr*De6)(lMBM`ZXbH?u}0H*+a48LqV1jNv~`CP$P* zb^|!=Jv$u=9QMA%UCZ=0#m2qM1olhGwc_jU;k@(k2ViNpL%?(GP%7O^Q4kL$U3*p? z*?z%}sufqbFcW}Hdpzwm^50OBoF-pSn0hWP&n0^28qHolOLB39u_#D2Q1KChb6tyh zt$G}0cvOLCt1IDuh~lPrykgM27Gk+RI0@nh#K@GAcp$2 z0s*0j(txPHd)kWv){jj+zgVd4n_`B}n1ed@EiKbNGvzG(LE8a}It9Gx0Y?MU@W6X9 zy*Qh2{#bdr6$7kmrf*U2Dy*r@&KNbZ@*>-%r^@2wWp5NiIk-Y9{)c*6h_SB}jkqZ? zYE2ZL*TEg2heKQfZo^SV?`Oaf2OI;>UzLMTZ9WxT$-e`R+2A(J0v)X1OqTJg1;-W6 zNyNvobJ$x~_;Jl*TWux91sF7CouYmSM%$<|v1M`G-EpFRJ=0OLZ!$3>uA#!+hQe!Q zx5RJ{HD8UNrt^aP_y;P4K?Z0=AA=u|Y-|%fLj(@;5X>C3adq zq#!1;p5lrl^^-RrAAryfa3=Uj0!+?=?jyz+jDB~Vy@8MGN>pO4*?$qkyAjFlR|-`P zyB(Qsdyc3w|A*Am?Fc#MPkwfJ9dSDKiRA`iu5vwXtzmfIwQn(2!K<$4oQfhv*ipD4 zvf0PxrB%K(8oagv*UMF;hmc#06@AzOBnx^j&PGCdEb=H~w@?19a%^1)S0pGQQ{u^6 z%GiQwPahcz=SZDYug&4jT(vZ zZTE9@Ge?K|ofuOXbVc(Xc{{%;Jx*Xjv($cc-B3Wjx0rqq7)5?TOwC@T;g#as;=KtO4|m3$2@f9mUw@_Es= zN15Sz;kP)=XN$xF9^atiB4mjePEKnGKr=b&yiGgQ^@*_&=1N^vnExJwe|0Fv$v<2+ zgd0S|O;+^(93fur7hANp*5h$B$s#3EAGf`EL%1q=EaV{*>|n-cG^>=;#Y2Sx7LLPg zS+)DLx_1ZA1eS7RpDS2l4k8!ug4_VJ zZlTY6H78Q2Q9%k;(IN_tM7Q(*;hMLkSnwFG4^y3BL`E|)HiH&ukWxQsrN1?ZOjgea zJ~sz0F9+U0H=r4CZ5Qlm2f6y(Ko#1Clb9W~+Eve9Adp%Ob;G=S z5iLRmqLOk$mB8maGm}(%a<~ZY^8{8ZuFSjuILwuq61g9M+ej~4kC86Q_#zE27lYPv zTk+RgAio6^i9+=NE})M|1V2lGpU(?e|Ns0PDi37iRpvLpWFyoY3aq;VL)-7)7X7*E zDS`4vdI>Ywytsi)2T?5dUS9yY;gFJm8Wg>G-wy}ktWgHfcqmS!V!E@6KrX>kA0!W0f&_Fm&)mkPP_y(1hG*ssa_ogFeN| zqnd-lz-w_e*YBC+S2^iz@B7wTO&Yj7rTj&Q&}8m`fK;ax)A-)8H>EdMfbnzi}mU z8-)lON~(0;+3XU!$jJSGX%_t}Rwb^}?sC_D=tO80yT)my4Um1oVFgNXM0#e2n0k)< zYjVI!1tnHplySi0u=lw{*S>$0l`+F2r)K>4q})vyq)F^iy`(j3jv`@WE_7s%znjq} z)Nm0EXR>6GGo6!@`SUM63p2*f;yF}mjmvC|>WO^6vb}wGvrlJNm$?0)W`wJiC56q$wG+(Au}kVmNPJ@3 zrS7F3Ch~=qPl&5s>a>8 zWv2K2MQpG$akV_T4CJ7M~gL z+SWu(gl4)v0tOX9kMd}o6JH>%;!p9yv&p@DTDFA!MNF{!F|{1fDiXJ!IKh0s>AB6A z1-HL%yQbwd$O|CG{0@-|t*|F<#8oyG$k}+>_e1Ti)4o6@=2_BsX_&c5n0Tbb<@vCq z4=M+)1pxIz;Bm{qiAM)jvvX`FAo})GmOh5{=q8N6VJQ&Y97z21j~D5NI|%#<=N1&V%5K^EUxNF&8YHb=S$OGu^<6b21XJ~T1Ou+YgY7M@1^e0c>P zQ!}muzwXm!$6WaxZ4yOaI{!o@5EuREcf6*LgmBhw8Oe;_cI<3Oz1%;HJU5>(VBN3i z_2im=bMsc(y|w0sy_g!JDgWy&_pJ0F+O_`xi3p(av_pa#^-#73r zIW`@W%n>tYM_H*TB6a8JdUOfr;H~|>yW3`@*!oxt2)Ff-6^86Q)NS-1n$}*Rw+V)V zjVZ941;67q11zq3YeM>YeM_Tqo~f9tgB!l}FH-}&hy*V*LUaY(y6MZ(yZf!t*K2h= z7*;Znjk^!HexvOz9yD91aN&3g%B4e&2n0Y08lknqC zxwxLs?UfW=Fb4PUV{oIJ*Szd3b8zp%1CvZqv=*+r2mLutngw8#=&&S+JijX&N=8X3 zzU|zrHT1Y=n@s`6;Q4)wTj+9$?J8>dU4}+ev8K>jHw3+ES(_;-HcumPCo-TS*22N7 zO(p>6q_N>uKd$TJp<%~~elM`}W$E$pJu)Pfk@q)T-x&i=Wg~dewuTrx6!f&13GWn1 zHubD8PzcCGgB_C&Xmn++vlVOmtb;)>Xu=izy#-xh(Y|(m(;_~Od`REfpT;xp`@`$kYvXxP&i`z#eqO3AzCM1tP(%Z+a zb|(hl*z32tc}ZsU(Ank|mP!!*e`N6+Pw9$VcUmyFY5;Eiofa1~;K*PGhx(RGWjz#a zE5%nv`FErONK>)4jYBgtU6&vc|6;LApV?E>1-qoOR&6bBt^EvGBcx}xqe6nyP zByoCwp&>c_Z171Fd-2TG58jeLZ?(5|Mx5@MilM4j&XDT-bwdY+z%%-ze-&Ea3cyKo z{I+jK6#sB&$$)Ep3yTV%LgG26-3|7nz$NrZ$Scv43LPiRjKhB7w1tTPF{W~>h+;-D zz@NXWLabUFMQbAL2@hhh(f+8Q9$TYxIMD)tM?nOmO7k&*Noo2eIU&05jB%GK1@^Vh zZ;XxMMw@Zj)RJ6?ekLKb(?*_YB__!@j1m2L6AoPu@h&{%o@ksheAKFxOVmunoD}p%$|zTo09a za-3GW<~-AO*b?E&Qjs6T^{ldBBu0^@B7m?&bqh_AH$pe?8^Mg`jPNAp85JZ3p)!}Y zEH3tgf3KxO1j+yS|m>F3wh*`hJU*``e@P3ju$eBpi9us-q0MxicK4CfXN;Ins`#A5 zl0PJZXFvz7!@Wewu={DE0h=!#im_>q&P?<=KQCqn`pcj=suOGM+aAfifZ#11q5GZ9 zMhi!TbUoesRiIsU;-QNJl3okn!!SbMTv08X)%pvzL-O%vWMWx2aQUA?N) zO0kqZbEb0E%8=I;MT_Z84_ejfIEeYu_6o>gG^wVLy=S|3Q3nTN!2o_;`8RBEaiTj1 z*Fv2QfB+CP`k86kpy>{avi!@VkRCG z3--uNO%yE)Sc6@i6xCrz9yG9CRcyJ$FtDB;{Gax-LXFT(Y;6Z=h<(Vb5sy^{OGKLq zD(;RK1EPCGDgg2>bs z?ZhT2qa=cUGY14r;PzDqndTY#@u*s1UC(`fAT=VUR1)b``qnD<)2jL_LUB2(s8OzU z)6F6Z;cR&Hq1{H$GiRmaovOq$JoVusKtv#Hkgi*3z>4q7ep5@9jk|MFKUF$R2P1Od}bB+#E zjb&-;^0xBfydPEwL?F6Ud9)f=(c3WOUF50_zwY$gRtD`XWMNDcImEIx2(trm%C2#F zHRF)vzD3?XAujCtY=NGdNhQrXWRrK^I{D$8)Rdi-8|m=A(GX)2y@hMk{Qk6r$@6j! zG}DHJdFbU0j}6q%WB!eWLw0hiBxh|1eVT3ah~`dask&qQ(w?dwN@DdlJZ`O&OGV~S z9+$T+ulVw(LrkzQkZdaE2(*fElusftCSj}FCNo~t9baMHLK4-v5uySLAK$TOVYK(O(hVkoE{; z_nUesw}iDhc9Gnu9-*b}zB~~!?}wu2qYz7qjDE9Wdnn?n+uX^DQCS@iDWV3!7i=!8 z`CU_5{Kqs!Q=Qa2JoJ9ejWb(CRHn$EhII;5`K8=I680hFo3eN3194lmr8amFl7x;P zqyLW$xz(o3W zZ*0%NV4VD!kPMlR3*Q*)EjBgCk%<3~g{_D3-f;2VGNH(?!ILaCOC}H#>7in^?R>YY zuFo@PlVba{0SMu(M%U`lsIih;|0s80lIPmeAFg+YdaVd7B}>I=zyn(Xx`P}s_fXtM zbAA42tdc#yk7+L1Th)M$zpW&Vb8SC)i)XS}^yp|E0D$q|wmIGHm4uz%P?gNOju+QK z1*1^ryu$sbHmzbo|IrEJ>qSB)k;fi(4^Z5&Gst2{f;lNwn`BK%sXsHhyF1Yo%pyE> z;Aqn;2DhZZ*0r6SK=B32bFZRI4P?&?HJ)~8t<{>T+4^20x#_EylQ`-)#hGcbe!DdQ zhmi7+7~QP*RcTuD654;QcI3W$0uCYsTyIZQycu`cZZ)F)uE5jAeR#>v?J0WQ%VRU~MCdS#(*@*FIuiZS|+Ay9@;mo1T+Ngj|z@OgYJK+$TWHYom z26J!%0l2Kx#L5YFbSRrH&R3vv`Y&H)o|7-_trl*Q$RM9}`pB#0hu)jR!bjrZ_%g+^ z;wo_oKteRmf2^xM^lYUNo)D^E81h;ebXKZmEMqO>ATv{xOvKj@jOLVR)I}0QE6LGX z!L+sEP?#iMUSC2zQf#FN7G-;|>3PCZ$#sPJiQhZ9HCnN-WWMdGb|=6NjBm{%BlqPPI4)NI)@&+Rgp|275SCU&1iec+x2n=>-Yud zi^odW$47OIs|K&Ri|#kgZfp|2xN*k~(VUNCFE^Xq z1!n&crHW(YnIcx*)dNKODj>y|X%%gI(<`i2dOMv5wo83tmsWo$sPK8rlH`2ID;OXr zB8s&iTKiaZ6PSJ!?YOJubT*_lnQ}iE;&{qKg_|M-SAFyNJRzEFgI6EL&PLEm#n0tU z`TUG=Zlx_L2~6t<>1Co`?_UiAe!*~pW9 z=`RypmB3Jc67&9qiE3i29UQ#kp6-O?>~V_ucp<6=Li(zr*-J`fK-vuqRvf0qdM!zc z-`KPKv0V{n17(gq7H$jtCOybiaXQEudp2r2v53N0TLCRsI`JAjKDj^%IimM;!r#x& zk4v5>@vc`_%Znpf)VQ(OhPBzev&}__Fz>_UU7H3w8(p?qy6`!aJEMlifqs69MNUf% zf0gvV-bCpUE>T}&F<6(<@puAUjW4AsbOnkqOB=Daa|0}cW33gJsw(pV;=<=TT3+C+ zH=fYW?aq6e@JM_Hr|-`x0eK&W*F?pgg2x|u3K#m=@np&Ys-V}PDpKi^v>uKG-UF3d zKKJVFCs0QGYi6Mrjq*j)V|R@N>Zo)jgpoZk7_3i?imC|5LswmoH%OwXjeh{ee2BA# zvQgXnS`K;q3>xd5FV>TlmBrtI^vHvRsy-2a1(H{S~TrIFe`+_N2NC<_%#X=LxN2@Es6o!@}nBA^7Xym2T0h9>SYE4 z0iBwgu&Dkn1AlK6Fik-$@ici`E7(f z%+0G^2Nprka7HC;FSDEE@K2=|qpgtS+K%XD0?_!GaPpB2YF}}afXts%0xM0v7&rzx z^o!1?D}Yfm=By)bS1s6-fEXfz#Y9k&bi}9|xz=araZBjg9b_pqM2C%V9J8gp33~7C zCJ6{RCwR>4F!!U1nm)da=c<*E`Jk&X5(PelSrJQZsH%~ML?zyPvm-1OZn*I|FO!WP z^tf$;YYGvpG1~^H@hep^+uH>s_np~vtO=W}R4Dnwb*c3N_{N)1cJk%5$I#rsJn$m9>;^LvEBC??m<=pGrL3?i zWWenXG8I}%AQC;Jl*l_!u? z91y>~8wVtAC#B$7?E@>kVaFp3h*~yAGO;PL;VNtMn#ZIcF`x&=e)dv(uYBi%k)8_T z3N)s&niOo|lJ{6J+r{8l2VDy{g)iI^`woF5ct~e&Sc66Ps5X*)ZVG{LVUod@WL_;q zC49gx=3rCt{m~3-^YY zJe|r2wE%#cMNd9g{wB31?W#=MI;~87Un#pQIXw{9l7$PLa|>e6N#+o%Y!$q;_THFR zLJ9C!%1MKEMdBqKr7qRm-DQ7#Wv4|N0MgR-AX9&8Fy|ZH#E}*xTVs+0!TdiRPUm7N zd8u^2#}usG1iF|ntM3X>l|)n@@^gj?0sGb%cx?8Uu4OexcJ3XH(Ln2vblAV{6A7=t zQDoXy*aSO7X?l{4fi2GBM4Rr8|_b_K{>I-2K9z3%Ke@IM|P%oBo`Z*sdey2^e-@nXMvaU<>>rlOW}DdU0Xs<62fkK zo+)UC8C*`IjkNM^QiJT3!JGhNAGixWg87(?kfT=BqB|*~ECsV}4-ZL{2wIEAF%*yj6e0JtDT+N+9g=<9<>L!DRmXK~y z!K24B7F z&}cInmkIFi$rK#FsfG|10G5WV`8gKL29@>s!XZ^;(yGfX9$a8#+uceU%*uXK=dGDH z{Z~2uAb43BP$nCs5L70&`Zc7isVbh1*C^1L+h{AHGQ#Cq5fLOxVP~S)t2hVoKuoN; zcP!Ykxw;DntYec!oE*nUk(Y&3_2XBM!G-o0l7;>Kt>X~~i5ebj^5M&4-bV8s+PS=$ zw(%1I@Ka&^Ac#jv?R>dblWnAxt4p`9*F_-EHGt8zo?TZ10jahJ+!1qnxdOeKl@(BRxZvE)O${;BT!3xy`(UAN^uJYXEI5Sh7yVHw#^z;9h_n@Teo1n?a0Q0q$h5X*p`THSv%<0gF%`}w@% zLn@#x0CMSEdUp~hQ9^o8tHm;y9V{)?Q5a+n>B|6 zD{M60_^#fKg=+VJ$gVoeQWxx?CLH73yx7KB1Q{M+NSE2ZcDMZfYS-nrx<&hjZXJ5V zD&D(dhqEj7-G179UuqoscNT1V2A7+4p=n*=n;{h9!A%xB^cP~mUp%;~+}Q)|9veF~ z1>_HP2HQEN#WS9cOh9>!!pL#(=T<6m^5#!c??SG|wr_bDqH%!AmU}S&8m}{-oa*}u z6^6$tNuRgGME4F=5uwxvvAkx?cYckaHM7ZCNaLF&zW>U$DVZ-+6tS@QDbkX1P=b6M zV`t_8Au22=$HW75QU0f zn#l#*fc5~*Xz_e2S(}%`%L?WYLP`Nb#CULHdakN)iH|cQB}LSUJ571bQu_gR45ys| zMZNTq$TuNc8E(L9J8X*xe+!}D#(C^4H(Np@sJBtch0>%D6PP}MBNg{zf2^F>EW725uc*6Jr)YgUCJO+%VVGs3Idf_ozl21T?d zhMZMENS(Gt4y19dnfM+5tll6=62fus&kmS9lcN_Z0C1R`JnTSDS$O=hpfGx#qW`tv z_Uz)~RmcVeEydoN0eRk;wm5Sj0qZGD<6EDaM_&%1O2cY9!%||F@5PxU87Kcl4@M_b zAl^X(`Hfp?f-Fk@`{>gmeTqiC-6;XG=q%FS?!0Y*yhRm|>jbqYA4j5?J+id6W5+gb zUk?LS(PS(;E{E3n%xuOlO|-_ZkP?rwnLJnd`3`8~)7HNz9nt87Sob&!DqAtWiR#F0 znZ)c~-Er71D9$4DpG*LH3Th1W686h;+2nz^U}a3`jpzH-gFtKM6;3xeS&q#6ys!{_%q2O=whX_KcmrUVI>yz0w4!w7eJ^!(PkEEa z2f6Kes7xQ!wj6p{bc2mO=Uu*AIie0LkD4K2;?OeBnOurjPXgVkjCJUKRvdia4(Ue5PCDM2Pw z*mf?sq4=-1uHhcuhe!tL-aB8unr;6)U0B*-z(%Zjia^0W<+Ka16(p^DMgawNCcHC; zI5YMgBr}WB2o)CNv5UcKQ``JCkm(QFJxuRwraP3}czE4c5YN}Rn0tuKw2_Cdd(5cJsb)Oa;70Ff|d{CaF15Wc8_OX)wBhgGGwC2ZFYxyG@xBQ&yKCIa2U& zl9Z`Ad29ZMO3}*dc%_r`-h^A|?%IS{6(}wGmEYUcy4fJcwy@ID8H*?ncAq+!q=@;o zH;ZC;IkZnKt@~eB<6Z4d1_>bvhi9`5Ad+Ao$-(V}r_$QfMH~WcU3cd%s<#iHON4wa1mtQdOZD?gTb5-f$ zr~QQoA6`Kas#xs-gr6uC&7i{{@1+a}gSY0IsO=L5_FI@j^N(HROdmMn5gvk$d-L)3 z*N`r6IhwIn%(*Pv?XpZ`=}>AKX!r-mq|6vPvr`0=%+2pWi7Pi#qo>jnl6(r!$vde*tX%inpjW{PN?kgtnKpkz(gs`_{PgJpKZEqvr+Gh$JjxG|p63 z?QY0q%UF!^j~%UZ{^}T~X0Sk91Z-Q-u23C0 zig{ilo*x7yN&D^zaT)opzRR4DQl0V(k@Q|z>}$sgG%Awa7<)ucom!}n_c8tDG3C9df=(6R9Wk5nwVj+#d;buB)PFoOb*K2Tlf=n4LMckM_zj%B zucvsqTkn0kt&rggK!&W%1tR6?{O{g;GOwdm(_&qr)GD9f7&^X;5Lo#m2#<-u9xjf> z(5+HNcQTQUxditNp%!TdYWKahsCC^{^1VxwpHU~;dc4REF`9$lBvs#i8qJZtnR~wo zp(QWqa%HLNbe%oiXuH6L!O2fH!`|=VwVO(LmtKL5isi+l1-(mp%X71hU%31{KX}KI zY%Ib%##zF|N?oIp{SWq5LssH`AEVGIDV&;m4RO7D-|h7m>HKonWusd5{M%%k87gDR zxJ$zOMah*8@;}x(d&>PJl*#2z=eGzi?Gz)IEApqwxI2P)7Y-EssJs}%dv!0Ah(S-4zMaSBG;c%Hk8A* z;58U8*IkdO%i$V2SrPvfo0MEBN?y3cmYd5f4@zz!)m@orUKH6eeCoG+Qk zbxK;F%^l6IryYH3>-HnnTMIfnrxT{}rp~pO>lY^T_RO_cPZv((=@&}nmd?weNwatt z6Mv|gw#0OJe2W;Rx5eP;oCL8L4go^RNI&wft$ zz~oN-snE*Jf)q({2|vGQLB~*e7M6D#a%K4lVuqwkP$N(&6^TZDX;HpADca)4#RES%?LSrltI`?23Or0!1eg z-M478%|`z-N{c-;t?2d@#?rtLY0c8d0cae(`C}J4MCdNBGTgQ**!kwQr{O7T$jlcg z8rnL0dYnRO4XM;s#i3Frp9UZ2F8!eu%2VJezSX-OD_MpOA0YjuiU9g6b`)aQrTF*e z=vwaJNjP3c_YFGheHe}4q1HA0NvRhZ6_;1qoW=5%MI8Cqu?yFjt5K1E>i@^xo5w@B z_VMGYbD~vLL@{M)k>w;y)+xJ$WGALgMjFc6V1{!dAw-t!YxXV1DBGM;31RG-!Blo* z5XLfN#_zgymd^8>=RD6J-{0%^dwu=sbzps5{#eGP1RLr8E{t#*q>ox@upS6Slmy3s=wuJ(P3PlCGudRy=Y1c*%R_SyN{Nm-o~rPP$Yu@LQwezPlf+U+K{dYnG=hM+>*#2LX>*0fL{lmP;F{4ATx z1VLj=5Z11~;53BTPClzs39_YApMh<9=dBQ7yv zt?|>~dU0C|gAy?b)6oMYF&r!ARHQm%qFZ)7NLy}m_4bALSM+a(6;sLD2%~K30hH3W zWOPE2L4SeOo*8_*y~YU9a}e6i$B-%dOH^>5xw<@2q-ZZx|MOys_6`)nzc2Lm{Xk>wmQlq^q{fr?=C75tBrjhS9!^npp57_1g5}9-j(Fd9(ec64t{~c zWmI?PsjRJ}4U*}``@lq?A<`z!?9mSeZ?gDv&f5m!#U>&FBt0nB266cxmNEIYy1q$5TqVp&F|~U?^ERcV2&8x2k)y|_cmcxPX4A=>l1w= z4D*-E2L$t~KCc|yZPz0N&E=`40%A3L)M)+c`qsnv8~IZ3@x_q1_+sNr_ALt{Ur(N!ZPE5LS9$;h++_Xat3$Nn{@}n; zO0cYn?=!j?Cfsz<=2>HQ-%*LA&fh2S`OZ6SOJk*Q^QDqo+`wyLn#1C}>Xd1Vk?I)7 zm93}b)*8Nca;}VKm=wijzIYIw$aK>RNDu{&;Jz z=`S*Me!44T9AOPP*M7=W3R2_Ev#?l?XvPU`^QHM)H<9;ys4kJZ@A^4mI{1Z9x!k|` zOWOEou032F_v3=oUJbp-@`2~G^px7MWaZ^Ag|8KVOW8OA6e?KdLRp&l3vjXMRou2C z*~dECU2>FH9G)uvMnrH_f9OSh$OVC>E)47P#A}9OZM3MfAza8Gh(9$>+N0qU(}S*n zEu>UqBeK#)wOlu2g7QvN><+O9lrkK%v3{@P(Cy#eJ8`RPgGS(id(XD@{$^qDfwA<=-AY;3SWTNcpWk=*C~bk#tTiVH~5HMTQ5aA!tovVF;Dc_PIz`*Qz zd4*|iI-_;FALq*~u!j<5vkg*X_7Oe&diULL;R#42;d)IMH z0k4y4@ZGf@wln?Dv9M}_QZA?0f zV|n_tNL2+oh+yaL!-`7e1qXpky(;i+*R}7g?zfaZ4_?+Q+9KpKtK&!kN$Xx7>lpvl zc>jDcVmfwcxqi9QZKU>wMs|q?yf$mXTwA)|00=i+$qONSJFhlN;Q%1U8c;TOj&ABB&^tO>`16O7wwuKLmEf+ zYx`!$o)KzHovaNnN0ytIT`NegUm)0)g_E>t%nBx`0iI!)PXFl)vqmSl(7wmf^QOKM%dUl9X3&$x)1Xbp z({8D)b0}}q48Ibe-h;f}lgm2pb0#OQP&&4+Ue{qKrs?oqN9I&~{;ne7b?v~BZ1zng zCG1Aol4j}sW+wjS@{q5tig(*`fGMof+9!3iGTzuaLv0p4)}c_DO1elZnDp+JJ{so8 zLo&pBnjO8ymtkkALQR~fAHU_;^CaR^=|VCmB)fp6SI2>~w7z4H^JoaKf1);>?b4n? z(^c(NQnrnjPKj3u)iNL2w~rUa*CgFj=vkiWpkNo8ogijyVTPzyYjCw(@AbmiK8qS? z+v`(bpUKmVer?9QtY95|iI&p$AXMww`sNG?^`q9TqI>r(?$1Fl;SuQHi~$J;ptZSW z`jij$V?hK&i8=#JJT zs;`-@m&*JgY29cV80oq$i<*6M3`bRM&wM$;I(}7(QsLM>)j7H1qsq4G%PI~#eiBE$ z?dUu#xmwgQ$gQ?`ag3_oq6BrmaBvKM0&&X7uVs6Ui*3&-00D2dLJZ?_3N^=_a>(no z-8qr|+|ZpZuOo9}YC9D&-88O!h@4rBCh5H`&$brp7JKby7dm1q_6}EXEY{oXVwv5@ z6OKdOCoYLTUdUP7WB*R4)PP5wU3z zp7@FqlQ6ND2n)V%>C{<&eO)Ii|NOV$asB}a9zD0uupek*8YLD#{gStLW_x}=UG$RU zTVun=@+rZM#;4OwdMDjvep$#apYwERy4^7AD8>VJas?e-37ec(;6nL-hiNQ8}tGrJk@lpt_5T& zwicB;fx|24Ft+o{_33u{D7wGq7ad;a$hJ?i*`oDf!n==&sYnTKN|aun|A{wB*wFmS z3EunmXLU16n!SRi%CxeK$%k=Lyo()fk^Xkghx|j0C2(Cbmo6nt?M-diNg=)Qb8%-NmL2AgHwCEhw{$noKZL@24K@^pU&c zrgG6ZE*XiIh+i*^UQuqpv;Vo|D~A)&@3gNK6%eI)(NrlM%ek0kx~jT1&{pv%hpr!l zCnk6D(IWi^F(Mgu%V-OHU3lg^%9$#OlQIy)@!wU;U3gq*k5Z9}|50ND+NDz_;^&6y z9&ThW1*s4xqyQnMUhf=E)C{}faFAGZozg-q}F^gXBIyA3z&>qh1sX!D?Ry0apJtBuotO8>#_}*QDk0b z2bFdXxdj&%CjIgjR2$5y7`jKF0I7ZLR<-^~09k=n6VH??T^~OcLXP&^61$kTnc}hWK%)kkblNCk*;IFw$dEgm0j!=x=5&fngZTaD~f3U zhMt@`X)Sk+9NBAGj+Od_xYbHk5QQ1&b#8>saepj#o??S&apm{~W^SWEc(lzf3@=iLa;lhjo9zGHUuZ3_XJ0;HZf zDX^9|m^pb6%(4y{qxz`1JH$BkM(i7W|8Z2B9jCF?1s_+uAShUcjqMr)cz-xwvop%rTxsr2k`8B@Ps>D^ySkk6^Z+^c z%r$bOj;;&AG1Suj?)t<;p*q;@i!v%pMd)@O8MWC4=b^OSYOK1f`$lNXm3oUGF+7rr z#9V}H)h-PB6WOn!a|Q-0Uu`~CTp$QAj-Ujzc1*rRL5o(x&RHhruLr_Ao|U+Z0A{lsb5 z@oZB6UjL1{2_@mlMMtQ5Y270a!ch4}e!rNKt8-dg2-T;r9V3E%M$jD<7hvh>%LuVz zwwxCW3wo0t|Ij)soh*Wj%`;qF#})(@4eOE5MBl&FxIvCI%w`FzABg?B67`mM&YHK2 zsBZB1W(p^IB_^uKKACZ28x1TG?(is+QzXYh?nm8^eYveDR16Okj+UfKh5V8xZ9P)@W(2vZGiU=j}1 z!8PS0l&ICX@a2-J4H-dY*;5pBs?Syb@s>`x9oU%Xpx`xcE@F^nR99<`Gm`kcHesf{ zP5`yG=fvnU-L-@HXWJ9UUhOEN^N~Wu(sjzHRvw4)KYchDn`o4qF&uTq+)nVVGfl>1 z+~K-eyk2fS@u4{iF|i^h+U2>%&l75I+d5lZ9vw~MXAye)u*Vs;HpV>a4!y=f<>Cg& zFl8X#hROHNmEmpotr2N>e5HvF5IX5&i4v->*HR@<%|mEKxm>5R-K}lQ&RuG?=iQCs zQjA6dq!c4`5isoMlndKHp>)sl>+LIH_L$GU#HLv;im|BN?2`UCqN@dgRt(DV&?nQO zq}ajyBgnM%pBO1-az9`+8FV)-{ivU3c41W8LGHIqtUi#-hy2kwq!$Cs=za3 z0iV7pJXAiEWY*ahA2ua>>Epy+{quDS?EV%l=96C2Kx6ABK_P=wBKV5lUQ%3qt;yn# zk*xT6)uP#O2X;nD4o77Bj> zQjfDo8Jkxe_y^@vbF>gUb!RJ2Fv=57=-(U`KW0Rs)FPew3N0&lfw&=eP|?mmbykl4 zWH8U2b}-tKw<7wywVQ30h@G|B=WlLj&ZXgXnw6_cwv_B;JRFJAN_wixr;oE%%Y2k~ z*;ph4wQ~Kde`zSm)D!74hD7gQqly*aO7XLOwDNsLRMiDkwBq?%35*jJO}0i&^`$)% z8dDnIR2`wU&8b)TK1uPUkrzp)Dw)LW=a+@z9~4x zm$`yb@*yaQ;l*!fEn}?CaaS9WQ4M1$@TvkA5G$-YS1Y(lwI`>oG6)d1N|(~R0mJw_ zf8TpwD2uxXY*ZQc&`VZo$E(~S-g^Io!D)Uhz!Qt$D=soumH?CD+fq;ug5Wj%@%G-} z_j#s4Y!FL10_ZxT(Gf}~{clCxH^MgFn`xWa0ySOZI73isPnCS&igJzk9KNub9S<%j zM=rfHgy6R#@OzRiLN{i|+X3BGe{^brqxxMF|K-!{pr-`b*TYa_MRn6j>6hN4N1|Ub zYlsc0k?`@>td`P;vpf&D7Lb6c3)y*TAU(PE(PwXnve|^9BB-(4E8uw! z98wwhJ?UqClANnMA{ch3c*wuN;9WX~xg>FM2govzVK5j=Xg9 zTkE2|Rt1^3Y?E8#8F_#FSlJ_GQ}9>-nwWQ6?H-BZeQ&oqZ7>T&Pydw+s145NeS}(8 zL)$8GWe06y=+oSjQkb2G{(6pWOXIz0!HSS+PM{~BBL#8wF1&n7ksjJYa;iJ z>qhsWnC|N60~!c94lI<1%?JvWjlQc~-r0im>CP}bSMDWDqej~GD1oI6pAbX=3P2< z2(_>G@=gU$y(OSdo2IiPf9!B$uIHq&Y)V?X%cVQs>gGLUKM%iKMhPk+(c z@LHe{F#~$mCya^d;51PcIyV^g(iW_~Yh8879C)Z}y3TfBeL6 zZTc8#Pea8o^*J0WcktO>#gD?aU<=PfYu{+oxj;El@Z^!QG4wjs#h?|F+~Qc!g)st- z`R#_sfLO#~ChokQSFI|mlyJs>HNVdoHrqKPYEiixl(S?GMi4$<{B8tEu?o67!r%DF zZq=_xbD+NA0LI7XjvjMPv-a+@cZp-z^R(-2=X2d_*tO=xz!^5Q07ErePRUem%3FZ? zavl=fedR@(DaH>WE1!t99DwZb6VH2;PV>bwl>Z}uZYbpio?t8P zp*uQvDKd;qQf_pkp=oC$e=rlP;8v%{brhDY-ChHqDhG1Xv3FZSInQW|RT|f)!?Bvb z48bT53~Od=dz67b)k=B?dNYllyHc)!A%4B~_(N~I4+|4`W^r+Oeohw*fQ)Hq13jT? zAroQU^%K#BIguz(MJcq|*iRrBVfvp-`KkN{9=mi9^B!84m0U35-gu(#-VXl!Vv}+9 zi`^gnhD|Mcplv(}ma*QitmzqHk_&;KE6BEKO?*-8$KaHOjJXE!nBkbDde!R5VSoAR z;T`^P#z5M7Uxy-L8Q!?g7muB@{j7X36*arg$X4s=HAxU@^KDNX?ad%yCVnQQ)ZVlm zVh|H$&6TJr+>tJ;BmTmD`3u7@?6@C{f>#BJ;xV^zUjwTy3}!7l7||9t4R9W+@?AHt zgrw6Hra*9jQv?d!A1NDxnQ=U4m9K1i%t&xu%-{`0x9Ad1GiKpyU-OQyw-eaw?=o#K z$ro_WuTEvHU#}F`&2sf$U*F!c@9Ta4)%B9zp9EVR2-8oUmm?6OFxI*%LT6$??=-c3 z3&+k7QJH#`7!o7M+QYwVKh(9;eF|k&&F(j^+nC3LVb?R=-VbEp`!{ICQ&2-=>-)p6 z-cNrdB8S%3?yviro5n?obIfCm!oMXy$&Kd~oI?O)~Sjt!Su@QZS>7^`QX>4R+1Jo#{4GwB^o9$`86_2Y9j$b@>ExHy^Dk!?$!M?k1--rJgAj7W51 z;3lxSv_t-FNx2aY-%@NyPmVDZ+Pxo?sx4HPbpf3Uxa!{R)CIr0pEGS~X0AbWMD%&0 z(W&_k8J4D%f;O*(+ujT{@}YjjTAROZaRwuPGrBAMA;3!VmB<>WRgtv`ma!i_&0;+W zMAy7#gLdXzqVECLmkR{duo*PzLykKSMBM5iVeWhz{6tO%{}3B{?vUSHGp7@=@Hcgs|ZC*q7l9Xh)cdW7RjvhP=O(4#pAOZ18ajxDF-Wa$g|S~}NT)9$(@QD7QLC(skVseSm5-h`zOW?{k zF0|oE+pLl9ZZN|z&4u$*8TxGX&jGEjLPDOaxx?Hc7a!&%&so2jxGj?`eh&1D#b=`z z^bPWSwk7Xx>QfC#-A*~q`x2X?m+ts%I!1UByD#J(d{8g-Ok^OwnZfg!JhV=ir#_pg zEkkDG*$*Hc;bgtOK#)tSCMbc*ex^am_Ss<4JDZF;-`Q{C(xQy5wv`!BE>ke0vZ4!*d%$v#c{!~HtY(4=c-(02aC`46`e_vjCJ?5oV-)u%r0@6mG!%bEM> zW#RfQgxoLIU#U)S@Xgz09*FzUW;3Vaw_q93+-h@GR|Pcbw(85{>++JKAah=e-^8dw z9D5C}TX6pY(kd9k%^uOo^i6IsntJC)0yOfiTZH&?06aa2H$$cY(&g%gk8QZxf}UJ^ z)B;q zW5f7dq~IO{2^7oYqyy~D(@VKTK6_b5LzPS!Zb|K~ppk7TxQthCyg=gXx58T!)PLFs zURcKAH7y`?ualfR>#O`z8lHj(R5)_uG4P&L6NcAI+K*vx+qF}UdDdyQ zp6`7)r5uFU;j*0{i%^)?x$0|Oi1amo<^lG9)-|qdxsyD$)+S<%%x#1j7W1m@>^uv0 zSMmV_DUrk5TobC7otSkVE0*>F<9ela=Ut%4!4O)(C=-i6aCMSUOpc*H{5qpO)H>^e5YmS^j1l z?}M3?jFPYda{gYaMSZeO7@0h&j`t4Nc{FU9xAb#`zKXV02)~{L1lw!)nJ$7lcF}8b z&JbjLzy1P>_s53hJmDUI1Pop_r0&v4+9SKNL5)8M*MY72Zu;7}pnk}||Ncwj!^>$! zoGLeuSl7M}V(O1gwlWd>TL*<=?E;BL<9LO;wA_RG+TMH) zfp{Gs+uOpPwEN+3lI^p zo~|;tNR8(qy>9WvZ2H_DT%@1_v{kMF1PXsudLltld927w?J)0mD-;9W2N{k-g4h@L zeL7+U)p-*^i|jtINu{>D$_8<{+d zGL=}LV_J5j$qD{r=rv{rBc|N6N^2r4@VL1a z+B!q3Hrdi+z(i>aFe9R*uD#!KqVF@Q@yg*%QQwJNSU0WSed<2(+%baa+E1Key4*j? z9kD&i+ZmmKp0^MU$TI2Y>&eL1m$M;7AH!*<`Wa`Ta;XMbe(g(^m(JMrJu!;?a=QIE zsxl#-6{-`i>rjy=g6oQ!jb{G#X4S;dR*H;M0Ulx!iW9$AZ4to~R;aRB>G9f$?TD1AbN_k4U{Li%oR_$DW&HI4mUSB^l?;>yG!K+Kvh z8wx%X8bru%`_3%R@H%70tmYYv^Q)(1ec34fszs(tH2`Zo%p}ZXe)r;J|0UO!Xj>^ zYrfCqO>qUB0~{szEd0;0*c+WwTa50lvFv|RhAL|5hyLXW_vw$|WZT?T52z{Wto&}Z zh2DH-zNnFP+V?M
v3+SFY<%G3A%L%Wdv^a>2Lh$J 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�dhod@(%}h<@hv7BV=#Eo!xjHNh2h0Xsc748`u*MkMS2$X4SlwJJ_Av)~W6E zW;ZaHl=A|)FcW3stIeKS=_LH(OIOSr2$#V%dPMj$@e!6^APx4!^Rxij}7V^ zg;OJM@POB}hc8&YFEL$k3VcV@)cNV!JRw^!%7JXfAeuO;@5XFS7sfl1t=|=C3(tR@ zX;wSAx$2)Ic+sUTksD(C##=GRHC)|@2Q=Qg#CkOK=zpQGICQF%mNGMw!-*q z%E6(+Km%~F0oyG!L2HRhr(neKGsC0a=T>9)bn4wl;{H zmQ=<<@(!GaXl)Y*>r7xK6UC4AaIyM{MNA*}xq@14oQ=57-G=GYD&@u{f9{MVA_|UWDO>*vAUZXD zhBPY(EuF=KHC3d@7OpJ$lby^aJcA5z2x*ct6~%^#R97IaTBbM&`G?{FmwY&gduB5H zNQw(c=WutvBi8G9g)8=8fAA~V$Aqj7dg+q`!WqID9-{|AtSmfeT^e`zb@@;<<1Ed# zTj|(hg>qIV!}Z)WE+TAObR)n-qz-)v$^i~!lNccyd64wM+L9uK{(}ibMrhQj_KCtj zB*rS1f7OvR=IN1sW8h0dk~t|pms1^a<1IPZUA7Y5XiYzZ%^asi68y>yA| z*dxx7JFS2#1NeX{uruC64NR}rMl14*cJMkg;9Ht`mG~u26X`k}c~Ah!P6${EOuumq z{+OFMzj#J=hitD-M~HsQ^Qi2mn&r3j5l?kadJN$bp`E4A=wY7~`SS*w%cTv{Rm8Gq zGGmiYE{SNsRZpev0S+t@-1(cXf3TU>p7MEu=BGk!&? z!(fQ_qFqUBP?_LdxNndzee!ss3JZuRpfEcKC;Xqq$h_>mB^W=HhcDkS?D`l8&k+aD zL*Ab^-bEjJF>=pC_MbN%MZMZEKDOpQJAKuas797xeUsYQxvQa>pGj3WMU@h2`1o7}u^pv0q7jhJ@wK`vi>X(Oe~tHs&3yMPQrD4<&9=gI(vnF#Hdu28)qo zB8J4LL8U7FucBNCZ$`OUanqDpSV{W3#-=s%i;^_02G)os0Ept;e4+iHu#FDwSoIpx zB7H%bX4h!DUBda%&y^|Wnk+*$q=WxE+KRWPJmt+eOF9h5SQu+kDMjOQOt$6L_tzBe z6F7rCLtKD84nhOVP);)5wF6o*6KhH>s+gAT6#j>JWY*L{Si>$;6*cpJil+>%uT7~n zsl(ce7FBc&^VrLFkq*s(7JX_1!#M55qWN1JcM<*nN%Y6(pO11J(DP`Izg-s(z;BaW zb8dwSeWBTa-oW2LNOp?9l8+^!az-E@oVb%9aZzx>Z@7dX7N~8+_htzoWZdx#4n)X> z%>^9FGxZK#^6WH%S1$tlWo+I++T<;Y!GTGhhvC7JgT2H|5OK5v$qL2ME<6aL;7|U) zkcWT#k^{!ZV+=VDLy8@kmjoofiE97`e>pL1I@n?HMEZ~i*%$b*gkljQh}gg3k6>4i zT#w}55r5?e6C%3?Ev^V_FKMo@i6r?F*mhPeguG)`yH(aGQ+AYHBZQUElkmABNjLMD zb{OB4=*|;yEQkf=-!jH2dw22#cXW2By%WD~<&}-#z3IvQN{k!f-a)`S-;-a-tu8Yz z&Kb5^3H6{_wLv$@ovjjf-pKt%=BR-cn9ALHlG6gq)J1k;nnP!~xGhI>&)zRmRYP!8fI2 z+5Uw0$g;Na-`vn$y+02)wvL8pIA9_`S?UD)nN4f?eCgaK{WaIHN;)NLLyd|MrFc6zMX!M}G-( z*JhbhSdjKt@{e}cq0q@Q@hn%ZRMb^<&v=s3E)}ghGkKlQITCWHF0~=&Gq|=5xQoW0 zlXR%ZU-<1%VP#9yqGVs&Y|UXq)`aemv!H%Fx?u0${Jbo4YOrF_VvtqIW_oVl*<^SU zx5Clvc9MCAcuM18*!i&wB(8t$n>7UQj5t8GMAj{iW+rFvTRxQxvH*7$IrjN^dd1||0PN%}R>JS0G`cgst@ zxAJ|YUjDuD&3Z_i#%h3cHJX}cd&#MZe?`cH5F&#(G!+voV?D%PROJ%B?Y_-2s6*;Z zY##kN_H|H7CS^NF-BD8rop?J2DHfqMg>&uB_>IlKz0*%60^AXb{H5rl?}6Ut6`5o3~}5nI>Xuk?$<$_h5@?pfiH zW_;=488Xw0~r- z{fm|Nn2IO%Y;*ZsIx!N+xuz%`dESX^lf3b58@*%8CjOr3d;}QZPvFb!m07Vc5?^t+ zD&ymLg&&eh5)1Sm;Sl6|hmHOUm?9YuOc?)~IR2u|<)+7VEi^KYH!^%qN25bWLm@Bo z#z@poPxP2%vD0C(V?Hv>keEP{nDEX-)c!$qM2}S#J1rJF&U`fZ3DGZM_q}~Du!N7? zgpXrlgAou18CHnZfa_AUt{@+c_OFSE6l-p?-BmY;>&mz;dlu1{Be%J?gB5G-MD%VW zQT@xuMblOT$ji~Xl@k#qADL+u)>s`;z0yb4KvYkim{2|uAq`KXE%aHVI>=<;&%1=o zR${_W3tA>3rugV$S{mCCxdaPZ8ln*enH5DD5FL$ia`gAQeb6o4h?4Ax62pj+^@tL| zh?35T9RJ908Xe6)IvP(o86PXg`T@+^QW4i{dhi9hDI|j*(%*#DulP1kuEV zS_K&eI+}YqnI{FAQCgbU5Bex7$RNncASlS3B}JnqM*B%krt~Fd1SXE7CXAz|jH4!v z`@u*5MU&}4km+H!`Uqa5hQ%K+RhaD;{D#u46sYR_r+0ew##zZ!u$s(`3*)*03WX~s zbQz{399SV-tjV;UY`1G_*>&Y_`Qr+CUfIN95HWaP21sqqf*&3bJ{W!-D4ofH)Fo6 zFI&=}&HsB@dzypjg$G#~D$5pO7?}*S@U*rTM8cH()GdechblDwr`ZAT&6+Qobg?Ja z$7d!Av{hzQ+ijQ`@wK*)5r&#t*#~j=`TPeAC~xiVuW#PI@7@T<{>gIV_2gOhWAAx3 z_xaV)z)pJ?L46aoJ{It|zI{!oHAF5Qa2ex=vp(K>QS;*86B7t-y~gO){@vpez|!rX zdL90N{KjcKLa|x(P~^uOctY^}vOaXFUES7Nty{5G8^G{JPV(wI`R=EzIB#HNejy&2 z#*UC$eYtpQjm^O!m6F9W_o(l64X3>&W*qV!_dKQJ^M2_^cZZQ^^EMDuqxyFVR1f9h zyZ((X0mhFgFn(&!?cu9v+|)kGgJe$x$DZQDs~=M!)HB?Ro6-y4=bl(GX}EPTKRC(q zLT=mJ&?t|8r$RWy`pRJ~*>fw$n;>_n^UA49=)BMO%E+_h%*eot%m`8T*U)jnJen6Q zX)l)S`Tn7B4xE?yTDpyJlyw5-)TSWq&*S9;K)yAa#B=SU5#qU1kY|bcIqONvn8B5H z7q4^w>Xk>A$T?VOt%BjHd2!cW-PixjGRAqBr0`BN7qr6dg)Y=rvQalD?;aS(Va|rLf@UzTzZK9k2(+1$Tk-gu~!Q1ws%cRlzRKyZAwz%^Z`3Nzk@HVJ1CG^eZ z%5?7Kh3sr{{XDUQvyx4mY(Eb28I_A6HrQ+`Nw!G(iK&GpSZv89yEfkX!PC|a0#WgneD`71qr#8MT!5+mqHr4|~-Vt0KGiObRr}DltYY}`;e*&7swqk<6W0EO_ zPZxYABvX-{PKXednf?5ol}vVM7U?^64&eIG;!CJX$?O654Xudu)E~EMq2oTE2BT{J zlK#O4mk2}px=07?G3%sdT)q@#^TuUq zk4Qr+oh7Y1k>_B;kRtI9e0RjQ!4TmA8ZX+otuF+BH)gt^;x_C5?%=n!@1W~M7$RSB z#%*63z5I@%3}8Bv<`9k~*dK{7QMdwj@o><@jm=(l3DZptyIs}!O$(a@n3MDL@?vC! zPtfeCU#CCjc>fhP&E-+eD4XEk)BCU;t#z3g@o;3MO|a}~UHe`mUS~?P{?x#4g-Nx7 zuZhPqm8O20VKXJtZqfpS>dn|}Lr*zQ{@tbBk^9zmPrZ$bg{>Y! zf~w$v2%d$scUmYYUxaWsfuw3)N-CyHtM*<7L&m zG}s++K{@nPsU0;zCG<3!9k~I6qFq8k?bxL4T{uB?mBdHahHUDxQQIpcLBll$>){O7 z)ND3_QEAuuuhi#hio39`8DH6tN1i^MoEZ0q+g)?BIS7VnuF8e!d#}y-ytR$K#R{$q zejuSu%I_z;t$g$V_env5?5Gb!tp+zp`;p)I%f?p?fO-i_0V-Y%aycPhm69bBN!gsb zLVIOCa+LsHEpin#vjm=2WM#Sn5TeykS$+mg(X`Z(*3z2Sba!v9EIBIgsLZXbB`y!E zOi<9WWj5s17ObqWE6uFJKO&z8HUn$4NanShHBPk<=hfYTIa&nsTJ9SEv@qs1Zh_re z6!VM9p4@*2ok~{+CR`i;k+xQ>jys;Ud^>k>`Zq0D)hsk8^!_I z_3Eu`@5xOTRnDVNI&ks%u`@e+gPO5b%b7E1Rj;?>5}0$S|B?3JzRYsGxR-Xmx|bS1 z9V^{Ge5C)#ACHxKuNE`T?iVu#b=z2Z7L2X!e2zU2t$d?iq5tjGGQUO<6wMmOZfh0~ z*1;zrV7fqkgF=1M&n_rk0MTG)aQ7n!c*4j zd=a@rbwGN}{N+9uvgU<<{7AFIiChr(M|P9xS3#V4ocj%v!~1CwUyn=nU|_#`#zL0k zLn!b~==;@rapJr3QG~t^`1g#%l5)z==Kfu*g=gcc!;KJE!LC@5 zp5Dzz;@mQq0Z~>0!+V|`><1$26E`l%HJ63*^A%dmPtnRvyPw1rG8Hp+(Zp4Q6_<7$ z9jX&*-1Drw1{3OT^TN$aBIT)7;d98hb@~Q!gumHY3|hHN)N$<1L3>b(B`HU6@p z6G4MkmGsPtmg}X>?Y)&P-tV;C-G+|WZ$v)!fouftrF(p|8j+q;rGgeT)X5VTEG-T+ z6iGY{Nu<=uBkGk2zj~-uO`7${xDw{gD`@jd8m%n8*!Q`Pz$}2=X`}S4Q)S7`{^{~J z{K>=c`q@3k9m~lBRrGrwrK^I9)g|J%5^Nu zTDFOX|D41XS7J_B^&yk>LNhBK1fBd7^@uC5w)VaeBGE1NvP(raz7J5>HVnSO-O1?9 zX?-|^=I3={1yd_|E1d^XS5)nZJ*+w-^EbThGNLN$$*RM*H;#|lehE$qh&xnI1vo)d z7xfz0qWx(qxwGNq-@^pC50I>5ui<91%d#D-%NzRz2Z%fVDw~u2eLVAPsWch;!M0qq z`EN7C!Tmw);gc^tyAXSp$o`aoSMTrWyX&M0`Yb00Tff!R3EH^#(7=KBQL(+ei<}pY zH==cj*uL?_zZb=x@blg02OU4L_e_e7^^1@fgMbK%J=ufq?_av(CiA%uS-)gW7PuV> zf5~IdM>(YKNM|p&pDnq8?uZtZOPdWpKz`yh9I?LA^ApYkGhE3F=c(>#JZOr>tUqHo zW=)=NbH6Mn2IYl#FzZSDe(RFO8yMS`;|*LZN)kJtfq$N--RvFmaP}AyySvTEyI|uM zGkPOO2&@phtJlTT#uL><4zb>=V0xivWI`HMyh4tQUl&R~h;{vnz5O#sa^U-)9Mmm= z3>7|?94i&}$RRI}AGi=35A-#XK^7qLc8dI{mpN)h&}aIbzq>K4#mq9PUxBX#cbfO7 z72vL0M$;vYiB<;qfUj&1z0kV62{v_hT#-RNsx%2bj_N&*Va{2Ht5!nN*@bnL=^8%< z9zEzEJm|kTW_!>sA8vf7D)F-)dtO-EH87ZHZ9$OH4xjtorXMkP%clB4LraUXJblAy zvaU`$e51eDMc1#01L#}f)=6l^952aJ0KKP@zHd!2eNzUq0pnB0j^+c>236|<_t3pH z5>4*dNRK+=_p5fp-L4#wGD;u+D=2Q#g^Wjbqgu$uGErl+LawsU_+0Wxz%WO&81ZJ8 znrP#zc5-xR04}vgKKjT`fQ=-*H{l{xTvv2LC&x1SEwQSHWc^-(h+2i#4y6OvOL_J^|V0$w19tIqkL7vc4m-uVqoyQwWZkE8bZSMo*?*EPI4Zn_B&2_;o-hg zZ-3(acPgj6_+OpWUsu{v(?c&>C~>|;+_!rR`_p0%$GBbd_}4EVbK=76EWy4nk8FLq zArVt!<lEmSQf7d*901oW>Z6%r*76|Q@^h&IfA||*RLVh zu%FwutMQQ(spxvcIrPRq*u7xAAk2lAc~B&r+1fa!m$K|IdtpX=_Z5~oKP2ou`aNYN z&GqXUCAHyqz|>fohLeL!O`Ac>%boYtn#MG!cUQ!gwokLvyu(U@+hH){(u%6FPH&*v zw3IN9s55#hh9la4Q0G6w@^8nxED4yA@~RM*Mb8crZ5O(Xv^jjGT05!_q#P6{n z8f@6;Y%$H@?6{Ry62bQ24xKQ$Uczq4t}(M;o;~rtg9mhA$kBv!RzJ0!c zeK}+FT8zc7rL&`JzS765Db-e0oNf3RBuQ$L77UN8&=zFuwwsw&P#tqy00zHm{w&z3 z+E3YY*gM;t+Zr^Jt*AJ*wipW)lPyl#rG?NEqJr{?zK4W{$oKu}1NGVU>GvV@MVqK_ z@-MM3(JgT=i3#usd=dC8z$U=bM%l*GM&0)1!Qz|$Md$`gU+WK&kkua)@M0)uNaUZ$ zk#bRUF^tga)c}lNEW&>m{8V!-cPIyz%ap5>t21)XvCc8iQO)tr3Gs092=nkIQ)H57 z;^^b* z4%Eay^a`=k*?@hd2?%_6hbG*?QweKdc@PXDlrG3;;KuRvOcWE)TCmlSx|?l~Td*d; zEro(hDos$UQNCbwm^`}fB5;|~Ijw$hjLC)^*gHLz3 zIp7c6h$RCs%EEJma9!;I@*U1U@LQpffcOm*A}Du*at4Kz)h9#>K=G~o00kZA6}$=a z_DfU}6-pKqyutYS6Db=44!r^~lGj&bar0XQn5SYfj)mZNntY2VgkW`f3YxGWbBNlv zY(j)sg8n`vGdKbDXgCHWuX>*zLNpb8b1;(`tAJKCY+2;xMz%xiB;)k#dU|*QJh_wM(;VG~%f~p3%F4Qk6+w@rxDR3}??FW!A zTrN4=v?&Lt^DyIrRFS=4pC|^3Oz_n4tC>fG=KL`BF!WccwZ-{=%T~IyjMsVwx9Kp^Yu^-Mz(S1*=TdEsETX+|Sm&^~j7Yq4s zdR^#FxXwXY16dnZm-ubcU1&~t=RxODo_&s6A{Vfi*55jpJ_Rsh)*J~9SY2?Kp*$ok zA-`#LVFa+Y1m}I?h#FOa7Snsz^!pS*?-A5FU<{su$Zim9)owUletsxM4Yodl2FxVK+Rt zNG{sMY4h_i*MBfTs4kKPP;>ER!Q5MnUfQIvQ<3N3>n#B7f}F)>xYjbhVKK=pyG3HfoWmMn;4yNVUl8g zn;;c^(j8?)PUXYynqMAm?9dabUfbmFcMe}idl&3t>Vhb=D8#={@x8ZNWyz{G z66>PX$Y?V^T8i4=;8!JUtuULXG>;}2xWUU}`n(coowNoV-)?i%Psiz^r3Q|X=CtlQ z@!jsR68%$+-EPc*S{IE>8EhH7*!S%(I-d&rSnbOmEV+LoL!qu(MUHj#m4C66AoVb~ z?6L1QXL@Y}E+xicAaZ6AP;5=}>;3B|dSh)V zFj{WRw0)+DnYU&X_Fk>@uBYeW`xuu^Qfz?{Nz*I`JFqPHCL-g!X8fHxL&hor-hyec zYko(*A-7B1h|1Zt`mc;Ab)Gj%>5KFJyEgrsVfD-Xg^tw%GESeTZs;lYo!_(6V}zfQ z=<&yK?&K==QZ{Lt@D8sQGDVMuZ0Tg-_TAOe)bYQF&SrLK$e;N*xhXj*|BEav%pqgz z@ZHjtL&m}MyCuNV+}XmCL&?&~`nwG!7Z<;%C>rvAzuzm{FkabifD<+JUNkgy7P4Vc zI<5REnJJX@NotlHT%QtMkPx%Q>iRtDlr9O+H+=5DrT6ql#C-?nz!SY?2(E}>sO@J8 z+wY(x1}&Y9E@fXGC!wtJCh%(uZMG0`h#m1X1vPslzkqND=SI#S=aYC5XbtWVsWuMWtkiw}fO|&cU zPPM~Jd@ehm<6NmSb;+YRgZNh-xw)L5XN;|PhBmM??l1{4O1Q$QdKqY-e%5$=fkLcx z{!jJA^Z!U+0=#@YT>njZpD8~JaDNu$`d<}z;)mp?Dc#{e-~BH~h2!w7IO+Qz`HrMX z1SB}QAUGJ?hI$0-#4xx|w6xU?=R%CXByjNv{@$a_slZ|nz~kM+yQ^8xsgvf+5JCD} zNYsag+%+N_O4vqo20i2JgtMSQTm*$+S{$pH6wBMZQj?2aHW$fkstx-!i!^hsL5Sj8Q+P z-a=LG8{W~~7oWHJ^}`kr6ttRG@0BtPAuk0fdC47D;0Yukq*CEw}U|J(dUVueNW;5=&SPnKh~3m4O>S#g|(JSOctz- z8`-u|d#6M_=iY;7Fq(_mk8Bet<_ms9OVTWaiWRx5U1kz?c{gk}>%n(x-V<(RbZ5G4 zvGu;6MUOY&uL(E~zc-?MCa+~QuCrPB;YJQr;as@q?V6nY>3kdK*H+lZ;|r>JAW1c` zpgw(em>Bzk!5-;%A8tOxFC9RB$=Q&gWSTrZ30C0@0DnKm7>fNz{Mf!QYb*b%p!>0L z0d>|MA#_=fJcNPF;KHZ|#2)S}QK8o!7o_c6CY#o}klFdB58`SPzQ4x3y0T)j-DAH(d{3Fr9gIO$h5@4NNN>(@U9 zO9O#kQ*jRAbD*>2w{wNC*1!(cSH^`a`=>u8uiuT2U>y!>535+*O9Cx{>lR4?jwFWA ztEDQII02^rO1anWVeMb&PLo4fw-;lN1I@5|5;J=t><{M$IIj-R6%DiN_ZXI;y$%y^ zdd8zs)^}B<4VlJ&!mlV5UwO}8YH6cAk2z|p)&~9rG@PX7u^%fKR(v$|>n4zfiT~Sd zZDrnM81yr)$VWhE-jBvw)3rWn2cEp#5zOa}u|sJyDK6oFYe9$sw!r5G<#$lPdo9CD z)~kfcjP0ZC`{d>Kl3#Nv9YCF<|Ms>2_rlXVeT6CQ%zEaf*-rkPL+SQM0Nc+Tv-JXu zEQ;p;bX6C^Z!KY$F|`N78kw~x?3Muw!=;US4(JBp)cTYY?Yp4GvzWt^xiu4MjOA*? z;}{RvCJ(6@C#5z+?yN|U>!m{OmCH$I&M+5n(NR&fyXZe}%&GI~EWHV}+2(}G6}Ru! zQCH)#8e(?n@6tvT`5VP%)r;~F&O1qA6urv~ay8lV#mcBTA9vxkbcm}SImyVNTj*+A z4#O30?gYbyOiy&}ZrX+7BYuF$`oujq?E6>y_ub_{l!z|uw=s#(SHG4GCw+$5h(wc{Iny9yp7$1S_iSzsVPbH! zspm&ngUQc@G|yB*?$sT~sekJpw&6L-j-&NWPx@I5^N90SJa!r^D=X~CUtE9u^V{un zsuJ}u9i9Er-g5;qiN(l?A@#k27cQTwd+u^v=R{re+_~mvn=p-{>VHGS0V-VrmXJNj+rsyVcm7r-VOE zD5npwZiZz(ndCZ4Odqn8Aai;_h{r2y7Bhcl!RJ^?EX-j$;f+@@5^P^-H}R&-LP;C< zWIlDX_FjMU4PNZ#rr58Mh^8Ub36mbFwyAQ?A-~~iH>ejY^F97oArT1scX6XCZ-G*K z#2UjxD0;EP&UsGX)X922H3c$G!xg>e1F7MQnE%md5E)+ELk#9y908^jFK6i;TmPt-NJL}BeCC- z)Z3BIXZ}rlM}OIcCz%DM@%;+x-YWf<`%obZqijm0m3YA}Zw=G$(6Lr@PW;A}jTjV>qb+-}lV}>NE3a=Y z@OaAHh!LWG{RXRk&9@LI$7=KA#SWcF9qGmdKMOM2$8J6LwjJEZyUVxP@z&rjKp)r4p zJvH({!hMedL?2cDCN!TK}z4Gr0S?-yP5*DLt1i9CHThqp~h7FkGLUGSHvrY z{{BskAK;p!ZE|X~gM)U*BU>`~9QKq9(z={i_!J=h%&v=;*ycI2s#!xj*Cb2gUjV~B z9yEH-w)jZf3L>j2Cc1m7pJpBc$oA{Y!b{WaVLO0@}H$a zBS0R7&+?#1pi+FH1jy$jV8dq>P!O&=a8BW~Hi($1vV@QZV#8EfOh^ZjW0H~k{1s#h zL`^9Kf{>X;OBj<1H9=IshZ4pFvpU?6V#ZXnd|cRK#>7H3&>Qe3sjwCo9=M}8BMVvs z-Xv11f^va3@zgpXQl<{Y8D)?IQ$z7^GPM-wJCh%49T0KVvfR7)NJATjw%StilcEgGgbN=P`6G<6G>X)SH*9@xbI=>&GsK+cOFYH*zu zFH>=y6vET2xV4IxnYf50URofXVlO>VTCtZph@jZZ2((}9r46z!7NCU80)^=y zNx+k|EhHxLw5`uf83Bw3&V-ZYePRiZ_eGO;dEq!2P&V6Qm4ml6Q&3B~Wxpz$H*{3C86*+5CS&QN{6> z7-|2%k|{>of2A4pwEu)SR+-=m_tZvBFwFMU6j%?0M{`INh@e))+iwBKl1%v1`lB^e z`pQip8%sv-Pd3tw?Wj%JHbgT(W&_D~2q0>>jWhWxvc5P^o(;KHh9Xb+LADwY-iB|6 zwJ-y~9Z?#dI4UvAxTr8E$&*r^Q66c7JY!+EDAz6zz=@>C|f04Y@Wa%$4UBFLI5nlhRSmQv+8dF4M> z(CCQ)no7Kg*l78C(tuFFYvdEwZOJ5Z#8pL_D4;viN8Q>RAW~t7QTVlxwD1h@FQOr` zq5N2>5cP;VXIM5_#;^?AyCNr?F_bZbF>+WrnNWcgO@Y!i6niLWD{^a?@B;+T995ks zA!PIfz{e$nr5DMnX+_V4B@N6-VEi$RsZfq^D22pJNtU1>6Y82BVLKocsbZt`;4=Cu zcLO`~nfW=_HIU&c_Q0UfS@PGH=|w6XwgZ;Y*O&vv!XnK(ol$>@?>`URn4hB$I4oYc zXUYJ1n6HtQFA1&`8fP@4ufYdWh5ed$&@;~#FCsI(fOG6_DXjq6_I2!TG7trZ4-2js z`VIXI71vwX0b1c=q)`zwVx$q>HVc3QryFoXt>qnj;LRl}d&4@z4M2>@EzML_Ka($f z1*obmZv)~IF4YVD0dbh8bVvD_zKr*rGfstu03j(Cx_mW8C+hMX#*aZ|CIowvvbDDsT5Bj+&OVA847$cefmVbqDTBiDvx#(i!> zf7DRwJMWA(b0^5BJ@EjUc~$be;EW|8E0Vn=GmCLi<~!011VDggNC{kr^-IGXWptSR6JI;U}q?JuVhr7^#%Rt5mFyT5r5LOgTpi9_DU1X?wn?W~1jY75xIs z4yHACTsZ^pxrFmD-DtsN2abEu&^Pv^F||NF__2CPpSk z`~^e;kf?lVhVdFy5g_3w8saX1dVoqHVWExPMm~ZE*GfcTL^S}v(zY~{o=XOsD3Uq? zRZ~Ni*WE%h5|>(K;3elHC}A*83;vXgLDjzO0Y#8G_`dFytmQn&IoLU<*7P0ufn>A? z@Wyzdvw^bl=_C&}ui%7Z_?_qh_W|xfV-9tSqR7fe6hRc`4a)D+s_6wH_!)ej5Qy=@ zet~`=w9&fYChTnB>$?WiYn!tzXfbi~g79GyaJP@$=iQ*ZU>-FNKD9jlI;A+xA=wM{ z+U4G|FL=y4)wqz6YhBGPj5vK~dvlL_LA!DOH*OyXybU%_4b7EhixPfj{V)RPrh47M zkb%jUC=fh~90*1|e&fTe1XEtbdzb7>Tr*F>?(yc5?KS6~?z!ha2R{e-2Kxqe26v8& z2z&lGhjNn5S_QXePF?rxlzMyc>+SnubWO&TcWAg7N|hwp>j^_^z0vn8vEr zYc$%*vAe72U0d?iRPj`?TTyE)5nKq~I*o#HP`@oii~14u9X2EioddW;?R0eTx7RH} zs091OxN+F7_A6mJg>IdHfXUiTd+;*hM)hx^;EYvkxKe@^gi=Rmv?g2?G#&yz_)=Ux z1bSy@R3+wY%=9*Y$^3#kQBLyPA-n~6nAKyL=1|_?`c-=vb7WaWnSLWJ0WMCv=V5Tf zZ`0t-)o}PQd~F0~PVZC;)hqf6kIz9f@`Olk*ME$hdY|i_%MFJ9O56vu5<4p1&@%sX zK)iC}71+ zGR{-XcLtVB9Mv;#&Dd&fzi8_M;`CCFIux>&&9!0Z_C8xdoY|SGZnAuDDlM4rT_@Yf ziishNUe#sT`##pBi*9~XtH*Y3t}-5k%S#Co=C=csy#nd#EFUXwND}=J3H)@<`ktKY zG2)eWpfB)h9zhh%w@t<2d9h53WpDM9qbMMYJ&a^ zos%RTejLsUYBtzboMjqD2|hEJ-UOMG$Oi7?)gl;4999h@8gURBIv>3peh`LNoR<@U z5KR-hC@2B^$wYt?l@M7I22Wg24Ivpu3Q9~31{DDT8UhwKfl`CRg?SAQ5I4?;8b*AA z>JBy%C!fYSfZl--6!*+0iAS@5&Jah4M}G+7p~Sm@A*Y0wLr8?;kN-pq#ZE~c0c!@$ zfC&qLMF*pQylI1xb)mRTV5p&KFrf*dMDj`gM3x~lLLm~`@77)7fL%6ZHxM@nFGMap zH-t6}Hb^$?H&`~D!D(Rijao1P7;D3AgL~rxo*`H@ST#rtIuP!^KY&OPM4{FY12DP} zyHL7dU(g@eF8D6+FX+F0dO*8CxcG8G{0-9!&kNp*$P38}%M03z+zZ_c-wQziN*GNT zUKr^FF&By)ksOvB{th}0$~PF@1ml9Uj${e`1Wr<12ovrjQ~(?~ln2ym@c;BU2@(nx z3R(?b4KfHe2+9i13L*(62|5mT1iOQq!Mxyku=WP?hQbE23CcIYZ$x!OZMaKtP0(pj z1h53q1TX}33sfWmlVU@U`vUKz`+3_hZrOpc*HbQUg8zAC6x3g6QctKMGO!EcxBpMY z|IxPS(DJ^(GpTjn_K91ze{AEF%bnolN9DWcdjI>FMt`p_)caVH{iwwtwUgD!fR^>k zKX=}&3H(O1hxT|!E1i0VrA`Ot)lbba|3=TO?&~Ri6T87{Z>n#vPh!dp+DH3bQ61q# zx~S$kLto;u+ei+kWpk|Bk=qG#?vqPq*B&8yEgULe=WWGiOe3u5YihK-VHav2E+@?& zdZ^czRd-UN@*VY~IB1+iFQ+4YC$A*XvcU8W^3@5v^;YA(DH9fr8yRj(qwZuhud z4KCc^JF%ZlSvoTf`+xQKv<3h3O1;&e2oUMa`1eDEX7pFsF1~W)AKB$b2Y%mpkpc1r zzh#)(1leNaQhU*_P!!dDsQkHnW>@Q1No)Gy?NRN`q1GKRch@TR^{gkd>TWc4K#nH# z!n9^v1%FmGZ_Kv65O-{!O^Gu(FFvwN|O5 z4(ZvlRcBGXdu_Hr#LlFDq0Mcw8i^yW{5K*eM%ky&%N{MTVr4gnpa+S&pcYq&g-OW| z50}sszw}d6vdq{0(YFkL>m~9pw##GWrq6X!&p@d zni=m|ebM>nqE6`UxP*ptCC;=?ABA0O>-m?QmsbBG-+p=K&K+8|e~Qz?C82)9Sl-+x zS+;mNaA9H7UI()kHhj_^s9dt)yHvM=?2E>tZFG7LrKXYi0)%5#+kba`LWqvO=IT{0 z)4ivqPkp$%;dRg^>lgBhGo-`H!rDtE4Sav7@*Y|j!!}Iz{JH=7)_*V76!=(K#K`g9 zFGX>81|h3JN1J4%qyBAsQF5#KWMz3bHg(ReduR}Us2Bz0F_7qe3z>frWda=~r}lw{ z-ELzj7|P9KNs`?^5N;lyk^xz>cGE2KzYfSDM0YEZL=cfAnz>IQmHaXm_Z-S3f@RdF zIiF-*9lp9Y%@F305@el32z+>X94)QisEZ{Z?!DA$@uFsHCjK(A=3@R5Qa}Sqnf5n1 zx^QVB?3^Su_Z%RiDI`lhxso5^h*rk-r-cjxjfbi>@QwFB|NGLNR8p_xF>92%_ISu1 zl@oXMfAIAdKygIPzi0>nf+uM35G=U6CBcFRcX#()V382q6Wj^z?z%X^7Kg>%-IiVS z@qPbW_ug0a>Q#01bobWG={egob7s!z{&@sRS<3898d$!qBcOllpZkLZa8Ylo90|L& zy24V)u-nx*=p2ozVzrE9W?itVy%fj{);T8Hp2HSy3omuACyMBM$%MO#WPS( zNS=r8hq1eU5xP8)xf8hDxX6&cBdE>Dh-wxH+`VMs)reO0wMk8VymPyB^9fQ`oMq*8 z1%(X8zsE00_kU2X(@=|IXB6xmh!)AOqc<<`Y-5l<(7eKhs|9W@s|fM-;0>W=c~Vc2 zmQ2gEY`IgrC8%gb^Ih$3mGwU_R<>LfLvoe7A!)7L;n<@A%78^LLioN?`at$sz3oH4 zQshAPX>*UW?^%xGt`*klW+xR-L$6sI- zmQ}(=eT8Wlwi887iD@Qd1k}v5R46i+U+7Uy6W8c=YDc4CzP+>485Shhq*8SlWof3K z&51b}wY0nlb{a_v*NC*kuzyb<*gAL`5#tINah+d5>?k%p!YA^zoq#}f1=D(NMtUx0 z_Oi_$hWTWCclQYqASXPKJrIOS($_j zyy7^V<#g=Qir1n>m`cBAF(KCJVVi=MUNrScB~?eV^t8xc99VAn)}43ic&@Ru zI{|WjwMf+5Z>5SSX>s~Tc|s}RP0>_4EQSxE37_9Ra13v@#VUp>KQ=xRJ*5TfK}3AL zqA_C=&PCvw&50RHgOt0g9i-gbQXxlY`B+A_HPx~uWqd+v2H}Q97jUKGH(F`a*6xKZ zc&eGw1;hK-^sRsKHheq8dQ8<(sr=<^SA=L@Y$A4J{eLtIGa4{#Mb(V#y42Wjbkw-5V%( z`^L>&!L=N|cI!?#>07GY4<@dKlKSVWH4iZAZ@KsILahHQ9sjs|{9`zWIoU9*+9Rfn zelJ4jbCDm!o|RBNt_Iui=Bs(5&)ukNgf?z7Z#O?WbOisAw@mp^J`R-ZPQ9%;oqn&? z0lpdL=TD4<-aXBY;5t-7GkGssQ7|jhr&!&38X}1d#Rc_Rb_=PNilV^xOL|QdAnW1g zw$4_kRkL*Id4pD`f!xRR(nB_Xf~$Td)$Cp+Inxzr1k7E+^Ha#VB-X~5*;^;d7X`J( zYm;KANAy1gh)j%?gXOa5JbcA>GhcUHvEk6>P`rXbNh6_58|%Bj`G(YF^wW=0$&i3W zO6j%Z)Rtvpdqz)P5oMpuRPp<2_Ot$(wP}r|370ON25gbJIklKvM-98*l9W|1!S+D~ey zpZ&(6o6nveq}tlfyMt4Naopv1AYOI-ZC@!Q9lN zN}Hh$o3-`V%Y${={yqS%N6XMA@v}32J^1HP_*tOBw;SL!u#XVvJaS6y=-af|jI+wx zZuYK(+$F4wj-hDMua7Om`w$jY_^YllPRWrDg9JqCx9R5eLvJ`~ZBD@a2_A4^=~Eu1 zf|$jWA>d0YxFr#`TOF-IAX^!zBy)F`3Jm;JQx6pE$iGoD6#%=QA|aA;*0e z&2}0uUJRfH?9i60gx`G{vGOCj200XDO|`4el9L!22ZUk<^U22a0##$v7}{)~J}>>T3x_wU~CQ;Ox2rjDe6 z=_&Ui{{unO2~ZLf#Rz_=x=(4n^Iw;ZZD}ua+-(I%mf^gP<)UI>)ll<}WO+*JLQ~a- zx_aUozmH!pQ6`{6>i5W&B=m0*G=4cet2jVw2FpNy+Uz_IWK|J&Fg=2 zwC;b~X6Dw1lCnkkr|8^2M&MZx!1_@`;psb(-QhgHM$y@9_YJO9jI-9F4B^+tqq4p% z!aecM@08COYGQT?$p)Io;(qIl!%6c-K{RYiZSPh`off82xZ7*FMn0Uxc+g9ceKKvY zeB)Hl3EHkUSy1DT9{1yDG|pHPh8q3R=q$8%_I-ZyG&JSArzOON=AIrZ|E;K(E{DAj zbw1p{?;&;t!xuJ57AVgQv7;bZ>8KwMcWBs()YII8q`Zptnk9ZGZ8VjYpJ{gYM1|vj zE51S}_FHFTgqzvN%QD#MxxAXY+y6awtq?)oS{iYG9-i0*Tyf5XQc`BPGUffDRmbFQ z<@clN)fS572}&Kh&6^CG#Vzx<-apyK{IM3X-NUepLXS(eCS_;|V#~+vIxThAs4<&( zw`US=J)}qztjk!-1UQTlck2FTE|bl1j4wvP314djz>o66!3 zTJA{}E*T92(3vkJmHP}BH$+P< z==B>7T{h_VmmrSsoOaEsaD^sA0!k_d%M*4?{`rvaeijbS&CPfw>QK z1F3&Qln-g!D~lFR-ciLhkiU<0duiNtBV>B65Zmh`zElOGkQWM4*~z)XGiuk zZYf#~?-gukF=kfH2=3M?9;eFM6Ki@pUk)CUr~5cdx+fRI^kUYE&F%iIZdUcqZgTIc;Tv&p#Vj*tv_?P-WeBW5841T{JBvcWy!-|)@5Ir zJZ)<@ZR71|PQ8NVmvxijZh5{Lj2;=SOr2@QzBfjDfT-aUZ;#&0UC0jH+Sf~B>ZvD- zI(VM<_{R7pOq93lXWD_V*=D&Ji02bD9ZIE>oL2I1K&zE$gk(ot9g~Kbu;8*%wrS!;&A78ekls%xK@=c8n{Q_cU^tgY)V8Jx5ag)JD=mk$%Jlp(2u0scdX(kAmW$}_IY3|#WKR@`FO5g#5{mAaz-K1fnjP4 zM`q>|f+nQ72=n?uElq_h{yLSOEoFVIBwV+^jx@bu(pWc=HpQSe)WgUzE!@a5t(JK# zo(Gasb${B!&Z+1kyxaVlbS%VUo-M?Jk7LCAKA1m;nn+4)Up`&u%auWWm#kX_&-^zx zY#uFThOqiCfAb_`7-XW!Q-zh;IaSp3zn5a+%4WY;VA=H?Rw6>>P%wmH|G0nMXY{KP z$qe*X(Sok#i<`wYyf#eDr>=G{JJ3MFYEO}ONmH4*&19(uW$9shSku9*ZM?g!Z%u;V{+7hDZG6-<-ja@f zOin>%iPxrs-vuqH*ii&QlptexNa;S4X%%gDL3}DAv*a0LN@LW1(e9?+ZC*R0ii3)<(BoP;-iVE&bq-b z#lSmid@ct<#uTSlQ0l5aEW3?e9w?^Qx6q4p(c}y;yjHWWG*FwI$Wu_%04Rn63Yn5& z-*Ez%OoV6{C)Pc)Yn)&3w^d4H&E4L9{lpy>I9beTNMRca{z6xK{_`UlHtKkDhNRO$ z!tn8*c*}?KVVkY;RKYElxbOY5vIk0elh)rqSC+vaCgqF9Sa)W<0F%aCBo00vZ9=Zn zo+zS~)Kzd6x(04L;(5o4N1X~bHc9cK;9Z}AQPU-t+pvku(BtbMc8Ta|uOLW9BvD}< zD^mK`lJN<*2c+b1lxQL<|MPHrw!?HAM5J9TyTSdAz+drCf8u^MG@e|kN+SEEaFkVY;f~^vRxQ24GX`1Y=s%fnq1WU2ar)1a zNG_JjGwxz4WRc;E+6pu6P{}bS1}>U<&vN{6^KmLG(XCW}6xd1Zfd+$nO6rQaLz5r; zFX{02Jg4Fir?$Az5mSrg$CU`Ltc?0Mfso?( zP9e4t6Yk+HI}i~%pNEWx0xsi__19l#EvSmjP8?}bLV8?Bw+1Yg@3Z?cfDE~5T(%H1 zqJ%+~&*NR61Uo&3-Om5UJXwH+rnz`3%&m315hB^?EZsA4?=#Cu(xOe7FNm`zMQiBC z%dh4>V$5Kp@Z0-Io2947Mw2dMoiyhA#nYpiPtzl50`eqtJdh#%0z%yWI5TNE<=lC0dG1} zMJt9mIK;#P3(LaY)ADb)RfHL^PSg<#1(})0{RSv_gxWNjJmX)lJb0L?P`GQYm59d7 zhf-5{7~+}Q)pGTNV+`1%r9S%Wqwftf#eQsQjKuE($Xl>il2elFqR z`r4;Tk<>?ON+nRZmz!&4Gm5Y?ExGVNsRB&(jaYB1!Us$ZG5-iNmAG@1WB20sudAv*Q zruwora+$%1lTpeAu zKi)xT(zwabkcHeW-6KVd?b8pnZF12Zz2HYXq#Dr@vh3CgPU7lSPr6gDrWCRz?pV)& zM|n|DK*sKra0xZ1Fe|U{q%pVm6*m_~T=c;9uc#=Wsy{I4d94eQ$dTN5R;3Z6A`7Cz zw6T)l)KvTq%R1mE0QD8xbG)C#0}jBNj`pf1Bgp7&q%2#bBUv_&1wqo`asGDo*1pLo zIM0cq_1dI89vrO2n%hHx495OQsqIh64n&xhtJd2@JN9rLeHip8*`W$YSCmXd2+O86e=*<8h(BQK;b(KJ0TkM9-^5|AMyqf#p!><8noz+xBaP( z$s?>{PW5CS-@F_FfK#}AUi_JmBZbe;C!Jf5IK^6@@K0{XpO!v`Jv4-*q?mLjj(pz6+TAh75uj|&n-GKW~*G}l^^mD7jhs7`FVF2*LPK~5J z)G+Nv{2|9XMq7mKDmX~pK8!1qvaMV=rBFZ=Cn&tck*Lkr!2UgK-#br?i5Hk%HRX64Bcj<})je^ZunU zVVF?K^oh_Ht0xhVEK)Au(d<&|EvOoXFzIBs95jJhM~j;>KWH^F4lK%>y)SNU7>a5w zSI`c~7#XZHZ5L|6Yat95|E;L`xHo^qYN^Agi#-Df5S7BW5P+b^^(P+p6iPq6DhsSk zJMp=RA!uUmw;_o2AEecp7KNCHO8F@z&@vs2T^fNcg17@311De|tqQ7Ar3M2M7!%#vBdV>QdMcyw`moWXF1{o?e0#q-?)#vc|6&oMk7tE zSu?ygN3$js^dawdl^5vbeV@4_&Pg=otq$_Qf zMp^~a>GpL3YWfiMqHbX}sS-znA0EA81TGX*CV_9vQRp2iX7OU*v<#qn;SP8zO?;mB1&eT%Nq%yQ*9excHZGZY~W& zREHRbI)@J{!a_RqZr<8-cFqKM=Ty{7Nt6G?EIyo&<)U9_jyodIm|tjc$qXyPSy7C-GCi_YopKh{Rqk z{=1jV1$|-{Wt*Uc4)3&rFqx(U>wphN zoJJ$lP4Q%N;VP{fu)y_`(pC>GzSDuc09nG1yn}F5GCBdF0 zFLuD|4Nhm7Z30iZZHIIB^#yeM=b@)Nk8SL8zfDvtDB$%H?YZ&x$Cco;@oI1^g%?%3 z_$ARx$B6G!&LG&D1Fs15R|18^U#&$Mo&`Kmy;#phPC~aCo#_{Fho;vLGWPJf;g&ON zxLDZ%XJ3yVznCIX8Iylc3Phs;7a$k!vA#4;ah~uGw0=8G;rT;8J*b1zi(7}Ov!a02{Fi!3K}FAss``NR;!fnEkp_c#oL_WOp=8xsUI9uj zzt7(SsZB1Q@`3^Z5{jA+Qmm|liAO_;(rrn6za@Q>Uvh^-T>_H$Cht<(Qwd15tZgu5 zc~(mcD(WF05^MgrP78neMweG;#anTxqgdvxIbE7HTTj4{_o9us?EFV5{eS=Vzttyn zm4CFVa+Mz~zO!zF)rn~h^3k%1@V+hBKVkYGo;@H`rb5&i7zYw{@+tCv(|xvkxx6Yu z_tIP(L#}nt>Ayn;d{2JsMA!0tuXhm?7o#XH3m*Y|nh&g1@>A>pW4|TvdH8K7fqnEx zFI4@l1LFe_MT=$yM<>|qw0}kM0f?#R#cH5iLH*s`+JOrl#rJsAf$wUK!Q8iG!`IM|Tz zea1nu8S|7lq!r2 z^qb0Bw%={SDLE@{F79Ux*MfXFn?m7}qgxFg=cIFPqSv-GR8>xVrnb-Nf_`)U9{RtQ zNufFpf1(?H3B9gaE&ia#n@YLOXWbAwf$0%6Hy}MU?$8%I6=U)kq3cHT8}4-)FxpXSP_=~qYLi^Q`d((~cQqh|ar*|S5w$oalk9PX$H2xNoALUQHb*#jL`9 z=)KYazyLgG)C<$(n}pY&1B{8CxuL}!9UXR=wWwW*jWIvLocZ-0Ow@C@AA4ElKza;| zhqfx3O%0b3vmxKce5se00cvhFxgOkAG6(0tN-a{*q!%I38hg>nu;|U>zI-+I%0ToJ zP62;c+Sllc&j&V3uP%NN3)Lri3{{n1p$X44rlgV0!vkN{N~&%0{^E839Rox-?3+F;+)O7A7{#lXp|6I}Gg=H)Xs zN?YqUyKgyPEM$jTJ&q!Tb8iVH+G*>>CT2;m(dNq8ZLk{LJwm*BRFWJo@(}4M%N_9nI!#Q7%b;mURC~lF}>B#C$b8}c>(Z{~T8Yn8!q6qh}TO^(DTZwej zvoZrY;X4Koq%C^CKC%9J!1T^O@C!|Tny^H_T>VL<5|+82Ucl6HP1*{Nx`vgyr@Ewm zM(U@K0tNzmJM|N~IU(+NYXdFUR|p4d6#9`}$=@UZwfR;EjLqLCuj^RrkLmiP!F~#z zw?x3|yP3|$ikj4+avMk7sQrnZC={yjxWZi`@hC8K4SzqfUy(LW!IA97s)LcX`ikB$ zH&!x?0_4NH_%ZDEt(T@R+XX+4>;u#^=XZ{iQDyt=@OI5SSi!3;b0~8DMepr?LCYFR z1PZl0OulT|sAIWJCX@Sibgp%}S|YV;@)Ww+gm63SqtwlUtLP&Cab0TEMwFZQPlPYZ zrU?Dxx5j8mFN~*>n2wzy+)j3!zl6(TBp@aQwacFIxP_y<09Sj8NWag-@d+A4tQiV7JqYG_4;0~%Z~_( zcA#rpkX}Lz9Yh9^RNw#Xz=3ML0%2C81w2~*XO}fJSm@73PGf%zs6YBK7zx(&^AZ1| z?bqk5_bi*C-y+~OKU-)Ma0l6l`%G?MgT$(}Uft^(gNdNR0grZFon%mdtm9au`>QU$ z574z&u-kw~c6U17DYio-n8<%z4SaReo)oZVg?S6LPLV>UDS9)vG)wZf*kzsPiMgu_U*=wbuZcdE69%EgDS0_@yPCE+H~H~$tRw=@-o4C5twAZgnDOeRZt z8`SJ$Jcw{^9{>10Q2kK&$Sf3amB-G>NJu#OqhDgXsqCAsqJTE$s~U-ZhDh}!rP8Ta z)M!1A1u^m7;rnzA6{>y=@tvUPa++Gl!I(R5DNZapB&%W-JifP*M82bC_dX`6sybM8 z3LknEIY}fx$ug8E&?0hWyBywahK>)`v2@2cr&!(R860TUiJj~dOW97Gth5me{9Wz9 z5QbbS7>9PR|M0OzO%t}`_&eS!O%_;Sg-niPhwMX==a7$jb+xhAd;bL(0QiaJZOfrl zu^NJWTg!>4RpCD@eveGde_Shc{P2sK@AUXvZ)M%_FUhD6K!^3b+gPqkX}M_5=49UM z(S6DjD$eU=h)-T@hX@bM)%|!Y{Skz^# zb-p20oUuL_bjdywTg%J<{E9-gp^0<>Fjpj6) zAjO2VkgiZK-ZbNSx!q=kn#(}6loZLEw19IS?pf5(En03_gZd3sLnJU2T)Qg8qKikt z#ReK4jzMoQs?;ML;PruupTJ04xr7p)QV@h9hmv2D`%=w9UD^HaYuR^2Av%aQfng8c zVSqf5rmJglEW_+;IzUDOt!*4|W1S`^HOkeHj2Mc=O`4?^jhbiPLrM94{N53rrrwE5ExrMq14f!_yImS?N)-OG^p&25H?^#u zD0h%WRSFK}l2BzuPvdoww{><_Qr8Ruu@Ns>=|f6}(FB1rJqNozj?{t)-4 z5=6jXo~4a1-&KU@VJ~5|C-DT)TqN;hB6v*akVgc6U}BM}+M|4?60dspBhCpoLY^wl zHAhW!qGn8oKL$7>AH?RNCYZmA4A*5L+4!m4Auv%ziTxPx6vY9CQVD;0ya<*0c^N_o zE$(;WIx$~dIFN~mX`*uSFFD;w#yus6B64@6BKs9s=dh+KOd?bz{DIS+3@j!(&9Bu1(Ky~FCVEvNs88Fd4%fZ67}69+)FzqcZsdYYDw#e>q~Z2a zK@@n`>cc^KmXi}dhB3Y5grOdWo`4kByYbTCg5H=qq5ai!E@61F@`-R(ImLU!>VtO! zibRl5fLhg-rvrxc!7i|!}mcw+|Hk2Qszequv9wVpZOZcVeGTFVen1v;X!?sdwtca4~$ErBBZG5J8G-oAW zk4|iQI-96BJKv1*4`<0w$lbJW@!dRhT)EtKt%@!4vnaC?hweGF^j;~=pSOd?&mZ93 z8;FPZ^9=b|^>CSzRw_W^=^hWYr#aw33 z*K}jUSEi3eq=5ow5tD+6`Zjq#IEz_Kl*u2z)A?Dvp%ckESB)~1 z6+!n7Rf*#vZHb82mqla=Z|<`xu}8_th!E!{Wc<#+%d?Fpijup@NV47AAea+~7w$W- zj+$v(d#OK_x$bc3w|4(A?@t4WiX?hwu>-BWi095dOq+QXv%P}jKB{b_GD^kZrA{WV zjXTZf3}2f2gB9{M_~ymz0{<`KSbyra>EPzSL0i{fF%$n-gioW`J zRz;L)-u14pt!;N4w6apD-4=PbP?U(vhRZ1Dte>MI|B35+B<(>U1eO>YxZ^CBzSFnI z<(q;dU!5R&+-Av4(N{VerG*hgvooy!bbqw|we1dUXvsLVbK0KK0_mM}tot^AQ8UYz zeh^oJ+)Q58gH(|74~aW!_Y)V50<(=7CrYG>hz+#Kcio>ilLb3k;5=eZY+_pMtYV=@ zMMqjQ*~Q`>9&g?E@K9WD*~N+sb!ts6TIihE5$B6{1))joMhCj7ja*F{wg!{l?Kj`9 z+Y8@bdlu!r%r+21iS}_bFkVnEkCIv$JhXsK?r5$2?q~a}E04~%Pp5$^RjA0_!hyJ` z;s?~Cm01YUGEmluAQ2O01(;6o$sux^j-<>tnX~`#rEy) z1l>~}2zQFvJ>DGMR*82$^`MS~o?@s^gfcsIAv7VcyE|jRjs{n|wK96ySnRb-Z-=7i$vaMQyj5Yz zQZ&S`mL}uvC^9i+b$P1UBS}$Za_n1*4GD?9b_w|YyArTEH!j%FgUB%c z-q@n91UUgX7gF1-fU8Vl^$Qp4pz16*4I;FhKEKOR^ENgkzD5$l+&s{Vt7$tUF zm|yT z+gs~?6urG{r(AX@lfFAGX6W-2DUK%gi9hsLe=dxs@%be3k*uLG1sE0c*+>8K*Eu6# zaN>g%J9;)o_BRKGLpA-f+pJ+j*Am4pT*~OH;yn0*C)m40c~<0>+EKBTxFYgSd3Rpr zmu7EK2X3yptgElrLatUEtp~-HRk=mGF;czHG&zNdENgCz_9L;Yylp8PL+-4NqxnNf`K9rHUC5LmGNJ$ zIuT>~$6xG{Z+ODOzAV&F;1T^PV2b?MnX3xWp@nIvn+ANMqnoIgC5>C0D3qAm$mWsd zj?eiyju_=}ephwtExOkVY1zHw;(p#q-FtdGz4yxsSIp3E2A_LxO+I(T__@=ujutfA z##E$J=?F5AZfqTGXFk^pv61MJF!*wS_W11|u6y>VfSW{4N>9HK5Ak;>vlygqhctxu z0Rv>rHGg*p6c#S@y{Yt^>;Cp_<1;+A@88m(IEkswqB%Y0Yl~}}=<&x031^9b0PPnl z@SvWn7zSc}#`eV&o8Y~dhcoD;eodP1Wgv5+rJpEv`MKPgOsi@04(^ZmTv9Sk zp9rIgts%Va9R#ncXxluGQ}#E&*Zh2%O`rK=W0^HPeVSulq|M26%IIhbHy~OwIl7`S_xW=6SsC{+5!=gYDRW4>6WwF?i~{51P#kHc-B}*xLM4 z+oMzjKOG!A{Q*Ue&b+D)yi+ilufMR)xg|Cvr0idrJm}BVFu~=8w{&kl{X6|vMvU|5 z;sSgbs2M11Tuh+XS(OWz08G%-d~PS8Vpdy6p~t^8iDL)=Ji+&tQKAvTStAi3nt7se zF?IOaoO0`3PLHEp6VzfLVzcvTxMncCpQeofV9*a_fM~1i%bV?q952Iaw3v@4Fm6}0 zeRfoqiwyLa$6Fek)$X0afaUN|x`>E&t%=S25k4jtYaLEX?p1;5t+WU;VzGmPP3?Y{ z=N7!@*~!@5ZiXfP&d6a5uv?;t*aMxHZN1F~uo468l4u`=6M+HVsqbrZztG4K;VloB zdjRst!Oxh7rhD<$Ca7@Fq%eCybPbccbVjjCY=R7nt=nWOibE}vL2*tp`1)QynQ`R} zKRl5p68HnlW*Qjhm7E=h8xs33rYcFp29h%f9gZGiAlZix0LYnjd1kc6*6IDImBmJr zUk~@LFf{`CDuwXLxD$;5)H5Dum+KpMU=22Rs+Vzfu$Hy-Sz?Xq%!dn`78ufDfR8Nr zfJFXFN5j_B`%r6ca`F=*#om@2Iw9P>t*Hqz10w0%)Mj$6bvb>)g50v+sr`F6lH~^J zOxv^f@=r1se7~^t3!3F$dKdQY=GP3{9ZzWA>h)xU@G?FqG7F+JY!Ud7cubx_`eME&k-i#}?(M4Iiu8&al2W_q`6Ey6>HuGTNBeCOy$?#j3ED5KhWNcKVBN zpdA2~X^UQBsgHW8WJ7TaNFXH!t;BX$*W2s6+b=j~-Npi#g(t3pa|(`yo8PYWk51?T z1g+Ji)43KC46qjyL&Y<_>}7 z4!<4R{x#B=FL~6S5G(*x=uNrdbs(vlvUGxTTxr)@QL%{`D8^{7)(a;{Rr?KHMvrJ$D=2lifR-ty#5$ zKb+NDp+?HfSo6W{KT&U?GVlS9Atl7YTab2q$?rDf-qQ6~LgPgwLVQ`v z<+FBL_{y0LNH?b}tfj~nYse`)ku&#uFdis;sf}8RNZO-6JbvgB!ZLl^s~!73MgBni zUC*Wqe(&aGuSDm=XY$A`4w~yE|Ang(fnEf+3lRjz#fufv-IRHswI}bKI{%*l-+9Cp z8Hb6W@q7E?!+(g)U&V?(zX5vsGMx6Tz*8^IfDinJ<5zbsRoRz!ne!F35~4oCDZUps-y&5<4m`}0m>c@>GnMXFUVE#tw<>x z71HnZASc-*6Cc5>#nozXn#B}~SvD_lmUVureHQa)2Q$7(1|&%rvzyEQZzi1r?*0s!4J4QcX&5aiF- zwYQ?Rh4ORmLuqU}({y&N=8DPX2XVXx|Hs%rM9$!rG3rti8EKF);!+W5XRti%!ZcXI zR_X4N7kTJax>u4_do4hr5O}h*4grv{Vz5*9d654VLAOjENN}h zWo`_4=77m#u|i3!WcqYlaFT7vX}xFP`)FVNzeHeX72Qxbu&85pQeFd?(-yWX&*Yth zkp5q0l}MY06wMa~Err$ER%(njl(y9KRt}JAnfaF0bk1te+s?=>E^3-NEXh{nS2*!r zf;FC+hMzSNYfR5tL(dwQ;>^!=bKvk7x)f*K)7$aUgcMZ-@XmorkBp*kstSLfnWW71 z!mOG?$poD1{W|5uvxma-1TX&9H4Ve^;^a^Ab$i9*93};&Zd>(N4oY#DcTYA*&mb;m zs<&)z*Uq=Ar>n^;pmLDj%I$2ieR)jh<}jaDW9ub!^QrVVH!iV^&^V$u!+#6`*efDA zu(ZnNoBAVd%QYp|f3)`b6km(zIX#j|o-evEDI);$g2IQGczvKn_PW1{EJvw zA7a2DCGsU378dV%CR^48-g34D>^3u89}JKw`*E~yH9M^LN#IrXK!Cv8>~1R;j>3(1 zg-F3#f=I9Wxw6Z|$6mXoHZ)gws&U&6?R4yDGHN1;6LeCB7P^u}?E4 zs-pL>wxyYv=kvXVXW4O1b>;E@wCr~VkIXvZ8!^1}mbGTq+r7i7ax?Kj0N`&5O+hn3 z9y`LuGRHxgHS*TX&$IyS%$>HcYzZU5uARweFL~V%MNFqes!hapb>*k`np(6f5iXx4 z1erJ}6N|rL%tGI!n{tOWnSSC6ZD#H>pgzTL(F$w(woJHWjL{g3&`R-F@C$wVjfW?+M>3&ii6|G{54`Ob@nmX0X3K&sg3*cnC@w49--6kC3Ro1NxMpByH>Q!C>J{ zJ(weu0<^9M#Rr)<9S8c>P{9U~;5;~eU*T9{k%64pp)ViTaY8qo$pdIEynK*kOoTea z@?5ZD`d#3v>hNc>Ql``Zd}mW_HCH^P0Y*5N67SjcIblXjRqpxx*UIjOlxV?boSSA! z{&nf)AgZ3*=*=}e1iD{@u=9T&F`pm6@q|x8|9s&ne&P2Q%nzjCZse3uw2OD;Kj~uE zRYXDtFZ4tL7;@&5_8aK_CxkHlha}nkDcRShSo-9H!Lq-kJW&+2qhf)7)OzPJ{qOsP zs!JgLVIIb6E6=}sjJ`3>UdVa0t5Q^{4>JFMi@sC9grajEzfh}*pKE4fPap2&v-`8p ztsYRubKd*+zZQulKL13ND=3%P88V+Y(~PdN(=4kp+ss-`*VtojPoa^xLV7pii0QJR zUv&n%%X%4)Rq=+S^*h3t_xe;}f8BQVEg=@W`i1hzqJ(n^qS00vc3*Nv9+Qur*P(Tg zXLNtq6FbK^*A)u@oZR8$>R7XG*@jl&5Rb8j%e_eGo*oDS=DOSN=n*U`p#%RZ3nbq84BzMfPbBdGy1eBLk z(T|#{c`El!EW(eQ-mBH-=+sVCS z@L3z7mT{7xexM!a(hdK;{f*J_A`sL$*nGRW*NlrxcJ|(9qMr&F6-uac+es!pC}T1P zkLwZF#J%wJj;Xp9>Ao1tQ?IGh%NcOmftuT6KYBhi24~9?G5OjX@yZ7`65d*~`*=R& z_83tyJ&_kwuf4op(8b^w$x~7p)(cm#JlK!4JngH6`+lQ$d4F?-2d=T$ec0oJsGiW9g?-gw( z79V_x?k9Y3-y@vRFM4eqX%sVchLReeZj2{cU5WD{m zZEpb;N4sw8CM3AKdvJG`;K3Vc+}+&?5Zoa+!6mpf?(XjH?(WVd|Jt(l-s_&b&N}yu z@zm^DvupGi)eY5eyx6^I6jys!!ib9Q-L!9tBT^yZ7gRr*5^qoER za2x?8^OgETp>#C0|FQx01p-S1;M&R6mBQqt~?7l&j==>aY%f)smR zgX;;urDCT`r-q%a@0S072x!xvp}H0Cehr={M1CUG*CDzE|4)fm38bI_b>1;Sa`;n> zSopZnF@nH%YucMJlIFm!)OEFCvq?GS`+T?^jy43-9wG)ak+E6z(^rfq^~muD6yKO) zcwY$Bilx|0ZfhHr98AtC&hBB2=7NuLn3@o(ju`(#)}`@H4mlP3esPaZ+vP>FIHeYD z{VNd|KH7e!AS5_9<@i@01QL3sQ`8DW}yIeujUv|?nT*a77+o1WiyO^V|i&(HfFS0t)UHox$lI!+%rVD8(k z^#(B3Vz)i$fl_i!G;uLhJOvDkynd+FL(J*3@2+!CZ~Zwr&f-u$hyc19#ILI6{&)MR zAK$8)%bhPIau+%jWJSKcyfL~qSM+dNjNNl|Vx`!`{~D`_wp z;j=hZa~MnZm|d>gO=tVpBcU;FzUHqdDpb$UL43tX0GH~FV4PH)lV?hf)vaESW!JHq zm9kP>t9Z#mv;%GGT!m_nh!?nh8$91A4K>W+9g|K!J9V~ZzE=nYHND4Vd9`X z=B6aJ9eNp}RS0fQXt&I1E88{MDgEbZ6Ni`6?b|5lXgLZ%)iU)l1vhS+2w zV6HFKBdv9a-qX|f-q}La_ZTIG4B3H~bpz|Un>E5s{C?ejF%HnKDEYRGJxlg|Dr{6j zlVpjZM_L?&wgaqZr~NkEi>DcMltYKY5txtSpmn!(ZoElxPj%YPx1n~yrx6bYQYQNc zb)9s(h-Kurc`yxq8tLBIc?iYM5AcwtoPu2+aS+CBe*}JF#Vg?Eq%BMi6t<=059+ez zjBJm-=WYFw!-%ibJ;4dF7rMop8fCMoQP2f`&raX%VvF1w7Iwj>=__T2ZM1ujJ zkwfmEH^mJ@MlM+xCKJ~<3-2RBL)Ul|v?MPcWrvw9OKge#THPBItv=0ilG`*tGYP0U z#YuRm7>+XXqP;TUZypO0<7d6pqqOsIRRgD0`8Wh@w?{A6q-!bSc#aUa;x*p_kVfIS zP50-B5wKkrM2ko8ns5J$(cuOFG0NR_x+{l(;O4v_NSu%Qi!yNqObAe-L`WYUrTC|6 zK=(h0c&)eXNTYDwmixEF2ske5qx&Lwt+(uOqn2Ekd$-sL>MrUd`mFwmh^}Z$H`&h& zp=|FCR#UUDL3Xrdq~YTzysh;QhfmLP7jM|7J(P4Fg=oMP4DDTm?E|EPeeS6K~h}wJE1f6 z69LHdaCUmZpSTdvS~=hWF2Rk$)A-q^NKQcoDLK}Wja-Mj|GQ=s$tkdaMI?>*5Ds7x z%q={P9qK%Xy*h=xs`yfI)68raMrn;MYIm!>7U5BHcc)&LKR;s?c5)6a-E&*efxtP( zwzu*9eNK8`{4b^AW_*%I0QIOz_qf@dYJ%Jw%6}N;*i1A=&3YQ+rP!6gFc%T!{1L_J zH$Rxnr#8b@{O{T4u@P_lOHcO`eNp`HmtW;X5qduFZ;2BMJpOYLC6*#%p00F9k}ngu z0ZcDiI8a!O%~0w8TV5l~`)w(^vfzT4@dp1{BW)K!Nc#%<33*Aq3oKdcZj?#BWjcYy z>0^yF!<*vFvySc;B_$LBP{qP>FFeVHG+FsT03M>Pr-v1E*12q3StZ%3Md3wUw z-R?HSLM(4Zq2xL>J^3laynFS<-a~0k8mJ*z6JJ;hq_%>MSH>Q>FV7jS#u@8mYfaQS ztFlJ$WA+%IajW4nbt15v(?%NwxNeg+<$Yb?qiljSy30H!h+FY{%V-?QJjRXl^sBUy zzl9%c{kp(G`2_KnaT*GC|$TyyJAX+0V6L(DFD~l$z6Syq&B`ER%7x%CXCwO}9od_qLNBfvhWy7JrMA?=M8y}!vs@2`6_0~esXOh)yUCWs)0TfO0tRrJ z{Kt1qi)h3ecCr8WYBznaYNJgzo>9#0oiIJ;&7E@z{T5F#_FUlw=;!*TGPH3A3>!un4gFV}hZ}neIpCd5&FVdl42VphFsL;H8yV^LFwDAdY<+I$5C=Yn)d3d zX+`jMht1=ukL=gM(=L2Ec#R5ce(66STldt`K|XwrMFh&j(^m5Fg$<)?8%e8)kH7Bj z)-ijNFjv3vnLp>BJE~?p;-}k{bUc~xg;CXXS76Zg*q`x?@7%yNA2hz68=Lcqb*0S2 zb_(8L%%im8D?d4_w#05>`tO>1Jepq>wNiyEtzpcntOa;n2x0|C;w#p~%DENM=bH-v zp9&udfOGOSenmrtjp=_RHJQsCLD3;8rYjCFZ<`T)ElWQkRE^r0YF@5G7KT25-5$nS z!Ilf0hjRYwd*J+C`dx1o%QJjm(2g^8DZqLDZ0YsBrMAG$V_{;hc7pv2+K>XRR0VBr zW!#`bQHDZS98TUeV{RZ7n{=U`B)p<|(tD)NpQl8T`$!d^tCXOiCJ8Uj^MwF*O>P)b zPO%7p&?=P`RB-96Z*-r>oAOH)_cU=OpG@qydJQ@w*2G(iysOhtt)A}}4CcUX?e=f^ z*i@XfjAbrO@+%jKQ}oE+i=QgJ8&jJY9vWYDMPnt=JO|Yl6ACG_MeQ z%$BS7DCE(x+rx2?O3{c%Ru8+e6*P6)yV^i^Y1t`zv+vtIRo%I247)kfaHq{joJ%ooU|f_nE@fD4kT-7e7iBiCXwr!VmO4jUr7v~iEL4a&mqcS*81_>Cs*qGJ zi9tUy>Ty@A&=%V^68R(D)W3cvLc9Gc4|K5LtV_2D7+u4((&sla<{#VR+jV%OoHePS zw9Gt$anDm!2~52RiV(1T-k5G#ePiAZXTghawCEmYu4?xx}wq_sM=amNQvEuLwZcTOkfHq(htekRU79QK` znJ=tk0heAG&hf@>;9*nO;bF!G!86_)c6xY`;dZ&D=E%W|Q^wujXz=8+F72AW(` znK=_*y3AQOioEr!CUjK!MZor39R2_xtpDB)2%Z=3=A%6QYKIu=Bwyn9IP~+C`F9=M z0iCe>(9dUrNsYi^r*2-zn^58weF+d2b>Vf0gJJv1vQGO;hW%T9$R6in@LtzYNPu!r z;<>%6AVzbF>Y;1#@*xxps*Qi!7w(Aw^m`uVz!a2~bd{XGBn#gBiLh4FNJ}#b!)7ns zis7R>-XBgIlifst%>=!V^7$Ne6Ae6$rwHiZlL>CrH?{UwyPh^0x&?S4i*2D%D6c^Z z3+$su%$`Ne!?Mb5X)tS4w^cHHHi7Rg)NgvpmVD~91aulvwY95B%jBBTshi8SNjRQt zYFloQ#|3*Q{%KuvF-@*--;NJotmjvbPBlcF?T3sTI1#LQP2q^VT40N^dlW1l$%i=!0->+WqlP1PQBsSJ0i@v$6 z?Ufyfnedywy=OxUcv%MXPzd9uk}w=i=3qFGI*qpn>O!<*@$%Qmp;N5ea2|Gg(TZG& z$Z+#UJY^g8Tz#9odfDJ9)Y*D(I&tI?z^SN?l*#bzzHHsor9({tXB=skYnW{#;ZhB} zZF7L9i_>RaPK6Km40C)(^BG!qn4k>doGsWE?}ZD|UMqV`CT*t@Y>-|^g?c&KkY?L* z4ZdqvgY5olrAK5@TDm&+Yqov9hA0TwB3`_DP)N|Xtt*L;x9ZC)eWPck`ZFeo$}K6B z7*g?wF_;)%7mEvYwb3xmGrxZG^wWWgE1zb#EWu^wvWy!$y_o)nmwtGf%=i$6rI@Cf z5agjGgrJ3e8yxp|W}KYa10zm1=P#$9raulyK!SQ^f;z@}k=t(A)Wn(DM@igAX`?9{WqdJ7s%2bpIm z)PPhSs;F;4)V1Qk+Jatk;C(8!X5L|>f|^O;?|h|UE9zY`^r>RWQw6dirLQ^1-txB@ zL{FIgubnp3c$8Z@QKJ(e0=C#S^@;@Y^h(K*In>wv`6|~A?z?OUSmCDA1?wI4Op}}U z5eYRuJ&ib*&RDd*^U5|htTUNEoBUwmJ|R?fI&PzU#8EubtkP!9cID*mT%5jAltIh- zL~-r=hv7@DD&B_jy$W|a8BeWzK8E2s-;p|Bx*FdRm6R9rsx_EeB~Sh${->F}oWm=? z%|ijYrP-nT-O3LQTMN^m-gw+sT2%*13fkNRyCR$baTo>rSDgTl{Tx>fs}`e z17@?8xoXB?ICNzB%mXyccT5urueSTtA1W3RF1g&sgZECx-@kKyU*i-DhiP&uaOh;E zfPNx|6+V&!6Xl&kQt$mnTVg8191qdsv_uv}?YFENE)uMpr8%_oa2aArGh#?{8ZGnb zm#9=$e^QvG)u@?R&8nsBNT*mo2GTEPInYlbYdCge6oIlHam+yzA2l4?G4RVpAuZo6 zWs}&P#l(%eV zif(0RRtpzXfFAkgIvqV^Mc;egNKU0Qa|$M3J&UcKfVquo{z%FTE|?eqakMQ?>_lW+ zEKy`MM?vhQ&tE_KAPM#vX(B5H)B2L?`(q1k7SNW#ZDK(E_Q@7zL;?FfrKE}y^K<;p zqbTCaWmjO0!(=zbp|#6R)(N;)^t5`n`qbK1C%12$NND&MzsdO{xo@3rJ^&f$O%flR zW^EP#3&#bP&eJBtSG>+LbXSeZZX-t84hwXE-5P&4t-jPU1KGI>QuBFmw&5P$U3~(c z%)p1FzEF@}yh+tymDk+TswaEKrk+G5`HJ-VWSxmXNUzWLucT+GfdWWf!w}i*f$xSse$jPLf932LW94RGlD^O$^yNWQ)Uc!ttmN{d#xGzo_L_Qs7!cJwIoh@@V7kO=uxqC5^wHc z*MtGiviBt2c_nCd!oF}T8c)v&5ak~l$evmQu1yAEVLl~O*mTpJM#L{G@C4q5a zRf4wS*6Y0b@Zl|OS1rZN?mFm^KicN=MGqJ*Ud=B6yaB7h#g^H#E0h31XOx$xC)8V7 zZ{Wy$IX-T!L6`IQhdL)04b!`v$0pR1rb^5v2Tj>0bj>RZ>j)-~Y_i+5&OF6=rAV0_ z_>6TWT~BOhpsotIvy!ejIJ?sL9n~Yh=vw}MU8>j6L0#(W-~lMLm3n^<%`+~njMo!3 z=Pfnb`yz)Dw|C4tJHINV;PA_t+w76NAkJsLw7v-Z7LOmdzH`K1OJSL4=C=j-;o^{KyxyTXPR zkm-3kjl{07*7}ZN5}63}!-KH4h>h70;cNfUQge1j5;R1+$28>T9f6nTDyCACTH!rh zkN6&h>`!2TFgI^HyYrEOBGKwK@WpcL4??v3K0U7{oD}EI#H;k(gQ%*mU<{a>J3`Hx z!HKXJ_Qcxs-CY6Kj$nwG?_)JLYXrN%URV=16@?afL>~7Y>IDD`qXJ|xc!Ly*&{5bb z{i+mG@ln$_uL|_c$0-ONyGa$5W2uS<;%4A8ki{lwDJCx144Wx`(M#qPlTQJ2<}CW1 z0j%!ujh(`=b3a##2CQcc>&zWp;2WC)hm~cFi^W`A4QnYEyGW;$V$F&M=x0bmG_}LX zhWb|sxR&Oe#1Cc+Al7st)+9vYzf^kWN|VQEX6uJ%hAT6u1%5S3j7pxJ;eW}WzS7Fn<6Nt|Rzr)9%Q4}irAq8Z;mIQy{N^p-G&AESjrQyRi*G3!nr5kjwEz$;xgx;-}W36%>C?$7b~dGF@b z7W->7M>*`4eJ2+?F8Zo!GaN9zl3GX>(WYL@xz9POl6>bvFVvZ|X?hiVT#K-p+N|!S zi?E{5wxac$0pT2>7h+7Sl)bn;t~pq8Xj>ur&GO-xp%+3-+LRbpSSH8@wEE$q;T672 zf!GEg4QO@4!6|{>Gw6)zU`j@4Kx`vgQA#Oqa16!-uwI29G2zUSV7-8L&QL62WCKcF zIPmZ+qKh`lrhcaEuzrlK>EcZ<*AE2BG(EI6f`*-z{k~lC*_A!WlmS!Kg+PW-2YJXF zTkVIos8rC6@2V}bCR}2B?l|P5kib4-V#kMiys{rO8x*$aaQ?*`I9Q+Ogs3$k1pa^1_Vg*T?tU z)~YZyKOP(cSw4|>_%X_qvgUvC;@B(x&Z6UKs&JvYG83eXxL>$h=l<2ZKK#l;_xE6} zScmCNb`6&DSEl!C$n|tbOPFgWLxsT4fc9R>Ev84*YYDo7AEX7T7AZw}pz)xDpm4q# zn1ab{fSE#!Y*621@gen|KYon7;%x0<5^u3lDSZBt9zTue`8~=s&pC8g@EVnl2wYtV zaUZ%RlSA`!UArz8nDB=3JsF&zPKT8(Xsd7yKUTJT)v(wig|2H* z?mhw{`-pmEb`DmTa2PC5gHjSi zR6AS}yj-VZyI0kDbU+mCcf$?R+bQ=WL_8Hc%`rRJbx2qN)%%W4#N(QXzk^}HLPvcE z$q(kVbesECcdc}e9zC#L@N@fTSW5}8x1}aOq{}va6r3)>Xp*u(JL*`r^Z}eP!w5Np z2)TFt571cLI%(rOxW{zUOv*=DRQIqqU9v-5@zQ@#Y*5|v@xqU_SDoWoqMY;?Qv#}z zCe()aX^pRqj9G)QNA$!Tk|ywsS;gwTtx!xXfs`fK0RRP^lh2L>Ah{4o=%B zBOcYYGmcUeh~I=zYrWC^E_P&HqO*@n4z+F)jojb_dXnWAt}yF--nNdWg_UpdC>*?l z7EdU^bNfuEK{y&4_CJm3%mmHtCatUcexcwjmM& zb2wji2;hU>JnWOMK)vk;5_u@dEU0seV!p7MbkULlIL*x4%ER{q6EoOOCvmGGiVkxK z1GW#hoez~yjS;)w?l`!6AzT$lpO@_~3F17%B$Z2UEh7{G<`BYP-BHq;eXM^Wve_pR zTVps1HXHL$v}i&9?HTd0Wj0`(fLl;}A5s{Iz+;8+2fCqTl4MoH4qjI@jCTDp(E5F& z>6rCk5&QtZR5S>;n4xTy=_$rk(iyY;3qV088>|hgOx?1s61*XH5!62 z)&9!kIE#WBrjYaI2E`Gj?6r$&nJkVzW#jO@mnC+#0)}?{kh?`K-`;;63ztXaAtjc| z<#F)w+$y)hyN&2-wVUTac!E9A}-- zgsd6C`v-?^yeZ1C|H4mj2VMI0C8Ab%eu(2Uq9>mISA@zozj^HLQ6guE3YOrsug7ru zCP+Mgi`XG5n1Um|TEgiYAmRGWV|DkAi)Me@`eIA8|F&7M{5}gNG0p?%`HaA z>}}V-ae=!N0?ml*1$*%GW9<6ZBsj%&VpmleqHJ06zb82lS!OCY&rD>BHQNklVwyOa zTSPI)^bkn~Kf6$v)hRd+;jeIe#qWR8`PNJdxf;k;{;it)vX=bKeOo8$`6$|(?-C^b zdeh%V@GwXEU&88ip}!!B1Pl=bF$W8Ab+3PRmH$YwftIQq7IIwtUpQn5`8y`A>62GQ zrM=XnhFny4ifi5(2VjPcWg%xt;r1=5!z@7metY6d&0tzglA(ZqV1>Sk1114+j%Z}~ zqW^C;qGyn$as#LeCZ&f>8#JdIAW7~31 z7*75F5kjUNWU=r$<^_#jkN+azo)R{3-AE(a%6;s9&CL8EnDarm{20Ux|NbAqgoFAX7&{#f$q7k_zo0XI%zo z;`QeIJ1O0OSWa^k@sS`sYH3AOdDM4e0q-E2O;^!Nl7z=VrGUssV-FQuHBR^_OZQc(rqNY@=qOxop(MQ z^urFogZJC{ya1oq91<~LE7KOw94ZQ@vnoC7r7FY*{aT(6;l^K_Zv!CbI*m#|ZAwnv z{}sF@uk2i2hy@^oP!k|-wE@s@oyH*e%Vzz|%lvm##a*4L@WAz3L`%fk=*0d|`UkoZ z5jvT#bbm8k(~tButx~0D3P(-J$w3=jV_q9KO_(>07EP*0AQ-;L2x&`_oz`l0?;_Ab8CSpic9$-0s}*z+C3kW zT)g}nqtnh>k!`q2C$s=%i@4j%XI?TP%2uRM2LDaito#38 z?D$*OChSYZrUkLK{G4e{57LRYU5ax?Qr3(5vnDQ0*+g#$&rM1!T>|3%8Xox0E$qE@lx|QRRj?Q43slqM3d1B8h;1)F#tI$Ri7vb=$MFRpQb# z?DZ=r-(0_fQ}`<6FbeXlbhEEyq5(UG`qRU;H4&&VX- zkM*CP%Z#ln)H&i&s`Zl4EK`Y&juk~+5O1NX3q?|EL?m?$N_Uozl57Z4cL2F3(&Dcl z*omQ$E1IwynlH%5N{Ts4ComOJ&JE2#pUCPJ$dG&>SJf3p;Y9LBV)gAE7qLQ?(aWSp zQ|UUJhPdG5{rFzNo_o0Br2Cj`aJhaYv{q>9F|N^=0%nnS{P>Wh>jVF7T@VT9t783! zJaatl%H!)ayGyjS$&pS%h~tM$%l>fx<}{;JamcwwSC&erW* z!P5Qn*YD1=xijg01e~KZ!-3jKR7(){J!c?1Km6`wyzzOh4&5IsfGYmZS%qSdHdEEh z&WOr1J6~E-;qJ!nrKwy+Y92>su{Cq4*(^Uxr8wIcHE=}@>}@DhvLHnguueL3?@~z6 z>no1}=A5dtWUnv!E!JN!vseEoMAf_>@u>1bhmcjz{ z(&))5_TOdEe}xgHIP{ve4p{UWyidD%krdviIaUK-j%>f-Ip2LV@_tJKSZ&I@wO7v( zXaiS!uS0eo{7JWsTUX5W3@fgSiWA->6Qw9q9bGLV3z{_mHZz`EwivA|BdB;~Ry}gY+;2q~eF3vj=t&{clM5k0!_701TQ_Rw<-LOB9l5bA zYx`3SmIQD+5q&Gj{te4n*%mXe^35tUjoPudD3}F#QV&Hsu&~|BW&RA|X+^J%=h!9a z<&+nZq5Zona`~Lvzn}Q^{DcQ}qNu_Q>2ftggiokJgSrUU;Z<|lKYM49bZF=@!ue#` z(mbOCe$9I%;>4}gMHminJE!D@X!GmafObVm_g(9nI)~$h9qYI{2OAE;)cgC2wTK@| z>o+^AtO6mcGf@FQ5=4Xkr)UA{yHKf+p_@%~CMi1fUyOfVbh-%Y#=-xQOXvkJ%PUe| zz+-xh;HFCaUN2}_UZL^=q6NQr z&B>#Z2Xc%r|7LN_sGPlL1GaLQ?9qX z+HE`D7Ri_6DFp5;330<-I9ZhwNeiZfV5~-8DW&icM|>I%U2_a?v~u1L5BQm+yn{C! z(=I|3#m~{rk&&?}JwW@gdT}pWh<-Vd_bUThpW(=AWUhbm^vHkbi)-ZnpI*XU}W)TM0S$(|Wxnq#%?on`y3f z+cNR3CGPFb<-i~P~=xr0$@#Cn0>v-1i9 z*w^5j%#rgeT7Fxyo?m~%=m6M3)6wr(CQ2Cj4>ZrES3IsgvJ34D6zUV*dK<$Dfethu ze5*iaGS)(<%C^egYK^Ad3tXeENPPap3ZfsR%i9CrPk*3@O+QB**wvd7i)UYm33D4P z`XW4kPJ1X^w30?I>}5?t_|r0gt|CG;7RDI%X&{ML=Z{b3`vcBjB=g2U^29Il#Jlsb zT|8k%$k)YRD|J&w4o3a@_BJQY4?N4V9>RW7`d*3M#Qz&T$LKghgoRGWal$#Q)zz5Q z>;4zsw_<>P9A4UeWCMU%%k$8iCOWkYVMufnra@Knn*agJ3OrfWXuae$2SjMAt3{mY z82-tD$%iT~pyTg+RIj&?bR4$lvH=7)4wp6ICl9XGK09g}S{-~r(!TM&nvk0+x%p+X zfP*&_m{LX4UqVA))ZMEKkf^f#DMJHMa`*Fs_6IVi4vIdk;2X@QAlbQ4q+=RG+}UG} zU8CD&{wm531pPs*>_53J%^%x1tbY?och$FX4vlwR)CN+izsh8|pjMp*!1c1DleJ2v zbvDBEZd7clkGr6|Smmz~z05vOdHG#?%)eP-q|b(Xed4VMrRa6lCzF%jG|R^k1B~(G zjsoAFz|O=5)?g7YMwKR#d1A}ww@0g%)yC2y%E?YWB6yDG(aAQ&>^@6oCB%Co9A*-X zqT&ZCHiXN2?yQJ}d30mBG4wrg8p}WN`twcA;M%hv=||r~A8p|9rprZrLUpJTr<1$J zP=1IYoMBMS5X_T{KYJ z3bw{{{FP&9(1*KhwId{s;op|d6}G!dip2X}#4DaS`4XrYDpo@q&YFFS zo#s`7Je}Zk?gSM1yA=^G(9-g+dwcVEbCdJC-9q1FuGr=7N8k8Jj*Gimx&K~J6NBya z%j*dVeyEYi{H;Gs5zZK!US(|nVf=_ecaIM#1Xg8&JZ_kI@%-MA7Q0-8g(9q&g9(c}f#vLB92 z^TR*BofF;PE~q-y>aFapn%gH~XD;}j~*3z)M_e!Z*9N0w_qiYs2x))ivnY%y#s&7i4x79vj1uIH! zEboOXl2kway#pWOA+WQuqPZ}FPGJY47@N?+*X9D5rLI94(yvS~z;BtYVs2}zO4r^}%8ysYW3h}xQ2yNT`VxDH{T02KKCQ7<-IO=i z_s_e#3EhY4nIg1x3UeCiP`5d{1mK2w8Y_E@Xv_rIlR9*tY1h=Ey&Ml~S3tA%m;_ zry2LmX|IJ~`%{-hR#0v8QnUfb?ia%^4r1_n)xY1^ug4S8pG|7^+#$@k?xX%)Bs5H%>OGP}6EyRWt(iaGx9FM0Oil_JcpWZugb4`gBfzkU+zR?wx>{FcF6X(JYP)~9kXOq79I0t5Sdd1(aQ+ zlFxPF*}oVFk7uA0qZ-&ut?!+c-nCGmZoR%nhC&oOO>D1ep&qLvzP+q8>ek&MN4(C| zbZB`7+^oIN5`RLT{FXlpCD)V$cuP6*Z}JF*eXX+y$k*J7+83zOP6`2`T;1E0{t~e^ zy#|$~h$x*=jr9%%|Gq=9TST4-?02|;$zB{Y^5m7g#uisPl2F1m{k&-;GVKu}b`oqZ z9RAxC9B{HH#z;WM96?&-^rZ-%HD=4?qMyw5HzvV>QT1kXO(RwmYj2U4Yc7xWfpPWw zN44nmTZUqP*bQ^hDOZbQ(J5aGQCS8hUL!b}2Kd-^R3*bIenOt(*pyA}<*Pg&xo8n{ zZK1Agew1mG4L@nBu@<;kq_{}3M;}Qg_7hNWQ4B_cc(`LDm?aSovzhp-S9 z32`oVZlatKGj|EIw+d$$b6xaY+lT9i88~M+=X|i%OpHuaWFpV>5LYQAa%2o{Rb`Gg8%c*UT-NLo+njv5Ov$ zW-aPZf}okB>L^FDfZM|9-09kHQtXqpL*$jeZX=`<2Gm=nqphk}Dr1jJPGYr;I7Z_6 z3>oN17!ndqMJuC@b3AFD242-G@Q6U;2tz)X=A}vqF>~g9+fJ9jnLM){ z``~6^*uc^bRH;y8oI#D`FM5{h`tK6_*|1z1qq8zx;-eFE4HERTRt>UcQ}_>M-&GI? z?{=QtC9GqXuEp&0mqB$gK}HR$YU%NkZSzoA5jQm9hB^6OX-xfCzY#g|aO4hLu*R^w zXDM(9u?P>s!g&o6TbJhz;tpvdwgM;D;5k2vzmX%s_+K{*P6@Jjnq(5$3a;UEVo}bn z2!6{HVSvGd$D2U}kAxh&w)wQ<6Z`1mGvzb&SRn|^R2Lv9fS*3x@o5xHBY;ii`1A-p z#f*DoGLmPk$Y;&YqOm_{X;hmyd2Fanj(=r;W$%{dmg|;dX|rmMkmxz=G2FL}zPq&> zdue@TcBRJEn`$$f*v5{T1iPbpg?@$Z*48kuNlwV9l1yXN_z?IIILx@lx)v8ZTw`4J zef;~_GPOw(VM@k8!|vWL!UNBhlmqB{=dw+seHJzo>7~)t&xg|QJ-o(ZJNj2~Y7B|$ zos&Bn2}VwF7A2>%A09A|s4afdmX}qP#g^T$9ErKLKL)TV5mW}Mbs2^@H90l$>aXan z5KEOt&tkbv<5)z*GFkYteRZF;DaEerOg0*c-Ya#R%?Y&TGvhPDnq`@-3N#z3tAt-t z*QaAjRvRiY5_33Wvj~W`EUi?=rkYi^2%DH(H1;&Ru6EXV3g=hOa$2lkE~*~I7A|p@ z!me9dIXUfxYRX?(svl~dJ~ddjLM(^G$~h@M_UXlX!twZNm*JV_nZ`8RI`A66G)iEJ z$lkjoe4-JtHea{U6%lf)b*m*7$Tv%1BV9>YosWgMRCTP@>&P=S%1ltPw-ANRa-4sh zA0hpu_QYin$+wnnGhBta2pb`OB6_Q^#q>nS(|6y}GOKOzjOn!YUK><+dNwsSHJaqP zvsjXte2%Us!v3rz-w})`%A}8h3_upSE)0f(g1N^WfcV@21qSo@+2J!ZH5Zh`&(z#j zMHk~aEf+l(pZv3D1IBe=IX@q##cn57*9h}omX=oQ%7l&1tHLTVN zH=gfO_sV-|=O-IWX?LA2foJx{fgb)IoM%BEK^{C+U7nqusazYa8?U3w=dl}RqtEB! z8}HTe2H6JsXykd(xtNLfz5JIhE{sAf?A?SgxF~7cAQ5A+-39~FHBsj#5Vc%xgH9n% zQE8KcR-v^WV$l*15nF)|$bb!UFNQRXIm~(NM=1iiYbGdtnn6;Ng;(q{1hQ%JQ4|+O zn>Uwakr#z9OUWot849xrx6o)5shO8q=JP8N4kDPhCNnU|6Bdu{1RPq_NNAUNDG3Y~ z&nVPrIs*lYXDUOoVUyx@yCIMA2c-f~=EpP>)@lW*V7y{_(g_;)T>b}Zt2h%rdgo$K|0 zb?^t{bN%z|?=-GdNknT1q%bcqN@Lhcp<4luFd$;wNML_b2X37iADuzy7)%lQ@$=AscZ#X ziGS|FAOM(mw^6qghVp93RVIKXb$vYaXrwUj;MLW(y&CD6^NMX$(wPOD4h%>pRZ1A6 zA74An-51#BIbVV;dvoFgMD?us%xmncKk~1@W@*kbJuQ(|)9IWVJSw(8^X)6XpfCEY zb!fIUH`q^lY4zt4-4}}3;o+c!E%;Qn4V9DylXa9C(d7ILf8xjD;yf)N-ft&rV%4KYO)m zD@%+(+DDvlPZ#{0p1QU$7CDj&Th42K@Mdf2x?cEhl7L3c(fZ5FSD59EJN@QHv_FbJ zd(CKB-N>tM)7l*-=KxJ}?m0#0H;UJs0~TA@JOd1+p38&>@MD7kR550n(kaIRJxjmc zVx7Ba!Q0%vW?ob#;R%&9{Gq=|v3{Gs#X$PSte8N>l@V;eB7R2Yz0%m!po+eCTbP&Z z&o)_~2Llz%7DK{uv$YExxaZ|EmyaE@=Sj>hk3@Y@>r+P8;_m6M6T|y`1KzAE_hyoi zuP%9!#{S)#%KFwxDTHATmv{r{1cARO(ns^Hq2!`^O8aJ>Htws;onMx7bOc|K#`8_! z24tR>+#wd+XYH=uYA_phrEX9$7Ts7!1T8E}m@5&WW~V^I-=VvoI>^5pOKx z&U@{S*5qxUnV$6_2yc2GNj!5-v84Fubza4N^cjvguJ0cEG$(u;Ck` zJ^#KeA8l(%(?rOL7jH~C<+1hV=QzDDBk#*vxSY7g`x8O$kA3S?d{)TK4JLF45$9qW z#9LEp7rpsaDB*G@WbU!e1Im>b2PG))Nl|sOlxH?^r1NS(yFk2R? z#StLAQl{3xn$`CJ<2~Sc4^EihgSqzrc}rYXJc3Z~MeiAkcvHv@d7~#jSPFfk-p?*5 zpdr6J+#|e)Pb{-9++Un2^cB(bQ8YO`De>ZBAKe|lYFg=C9`!}Ru1#8~P4gRB4|PRoOpkd*fMdW0+ z`}Lf{vJOi_Tb`XaUB?TX-;+hNk_BDnF9Zvr%p8tz(B<#b$?g zE=i*_f$=9Ahckw;mNwSA*U9B4srQwLRd0k`SF2`rw2MV|tAUF}z4s~U5KoY&I*xuM z!8XJ8U(sLFe_3mS+WJk>`|W*vKCB$F?i@0GWkJewZiC@&ydP;2oro@N3Ghp0JJraSk$m~(fxyR3v&ZJW670%Gc)Nl%Ek507p{ zzYBl}Ck4VQFwf_!hTUN%;jYt#TKt;x?VJlZ(3rZK_4;p0?r0~&&&5cL<2YdGuumey z;Cd+nM(#zp3|cDs*+y}L?!T>miDOwv36E23DGdI#DWF;3B9v^qw4f@#ARe>LlRWGBP!ngW=^IO8Z< zx4Nm_khH#YmM1%NIdhq=pIVAwKfAdl+2OY#96i0eC4K$j@_~+PA7AJpsHKbYA=u?J z8R1Q&Lgii19i+LyF21n#iP_Z~&@)jIm(>S6xgAVK*N41Z5LGo3ns)p%hA9{1C; z<(FeYZz5wz73xCvLK)5`HLE<<8d0k(g+q=S{0)3_$jP@dFY)9wbBf7h zfCtiQ@hu>55p+vB^3e&&457G-(?bM5H<&w*H5a_MMwa~^{OB`639f`BSm;9>j=wKs zJQT^-&s0Dpd8&1FW_<ZTN5F1hv8*&N@ata%g1q(7B-KIxT*QuhheN}G-+M{j;wKj1E*7+w}Fj(ex z&lfB*VZi}hJ$Om6cNZRG7al^TpE55N67Kgc+;3nL@dC1k1&n+?@g?t*ZDrn4G$rxn#>;&NUuPtoNZ5xrr>tM~od~!>!G<#X+R{aE%MAxvRP5 ziEfFcxgDHA6Qy5rG?FIhKJCv&#JRM%@Eyai!b^C^x}aLRfOty2a%V)-;|VuvYcq5& zL;j8pw`;x2yd%22y?7+@WS_hd=M1%ra*ram{5fj!y9)cDb5+-d(VlM${%iPGz6^j| zkGxGi2i^t5)A!z1I5EByz}SWMd$Gkdje8a$?&{0&F_?WKCHNWw(yF&3T$9t31>v#1 zg9}Q$;_TCzfxo~-YY^M~-lr!ovH47G==Z%0cYohqC9xJ(u@=Wa`^~p=a&b$P*wGpj z?r9e8iOqD(0~20_y%lHkfUy9mh7myW`YE&#)QQ+}3wxI%Q7=$Vg+hQt@FS_OD@rlg zPEsULT$`vPI5xZXlLg8&eN9RXmJSM*n!*oSNF@FO1OPAN4pwhNM_hM1f@LUVvMX92 zXG}L|4A|#yLi0ot_CIlclSFhx#$`In<6IaS%mWC>u#P44k0o@EB@B-xz?_@?nft)E zep)CnLLX3kVtXG-`*TPm&&Z%fm(JKg_WLM77p|{wgej{fbxC~A)pN<8q ztGded{|{ep85GACH0}n6;K3n4fZ*=VCTMVX_XM}aStPi-v$(svy9al7cU$bw@4ffE z_sgwYb$a^gK4-e7YImk)&P?}NymmF(vh7gMmpYc?Wt}<8xvpG+OxyY1OZJbJKX?57SQUHN9r|5xq;xAYZLJLbh!)Wc zQ#x*~b_{X7uyZt$Sxu0rDXQZ6X0gogD4|(Np!ejbS-B@?5LXswGbWw0R~Y2^y5z2< zX9mYxM1EAYV!blT2w*kea!cwqopIPP`@VS39rZ+Rl)x3BjsY{HsoM;jMe+wscc;AeEHhIT+Q5PuDqULDPH3=qL-%Y)4YlN3UkjIY+Z?W zQpxi+NE5cnzx+-IlD?_;lm=6PMLyEIjBIA&ZZjaXwIh`t`+ZzLSD(#R_c~90?Sn1f zJhD5FqAqnoLS7V{t$<`V6vV`F|ehf?;peP8ZgQNrN6&TAYMi;VY$Kud_ZKJy+#D-ZB2HwTv^{s*`P`k6@~U<&^>w{>$p+)J*ieg#T*F zlg;JE-Jp{++t8h3zvbCDf7iVMPTip5-0@3!yWGPJ)?EhTD?+Y&&iTaSC5l;YNYlj4 z9ljUx{`|(c;Ey*m$6F^sAuUI%`JsRBPtqxAw@R)FQ!y*wsIhl4APP>*e8v;X_j)83 zyz+2+8Tqc@i7U^Pr;4ou5(j|2BK-vxz4t=m0}~UVyRQ8*@sfMw;bm^4dhgC;Tvd#8 zT^S#AUFo_o^mw>%#ur=^*drY<8tof7PbZcc7<0OniX z&LWne?&KX#`CG#s+I?3##e%TfOhdp#ZHf0o;62)~phI`%{!82$?_1#1{HR^wVO#}7 zuPT?66_RtXU;8RHIj??Hh(TDQF1jOEQ!y#m-riqkZ+m{w_U6*~HL~@2HnW1^Q1fA? zS!{{y@j-mdz0j~fr^-BDKDjYiP-=3s{Kv{Gzt^L-d2d{8qzomTZ+dq!imikOMpN^b;yqTVWCO3TV7)u|hg=vO+|`=8WS0Jn zYpK$*IC1MV_ozGW_xeqsP@9z?JGo8FcApj06v-` zzFp~OaO>XaO_n8!(vK2S`=`5iNZjAqcSiTZG%;-R5-x+1a%XcHvbHHPdN=7!9lsA(ortmaj>8jsCQNpW`Bx_|blEqbvP^i7E_AJWc`0AakvjSvYCl&~qZqX}{k*b#Eo^un zSy_Ct)J%)en0lUgpLJ$?D87`oEz~JR#r zAIEACtyALL@%XY_N4thValolH5X-AMvVAEFut5L#2Z`OtyEna#Yrk_o%R<0$ep7{7 zZ;hr&7wh)>A}#NrV>olt!EorPk#FhY7Yk9KCUpT@=J4xU?;!5cP&JHzGAPS-;Ubw= z22e)IP8QEcBVRvd-em&_xnIw|7Tur_ZO(`qsQwkP9r)-~dDj+%Z- ztdjZ{Q6~5BsdNU_1laOZ4X>0QwbrKICjUSq>D=u^$Py!>0bV=zcZ*_SF0Xh-#0|sEfqVTud-OYmN8c&SG^emB351ItjPNG_ zpGy269jm5H0dQNDHDf+3#R%6Lr?%f}nMnxa=68_BH{5BatAIzp`(WF?#yWLRW>D6v zQMHB)LcdaVJlfI-+F@0O0riw(E{jAe&VDe?zD{eb?(nsS;e@$rb8v>Kxh7QUNPl&S z4s_`VWi?o*X05+tM5?;7y0Ts>)n%`YBNt+3ia*C)n#ewyVh&_2v7NsYKN@ctrfJvY zZbh=mnOl>!pDEXlSWg2sw)W^+-f_9xs_ExGnBB3v+s^ljUyQr=9ky%AH$AUX%*ToE zj1wAhtd}YN2j(Ae^#Q3?A5i=s{O5W40EnJ*g1p9PcuQK@Ai?Io`D!x-x7nmfNPCNgL8_X0r=@*ts24dfdmBMkVj@@A1j!==TU=1aAu7 z$*wa+l_8B0kW|;f4_FfSk{!F-xH7wqU_Vq;6Ot>QAp2sdvSdXcPeNymARaX?ho*|CTB|I~DO`U#rm&`< z+iF$xv&dJMX_jTSkBQU**TPyIsUE4m+A?rCV4`*sr5+tvWf{bT0<1d;VA0tc?`4E*%inbG5cBTGo2t*K#A z`S5w?2;kUyTRSbEQXbO*!`f#K>y`$?<~NoNu_ z9dBMPD&y6S7)f<(SJZU0VWqR2IQ!4dF4y-op=(daG||k=M9b9g)hZ3qYd;u|#0`Ga8~m1M3G%r5BinumMfVeZ zTR9f;ueYcffWd`|SW2_@xr}FIliQ!Y9M<4GrE9e$xY$fJcUcX1g3`B8W${f1OCx#KcN9pFbi&580K@d~F)MT;Sz?P?2cI)m=rf!0<2XCs6txyy z7&!kc%b8gGj4yl{h+l6BQ(yS)g|DiWtIC6H|F3+xd~wKK${h}8eFuChw=oCaj~hr8 zs?Sj@tDrBdE=vJ5OFy}nUt&K^qaN4NE_3ud7(T}Ik;nz6$ zd!tZ$0H0S34gJ9CjxWYue+*u^t2UsoMxm}cgI=MU^aJfXQFcILn;khL&Yx~8dk*y@ zraI~V0U{={?iH2U;6(cQ2Va zvoG#DJLYw-ehO=bV%^t0aeUG}xp{m&c6@q0zIn_zc21^-C_5ft9!S=(Xrtu19%!0> z&o~Qr5Ld3b@ncUU(Vs>gt@$g@E_m;epzL^`z{_n3T)MkfVBQ z>9ET}lVy>A>%6WsCOfsF!T$HW)l-`SQJ1jRfLIoGYs%5JeH)1g{?!fIrM08;JQa5J z>;bQHAt}d)*5~3Bk1j!<24W}l9KoPf5kyjFbPCTtLE-T=z$!rDnw6GDb9p*@e>#Cl zGkHs($Arx5v&pYOT0Lqh)R#Uk%#yYyvQ*5nLuQGS*a7nr#*QC|<*=#1$i}AgsI;tFt84AU5J$ zL+o~~s!?H1IQrZr4bgJ;nue_t?v z4MMt&MjsJUQ4;!2Ds1^Y5_F{t8I@3&_{95(Qh<(B3@K`OkcRx7@jXI|Bq@qw9P1is z78?FXN+6ViHH(jVamQDtAZ5W`7#d;$1MG> UgDj&Hs&*J4lPoC(Ie_&R4-4g#mJ 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%0DI5Io8R3;DP;wEm*DVjsJB$Tdb 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ΞzR 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 & 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 `edb{6u2t&?6qLOpYVaSSvA%`KyAx8xf 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 U{ar0SOMUINi&lndZ`S^Q0XBLEFaQ7m diff --git a/guest-client/guest-client-3.0.1/guest_client/Makefile b/guest-client/guest-client-3.0.1/guest_client/Makefile deleted file mode 100755 index 5bccc9fc..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -SHELL = /bin/sh - -## Configuration Directory Variables -prefix := /usr/local -exec_prefix := $(prefix) -sysconfdir := $(prefix)/etc -includedir := $(prefix)/include -libdir := $(exec_prefix)/lib -bindir := $(exec_prefix)/bin - -MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) -CURRENT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) -BUILD_DIR := $(CURRENT_DIR)/build -CONFIG_DIR := $(sysconfdir)/guest-client/heartbeat -PACKAGE_DIR := $(BUILD_DIR)/package -PACKAGE_ROOT_DIR := $(PACKAGE_DIR)/rootdir - -.PHONY: all build sample clean distclean package - -all: build - -build: - mkdir -p --mode 755 $(BUILD_DIR) - @(cd src; make --no-print-directory build \ - sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - -sample: - @: - -clean: - @-(cd src; make --no-print-directory clean BUILD_DIR=$(BUILD_DIR)) - -distclean: clean - -package: - @(mkdir -p --mode 755 $(PACKAGE_DIR)) - @(echo "Packaging guest-client.init in $(PACKAGE_DIR)") - @(cp $(CURRENT_DIR)/scripts/guest-client.init $(PACKAGE_DIR)/guest-client.init) - @(chmod 755 $(PACKAGE_DIR)/guest-client.init) - @(echo "Packaging guest-client.service in $(PACKAGE_DIR)") - @(cp $(CURRENT_DIR)/scripts/guest-client.service $(PACKAGE_DIR)/guest-client.service) - @(chmod 644 $(PACKAGE_DIR)/guest-client.service) - @(echo "Packaging guest-client.systemd in $(PACKAGE_DIR)") - @(cp $(CURRENT_DIR)/scripts/guest-client.systemd $(PACKAGE_DIR)/guest-client.systemd) - @(mkdir -p --mode 755 $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)) - @(echo "Packaging guest_heartbeat.conf in $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)") - @(cp $(CURRENT_DIR)/scripts/guest_heartbeat.conf $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)/guest_heartbeat.conf) - @(echo "Packaging sample_event_handling_script in $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)") - @(cp $(CURRENT_DIR)/scripts/sample_event_handling_script $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)/sample_event_handling_script) - @(echo "Packaging sample_health_check_script in $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)") - @(cp $(CURRENT_DIR)/scripts/sample_health_check_script $(PACKAGE_ROOT_DIR)/$(CONFIG_DIR)/sample_health_check_script) - @-(cd src; make --no-print-directory package BUILD_DIR=$(BUILD_DIR) \ - PACKAGE_DIR=$(PACKAGE_DIR) prefix=$(prefix) exec_prefix=$(exec_prefix) \ - sysconfdir=$(sysconfdir) includedir=$(includedir) libdir=$(libdir) \ - bindir=$(bindir)) diff --git a/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.init b/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.init deleted file mode 100755 index f4cc6df0..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.init +++ /dev/null @@ -1,183 +0,0 @@ -#! /bin/sh -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# -# chkconfig: - 96 96 -# -### BEGIN INIT INFO -# Short-Description: Guest-Client -# Provides: guest-client -# Default-Start: 3 5 -# Default-Stop: 0 1 2 6 -# Required-Start: -# Required-Stop: -### END INIT INFO - -# Assumes that LSB (Linux Standard Base) scripts are available. On Fedora and -# other Red Hat related distros, the redhat-lsb package is optional. -if [ -f /etc/init.d/functions ] -then - . /etc/init.d/functions -else - . /lib/lsb/init-functions -fi - -# LSB Exit Codes -# 0 - success -# 1 - generic or unspecified error -# 2 - invalid or excess arguments -# 3 - unimplemented feature -# 4 - user had insufficient privileges -# 5 - program is not installed -# 6 - program is not configured -# 7 - program is not running -# -# LSB Exit Status Codes -# 0 - program is running or service OK -# 1 - program is dead and /var/run pid file exists -# 2 - program is dead and /var/lock lock file exists -# 3 - program is not running -# 4 - program or service status is unknown -# -RETVAL=0 - -# Update binary location and device to be used, if necessary. -GUEST_CLIENT_NAME="guest-client" -GUEST_CLIENT_PIDFILE="/var/run/${GUEST_CLIENT_NAME}.pid" -GUEST_CLIENT="/usr/bin/${GUEST_CLIENT_NAME}" -GUEST_CLIENT_DEVICE="/dev/virtio-ports/cgcs.heartbeat" - -if [ ! -e "${GUEST_CLIENT}" ] -then - echo "${GUEST_CLIENT} is missing" - exit 5 -fi - -PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin - -case "$1" in - start) - args="" - if [ -n ${GUEST_CLIENT_DEVICE} ] - then - args="--device ${GUEST_CLIENT_DEVICE}" - fi - - echo -n "Starting ${GUEST_CLIENT_NAME}: " - if [ -n "`pidof ${GUEST_CLIENT}`" ] - then - # Something might have started guest-client already. - RETVAL=0 - else - start-stop-daemon --start --background --make-pidfile --pidfile ${GUEST_CLIENT_PIDFILE} --exec ${GUEST_CLIENT} -- ${args} - RETVAL=$? - fi - if [ ${RETVAL} -eq 0 ] - then - echo "OK" - else - echo "FAIL" - RETVAL=1 - fi - ;; - - stop) - echo -n "Stopping ${GUEST_CLIENT_NAME}: " - if [ -n "`pidof ${GUEST_CLIENT}`" ] - then - killproc ${GUEST_CLIENT} - fi - - SHUTDOWN_TIMEOUT=10 - count=0 - while [ ${count} -lt ${SHUTDOWN_TIMEOUT} ] - do - pidof ${GUEST_CLIENT} &> /dev/null - rc=$? - if [ ${rc} -eq 1 ] - then - echo "OK" - break - fi - count=`expr ${count} + 1` - sleep 1 - done - - pidof ${GUEST_CLIENT} &> /dev/null - rc=$? - if [ ${rc} -eq 0 ] - then - echo "FAIL" - RETVAL=1 - fi - - rm -f ${GUEST_CLIENT_PIDFILE} - ;; - - status) - pid=`cat ${GUEST_CLIENT_PIDFILE} 2>/dev/null` - if [ -n "${pid}" ] - then - if ps -p ${pid} &>/dev/null - then - echo "${GUEST_CLIENT_NAME} is running" - RETVAL=0 - else - echo "${GUEST_CLIENT_NAME} is not running but has pid file" - RETVAL=1 - fi - else - echo "${GUEST_CLIENT_NAME} is not running" - RETVAL=3 - fi - ;; - - restart) - $0 stop - sleep 1 - $0 start - ;; - - reload) - pid=`cat ${GUEST_CLIENT_PIDFILE} 2>/dev/null` - if [ -n "${pid}" ] - then - echo "${GUEST_CLIENT_NAME} reload" - kill -HUP ${pid} - fi - ;; - - *) - echo "usage: $0 { start | stop | status | restart | reload }" - ;; -esac - -exit ${RETVAL} diff --git a/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.service b/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.service deleted file mode 100755 index 837a617f..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.service +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -[Unit] -Description=Titanium Guest-Client -After=network.target - -[Service] -Type=forking -PIDFile=/var/run/guest-client.pid -EnvironmentFile=/etc/guest-client/heartbeat/guest_heartbeat.conf -ExecStart=/etc/guest-client/guest-client.systemd start -ExecStop=/etc/guest-client/guest-client.systemd stop -ExecReload=/etc/guest-client/guest-client.systemd restart -# We want systemd to give guest-client some time to finish gracefully, but -# still want it to kill guest-client after TimeoutStopSec if something went -# wrong during the graceful stop. Normally, systemd sends SIGTERM signal right -# after the ExecStop, which would kill heartbeat. We are sending useless SIGCONT -# here to give guest-client time to finish. -KillSignal=SIGCONT -# Exit code of 6 indicates it is not configured and no restart. -# if /dev/virtio-ports/cgcs.heartbeat is not found, guest-client -# returns 6 on exit. We don't want to keep restarting guest-client -# if it is not configured. -RestartPreventExitStatus=6 -Restart=always -RestartSec=15 - -[Install] -WantedBy=multi-user.target diff --git a/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.systemd b/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.systemd deleted file mode 100755 index ba688efb..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/scripts/guest-client.systemd +++ /dev/null @@ -1,171 +0,0 @@ -#! /bin/sh -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# Assumes that LSB (Linux Standard Base) scripts are available. On Fedora and -# other Red Hat related distros, the redhat-lsb package is optional. -if [ -f /etc/init.d/functions ] -then - . /etc/init.d/functions -else - . /lib/lsb/init-functions -fi - -# LSB Exit Codes -# 0 - success -# 1 - generic or unspecified error -# 2 - invalid or excess arguments -# 3 - unimplemented feature -# 4 - user had insufficient privileges -# 5 - program is not installed -# 6 - program is not configured -# 7 - program is not running -# -# LSB Exit Status Codes -# 0 - program is running or service OK -# 1 - program is dead and /var/run pid file exists -# 2 - program is dead and /var/lock lock file exists -# 3 - program is not running -# 4 - program or service status is unknown -# -RETVAL=0 - -# Update binary location and device to be used, if necessary. -GUEST_CLIENT_NAME="guest-client" -GUEST_CLIENT_PIDFILE="/var/run/${GUEST_CLIENT_NAME}.pid" -GUEST_CLIENT="/usr/local/bin/${GUEST_CLIENT_NAME}" -GUEST_CLIENT_DEVICE="/dev/virtio-ports/cgcs.heartbeat" - -if [ ! -e "${GUEST_CLIENT}" ] -then - echo "${GUEST_CLIENT} is missing" - exit 5 -fi - -PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin - -case "$1" in - start) - args="" - if [ -n ${GUEST_CLIENT_DEVICE} ] - then - args="--device ${GUEST_CLIENT_DEVICE}" - fi - - echo -n "Starting ${GUEST_CLIENT_NAME}: " - if [ -n "`pidof ${GUEST_CLIENT}`" ] - then - # Something might have started guest-client already. - RETVAL=0 - else - start-stop-daemon --start --background --make-pidfile --pidfile ${GUEST_CLIENT_PIDFILE} --exec ${GUEST_CLIENT} -- ${args} - RETVAL=$? - fi - if [ ${RETVAL} -eq 0 ] - then - echo "OK" - else - echo "FAIL" - RETVAL=1 - fi - ;; - - stop) - echo -n "Stopping ${GUEST_CLIENT_NAME}: " - if [ -n "`pidof ${GUEST_CLIENT}`" ] - then - killproc ${GUEST_CLIENT} - fi - - SHUTDOWN_TIMEOUT=10 - count=0 - while [ ${count} -lt ${SHUTDOWN_TIMEOUT} ] - do - pidof ${GUEST_CLIENT} &> /dev/null - rc=$? - if [ ${rc} -eq 1 ] - then - echo "OK" - break - fi - count=`expr ${count} + 1` - sleep 1 - done - - pidof ${GUEST_CLIENT} &> /dev/null - rc=$? - if [ ${rc} -eq 0 ] - then - echo "FAIL" - RETVAL=1 - fi - - rm -f ${GUEST_CLIENT_PIDFILE} - ;; - - status) - pid=`cat ${GUEST_CLIENT_PIDFILE} 2>/dev/null` - if [ -n "${pid}" ] - then - if ps -p ${pid} &>/dev/null - then - echo "${GUEST_CLIENT_NAME} is running" - RETVAL=0 - else - echo "${GUEST_CLIENT_NAME} is not running but has pid file" - RETVAL=1 - fi - else - echo "${GUEST_CLIENT_NAME} is not running" - RETVAL=3 - fi - ;; - - restart) - $0 stop - sleep 1 - $0 start - ;; - - reload) - pid=`cat ${GUEST_CLIENT_PIDFILE} 2>/dev/null` - if [ -n "${pid}" ] - then - echo "${GUEST_CLIENT_NAME} reload" - kill -HUP ${pid} - fi - ;; - - *) - echo "usage: $0 { start | stop | status | restart | reload }" - ;; -esac - -exit ${RETVAL} diff --git a/guest-client/guest-client-3.0.1/guest_client/scripts/guest_heartbeat.conf b/guest-client/guest-client-3.0.1/guest_client/scripts/guest_heartbeat.conf deleted file mode 100755 index 48eb41be..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/scripts/guest_heartbeat.conf +++ /dev/null @@ -1,116 +0,0 @@ -### -# Copyright (c) <2013-2017>, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# 1) Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2) Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation and/or -# other materials provided with the distribution. -# -# 3) Neither the name of Wind River Systems nor the names of its contributors may be -# used to endorse or promote products derived from this software without specific -# prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -### - -################################################## -## Heartbeat health check options - -## This specifies the interval between heartbeats in milliseconds between the -## guest-client heartbeat and the Titanium Cloud Compute Services on the -## worker node host. -HB_INTERVAL=1000 - -## This specifies the corrective action against the VM in the case of a -## heartbeat failure between the guest-client and Titanium Cloud Compute -## Services on the worker node host and also when the health script -## configured below fails. -## -## Your options are: -## "log" Only a log is issued. -## "reboot" Issue a reboot against this VM. -## "stop" Issue a stop against this VM. -## -CORRECTIVE_ACTION="reboot" - - -################################################## -## Heartbeat event notification and voting options - -## The overall time to vote in seconds regardless of the event being voted -## upon. It should reflect the slowest of all expected voters when in a sane -## and healthy condition, plus some allowance for scheduling and messaging. -VOTE=8 - -## The overall time to handle a stop or reboot notification in seconds. -## It should reflect the slowest of all expected notification handlers -## when in a sane and healthy condition, plus some allowance for scheduling -## and messaging. -SHUTDOWN_NOTICE=8 - -## The overall time to handle a pause, suspend or migrate-begin notification -## in seconds. It should reflect the slowest of all expected notification -## handlers when in a sane and healthy condition, plus some allowance for -## scheduling and messaging. -SUSPEND_NOTICE=8 - -## The overall time to handle an unpause, resume or migrate-end notification -## in seconds. It should reflect the slowest of all expected notification -## handlers when in a sane and healthy condition, plus some allowance for -## scheduling and messaging. It does not include reboot time. -RESUME_NOTICE=13 - -## The overall time to reboot, up to the point the guest-client heartbeat -## starts in seconds. Allow for some I/O contention. -RESTART=600 - - -################################################## -## The Path to the health check script. This is optional. -## The script will be called periodically to check for the health of the VM. -## The health check interval is specified in seconds. -HEALTH_CHECK_INTERVAL=30 -HEALTH_CHECK_SCRIPT="/etc/guest-client/heartbeat/sample_health_check_script" - - -################################################## -## The Path to the event notification script. This is optional. -## The script will be called when an action is initiated that will impact -## the VM. -## -## The event handling script is invoked with two parameters: -## -## event_handling_script -## -## MSG_TYPE is one of: -## 'revocable' Indicating a vote is called for. Return zero to accept, -## non-zero to reject. For a rejection, the first line of -## stdout emitted by the script will be captured and logged -## logged indicating why the event was rejected. -## -## 'irrevocable' Indicating this is a notification only. Take preparatory -## actions and return zero if successful, or non-zero on -## failure. For a failure, the first line of stdout -## emitted by the script will be captured and logged -## indicating the cause of the failure. -## -## EVENT is one of: ( 'stop', 'reboot', 'pause', 'unpause', 'suspend', -## 'resume', 'live_migrate_begin', -## 'live_migrate_end', 'cold_migrate_begin', -## 'cold_migrate_end' ) -## -EVENT_NOTIFICATION_SCRIPT="/etc/guest-client/heartbeat/sample_event_handling_script" diff --git a/guest-client/guest-client-3.0.1/guest_client/scripts/sample_event_handling_script b/guest-client/guest-client-3.0.1/guest_client/scripts/sample_event_handling_script deleted file mode 100755 index 3113999c..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/scripts/sample_event_handling_script +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/sh -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -MSG_TYPE=$1 -EVENT=$2 - -FILE="/tmp/event_timeout" -if [ -f $FILE ]; -then - echo "File $FILE exists." - logger "File $FILE exists. Run slowly to trigger timeout" - sleep 300 - logger "$FILE induced delay ends" -else - logger "File $FILE does not exist." -fi - -if [ "$MSG_TYPE" == "revocable" ] -then - # Vote on the proposed action ( 0 == agree, 1 == reject ) - # Take no actions yet. - # If no other parties have rejected the proposed action, an "irrevocable" - # notification will soon follow. - - if [ $EVENT == "stop" ] - then - FILE="/tmp/vote_no_to_stop" - - elif [ "$EVENT" == "reboot" ] - then - FILE="/tmp/vote_no_to_reboot" - - elif [ "$EVENT" == "suspend" ] || [ "$EVENT" == "pause" ] - then - FILE="/tmp/vote_no_to_suspend" - - elif [ "$EVENT" == "live_migrate_begin" ] || [ "$EVENT" == "cold_migrate_begin" ] - then - FILE="/tmp/vote_no_to_migrate" - - elif [ "$EVENT" == "resize_begin" ] - then - FILE="/tmp/vote_no_to_resize" - - elif [ "$EVENT" == "live_migrate_end" ] || [ "$EVENT" == "cold_migrate_end" ] || - [ "$EVENT" == "resize_end" ] || [ "$EVENT" == "unpause" ] || - [ "$EVENT" == "resume" ] - then - logger "Should never be asked to vote on $EVENT" - echo "Should never be asked to vote on $EVENT" - exit 1 - fi - - if [ -f $FILE ]; - then - echo "File $FILE exists." - logger "File $FILE exists." - logger "Vote against $EVENT at this time." - - # Vote no to shutdown. - exit 1 - else - echo "File $FILE does not exist." - logger "File $FILE does not exists." - logger "Vote to allow $EVENT" - - # Vote yes to shutdown. - exit 0 - fi - -elif [ "$MSG_TYPE" == "irrevocable" ] -then - - if [ $EVENT == "stop" ] - then - logger "Notification of pending $EVENT received." - # Place clean shutdown actions here. Idea is to hand off activity and - # cleanly stop the payload application. It is not required to stop the - # kernel, an ACPI power-off event will follow. - - elif [ "$EVENT" == "reboot" ] - then - logger "Notification of pending $EVENT received." - # Place clean shutdown actions here. Idea is to hand off activity and - # cleanly stop the application. It is not required to stop/reboot the - # kernel, an ACPI power-off event will follow, and then a power-on - - elif [ "$EVENT" == "pause" ] || [ "$EVENT" == "suspend" ] - then - logger "Notification of pending $EVENT received." - # This VM will be paused or suspended but not rebooted. - # Hand off activity and cleanly stop the application if required. - - elif [ "$EVENT" == "unpause" ] || [ "$EVENT" == "resume" ] - then - logger "Notification of $EVENT completion received." - # This VM has resumed from a paused or suspended state. - # Restart your application and take activity as required. - - elif [ "$EVENT" == "resize_begin" ] - then - logger "Notification of pending resize received. ($EVENT)" - # This VM will soon be resized. - # Hand off activity and cleanly stop the payload application if required. - - elif [ "$EVENT" == "resize_end" ] - then - logger "Notification of resize complete received." - # This VM has been resized. - # Restart your application and/or re-establish your network connectivity - # as required. - - elif [ "$EVENT" == "live_migrate_begin" ] || [ "$EVENT" == "cold_migrate_begin" ] - then - logger "Notification of pending migration received. ($EVENT)" - # This VM will soon relocate to a different host. - # Network connectivity may change. - # Hand off activity and cleanly stop the payload application if required. - - elif [ "$EVENT" == "live_migrate_end" ] || [ "$EVENT" == "cold_migrate_end" ] - then - logger "Notification of migration complete received." - # This VM has finished relocation to a new host. - # Network connectivity may have changed. - # Restart your application and/or re-establish your network connectivity - # as required. - fi - - sleep 1 - exit 0 - -else - echo "Unknown message type '$MSG_TYPE'" - logger "Unknown message type '$MSG_TYPE'" - sleep 1 - exit -1 -fi diff --git a/guest-client/guest-client-3.0.1/guest_client/scripts/sample_health_check_script b/guest-client/guest-client-3.0.1/guest_client/scripts/sample_health_check_script deleted file mode 100755 index 72924a48..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/scripts/sample_health_check_script +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -FILE="/tmp/unhealthy" -if [ -f $FILE ]; -then - echo "File $FILE exists." - rm -f $FILE - exit 1 -else - echo "File $FILE does not exist." -fi - -exit 0 diff --git a/guest-client/guest-client-3.0.1/guest_client/src/Makefile b/guest-client/guest-client-3.0.1/guest_client/src/Makefile deleted file mode 100755 index 864f52da..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -SHELL = /bin/sh - -## Configuration Directory Variables -prefix := /usr/local -exec_prefix := $(prefix) -sysconfdir := $(prefix)/etc -includedir := $(prefix)/include -libdir := $(exec_prefix)/lib -bindir := $(exec_prefix)/bin - -MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) -CURRENT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) - -ifndef BUILD_DIR -$(error BUILD_DIR undefined) -endif - -PACKAGE_DIR := $(BUILD_DIR)/package -PACKAGE_ROOT_DIR := $(PACKAGE_DIR)/rootdir - -.SUFFIXES: -.SUFFIXES: .c .o - -.PHONY: all build heartbeat clean distclean package - -heartbeat_C_SRCS := $(wildcard $(CURRENT_DIR)/heartbeat/*.c) -heartbeat_C_SRCS := $(subst $(CURRENT_DIR)/heartbeat/,,$(heartbeat_C_SRCS)) -heartbeat_C_OBJS := ${heartbeat_C_SRCS:.c=.o} - -program_NAME := guest-client -program_C_INCLUDES := -I$(CURRENT_DIR) -I$(CURRENT_DIR)/heartbeat -program_C_INCLUDES += -I$(CURRENT_DIR)/../../include -program_C_SRCS := $(wildcard *.c) -program_C_OBJS := ${program_C_SRCS:.c=.o} -program_LDLIBS := -lrt -program_BUILD_OBJS := $(addprefix $(BUILD_DIR)/, $(heartbeat_C_OBJS)) -program_BUILD_OBJS += $(addprefix $(BUILD_DIR)/, $(program_C_OBJS)) - -CFLAGS = -g -O2 -Wall -Werror -Wformat -DSYSCONFDIR=$(sysconfdir) -CFLAGS += -Wformat-security - -all: build - -heartbeat: - @(cd heartbeat; make --no-print-directory build \ - sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - -%.o: %.c - $(CC) $(CFLAGS) $(program_C_INCLUDES) -c $^ -o $(BUILD_DIR)/$@ - -$(program_NAME): heartbeat $(program_C_OBJS) - $(CC) $(CFLAGS) $(program_BUILD_OBJS) $(program_LDLIBS) \ - -o $(BUILD_DIR)/$(program_NAME) -ljson-c - -build: $(program_NAME) - -clean: - @-($(RM) -Rf $(BUILD_DIR)/*) - -distclean: clean - -package: - @(mkdir -p --mode 755 $(PACKAGE_ROOT_DIR)/$(bindir)) - @(echo "Packaging $(program_NAME) in $(PACKAGE_ROOT_DIR)/$(bindir)") - @(cp $(BUILD_DIR)/$(program_NAME) $(PACKAGE_ROOT_DIR)/$(bindir)/$(program_NAME)) - @(chmod 755 $(PACKAGE_ROOT_DIR)/$(bindir)/$(program_NAME)) diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_channel.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_channel.c deleted file mode 100755 index 557baabd..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_channel.c +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_channel.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_unix.h" - -typedef struct { - bool inuse; - bool char_device; - int sock; - char dev_name[GUEST_DEVICE_NAME_MAX_CHAR]; -} GuestChannelT; - -static GuestChannelT _channel[GUEST_MAX_CONNECTIONS]; - -// **************************************************************************** -// Guest Channel - Find Empty -// ========================== -static GuestChannelIdT guest_channel_find_empty( void ) -{ - GuestChannelT* channel = NULL; - - unsigned int channel_id; - for (channel_id=0; GUEST_MAX_CONNECTIONS > channel_id; ++channel_id) - { - channel = &(_channel[channel_id]); - if (!channel->inuse) - return channel_id; - } - - return GUEST_CHANNEL_ID_INVALID; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Find -// ==================== -static GuestChannelT* guest_channel_find( GuestChannelIdT channel_id ) -{ - GuestChannelT* channel = NULL; - - if ((0 <= channel_id)&&(GUEST_MAX_CONNECTIONS > channel_id)) - { - channel = &(_channel[channel_id]); - if (channel->inuse) - return channel; - } - - return NULL; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Send -// ==================== -GuestErrorT guest_channel_send( - GuestChannelIdT channel_id, void* msg, int msg_size ) -{ - GuestChannelT* channel; - ssize_t result; - - channel = guest_channel_find(channel_id); - if (NULL == channel) - { - DPRINTFE("Invalid channel identifier, channel_id=%i.", channel_id); - return GUEST_FAILED; - } - - result = write(channel->sock, msg, msg_size); - if (0 > result) - { - if (ENODEV == errno) - { - DPRINTFI("Channel %i on device %s disconnected.", channel_id, - channel->dev_name); - return GUEST_OKAY; - } else { - DPRINTFE("Failed to write to channel on device %s, error=%s.", - channel->dev_name, strerror(errno)); - return GUEST_FAILED; - } - } - - DPRINTFV("Sent message over channel on device %s.", channel->dev_name); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Receive -// ======================= -GuestErrorT guest_channel_receive( - GuestChannelIdT channel_id, char* msg_buf, int msg_buf_size, - int* msg_size ) -{ - GuestChannelT* channel; - ssize_t result; - - channel = guest_channel_find(channel_id); - if (NULL == channel) - { - DPRINTFE("Invalid channel identifier, channel_id=%i.", channel_id); - return GUEST_FAILED; - } - - result = read(channel->sock, msg_buf, msg_buf_size); - if (0 > result) - { - if (EINTR == errno) - { - DPRINTFD("Interrupted on socket read, error=%s.", strerror(errno)); - return GUEST_INTERRUPTED; - - } else if (ENODEV == errno) { - DPRINTFI("Channel %i on device %s disconnected.", channel_id, - channel->dev_name); - *msg_size = 0; - return GUEST_OKAY; - - } else { - DPRINTFE("Failed to read from socket, error=%s.", strerror(errno)); - return GUEST_FAILED; - } - } else if (0 == result) { - DPRINTFD("No message received from socket."); - *msg_size = 0; - return GUEST_OKAY; - - } else { - DPRINTFV("Received message, msg_size=%i.", result); - *msg_size = result; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Open -// ==================== -GuestErrorT guest_channel_open( char dev_name[], GuestChannelIdT* channel_id ) -{ - int fd; - int result; - struct stat stat_data; - GuestChannelIdT empty_channel_id; - GuestChannelT* channel; - GuestErrorT error; - - empty_channel_id = guest_channel_find_empty(); - if (GUEST_CHANNEL_ID_INVALID == empty_channel_id) - { - DPRINTFE("Allocation of channel failed, no free resources."); - return GUEST_FAILED; - } - - channel = &(_channel[empty_channel_id]); - memset(channel, 0, sizeof(GuestChannelT)); - - result = stat(dev_name, &stat_data); - if (0 > result) - { - int err = errno; - if (err == ENOENT) - { - DPRINTFI("Failed to stat, error=%s.", strerror(err)); - DPRINTFI("%s file does not exist, guest heartbeat not configured.", - dev_name); - return GUEST_NOT_CONFIGURED; - } - else { - DPRINTFE("Failed to stat, error=%s.", strerror(err)); - return GUEST_FAILED; - } - } - - if (S_ISCHR(stat_data.st_mode)) - { - fd = open(dev_name, O_RDWR); - if (0 > fd) - { - DPRINTFE("Failed to open device %s, error=%s.", dev_name, - strerror(errno)); - return GUEST_FAILED; - } - - result = fcntl(fd, F_SETFD, FD_CLOEXEC); - if (0 > result) - { - DPRINTFE("Failed to set to close on exec, error=%s.", - strerror(errno)); - close(fd); - return GUEST_FAILED; - } - - result = fcntl(fd, F_SETOWN, getpid()); - if (0 > result) - { - DPRINTFE("Failed to set socket ownership, error=%s.", - strerror(errno)); - close(fd); - return GUEST_FAILED; - } - - result = fcntl(fd, F_GETFL); - if (0 > result) - { - DPRINTFE("Failed to get socket options, error=%s.", - strerror(errno)); - close(fd); - return GUEST_FAILED; - } - - result = fcntl(fd, F_SETFL, result | O_NONBLOCK | O_ASYNC); - if (0 > result) - { - DPRINTFE("Failed to set socket options, error=%s.", - strerror(errno)); - close(fd); - return GUEST_FAILED; - } - - DPRINTFI("Opened character device %s", dev_name); - - } else { - error = guest_unix_open(&fd); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to open unix socket %s, error=%s.", - dev_name, guest_error_str(error)); - return error; - } - error = guest_unix_connect(fd, dev_name); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to connect unix socket %s, error=%s.", - dev_name, guest_error_str(error)); - close(fd); - return error; - } - - DPRINTFI("Opened unix socket %s", dev_name); - } - - channel->inuse = true; - snprintf(channel->dev_name, sizeof(channel->dev_name), "%s", dev_name); - channel->char_device = S_ISCHR(stat_data.st_mode); - channel->sock = fd; - *channel_id = empty_channel_id; - - DPRINTFD("Opened channel over device %s.", channel->dev_name); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Close -// ===================== -GuestErrorT guest_channel_close( GuestChannelIdT channel_id ) -{ - GuestChannelT* channel; - - channel = guest_channel_find(channel_id); - if (NULL != channel) - { - if (channel->inuse) - { - if (0 <= channel->sock) - close(channel->sock); - - DPRINTFD("Closed channel over device %s.", channel->dev_name); - memset(channel, 0, sizeof(GuestChannelT)); - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Get Selection Object -// ==================================== -int guest_channel_get_selobj( GuestChannelIdT channel_id ) -{ - GuestChannelT *channel; - - channel = guest_channel_find(channel_id); - if (NULL != channel) - return channel->sock; - - return -1; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Initialize -// ========================== -GuestErrorT guest_channel_initialize( void ) -{ - memset(_channel, 0, sizeof(_channel)); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Finalize -// ======================== -GuestErrorT guest_channel_finalize( void ) -{ - memset(_channel, 0, sizeof(_channel)); - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_channel.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_channel.h deleted file mode 100755 index a317cea0..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_channel.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_CHANNEL_H__ -#define __GUEST_CHANNEL_H__ - -#include - -#include "guest_limits.h" -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_CHANNEL_ID_INVALID -1 - -typedef int GuestChannelIdT; - -// **************************************************************************** -// Guest Channel - Send -// ==================== -extern GuestErrorT guest_channel_send( - GuestChannelIdT channel_id, void* msg, int msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Receive -// ======================= -extern GuestErrorT guest_channel_receive( - GuestChannelIdT channel_id, char* msg_buf, int msg_buf_size, - int* msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Open -// ==================== -extern GuestErrorT guest_channel_open( - char dev_name[], GuestChannelIdT* channel_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Close -// ===================== -extern GuestErrorT guest_channel_close( GuestChannelIdT channel_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Get Selection Object -// ==================================== -extern int guest_channel_get_selobj( GuestChannelIdT channel_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Initialize -// ========================== -extern GuestErrorT guest_channel_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Channel - Finalize -// ======================== -extern GuestErrorT guest_channel_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_CHANNEL_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.c deleted file mode 100755 index 01ae812a..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_child_death.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_selobj.h" - -#define GUEST_CHILD_DEATH_MAX_DISPATCH 32 - -typedef struct { - bool valid; - pid_t pid; - int exit_code; -} GuestChildDeathInfoT; - -typedef struct { - bool valid; - pid_t pid; - GuestChildDeathCallbackT death_callback; -} GuestChildDeathCallbackInfoT; - -static int _child_death_fd = -1; -static GuestChildDeathCallbackInfoT _callbacks[GUEST_CHILD_PROCESS_MAX]; -static GuestChildDeathInfoT _child_deaths[GUEST_CHILD_PROCESS_MAX]; -static uint64_t _child_death_count = 0; - -// **************************************************************************** -// Guest Child Death - Register -// ============================ -GuestErrorT guest_child_death_register( - pid_t pid, GuestChildDeathCallbackT callback ) -{ - GuestChildDeathCallbackInfoT* callback_info = NULL; - - unsigned int callbacks_i; - for (callbacks_i=0; GUEST_CHILD_PROCESS_MAX > callbacks_i; ++callbacks_i) - { - callback_info = &(_callbacks[callbacks_i]); - - if (callback_info->valid) - { - if (pid == callback_info->pid) - { - callback_info->death_callback = callback; - break; - } - } else { - callback_info->valid = true; - callback_info->pid = pid; - callback_info->death_callback = callback; - break; - } - } - - if (GUEST_CHILD_PROCESS_MAX <= callbacks_i) - { - DPRINTFE("Failed to register child death callback for pid (%i).", - (int) pid); - return GUEST_FAILED; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Deregister -// ============================== -GuestErrorT guest_child_death_deregister( pid_t pid ) -{ - GuestChildDeathCallbackInfoT* callback_info = NULL; - - unsigned int callbacks_i; - for (callbacks_i=0; GUEST_CHILD_PROCESS_MAX > callbacks_i; ++callbacks_i) - { - callback_info = &(_callbacks[callbacks_i]); - - if (!callback_info->valid) - continue; - - if (pid != callback_info->pid) - continue; - - callback_info->valid = 0; - callback_info->pid = 0; - callback_info->death_callback = NULL; - break; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Save -// ======================== -GuestErrorT guest_child_death_save( pid_t pid, int exit_code ) -{ - uint64_t child_death_count = ++_child_death_count; - GuestChildDeathInfoT* info = NULL; - int result; - - result = write(_child_death_fd, &child_death_count, - sizeof(child_death_count)); - if (0 > result) - DPRINTFE("Failed to signal child death, error=%s", strerror(errno)); - - DPRINTFD("Child process (%i) died.", (int) pid); - - unsigned int death_i; - for (death_i=0; GUEST_CHILD_PROCESS_MAX > death_i; ++death_i) - { - info = &(_child_deaths[death_i]); - - if (info->valid) - { - if (pid == info->pid) - { - info->exit_code = exit_code; - break; - } - } else { - info->valid = true; - info->pid = pid; - info->exit_code = exit_code; - break; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Dispatch -// ============================ -static void guest_child_death_dispatch( int selobj ) -{ - static unsigned int _last_entry = 0; - - uint64_t child_death_count; - GuestChildDeathInfoT* info = NULL; - GuestChildDeathCallbackInfoT* callback_info = NULL; - unsigned int num_child_death_dispatched = 0; - int result; - - result = read(_child_death_fd, &child_death_count, sizeof(child_death_count)); - if (0 > result) - { - if (EINTR == errno) - { - DPRINTFD("Interrupted on read, error=%s.", strerror(errno)); - } else { - DPRINTFE("Failed to dispatch, error=%s.", strerror(errno)); - } - } - - unsigned int death_i; - for( death_i=_last_entry; GUEST_CHILD_PROCESS_MAX > death_i; ++death_i ) - { - info = &(_child_deaths[death_i]); - - if (!info->valid) - continue; - - if (0 == info->pid) - continue; - - DPRINTFD("Child process (%i) exited with %i.", (int) info->pid, - info->exit_code); - - unsigned int callbacks_i; - for (callbacks_i=0; GUEST_CHILD_PROCESS_MAX > callbacks_i; ++callbacks_i) - { - callback_info = &(_callbacks[callbacks_i]); - - if (callback_info->valid) - { - if (info->pid == callback_info->pid) - { - if (NULL != callback_info->death_callback) - { - callback_info->death_callback(info->pid, info->exit_code); - callback_info->valid = false; - } - } - } - } - - info->valid = false; - - if (GUEST_CHILD_DEATH_MAX_DISPATCH <= ++num_child_death_dispatched) - DPRINTFD("Maximum child process death dispatches (%i) reached.", - GUEST_CHILD_DEATH_MAX_DISPATCH); - } - - if (GUEST_CHILD_PROCESS_MAX <= death_i) - _last_entry = 0; - else - _last_entry = death_i; - - // Check for outstanding child process deaths to handle. - for (death_i=0; GUEST_CHILD_PROCESS_MAX > death_i; ++death_i) - { - info = &(_child_deaths[death_i]); - - if (!info->valid) - continue; - - if (0 == info->pid) - continue; - - result = write(_child_death_fd, &child_death_count, - sizeof(child_death_count)); - if (0 > result) - DPRINTFE("Failed to signal child process death, error=%s", - strerror(errno)); - break; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Initialize -// ============================== -GuestErrorT guest_child_death_initialize( void ) -{ - GuestSelObjCallbacksT callbacks; - GuestErrorT error; - - _child_death_fd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); - if (0 > _child_death_fd) - { - DPRINTFE("Failed to open child death file descriptor,error=%s.", - strerror(errno)); - return GUEST_FAILED; - } - - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.read_callback = guest_child_death_dispatch; - - error = guest_selobj_register(_child_death_fd, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register selection object, error=%s.", - guest_error_str(error)); - close(_child_death_fd); - _child_death_fd = -1; - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Finalize -// ============================ -GuestErrorT guest_child_death_finalize( void ) -{ - GuestErrorT error; - - if (0 <= _child_death_fd) - { - error = guest_selobj_deregister(_child_death_fd); - if (GUEST_OKAY != error) - DPRINTFE("Failed to deregister selection object, error=%s.", - guest_error_str(error)); - - close(_child_death_fd); - _child_death_fd = -1; - } - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.h deleted file mode 100755 index 718a2941..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_child_death.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_CHILD_DEATH_H__ -#define __GUEST_CHILD_DEATH_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_CHILD_FAILED -65536 - -typedef void (*GuestChildDeathCallbackT) (pid_t pid, int exit_code); - -// **************************************************************************** -// Guest Child Death - Register -// ============================ -extern GuestErrorT guest_child_death_register( - pid_t pid, GuestChildDeathCallbackT callback ); -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Deregister -// ============================== -extern GuestErrorT guest_child_death_deregister( pid_t pid ); -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Save -// ======================== -extern GuestErrorT guest_child_death_save( pid_t pid, int exit_code ); -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Initialize -// ============================== -extern GuestErrorT guest_child_death_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Child Death - Finalize -// ============================ -extern GuestErrorT guest_child_death_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_CHILD_DEATH_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_client.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_client.c deleted file mode 100755 index 75c137ea..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_client.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_process.h" - -// **************************************************************************** -// Guest Client - Main -// =================== -int main( int argc, char *argv[], char *envp[] ) -{ - GuestErrorT error; - - error = guest_debug_initialize("Guest-Client"); - if (GUEST_OKAY != error) - { - printf("Debug initialization failed, error=%s.\n", - guest_error_str(error)); - return EXIT_FAILURE; - } - - error = guest_process_main(argc, argv, envp); - if (GUEST_OKAY != error) - { - printf("Process failure, error=%s.\n", guest_error_str(error)); - return error; - } - - error = guest_debug_finalize(); - if (GUEST_OKAY != error) - { - printf("Debug finalization failed, error=%s.\n", - guest_error_str(error)); - } - - return EXIT_SUCCESS; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_config.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_config.c deleted file mode 100755 index 91a63ffa..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_config.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_config.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" - -#define GUEST_DEFAULT_COMM_DEVICE "/dev/vport1p1" - -static GuestConfigT _config; - -// **************************************************************************** -// Guest Configuration - Get -// ========================= -GuestConfigT* guest_config_get( void ) -{ - return &_config; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Show Usage -// ================================ -void guest_config_show_usage( void ) -{ - printf("guest-client [ARGS]\n"); - printf(" where ARGS may be any of: \n"); - printf(" --name Override the name of the instance\n"); - printf(" --device Override default communication channel device\n"); - printf("\n"); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Dump -// ========================== -static void guest_config_dump( void ) -{ - DPRINTFI("Guest-Client Configuration:"); - DPRINTFI(" name: %s", _config.name); - DPRINTFI(" device: %s", _config.comm_device); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Parse Arguments -// ===================================== -static GuestErrorT guest_config_parse_args( int argc, char *argv[] ) -{ - unsigned int arg_i; - for (arg_i=1; arg_i < argc; ++arg_i) - { - if (0 == strcmp("--name", argv[arg_i])) - { - arg_i++; - if (arg_i < argc) - snprintf(_config.name, sizeof(_config.name), "%s", argv[arg_i]); - - } else if (0 == strcmp("--device", argv[arg_i])) { - arg_i++; - if (arg_i < argc) - snprintf(_config.comm_device, sizeof(_config.comm_device), - "%s", argv[arg_i]); - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Parse Environment -// ======================================= -static GuestErrorT guest_config_parse_env( char *envp[] ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Initialize -// ================================ -GuestErrorT guest_config_initialize( int argc, char *argv[], char *envp[] ) -{ - char name[GUEST_NAME_MAX_CHAR]; - GuestErrorT error; - int result; - - result = gethostname(name, sizeof(name)); - if (0 > result) - { - DPRINTFE("Failed to get hostname, error=%s.", strerror(errno)); - return GUEST_FAILED; - } - DPRINTFI("hostname=%s.", name); - memset(&_config, 0, sizeof(GuestConfigT)); - snprintf(_config.name, sizeof(_config.name), "%s", name); - snprintf(_config.comm_device, sizeof(_config.comm_device), "%s", - GUEST_DEFAULT_COMM_DEVICE); - - error = guest_config_parse_args(argc, argv); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to parse arguments, error=%s.", - guest_error_str(error)); - return error; - } - - error = guest_config_parse_env(envp); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to parse environment, error=%s.", - guest_error_str(error)); - return error; - } - - guest_config_dump(); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Finalize -// ============================== -GuestErrorT guest_config_finalize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_config.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_config.h deleted file mode 100755 index b32a9245..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_config.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_CONFIGURATION_H__ -#define __GUEST_CONFIGURATION_H__ - -#include "guest_limits.h" -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char name[GUEST_NAME_MAX_CHAR]; - char comm_device[GUEST_DEVICE_NAME_MAX_CHAR]; -} GuestConfigT; - -// **************************************************************************** -// Guest Configuration - Get -// ========================= -extern GuestConfigT* guest_config_get( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Show Usage -// ================================ -extern void guest_config_show_usage( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Initialize -// ================================ -extern GuestErrorT guest_config_initialize( - int argc, char *argv[], char *envp[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Configuration - Finalize -// ============================== -extern GuestErrorT guest_config_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_CONFIGURATION_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_debug.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_debug.c deleted file mode 100755 index 09a3892d..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_debug.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_debug.h" - -#include -#include -#include - -#include "guest_types.h" - -#define GUEST_DEBUG_WANT_SYSLOG -#ifdef GUEST_DEBUG_WANT_SYSLOG -#include -#endif - -static char _process_name[30]; -static GuestDebugLogLevelT _log_level = GUEST_DEBUG_LOG_LEVEL_INFO; - -// **************************************************************************** -// Guest Debug - Log Level String -// ============================== -const char* guest_debug_log_level_str( GuestDebugLogLevelT level ) -{ - switch (level) { - case GUEST_DEBUG_LOG_LEVEL_ERROR: return "error"; - case GUEST_DEBUG_LOG_LEVEL_INFO: return " info"; - case GUEST_DEBUG_LOG_LEVEL_DEBUG: return "debug"; - case GUEST_DEBUG_LOG_LEVEL_VERBOSE: return " verb"; - default: - return "???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Set Log Level -// =========================== -void guest_debug_set_log_level( GuestDebugLogLevelT level ) -{ - _log_level = level; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Want Log -// ====================== -bool guest_debug_want_log( GuestDebugLogLevelT level ) -{ - return (level <= _log_level); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Log -// ================= -void guest_debug_log( const char* format, ... ) -{ - char time_str[80]; - char date_str[32]; - struct tm t_real; - struct timespec ts_real; - va_list arguments; - char log_data[512]; - - va_start(arguments, format); - vsnprintf(log_data, sizeof(log_data), format, arguments); - va_end(arguments); - - clock_gettime(CLOCK_REALTIME, &ts_real); - - if (NULL == localtime_r(&(ts_real.tv_sec), &t_real)) - { - snprintf( time_str, sizeof(time_str), - "YYYY:MM:DD HH:MM:SS.xxx" ); - } else { - strftime( date_str, sizeof(date_str), "%b %e %H:%M:%S", - &t_real ); - snprintf( time_str, sizeof(time_str), "%s.%03ld", date_str, - ts_real.tv_nsec/1000000 ); - } - -#ifdef GUEST_DEBUG_WANT_SYSLOG - syslog(LOG_INFO, "%s", log_data); -#else - printf("%s %s: %s\n", time_str, _process_name, log_data); -#endif -} -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Initialize -// ======================== -GuestErrorT guest_debug_initialize( char process_name[] ) -{ - _log_level = GUEST_DEBUG_LOG_LEVEL_INFO; - snprintf(_process_name, sizeof(_process_name), "%s", process_name); - -#ifdef GUEST_DEBUG_WANT_SYSLOG - openlog(_process_name, LOG_PID | LOG_NDELAY, LOG_DAEMON); -#endif - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Finalize -// ====================== -GuestErrorT guest_debug_finalize( void ) -{ - _log_level = GUEST_DEBUG_LOG_LEVEL_INFO; - _process_name[0] = '\0'; - -#ifdef GUEST_DEBUG_WANT_SYSLOG - closelog(); -#endif - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_debug.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_debug.h deleted file mode 100755 index 09a7d99a..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_debug.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_DEBUG_H__ -#define __GUEST_DEBUG_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - GUEST_DEBUG_LOG_LEVEL_ERROR, - GUEST_DEBUG_LOG_LEVEL_INFO, - GUEST_DEBUG_LOG_LEVEL_DEBUG, - GUEST_DEBUG_LOG_LEVEL_VERBOSE, -} GuestDebugLogLevelT; - -#define DPRINTF(level, format, args...) \ - if (guest_debug_want_log(level)) \ - guest_debug_log("%s: %s(%i): " format, \ - guest_debug_log_level_str(level), \ - __FILE__, __LINE__, ##args) - -#define DPRINTFE(format, args...) \ - DPRINTF(GUEST_DEBUG_LOG_LEVEL_ERROR, format, ##args) -#define DPRINTFI(format, args...) \ - DPRINTF(GUEST_DEBUG_LOG_LEVEL_INFO, format, ##args) -#define DPRINTFD(format, args...) \ - DPRINTF(GUEST_DEBUG_LOG_LEVEL_DEBUG, format, ##args) -#define DPRINTFV(format, args... ) \ - DPRINTF(GUEST_DEBUG_LOG_LEVEL_VERBOSE, format, ##args) - -// **************************************************************************** -// Guest Debug - Log Level String -// ============================== -extern const char* guest_debug_log_level_str( GuestDebugLogLevelT level ); -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Set Log Level -// =========================== -extern void guest_debug_set_log_level( GuestDebugLogLevelT level ); -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Want Log -// ====================== -extern bool guest_debug_want_log( GuestDebugLogLevelT level ); -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Log -// ================= -extern void guest_debug_log( const char* format, ... ); -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Initialize -// ======================== -extern GuestErrorT guest_debug_initialize( char process_name[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Debug - Finalize -// ====================== -extern GuestErrorT guest_debug_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_DEBUG_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_limits.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_limits.h deleted file mode 100755 index 29953aed..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_limits.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_LIMITS_H__ -#define __GUEST_LIMITS_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_NAME_MAX_CHAR 64 -#define GUEST_DEVICE_NAME_MAX_CHAR 255 -#define GUEST_MIN_TICK_INTERVAL_IN_MS 25 -#define GUEST_TICK_INTERVAL_IN_MS 300 -#define GUEST_SCHEDULING_MAX_DELAY_IN_MS 800 -#define GUEST_SCHEDULING_DELAY_DEBOUNCE_IN_MS 2000 -#define GUEST_TIMERS_MAX 128 -#define GUEST_MAX_TIMERS_PER_TICK GUEST_TIMERS_MAX / 4 -#define GUEST_SELECT_OBJS_MAX 128 -#define GUEST_MAX_SIGNALS 32 -#define GUEST_MAX_CONNECTIONS 32 -#define GUEST_CHILD_PROCESS_MAX 16 -#define GUEST_APPLICATIONS_MAX 16 -#define GUEST_HEARTBEAT_MIN_INTERVAL_MS 400 - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_LIMITS_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_process.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_process.c deleted file mode 100755 index 4f46fab4..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_process.c +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_process.h" - -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_signal.h" -#include "guest_config.h" -#include "guest_selobj.h" -#include "guest_timer.h" -#include "guest_channel.h" -#include "guest_stream.h" -#include "guest_unix.h" -#include "guest_script.h" -#include "guest_heartbeat.h" -#include "guest_child_death.h" - -static sig_atomic_t _stay_on = 1; -static sig_atomic_t _reload = 0; -static sig_atomic_t _reap_children = 0; - -// **************************************************************************** -// Guest Process - Reload -// ====================== -static void guest_process_reload( void ) -{ - int result; - - DPRINTFI("Reload signal handled."); - _reload = 0; - - result = access("/tmp/guest_debug_debug", F_OK); - if (0 == result) - { - DPRINTFI("Debug log level set to debug."); - guest_debug_set_log_level(GUEST_DEBUG_LOG_LEVEL_DEBUG); - return; - } - - result = access("/tmp/guest_debug_verbose", F_OK); - if (0 == result) - { - DPRINTFI("Debug log level set to verbose."); - guest_debug_set_log_level(GUEST_DEBUG_LOG_LEVEL_VERBOSE); - return; - } - - DPRINTFI("Debug log level set to info."); - guest_debug_set_log_level(GUEST_DEBUG_LOG_LEVEL_INFO); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Process - Reap Children -// ============================= -static void guest_process_reap_children( void ) -{ - pid_t pid; - int status; - - if (_reap_children) - { - _reap_children = 0; - - while (0 < (pid = waitpid(-1, &status, WNOHANG | WUNTRACED))) - { - if (WIFEXITED(status)) - guest_child_death_save(pid, WEXITSTATUS(status)); - else - guest_child_death_save(pid, GUEST_CHILD_FAILED); - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Process - Signal Handler -// ============================== -static void guest_process_signal_handler( int signum ) -{ - switch (signum) - { - case SIGINT: - case SIGTERM: - case SIGQUIT: - _stay_on = 0; - break; - - case SIGHUP: - _reload = 1; - break; - - case SIGCHLD: - _reap_children = 1; - break; - - case SIGCONT: - DPRINTFD("Ignoring signal SIGCONT (%i).", signum); - break; - - case SIGPIPE: - DPRINTFD("Ignoring signal SIGPIPE (%i).", signum); - break; - - default: - DPRINTFD("Signal (%i) ignored.", signum); - break; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Process - Initialize -// ========================== -static GuestErrorT guest_process_initialize( - int argc, char *argv[], char *envp[] ) -{ - GuestConfigT* config = NULL; - GuestErrorT error; - - error = guest_config_initialize(argc, argv, envp); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize configuration module, error=%s.", - guest_error_str(error)); - guest_config_show_usage(); - return error; - } - - error = guest_selobj_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize selection object module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_timer_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize timer module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_child_death_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize child death module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_unix_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize unix module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_channel_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize channel module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_stream_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize stream module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_script_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize script module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - config = guest_config_get(); - - error = guest_heartbeat_initialize(config->comm_device); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat module, error=%s.", - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Process - Finalize -// ======================== -static GuestErrorT guest_process_finalize( void ) -{ - GuestErrorT error; - - error = guest_heartbeat_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat module, error=%s.", - guest_error_str(error)); - } - - error = guest_script_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize script module, error=%s.", - guest_error_str(error)); - } - - error = guest_stream_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize stream module, error=%s.", - guest_error_str(error)); - } - - error = guest_channel_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize channel module, error=%s.", - guest_error_str(error)); - } - - error = guest_unix_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize unix module, error=%s.", - guest_error_str(error)); - } - - error = guest_child_death_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize child death module, error=%s.", - guest_error_str(error)); - } - - error = guest_timer_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize timer module, error=%s.", - guest_error_str(error)); - } - - error = guest_selobj_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finialize selection object module, error=%s.", - guest_error_str(error)); - } - - error = guest_config_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finialize configuration module, error=%s.", - guest_error_str(error)); - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Process - Main -// ==================== -GuestErrorT guest_process_main( int argc, char *argv[], char *envp[] ) -{ - unsigned int next_interval_in_ms; - GuestErrorT error; - - DPRINTFI("Starting."); - - guest_signal_register_handler(SIGINT, guest_process_signal_handler); - guest_signal_register_handler(SIGTERM, guest_process_signal_handler); - guest_signal_register_handler(SIGQUIT, guest_process_signal_handler); - guest_signal_register_handler(SIGHUP, guest_process_signal_handler); - guest_signal_register_handler(SIGCHLD, guest_process_signal_handler); - guest_signal_register_handler(SIGCONT, guest_process_signal_handler); - guest_signal_register_handler(SIGPIPE, guest_process_signal_handler); - guest_signal_ignore(SIGIO); - - error = guest_process_initialize(argc, argv, envp); - if (GUEST_OKAY != error) - { - if (error != GUEST_NOT_CONFIGURED) - { - DPRINTFE("Failed initialize process restarting in 20 seconds," - "error=%s.", guest_error_str(error)); - sleep(20); - } - else { - DPRINTFI("Application is not configured, will be not restarted," - " exit code=%s", guest_error_str(error)); - } - return error; - } - - DPRINTFI("Started."); - - while (_stay_on) - { - next_interval_in_ms = guest_timer_schedule(); - - error = guest_selobj_dispatch(next_interval_in_ms); - if (GUEST_OKAY != error) - { - DPRINTFE("Selection object dispatch failed, error=%s.", - guest_error_str(error)); - break; - } - - guest_process_reap_children(); - - if (_reload) - guest_process_reload(); - } - - DPRINTFI("Shutting down."); - - error = guest_process_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed finalize process, error=%s.", - guest_error_str(error) ); - } - - DPRINTFI("Shutdown complete."); - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_process.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_process.h deleted file mode 100755 index 0a380d22..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_process.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_PROCESS_H__ -#define __GUEST_PROCESS_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Process - Main -// ==================== -extern GuestErrorT guest_process_main( int argc, char *argv[], char *envp[] ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_PROCESS_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_script.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_script.c deleted file mode 100755 index 2692e6de..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_script.c +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_script.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_selobj.h" -#include "guest_utils.h" -#include "guest_child_death.h" - -#define GUEST_SCRIPT_SETUP_FAILURE -65535 - -typedef struct { - bool inuse; - int pid; - int fd; - int log_end_ptr; - char log_msg[256]; - GuestScriptIdT script_id; - GuestScriptCallbackT callback; -} GuestScriptDataT; - -static GuestScriptDataT _scripts[GUEST_CHILD_PROCESS_MAX]; - -// **************************************************************************** -// Guest Script - Abort -// ==================== -void guest_script_abort( GuestScriptIdT script_id ) -{ - int result; - GuestScriptDataT* entry; - GuestErrorT error; - - if (GUEST_SCRIPT_ID_INVALID == script_id) - return; - - if (GUEST_CHILD_PROCESS_MAX <= script_id) - return; - - entry = &(_scripts[script_id]); - - if (entry->inuse) - { - if (-1 != entry->pid) - { - error = guest_child_death_deregister(entry->pid); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister for child death %i, error=%s.", - entry->pid, guest_error_str(error)); - } - - result = kill(entry->pid, SIGKILL); - if (0 > result) - { - if (ESRCH == errno) - { - DPRINTFV("Script pid (%i) not running.", entry->pid); - } else { - DPRINTFE("Failed to send kill signal to script pid %i, " - "error=%s.", entry->pid, strerror(errno)); - } - } else { - DPRINTFD("Script pid (%i) killed.", entry->pid); - } - } - - if (-1 != entry->fd) - { - error = guest_selobj_deregister(entry->fd); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister selection object %i, error=%s.", - entry->fd, guest_error_str(error)); - } - - close(entry->fd); - } - - memset(entry, 0, sizeof(GuestScriptDataT)); - entry->pid = -1; - entry->fd = -1; - entry->script_id = GUEST_SCRIPT_ID_INVALID; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Dispatch -// ======================= -static void guest_script_dispatch( int selobj ) -{ - int bytes_avail; - int result; - GuestScriptDataT* entry; - - unsigned int script_i; - for (script_i=0; GUEST_CHILD_PROCESS_MAX > script_i; ++script_i) - { - entry = &(_scripts[script_i]); - if (entry->inuse) - if (selobj == entry->fd) - break; - } - - if (GUEST_CHILD_PROCESS_MAX <= script_i) - return; - - bytes_avail = sizeof(entry->log_msg) - entry->log_end_ptr; - - result = read(selobj, &(entry->log_msg[entry->log_end_ptr]), bytes_avail); - if (0 > result) - { - if (EINTR == errno) { - DPRINTFD("Interrupted on read, error=%s.", strerror(errno)); - return; - - } else { - DPRINTFE("Failed to read, error=%s.", strerror(errno)); - return; - } - } else if (0 == result) { - DPRINTFD("No message received."); - return; - - } else { - DPRINTFD("Received message, msg_size=%i.", result); - entry->log_end_ptr += result; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Callback -// ======================= -static void guest_script_callback( pid_t pid, int exit_code ) -{ - GuestScriptDataT* entry; - - unsigned int script_i; - for (script_i=0; GUEST_CHILD_PROCESS_MAX > script_i; ++script_i) - { - entry = &(_scripts[script_i]); - if (entry->inuse) - if ((int) pid == entry->pid) - break; - } - - if (GUEST_CHILD_PROCESS_MAX <= script_i) - return; - - DPRINTFD("PID %i exited with %i", (int) pid, exit_code); - - if (NULL != entry->callback) - entry->callback(entry->script_id, exit_code, entry->log_msg); - - guest_script_abort(entry->script_id); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Invoke -// ===================== -GuestErrorT guest_script_invoke( - char script[], char* script_argv[], GuestScriptCallbackT callback, - GuestScriptIdT* script_id ) -{ - int fd[2]; - pid_t pid; - struct stat stat_data; - char* script_name = guest_utils_basename(script); - char* script_exec = script; - int result; - GuestScriptDataT* entry; - GuestSelObjCallbacksT callbacks; - GuestErrorT error; - - *script_id = GUEST_SCRIPT_ID_INVALID; - - unsigned int script_i; - for (script_i=1; GUEST_CHILD_PROCESS_MAX > script_i; ++script_i) - { - entry = &(_scripts[script_i]); - if (!entry->inuse) - break; - } - - if (GUEST_CHILD_PROCESS_MAX <= script_i) - { - DPRINTFE("Failed to allocate script data."); - return GUEST_FAILED; - } - - memset(entry, 0, sizeof(GuestScriptDataT)); - entry->script_id = script_i; - entry->callback = callback; - entry->pid = -1; - entry->fd = -1; - - result = access(script_exec, F_OK | X_OK); - if (0 > result) - { - DPRINTFE("Script %s access failed, error=%s.", script_exec, - strerror(errno)); - return GUEST_FAILED; - } - - result = stat(script_exec, &stat_data); - if (0 > result) - { - DPRINTFE("Script %s stat failed, error=%s.", script_exec, - strerror( errno ) ); - return GUEST_FAILED; - } - - if (0 >= stat_data.st_size) - { - DPRINTFE("Script %s has zero size.", script_exec); - return GUEST_FAILED; - } - - result = pipe(fd); - if (0 > result) - { - DPRINTFE("Script %s pipe creation failed, error=%s.", script_exec, - strerror(errno)); - return GUEST_FAILED; - } - - result = fcntl(fd[0], F_SETFL, O_NONBLOCK); - if (0 > result) - { - DPRINTFE("Script %s pipe failed to make read end non-blocking, " - "error=%s.", script_exec, strerror(errno)); - close(fd[0]); - close(fd[1]); - return GUEST_FAILED; - } - - pid = fork(); - if (0 > pid) - { - DPRINTFE("Failed to fork process for script %s, error=%s.", - script_exec, strerror(errno)); - close(fd[0]); - close(fd[1]); - return GUEST_FAILED; - - } else if (0 == pid) { - // Child process. - struct rlimit file_limits; - - close(fd[0]); // close read end of pipe - - result = setpgid(0, 0); - if (0 > result) - { - DPRINTFE("Failed to set process group id for script %s, " - "error=%s.", script_exec, strerror( errno ) ); - exit(GUEST_SCRIPT_SETUP_FAILURE); - } - - result = getrlimit(RLIMIT_NOFILE, &file_limits); - if (0 > result) - { - DPRINTFE("Failed to get file limits for script %s, error=%s.", - script_exec, strerror(errno)); - exit(GUEST_SCRIPT_SETUP_FAILURE); - } - - unsigned int fd_i; - for (fd_i=0; fd_i < file_limits.rlim_cur; ++fd_i) - if (fd_i != fd[1]) - close(fd_i); - - result = dup2(fd[1], 1); // make stdout into writable end of pipe - if (0 > result) - { - DPRINTFE("Failed to make stdout into writable end of pipe for " - "script %s, error=%s.", script_exec, strerror(errno)); - exit(GUEST_SCRIPT_SETUP_FAILURE); - } - - result = execv(script_exec, (char**) script_argv); - if (0 > result) - DPRINTFE("Failed to exec command for script %s, error=%s.", - script_exec, strerror(errno)); - - exit(GUEST_SCRIPT_SETUP_FAILURE); - - } else { - // Parent process. - close(fd[1]); // close write end of pipe - entry->pid = (int) pid; - entry->fd = fd[0]; - entry->inuse = true; - - DPRINTFD("Child process %i created for script %s, script_id=%i.", - entry->pid, script_name, entry->script_id); - - error = guest_child_death_register(pid, guest_script_callback); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register for child death %i, error=%s.", - entry->pid, guest_error_str(error)); - guest_script_abort(entry->script_id); - return error; - } - - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.read_callback = guest_script_dispatch; - - error = guest_selobj_register(entry->fd, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register selection object %i, error=%s.", - entry->fd, guest_error_str(error)); - guest_script_abort(entry->script_id); - return error; - } - - *script_id = entry->script_id; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Initialize -// ========================= -GuestErrorT guest_script_initialize( void ) -{ - GuestScriptDataT* entry; - - memset(_scripts, 0, sizeof(_scripts)); - - unsigned int script_i; - for (script_i=0; GUEST_CHILD_PROCESS_MAX > script_i; ++script_i) - { - entry = &(_scripts[script_i]); - - entry->pid = -1; - entry->fd = -1; - entry->script_id = GUEST_SCRIPT_ID_INVALID; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Finalize -// ======================= -GuestErrorT guest_script_finalize( void ) -{ - GuestScriptDataT* entry; - - unsigned int script_i; - for (script_i=0; GUEST_CHILD_PROCESS_MAX > script_i; ++script_i) - { - entry = &(_scripts[script_i]); - if (entry->inuse) - guest_script_abort(entry->script_id); - } - - memset(_scripts, 0, sizeof(_scripts)); - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_script.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_script.h deleted file mode 100755 index e1a74c8e..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_script.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_SCRIPT_H__ -#define __GUEST_SCRIPT_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_SCRIPT_ID_INVALID -1 - -typedef int GuestScriptIdT; - -typedef void (*GuestScriptCallbackT) - (GuestScriptIdT script_id,int exit_code, char* log_msg); - -// **************************************************************************** -// Guest Script - Abort -// ==================== -extern void guest_script_abort( GuestScriptIdT script_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Invoke -// ===================== -extern GuestErrorT guest_script_invoke( - char script[], char* script_argv[], GuestScriptCallbackT callback, - GuestScriptIdT* script_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Initialize -// ========================= -extern GuestErrorT guest_script_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Script - Finalize -// ======================= -extern GuestErrorT guest_script_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_SCRIPT_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.c deleted file mode 100755 index e8ffafa4..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.c +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_selobj.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" - -typedef struct { - bool inuse; - int selobj; - GuestSelObjCallbacksT callbacks; -} GuestSelObjEntryT; - -typedef GuestSelObjEntryT GuestSelObjTableT[GUEST_SELECT_OBJS_MAX]; - -static int _num_poll_fds = 0; -static struct pollfd _poll_fds[GUEST_SELECT_OBJS_MAX]; -static GuestSelObjTableT _select_objs; - -// **************************************************************************** -// Guest Selection Object - Find Selection Object -// ============================================== -static GuestSelObjEntryT* guest_selobj_find( int selobj ) -{ - GuestSelObjEntryT* entry; - - unsigned int entry_i; - for (entry_i=0; GUEST_SELECT_OBJS_MAX > entry_i; ++entry_i) - { - entry = &(_select_objs[entry_i]); - if (entry->inuse) - if (selobj == entry->selobj) - return entry; - } - return NULL; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Register -// ================================= -GuestErrorT guest_selobj_register ( - int selobj, GuestSelObjCallbacksT* callbacks ) -{ - GuestSelObjEntryT* entry; - - entry = guest_selobj_find(selobj); - if (NULL == entry) - { - unsigned int entry_i; - for (entry_i=0; GUEST_SELECT_OBJS_MAX > entry_i; ++entry_i) - { - entry = &(_select_objs[entry_i]); - if (!entry->inuse ) - { - entry->inuse = true; - entry->selobj = selobj; - memcpy(&(entry->callbacks), callbacks, - sizeof(GuestSelObjCallbacksT)); - break; - } - } - - // Rebuild polling file descriptors. - _num_poll_fds =0; - - for (entry_i=0; GUEST_SELECT_OBJS_MAX > entry_i; ++entry_i) - { - entry = &(_select_objs[entry_i]); - if (entry->inuse) - { - memset(&_poll_fds[_num_poll_fds], 0, sizeof(struct pollfd)); - - _poll_fds[_num_poll_fds].fd = entry->selobj; - - if (NULL != entry->callbacks.read_callback) - _poll_fds[_num_poll_fds].events |= POLLIN; - - if (NULL != entry->callbacks.write_callback) - _poll_fds[_num_poll_fds].events |= POLLOUT; - - if (NULL != entry->callbacks.hangup_callback) - _poll_fds[_num_poll_fds].events |= POLLHUP; - - ++_num_poll_fds; - } - } - } else { - memcpy(&(entry->callbacks), callbacks, sizeof(GuestSelObjCallbacksT)); - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Deregister -// =================================== -GuestErrorT guest_selobj_deregister( int selobj ) -{ - GuestSelObjEntryT* entry; - - entry = guest_selobj_find(selobj); - if (NULL != entry) - memset(entry, 0, sizeof(GuestSelObjEntryT)); - - // Rebuild polling file descriptors. - _num_poll_fds =0; - - unsigned int entry_i; - for (entry_i=0; GUEST_SELECT_OBJS_MAX > entry_i; ++entry_i) - { - entry = &(_select_objs[entry_i]); - if (entry->inuse) - { - memset(&_poll_fds[_num_poll_fds], 0, sizeof(struct pollfd)); - - _poll_fds[_num_poll_fds].fd = entry->selobj; - - if (NULL != entry->callbacks.read_callback) - _poll_fds[_num_poll_fds].events |= POLLIN; - - if (NULL != entry->callbacks.write_callback) - _poll_fds[_num_poll_fds].events |= POLLOUT; - - if (NULL != entry->callbacks.hangup_callback) - _poll_fds[_num_poll_fds].events |= POLLHUP; - - ++_num_poll_fds; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Dispatch -// ================================= -GuestErrorT guest_selobj_dispatch( unsigned int timeout_in_ms ) -{ - struct pollfd* poll_entry; - GuestSelObjEntryT* entry; - int result; - - result = poll(_poll_fds, _num_poll_fds, timeout_in_ms); - if (0 > result) - { - if (errno == EINTR) - { - DPRINTFD("Interrupted by a signal."); - return GUEST_OKAY; - } else { - DPRINTFE("Select failed, error=%s.", strerror(errno)); - return GUEST_FAILED; - } - } else if (0 == result) { - DPRINTFV("Nothing selected."); - return GUEST_OKAY; - } - - unsigned int entry_i; - for (entry_i=0; _num_poll_fds > entry_i; ++entry_i) - { - poll_entry = &(_poll_fds[entry_i]); - - entry = guest_selobj_find(poll_entry->fd); - if (NULL != entry) - { - if (0 != (poll_entry->revents & POLLIN)) - if (NULL != entry->callbacks.read_callback) - { - DPRINTFD("Read on selection object %i", poll_entry->fd); - entry->callbacks.read_callback(entry->selobj); - } - - if (0 != (poll_entry->revents & POLLOUT)) - if (NULL != entry->callbacks.write_callback) - { - DPRINTFD("Write on selection object %i", poll_entry->fd); - entry->callbacks.write_callback(entry->selobj); - } - - if (0 != (poll_entry->revents & POLLHUP)) - if (NULL != entry->callbacks.hangup_callback) - { - DPRINTFD("Hangup on selection object %i", poll_entry->fd); - entry->callbacks.hangup_callback(entry->selobj); - } - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Initialize -// =================================== -GuestErrorT guest_selobj_initialize( void ) -{ - _num_poll_fds = 0; - memset(_poll_fds, 0, sizeof(_poll_fds)); - memset(_select_objs, 0, sizeof(GuestSelObjTableT)); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Finalize -// ================================= -GuestErrorT guest_selobj_finalize( void ) -{ - _num_poll_fds = 0; - memset(_poll_fds, 0, sizeof(_poll_fds)); - memset(_select_objs, 0, sizeof(GuestSelObjTableT)); - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.h deleted file mode 100755 index 46bae5ed..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_selobj.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_SELECTION_OBJECT_H__ -#define __GUEST_SELECTION_OBJECT_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*GuestSelObjReadCallbackT) (int selobj); -typedef void (*GuestSelObjWriteCallbackT) (int selobj); -typedef void (*GuestSelObjHangupCallbackT) (int selobj); - -typedef struct { - GuestSelObjReadCallbackT read_callback; - GuestSelObjWriteCallbackT write_callback; - GuestSelObjHangupCallbackT hangup_callback; -} GuestSelObjCallbacksT; - -// **************************************************************************** -// Guest Selection Object - Register -// ================================= -extern GuestErrorT guest_selobj_register( - int selobj, GuestSelObjCallbacksT* callbacks ); -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Deregister -// =================================== -extern GuestErrorT guest_selobj_deregister( int selobj ); -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Dispatch -// ================================= -extern GuestErrorT guest_selobj_dispatch( unsigned int timeout_in_ms ); -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Initialize -// =================================== -extern GuestErrorT guest_selobj_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Selection Object - Finalize -// ================================= -extern GuestErrorT guest_selobj_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_SELECTION_OBJECT_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_signal.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_signal.c deleted file mode 100755 index 9cc58c4b..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_signal.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_signal.h" - -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" - -typedef struct { - bool inuse; - int signum; - GuestSignalHandlerT handler; -} GuestSignalT; - -static GuestSignalT _signal[GUEST_MAX_SIGNALS]; - -// **************************************************************************** -// Guest Signal - Map -// ================== -static GuestSignalT* guest_signal_map( int signum ) -{ - switch (signum) - { - case SIGINT: return &(_signal[0]); - case SIGTERM: return &(_signal[1]); - case SIGQUIT: return &(_signal[2]); - case SIGHUP: return &(_signal[3]); - case SIGCHLD: return &(_signal[4]); - case SIGCONT: return &(_signal[5]); - case SIGPIPE: return &(_signal[6]); - case SIGIO: return &(_signal[7]); - default: - DPRINTFE("Mapping for signal %i missing.", signum); - } - - return NULL; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Signal - Handler -// ====================== -static void guest_signal_handler( int signum ) -{ - GuestSignalT* entry; - - DPRINTFD("Signal %i received.", signum); - - entry = guest_signal_map(signum); - if (NULL != entry) - if (entry->inuse) - if (NULL != entry->handler) - entry->handler(signum); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Signal - Register Handler -// =============================== -void guest_signal_register_handler( int signum, GuestSignalHandlerT handler ) -{ - GuestSignalT* entry; - - entry = guest_signal_map(signum); - if (NULL != entry) - { - entry->inuse = true; - entry->signum = signum; - entry->handler = handler; - signal(signum, guest_signal_handler); - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Signal - Deregister Handler -// ================================= -void guest_signal_deregister_handler( int signum ) -{ - GuestSignalT* entry; - - entry = guest_signal_map(signum); - if (NULL != entry) - { - memset(entry, 0, sizeof(GuestSignalT)); - signal(signum, SIG_DFL); - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Signal - Ignore -// ===================== -void guest_signal_ignore( int signum ) -{ - guest_signal_deregister_handler(signum); - signal(signum, SIG_IGN); -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_signal.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_signal.h deleted file mode 100755 index 5c229286..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_signal.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_SIGNAL_H__ -#define __GUEST_SIGNAL_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*GuestSignalHandlerT) (int signum); - -// **************************************************************************** -// Guest Signal - Register Handler -// =============================== -extern void guest_signal_register_handler( - int signum, GuestSignalHandlerT handler); -// **************************************************************************** - -// **************************************************************************** -// Guest Signal - Deregister Handler -// ================================= -extern void guest_signal_deregister_handler( int signum ); -// **************************************************************************** - -// **************************************************************************** -// Guest Signal - Ignore -// ===================== -extern void guest_signal_ignore( int signum ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_SIGNAL_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_stream.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_stream.c deleted file mode 100755 index 92521065..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_stream.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_stream.h" - -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" - -// **************************************************************************** -// Guest Stream - Get -// ================== -int guest_stream_get( GuestStreamT* stream ) -{ - char* byte_ptr; - int delimiter_i = 0; - - if (stream->delimiter_size > stream->size) - return -1; - - for (byte_ptr = stream->bytes; byte_ptr != stream->end_ptr; ++byte_ptr) - { - if (stream->delimiter[delimiter_i] == *byte_ptr) - { - ++delimiter_i; - if (delimiter_i == stream->delimiter_size) - { - return (byte_ptr - stream->bytes); - } - } else { - delimiter_i = 0; - } - } - - return -1; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Get Next -// ======================= -bool guest_stream_get_next( GuestStreamT* stream ) -{ - char* byte_ptr; - int delimiter_i = 0; - - if (stream->delimiter_size > stream->size) - return false; - - for (byte_ptr = stream->bytes; byte_ptr != stream->end_ptr; ++byte_ptr) - { - --stream->size; - if (stream->delimiter[delimiter_i] == *byte_ptr) - { - ++delimiter_i; - if (delimiter_i == stream->delimiter_size) - { - byte_ptr -= (stream->delimiter_size-1); - stream->size += stream->delimiter_size; - memmove(stream->bytes, byte_ptr, stream->size); - stream->avail = stream->max_size - stream->size; - stream->end_ptr = stream->bytes + stream->size; - break; - } - } else { - delimiter_i = 0; - } - } - - if (byte_ptr == stream->end_ptr) - { - // Empty the stream - memset(stream->bytes, 0, stream->max_size); - stream->avail = stream->max_size; - stream->size = 0; - stream->end_ptr = stream->bytes; - return false; - } - - return true; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Advance -// ====================== -void guest_stream_advance( int adv, GuestStreamT* stream ) -{ - stream->size -= adv; - memmove(stream->bytes, stream->bytes+adv, stream->size); - stream->avail = stream->max_size - stream->size; - stream->end_ptr = stream->bytes + stream->size; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Reset -// ==================== -void guest_stream_reset( GuestStreamT* stream ) -{ - memset(stream->bytes, 0, stream->max_size); - stream->avail = stream->max_size; - stream->size = 0; - stream->end_ptr = stream->bytes; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Setup -// ==================== -GuestErrorT guest_stream_setup( - const char* delimiter, int delimiter_size, int stream_size, - GuestStreamT* stream ) -{ - stream->delimiter = malloc(delimiter_size); - if (NULL == stream->delimiter) - { - DPRINTFE("Failed to allocated delimiter storage, needed=%i.", - delimiter_size); - return GUEST_FAILED; - } - - stream->bytes = malloc(stream_size); - if (NULL == stream->delimiter) - { - DPRINTFE("Failed to allocated stream storage, needed=%i.", stream_size); - free(stream->delimiter); - return GUEST_FAILED; - } - - memcpy(stream->delimiter, delimiter, delimiter_size); - stream->delimiter_size = delimiter_size; - memset(stream->bytes, 0, stream_size); - stream->end_ptr = stream->bytes; - stream->avail = stream_size; - stream->size = 0; - stream->max_size = stream_size; - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Release -// ====================== -GuestErrorT guest_stream_release( GuestStreamT* stream ) -{ - if (NULL != stream->delimiter) - free(stream->delimiter); - - if (NULL != stream->bytes) - free(stream->bytes); - - memset(stream, 0, sizeof(GuestStreamT)); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Initialize -// ========================= -GuestErrorT guest_stream_initialize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Finalize -// ======================= -GuestErrorT guest_stream_finalize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_stream.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_stream.h deleted file mode 100755 index 63739855..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_stream.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_STREAM_H__ -#define __GUEST_STREAM_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char* delimiter; - int delimiter_size; - char* end_ptr; - char* bytes; - int avail; - int size; - int max_size; -} GuestStreamT; - -// **************************************************************************** -// Guest Stream - Get -// ================== -extern int guest_stream_get( GuestStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Get Next -// ======================= -extern bool guest_stream_get_next( GuestStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Advance -// ====================== -extern void guest_stream_advance( int adv, GuestStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Reset -// ==================== -extern void guest_stream_reset( GuestStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Setup -// ==================== -extern GuestErrorT guest_stream_setup( - const char* delimiter, int delimiter_size, int stream_size, - GuestStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Release -// ====================== -extern GuestErrorT guest_stream_release( GuestStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Initialize -// ========================= -extern GuestErrorT guest_stream_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Stream - Finalize -// ======================= -extern GuestErrorT guest_stream_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_STREAM_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_time.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_time.c deleted file mode 100755 index cf226cf8..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_time.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_time.h" - -#include - -// **************************************************************************** -// Guest Time - Get -// ================ -void guest_time_get( GuestTimeT* time ) -{ -#ifdef CLOCK_MONOTONIC_RAW - clock_gettime(CLOCK_MONOTONIC_RAW, time); -#else - clock_gettime(CLOCK_MONOTONIC, time); -#endif -} -// **************************************************************************** - -// **************************************************************************** -// Guest Time - Get Elapsed Milliseconds -// ===================================== -long guest_time_get_elapsed_ms( GuestTimeT* time ) -{ - GuestTimeT now; - - guest_time_get(&now); - - if (NULL == time) - return ((now.tv_sec*1000) + (now.tv_nsec/1000000)); - else - return (guest_time_delta_in_ms(&now, time)); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Time - Delta in Milliseconds -// ================================== -long guest_time_delta_in_ms( GuestTimeT* end, GuestTimeT* start ) -{ - long start_in_ms = (start->tv_sec*1000) + (start->tv_nsec/1000000); - long end_in_ms = (end->tv_sec*1000) + (end->tv_nsec/1000000); - - return (end_in_ms - start_in_ms); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Time - Convert Milliseconds -// ================================= -void guest_time_convert_ms( long ms, GuestTimeT* time ) -{ - time->tv_sec = ms / 1000; - time->tv_nsec = (ms % 1000) * 1000000; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_time.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_time.h deleted file mode 100755 index 61b73d58..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_time.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_TIME_H__ -#define __GUEST_TIME_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct timespec GuestTimeT; - -// **************************************************************************** -// Guest Time - Get -// ================ -extern void guest_time_get( GuestTimeT* time ); -// **************************************************************************** - -// **************************************************************************** -// Guest Time - Get Elapsed Milliseconds -// ===================================== -extern long guest_time_get_elapsed_ms( GuestTimeT* time ); -// **************************************************************************** - -// **************************************************************************** -// Guest Time - Delta in Milliseconds -// ================================== -extern long guest_time_delta_in_ms( GuestTimeT* end, GuestTimeT* start ); -// **************************************************************************** - -// **************************************************************************** -// Guest Time - Convert Milliseconds -// ================================= -extern void guest_time_convert_ms( long ms, GuestTimeT* time ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_TIME_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_timer.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_timer.c deleted file mode 100755 index b02e62c3..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_timer.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_timer.h" - -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_time.h" - -typedef uint64_t GuestTimerInstanceT; - -typedef struct { - bool inuse; - GuestTimerInstanceT timer_instance; - GuestTimerIdT timer_id; - unsigned int ms_interval; - GuestTimeT arm_timestamp; - GuestTimerCallbackT callback; -} GuestTimerEntryT; - -typedef GuestTimerEntryT GuestTimerTableT[GUEST_TIMERS_MAX]; - -static bool _scheduling_on_time = true; -static GuestTimerInstanceT _timer_instance = 0; -static GuestTimerIdT _last_timer_dispatched = 0; -static GuestTimerTableT _timers; -static GuestTimeT _delay_timestamp; -static GuestTimeT _schedule_timestamp; - -// **************************************************************************** -// Guest Timer - Scheduling On Time -// ================================ -bool guest_timer_scheduling_on_time( void ) -{ - return _scheduling_on_time; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Scheduling On Time Within -// ======================================= -bool guest_timer_scheduling_on_time_within( unsigned int period_in_ms ) -{ - long ms_expired; - - ms_expired = guest_time_get_elapsed_ms(&_delay_timestamp); - return (period_in_ms < ms_expired); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Reset -// =================== -GuestErrorT guest_timer_reset( GuestTimerIdT timer_id ) -{ - GuestTimerEntryT* timer_entry = NULL; - - if ((GUEST_TIMER_ID_INVALID == timer_id)||(GUEST_TIMERS_MAX <= timer_id)) - return GUEST_FAILED; - - timer_entry = &(_timers[timer_id]); - guest_time_get(&timer_entry->arm_timestamp); - - DPRINTFD("Timer (%i) reset.", timer_entry->timer_id); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Register -// ====================== -GuestErrorT guest_timer_register( - unsigned int ms, GuestTimerCallbackT callback, GuestTimerIdT* timer_id ) -{ - GuestTimerEntryT* timer_entry; - - *timer_id = GUEST_TIMER_ID_INVALID; - - unsigned int timer_i; - for (timer_i=1; GUEST_TIMERS_MAX > timer_i; ++timer_i) - { - timer_entry = &(_timers[timer_i]); - - if (timer_entry->inuse) - continue; - - memset(timer_entry, 0, sizeof(GuestTimerEntryT)); - - timer_entry->inuse = true; - timer_entry->timer_instance = ++_timer_instance; - timer_entry->timer_id = timer_i; - timer_entry->ms_interval = ms; - guest_time_get(&timer_entry->arm_timestamp); - timer_entry->callback = callback; - break; - } - - if (GUEST_TIMERS_MAX <= timer_i) - { - DPRINTFE("No space available to create timer, exiting..."); - abort(); - } - - *timer_id = timer_i; - - DPRINTFD("Created timer, id=%i.", timer_entry->timer_id); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Deregister -// ======================== -GuestErrorT guest_timer_deregister( GuestTimerIdT timer_id ) -{ - GuestTimerEntryT* timer_entry = NULL; - - if ((GUEST_TIMER_ID_INVALID == timer_id)||(GUEST_TIMERS_MAX <= timer_id)) - return GUEST_OKAY; - - timer_entry = &(_timers[timer_id]); - timer_entry->inuse = false; - timer_entry->timer_instance = 0; - - DPRINTFD("Cancelled timer, id=%i.", timer_entry->timer_id); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Schedule Next -// =========================== -static unsigned int guest_timer_schedule_next( void ) -{ - GuestTimerEntryT* timer_entry; - long ms_expired, ms_remaining; - unsigned int interval_in_ms = GUEST_TICK_INTERVAL_IN_MS; - - unsigned int timer_i; - for (timer_i=0; GUEST_TIMERS_MAX > timer_i; ++timer_i) - { - timer_entry = &(_timers[timer_i]); - - if (timer_entry->inuse) - { - ms_expired = guest_time_get_elapsed_ms(&timer_entry->arm_timestamp); - if (ms_expired < timer_entry->ms_interval) - { - ms_remaining = timer_entry->ms_interval - ms_expired; - if (ms_remaining < interval_in_ms) - interval_in_ms = ms_remaining; - } else { - interval_in_ms = GUEST_MIN_TICK_INTERVAL_IN_MS; - break; - } - } - } - - if (GUEST_MIN_TICK_INTERVAL_IN_MS > interval_in_ms) - interval_in_ms = GUEST_MIN_TICK_INTERVAL_IN_MS; - - else if (GUEST_TICK_INTERVAL_IN_MS < interval_in_ms) - interval_in_ms = GUEST_TICK_INTERVAL_IN_MS; - - DPRINTFV("Scheduling timers in %d ms.", interval_in_ms); - return interval_in_ms; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Schedule -// ====================== -unsigned int guest_timer_schedule( void ) -{ - long ms_expired; - GuestTimeT time_prev; - GuestTimerEntryT* timer_entry; - unsigned int total_timers_fired =0; - - ms_expired = guest_time_get_elapsed_ms(&_schedule_timestamp); - if (ms_expired >= GUEST_SCHEDULING_MAX_DELAY_IN_MS) - { - if (_scheduling_on_time) - { - _scheduling_on_time = false; - DPRINTFI("Not scheduling on time, elapsed=%li ms.", ms_expired); - } - guest_time_get(&_delay_timestamp); - - } else if (!_scheduling_on_time) { - ms_expired = guest_time_get_elapsed_ms(&_delay_timestamp); - if (GUEST_SCHEDULING_DELAY_DEBOUNCE_IN_MS < ms_expired) - { - _scheduling_on_time = true; - DPRINTFI("Now scheduling on time."); - } - } - - guest_time_get(&time_prev); - - unsigned int timer_i; - for (timer_i=_last_timer_dispatched; GUEST_TIMERS_MAX > timer_i; ++timer_i) - { - timer_entry = &(_timers[timer_i]); - - if (timer_entry->inuse) - { - ms_expired = guest_time_get_elapsed_ms(&timer_entry->arm_timestamp); - - if (ms_expired >= timer_entry->ms_interval) - { - bool rearm; - GuestTimerInstanceT timer_instance; - - DPRINTFD("Timer %i fire, ms_interval=%d, ms_expired=%li.", - timer_entry->timer_id, timer_entry->ms_interval, - ms_expired); - - timer_instance = timer_entry->timer_instance; - - rearm = timer_entry->callback(timer_entry->timer_id); - - if (timer_instance == timer_entry->timer_instance) - { - if (rearm) - { - guest_time_get(&timer_entry->arm_timestamp); - DPRINTFD("Timer (%i) rearmed.", timer_entry->timer_id); - } else { - timer_entry->inuse = 0; - DPRINTFD("Timer (%i) removed.", timer_entry->timer_id); - } - } else { - DPRINTFD("Timer (%i) instance changed since callback, " - "rearm=%d.", timer_entry->timer_id, (int) rearm); - } - - if (GUEST_MAX_TIMERS_PER_TICK <= ++total_timers_fired) - { - DPRINTFD("Maximum timers per tick (%d) reached.", - GUEST_MAX_TIMERS_PER_TICK); - break; - } - } - } - } - - if (GUEST_TIMERS_MAX <= timer_i) - _last_timer_dispatched = 0; - else - _last_timer_dispatched = timer_i; - - ms_expired = guest_time_get_elapsed_ms(&time_prev); - if (ms_expired >= GUEST_SCHEDULING_MAX_DELAY_IN_MS) - { - _scheduling_on_time = false; - guest_time_get(&_delay_timestamp); - - DPRINTFI("Not scheduling on time, timer callbacks are taking too " - "long to execute, elapsed_time=%li ms.", ms_expired); - } else { - DPRINTFV("Timer callbacks took %li ms.", ms_expired); - } - - guest_time_get(&_schedule_timestamp); - - return guest_timer_schedule_next(); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Initialize -// ======================== -GuestErrorT guest_timer_initialize( void ) -{ - _scheduling_on_time = true; - _last_timer_dispatched = 0; - memset(_timers, 0, sizeof(GuestTimerTableT)); - guest_time_get(&_schedule_timestamp); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Finalize -// ====================== -GuestErrorT guest_timer_finalize( void ) -{ - memset(_timers, 0, sizeof(GuestTimerTableT)); - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_timer.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_timer.h deleted file mode 100755 index b3a82c07..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_timer.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_TIMER_H__ -#define __GUEST_TIMER_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_TIMER_ID_INVALID -1 - -typedef int GuestTimerIdT; - -typedef bool (*GuestTimerCallbackT) (GuestTimerIdT timer_id); - -// **************************************************************************** -// Guest Timer - Scheduling On Time -// ================================ -extern bool guest_timer_scheduling_on_time( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Scheduling On Time Within -// ======================================= -extern bool guest_timer_scheduling_on_time_within( unsigned int period_in_ms ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Reset -// =================== -extern GuestErrorT guest_timer_reset( GuestTimerIdT timer_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Register -// ====================== -extern GuestErrorT guest_timer_register( - unsigned int ms, GuestTimerCallbackT callback, GuestTimerIdT* timer_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Deregister -// ======================== -extern GuestErrorT guest_timer_deregister( GuestTimerIdT timer_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Schedule -// ====================== -extern unsigned int guest_timer_schedule( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Initialize -// ======================== -extern GuestErrorT guest_timer_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Timer - Finalize -// ====================== -extern GuestErrorT guest_timer_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_TIMER_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_types.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_types.c deleted file mode 100755 index ce92d6d5..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_types.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_types.h" - -// **************************************************************************** -// Guest Types - Error String -// ========================== -const char* guest_error_str( GuestErrorT error ) -{ - switch (error) - { - case GUEST_OKAY: return "OKAY"; - case GUEST_FAILED: return "FAILED"; - case GUEST_INTERRUPTED: return "INTERRUPTED"; - case GUEST_TRY_AGAIN: return "TRY_AGAIN"; - case GUEST_NOT_CONFIGURED: return "NOT_CONFIGURED"; - default: - return "???"; - } -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_types.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_types.h deleted file mode 100755 index ad569b24..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_types.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_TYPES_H__ -#define __GUEST_TYPES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - GUEST_OKAY, - GUEST_FAILED, - GUEST_INTERRUPTED, - GUEST_TRY_AGAIN, - GUEST_NOT_CONFIGURED=6, -} GuestErrorT; - -// **************************************************************************** -// Guest Types - Error String -// ========================== -extern const char* guest_error_str( GuestErrorT error ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_TYPES_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_unix.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_unix.c deleted file mode 100755 index 9ebd0f40..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_unix.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_unix.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_selobj.h" - -GuestUnixConnectCallbackT _callback = NULL; - -// **************************************************************************** -// Guest Unix - Connect -// ==================== -GuestErrorT guest_unix_connect( int s, char* address ) -{ - struct sockaddr_un remote; - int len, result; - - memset(&remote, 0, sizeof(remote)); - - remote.sun_family = AF_UNIX; - len = sizeof(remote.sun_family); - len += snprintf(remote.sun_path, sizeof(remote.sun_path), "%s", address); - - result = connect(s, (struct sockaddr*) &remote, sizeof(remote)); - if (0 > result) - { - DPRINTFE("Failed to connect to %s, error=%s.", address, - strerror(errno)); - return GUEST_FAILED; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Dispatch Connection -// ================================ -static void guest_unix_dispatch_connection( int s ) -{ - int sock; - struct sockaddr_un remote; - socklen_t len; - int result; - - memset(&remote, 0, sizeof(remote)); - len = sizeof(remote); - - result = accept(s, (struct sockaddr*) &remote, &len); - if (0 > result) - { - DPRINTFE("Failed to accept on socket, error=%s.", strerror(errno)); - return; - } - - sock = result; - - result = fcntl(sock, F_SETFD, FD_CLOEXEC); - if (0 > result) - { - DPRINTFE("Failed to set to close on exec, error=%s.", strerror(errno)); - close(sock); - return; - } - - result = fcntl(sock, F_GETFL); - if (0 > result) - { - DPRINTFE("Failed to get socket options, error=%s.", strerror(errno)); - close(sock); - return; - } - - result = fcntl(sock, F_SETFL, result | O_NONBLOCK); - if (0 > result) - { - DPRINTFE("Failed to set socket options, error=%s.", strerror(errno)); - close(sock); - return; - } - - if (NULL == _callback) - close(sock); - - _callback(sock, remote.sun_path); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Listen -// =================== -GuestErrorT guest_unix_listen( - int s, char* address, GuestUnixConnectCallbackT callback ) -{ - struct sockaddr_un local; - int len, result; - GuestSelObjCallbacksT callbacks; - GuestErrorT error; - - memset(&local, 0, sizeof(local)); - - local.sun_family = AF_UNIX; - len = sizeof(local.sun_family); - len += snprintf(local.sun_path, sizeof(local.sun_path), "%s", address); - - unlink(address); - - result = bind(s, (struct sockaddr*) &local, len); - if (0 > result) - { - DPRINTFE("Failed to bind socket to address %s, error=%s.", address, - strerror(errno)); - return GUEST_FAILED; - } - - result = listen(s, GUEST_MAX_CONNECTIONS); - if (0 > result) - { - DPRINTFE("Failed to listen on %s, error=%s.", address, - strerror(errno)); - return GUEST_FAILED; - } - - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.read_callback = guest_unix_dispatch_connection; - - error = guest_selobj_register(s, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register selection object, error=%s.", - guest_error_str(error)); - return error; - } - - _callback = callback; - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Send -// ================= -GuestErrorT guest_unix_send( int s, void* msg, int msg_size ) -{ - int result; - - result = write(s, msg, msg_size); - if (0 > result) - { - DPRINTFE("Failed to write to socket, error=%s.", strerror(errno)); - return GUEST_FAILED; - } - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Receive -// ==================== -GuestErrorT guest_unix_receive( - int s, void* msg_buf, int msg_buf_size, int* msg_size ) -{ - int result; - - result = read(s, msg_buf, msg_buf_size); - if (0 > result) - { - if (EINTR == errno) - { - DPRINTFD("Interrupted on socket read, error=%s.", strerror(errno)); - return GUEST_INTERRUPTED; - } else if (ECONNRESET == errno) { - DPRINTFD("Peer connection reset, error=%s.", strerror(errno)); - *msg_size = 0; - return GUEST_OKAY; - } else { - DPRINTFE("Failed to read from socket, error=%s.", strerror(errno)); - return GUEST_FAILED; - } - } else if (0 == result) { - DPRINTFD("No message received from socket."); - *msg_size = 0; - return GUEST_OKAY; - } else { - DPRINTFV("Received message, msg_size=%i.", result); - *msg_size = result; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Open -// ================= -GuestErrorT guest_unix_open( int* s ) -{ - int sock; - int reuse_addr = 1; - struct sockaddr_un local; - int result; - - *s = -1; - memset(&local, 0, sizeof(local)); - - sock = socket(AF_UNIX, SOCK_STREAM, 0); - if (0 > sock) - { - DPRINTFE("Failed to open socket, error=%s.", strerror(errno)); - return GUEST_FAILED; - } - - result = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, - sizeof(reuse_addr)); - if (0 > result) - { - DPRINTFE("Failed to set socket option (REUSEADDR), error=%s.", - strerror(errno)); - close(sock); - return GUEST_FAILED; - } - - result = fcntl(sock, F_SETFD, FD_CLOEXEC); - if (0 > result) - { - DPRINTFE("Failed to set to close on exec, error=%s.", strerror(errno)); - close(sock); - return GUEST_FAILED; - } - - result = fcntl(sock, F_GETFL); - if (0 > result) - { - DPRINTFE("Failed to get socket options, error=%s.", strerror(errno)); - close(sock); - return GUEST_FAILED; - } - - result = fcntl(sock, F_SETFL, result | O_NONBLOCK); - if (0 > result) - { - DPRINTFE("Failed to set socket options, error=%s.", strerror(errno)); - close(sock); - return GUEST_FAILED; - } - - *s = sock; - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Close -// ================== -GuestErrorT guest_unix_close( int s ) -{ - GuestErrorT error; - - if (0 <= s) - { - error = guest_selobj_deregister(s); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister selection object, error=%s.", - guest_error_str(error)); - } - - close(s); - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Initialize -// ======================= -GuestErrorT guest_unix_initialize( void ) -{ - _callback = NULL; - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Finalize -// ===================== -GuestErrorT guest_unix_finalize( void ) -{ - _callback = NULL; - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_unix.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_unix.h deleted file mode 100755 index b06f070c..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_unix.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_UNIX_H__ -#define __GUEST_UNIX_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*GuestUnixConnectCallbackT) (int selobj, char* address); - -// **************************************************************************** -// Guest Unix - Connect -// ==================== -extern GuestErrorT guest_unix_connect( int s, char* address ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Listen -// =================== -extern GuestErrorT guest_unix_listen( - int s, char* address, GuestUnixConnectCallbackT callback ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Send -// ================= -extern GuestErrorT guest_unix_send( int s, void* msg, int msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Receive -// ==================== -extern GuestErrorT guest_unix_receive( - int s, void* msg_buf, int msg_buf_size, int* msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Open -// ================= -extern GuestErrorT guest_unix_open( int* s ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Close -// ================== -extern GuestErrorT guest_unix_close( int s ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Initialize -// ======================= -extern GuestErrorT guest_unix_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Unix - Finalize -// ===================== -extern GuestErrorT guest_unix_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_UNIX_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_utils.c b/guest-client/guest-client-3.0.1/guest_client/src/guest_utils.c deleted file mode 100755 index 9a31c0fb..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_utils.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2013-2018, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_utils.h" -#include "guest_debug.h" - -#include -#include - -// **************************************************************************** -// Guest Utilities - Trim -// ====================== -char* guest_utils_trim( char* str, char* discard ) -{ - int len; - int max_len; - - if (NULL == str) - return NULL; - - // Remove leading characters - max_len = strlen(str); - for (len=0; max_len > len; ++len) - { - if (isspace(*str) || '\n' == *str) - ++str; - else if ((NULL != discard) && (NULL != strchr(discard, *str))) - ++str; - } - - // Remove trailing characters - for (len=strlen(str)-1; 0 <= len; --len) - { - if (isspace(str[len]) || '\n' == str[len]) - str[len] = '\0'; - else if ((NULL != discard) && (NULL != strchr(discard, str[len]))) - str[len] = '\0'; - } - - return str; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Utilities - Base Name -// =========================== -char* guest_utils_basename( char* str ) -{ - const char* basename = str; - - while ('\0' != *str) - { - if (*str++ == '/') - basename = str; - } - - return (char*) basename; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Utilities - Get JSON Value from Key -// return 0 if success, -1 if fail. -// ========================================= -int guest_utils_json_get_value( struct json_object* jobj, - const char* key, void * value ) -{ - struct json_object *jobj_value; - if (!json_object_object_get_ex(jobj, key, &jobj_value)) - { - DPRINTFE("failed to parse %s\n", key); - return -1; - } - enum json_type type = json_object_get_type(jobj_value); - switch(type) - { - case json_type_boolean: - *(unsigned int *)value = json_object_get_boolean(jobj_value); - break; - case json_type_int: - *(unsigned int *)value = json_object_get_int(jobj_value); - break; - case json_type_double: - *(double *)value = json_object_get_double(jobj_value); - break; - case json_type_string: - strcpy(value, json_object_get_string(jobj_value)); - break; - default: - DPRINTFE("failed to parse %s, type %d is not supported\n", key, type); - return -1; - break; - } - return 0; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Utilities - replace newline with space -// ====================== -char* guest_utils_remove_newline( char* str) -{ - char match = '\n'; - char replace = ' '; - char *match_found = strchr(str, match); - while (match_found){ - *match_found = replace; - match_found = strchr(match_found+1, match); - } - return str; -} -// **************************************************************************** \ No newline at end of file diff --git a/guest-client/guest-client-3.0.1/guest_client/src/guest_utils.h b/guest-client/guest-client-3.0.1/guest_client/src/guest_utils.h deleted file mode 100755 index 313ae2eb..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/guest_utils.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2013-2018, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_UTILITIES_H__ -#define __GUEST_UTILITIES_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define STRINGIZE(str) #str -#define MAKE_STRING(str) STRINGIZE(str) - -// **************************************************************************** -// Guest Utilities - Trim -// ====================== -extern char* guest_utils_trim( char* str, char* discard ); -// **************************************************************************** - -// **************************************************************************** -// Guest Utilities - Base Name -// =========================== -extern char* guest_utils_basename( char* str ); -// **************************************************************************** - -// **************************************************************************** -// Guest Utilities - Get JSON Value from Key -// return 0 if success, -1 if fail. -// ========================================= -extern int guest_utils_json_get_value( struct json_object* jobj, - const char* key, void * value ); - -// **************************************************************************** -// Guest Utilities - replace newline with space -// ====================== -char* guest_utils_remove_newline( char* str); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_UTILITIES_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/Makefile b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/Makefile deleted file mode 100755 index b9d9ec33..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -SHELL = /bin/sh - -## Configuration Directory Variables -prefix := /usr/local -exec_prefix := $(prefix) -sysconfdir := $(prefix)/etc -includedir := $(prefix)/include -libdir := $(exec_prefix)/lib -bindir := $(exec_prefix)/bin - -MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) -CURRENT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) - -ifndef BUILD_DIR -$(error BUILD_DIR undefined) -endif - -.SUFFIXES: -.SUFFIXES: .c .o - -.PHONY: build - -heartbeat_C_INCLUDES := -I$(CURRENT_DIR) -I$(CURRENT_DIR)/../ -heartbeat_C_INCLUDES += -I$(CURRENT_DIR)/../../../include -heartbeat_C_SRCS := $(wildcard *.c) -heartbeat_C_OBJS := ${heartbeat_C_SRCS:.c=.o} - -CFLAGS = -g -O2 -Wall -Werror -Wformat -DSYSCONFDIR=$(sysconfdir) -Wformat-security - -%.o: %.c - $(CC) $(CFLAGS) $(heartbeat_C_INCLUDES) -c $< -o $(BUILD_DIR)/$@ -ljson-c - -build: $(heartbeat_C_OBJS) diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.c deleted file mode 100755 index 48638dbc..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.c +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat.h" - -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_timer.h" - -#include "guest_heartbeat_config.h" -#include "guest_heartbeat_msg.h" -#include "guest_heartbeat_fsm.h" -#include "guest_heartbeat_health_script.h" -#include "guest_heartbeat_event_script.h" -#include "guest_heartbeat_mgmt_api.h" - -static GuestTimerIdT _release_timer_id = GUEST_TIMER_ID_INVALID; - -// **************************************************************************** -// Guest Heartbeat - Release -// ========================= -static bool guest_heartbeat_release(GuestTimerIdT timer_id) -{ - GuestErrorT error; - - error = guest_heartbeat_fsm_event_handler(GUEST_HEARTBEAT_FSM_RELEASE, - NULL); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle release event, error=%s.", - guest_error_str(error)); - return true; - } - - return false; // don't rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Channel State Change -// ====================================== -static void guest_heartbeat_channel_state_change( bool state ) -{ - GuestErrorT error; - - if (state) - { - error = guest_heartbeat_fsm_event_handler( - GUEST_HEARTBEAT_FSM_CHANNEL_UP, NULL); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle channel up event, error=%s.", - guest_error_str(error)); - return; - } - } else { - error = guest_heartbeat_fsm_event_handler( - GUEST_HEARTBEAT_FSM_CHANNEL_DOWN, NULL); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle channel down event, error=%s.", - guest_error_str(error)); - return; - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Init Ack Message -// ========================================== -static void guest_heartbeat_recv_init_ack_msg( int invocation_id ) -{ - void* event_data[] = {&invocation_id}; - GuestErrorT error; - - error = guest_heartbeat_fsm_event_handler(GUEST_HEARTBEAT_FSM_INIT_ACK, - event_data); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle heartbeat-init-ack event, error=%s.", - guest_error_str(error)); - return; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Challenge Message -// =========================================== -static void guest_heartbeat_recv_challenge_msg( void ) -{ - GuestErrorT error; - - error = guest_heartbeat_fsm_event_handler(GUEST_HEARTBEAT_FSM_CHALLENGE, - NULL); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle heartbeat-challenge event, error=%s.", - guest_error_str(error)); - return; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Action Notify Message -// =============================================== -static void guest_heartbeat_recv_action_notify_msg( - int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, int timeout_ms) -{ - void* event_data[] = {&invocation_id, &event, ¬ify, &timeout_ms}; - GuestHeartbeatFsmStateT state = guest_heartbeat_fsm_get_state(); - GuestErrorT error; - - if (GUEST_HEARTBEAT_FSM_ENABLED_STATE == state) - { - error = guest_heartbeat_fsm_event_handler(GUEST_HEARTBEAT_FSM_ACTION, - event_data); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle action notify for event %s, error=%s.", - guest_heartbeat_event_str(event), guest_error_str(error)); - return; - } - - } else { - error = guest_heartbeat_msg_send_action_response( - invocation_id, event, notify, - GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE, ""); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send action response for event %s, error=%s.", - guest_heartbeat_event_str(event), guest_error_str(error)); - return; - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Initialize -// ============================ -GuestErrorT guest_heartbeat_initialize( char* comm_device ) -{ - GuestHeartbeatMsgCallbacksT callbacks; - GuestErrorT error; - - _release_timer_id = GUEST_TIMER_ID_INVALID; - - error = guest_heartbeat_config_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat configuration, error=%s.", - guest_error_str(error)); - return error; - } - - memset(&callbacks, 0, sizeof(callbacks)); - - callbacks.channel_state_change = guest_heartbeat_channel_state_change; - callbacks.recv_init_ack = guest_heartbeat_recv_init_ack_msg; - callbacks.recv_challenge = guest_heartbeat_recv_challenge_msg; - callbacks.recv_action_notify = guest_heartbeat_recv_action_notify_msg; - - error = guest_heartbeat_msg_initialize(comm_device, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat messaging, error=%s.", - guest_error_str(error)); - return error; - } - - error = guest_heartbeat_fsm_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat fsm, error=%s.", - guest_error_str(error)); - return error; - } - - error = guest_heartbeat_mgmt_api_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat management api, error=%s.", - guest_error_str(error)); - return error; - } - - error = guest_heartbeat_health_script_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat health script handling, " - "error=%s.", guest_error_str(error)); - return error; - } - - error = guest_heartbeat_event_script_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat event script handling, " - "error=%s.", guest_error_str(error)); - return error; - } - - error = guest_timer_register(1000, guest_heartbeat_release, - &_release_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start release timer, error=%s.", - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Finalize -// ========================== -GuestErrorT guest_heartbeat_finalize( void ) -{ - GuestErrorT error; - - error = guest_heartbeat_fsm_event_handler(GUEST_HEARTBEAT_FSM_SHUTDOWN, - NULL); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle shutdown event, error=%s.", - guest_error_str(error)); - } - - if (GUEST_TIMER_ID_INVALID != _release_timer_id) - { - error = guest_timer_deregister(_release_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel release timer, error=%s.", - guest_error_str(error)); - } - _release_timer_id = GUEST_TIMER_ID_INVALID; - } - - error = guest_heartbeat_event_script_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat event script handling, " - "error=%s.", guest_error_str(error)); - } - - error = guest_heartbeat_health_script_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat health script handling, " - "error=%s.", guest_error_str(error)); - } - - error = guest_heartbeat_mgmt_api_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat management api, error=%s.", - guest_error_str(error)); - } - - error = guest_heartbeat_fsm_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat fsm, error=%s.", - guest_error_str(error)); - } - - error = guest_heartbeat_msg_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat messaging, error=%s.", - guest_error_str(error)); - } - - error = guest_heartbeat_config_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat configuration, error=%s.", - guest_error_str(error)); - } - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.h deleted file mode 100755 index d8148674..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __GUEST_HEARTBEAT_H__ -#define __GUEST_HEARTBEAT_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Heartbeat - Initialize -// ============================ -extern GuestErrorT guest_heartbeat_initialize( char* comm_device ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Finalize -// ========================== -extern GuestErrorT guest_heartbeat_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.c deleted file mode 100755 index c1e695d6..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_config.h" - -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_utils.h" - -#include "guest_heartbeat_types.h" - -#ifndef SYSCONFDIR -#define GUEST_HEARTBEAT_DEFAULT_CONFIG_FILE \ - "/etc/guest-client/heartbeat/guest_heartbeat.conf" -#else -#define GUEST_HEARTBEAT_DEFAULT_CONFIG_FILE \ - MAKE_STRING(SYSCONFDIR) "/guest-client/heartbeat/guest_heartbeat.conf" -#endif - -#define GUEST_HEARTBEAT_DEFAULT_HEARTBEAT_INIT_RETRY_MS 5000 -#define GUEST_HEARTBEAT_DEFAULT_HEARTBEAT_MIN_TIMEOUT_MS 5000 -#define GUEST_HEARTBEAT_DEFAULT_HEARTBEAT_INTERVAL_MS 1000 -#define GUEST_HEARTBEAT_DEFAULT_VOTE_MS 10000 -#define GUEST_HEARTBEAT_DEFAULT_SHUTDOWN_MS 10000 -#define GUEST_HEARTBEAT_DEFAULT_SUSPEND_MS 10000 -#define GUEST_HEARTBEAT_DEFAULT_RESUME_MS 10000 -#define GUEST_HEARTBEAT_DEFAULT_RESTART_MS 120000 - -static GuestHeartbeatConfigT _config; - -// **************************************************************************** -// Guest Heartbeat Configuration - Read -// ==================================== -static GuestErrorT guest_heartbeat_config_read( char filename[] ) -{ - char* s; - char* key; - char* value; - char delimiter[] = "="; - char discard[] = "\'\""; - char buf[1024]; - FILE* fp; - - fp = fopen(filename, "r"); - if (NULL == fp) - { - DPRINTFE("Failed to open file %s.", filename); - return GUEST_FAILED; - } - - while (NULL != (s = fgets(buf, sizeof(buf), fp))) - { - s = guest_utils_trim(s, NULL); - - // Skip empty string and comments - if (('\0' == *s) || ('#' == *s)) - continue; - - key = strtok(s, delimiter); - value = strtok(NULL, delimiter); - - key = guest_utils_trim(key, discard); - value = guest_utils_trim(value, discard); - - if ((NULL != key) && (NULL != value)) - { - if (0 == strcmp("HB_INIT_RETRY", key)) - { - _config.heartbeat_init_retry_ms = atoi(value); - - } else if (0 == strcmp("HB_MIN_TIMEOUT", key)) { - _config.heartbeat_min_timeout_ms = atoi(value); - - } else if (0 == strcmp("HB_INTERVAL", key)) { - _config.heartbeat_interval_ms = atoi(value); - - } else if (0 == strcmp("VOTE", key)) { - _config.vote_ms = atoi(value) * 1000; - - } else if (0 == strcmp("SHUTDOWN_NOTICE", key)) { - _config.shutdown_notice_ms = atoi(value) * 1000; - - } else if (0 == strcmp("SUSPEND_NOTICE", key)) { - _config.suspend_notice_ms = atoi(value) * 1000; - - } else if (0 == strcmp("RESUME_NOTICE", key)) { - _config.resume_notice_ms = atoi(value) * 1000; - - } else if (0 == strcmp("RESTART", key)) { - _config.restart_ms = atoi(value) * 1000; - - } else if (0 == strcmp("CORRECTIVE_ACTION", key)) { - if (0 == strcmp("reboot", value)) - { - _config.corrective_action = GUEST_HEARTBEAT_ACTION_REBOOT; - - } else if (0 == strcmp("stop", value)) { - _config.corrective_action = GUEST_HEARTBEAT_ACTION_STOP; - - } else if (0 == strcmp("log", value)) { - _config.corrective_action = GUEST_HEARTBEAT_ACTION_LOG; - } - - } else if (0 == strcmp("HEALTH_CHECK_INTERVAL", key)) { - _config.health_check_interval_ms = atoi(value) * 1000; - - } else if (0 == strcmp("HEALTH_CHECK_SCRIPT", key)) { - snprintf(_config.health_check_script, - sizeof(_config.health_check_script), "%s", value); - - } else if (0 == strcmp("EVENT_NOTIFICATION_SCRIPT", key)) { - snprintf(_config.event_handling_script, - sizeof(_config.event_handling_script), "%s", value); - - } else { - DPRINTFE("Unknown key %s in configuration file %s.", key, - filename); - } - } - } - - fclose(fp); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Configuration - Dump -// ==================================== -static void guest_heartbeat_config_dump( void ) -{ - DPRINTFI("Guest-Client Heartbeat Configuration:"); - DPRINTFI(" heartbeat-init-retry: %i ms", _config.heartbeat_init_retry_ms); - DPRINTFI(" heartbeat-interval: %i ms", _config.heartbeat_interval_ms); - DPRINTFI(" heartbeat-min-timeout: %i ms", _config.heartbeat_min_timeout_ms); - DPRINTFI(" vote: %i ms", _config.vote_ms); - DPRINTFI(" shutdown-notice: %i ms", _config.shutdown_notice_ms); - DPRINTFI(" suspend-notice: %i ms", _config.suspend_notice_ms); - DPRINTFI(" resume-notice: %i ms", _config.resume_notice_ms); - DPRINTFI(" restart: %i ms", _config.restart_ms); - DPRINTFI(" health-check-interval: %i ms", _config.health_check_interval_ms); - DPRINTFI(" health-check-script: %s", _config.health_check_script); - DPRINTFI(" event-handling-script: %s", _config.event_handling_script); - DPRINTFI(" corrective-action: %s", - guest_heartbeat_action_str(_config.corrective_action)); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Configuration - Get -// =================================== -GuestHeartbeatConfigT* guest_heartbeat_config_get( void ) -{ - return &_config; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Configuration - Initialize -// ========================================== -GuestErrorT guest_heartbeat_config_initialize( void ) -{ - GuestErrorT error; - - memset(&_config, 0, sizeof(GuestHeartbeatConfigT)); - - _config.heartbeat_init_retry_ms = GUEST_HEARTBEAT_DEFAULT_HEARTBEAT_INIT_RETRY_MS; - _config.heartbeat_min_timeout_ms = GUEST_HEARTBEAT_DEFAULT_HEARTBEAT_MIN_TIMEOUT_MS; - _config.heartbeat_interval_ms = GUEST_HEARTBEAT_DEFAULT_HEARTBEAT_INTERVAL_MS; - _config.vote_ms = GUEST_HEARTBEAT_DEFAULT_VOTE_MS; - _config.shutdown_notice_ms = GUEST_HEARTBEAT_DEFAULT_SHUTDOWN_MS; - _config.suspend_notice_ms = GUEST_HEARTBEAT_DEFAULT_SUSPEND_MS; - _config.resume_notice_ms = GUEST_HEARTBEAT_DEFAULT_RESUME_MS; - _config.restart_ms = GUEST_HEARTBEAT_DEFAULT_RESTART_MS; - _config.corrective_action = GUEST_HEARTBEAT_ACTION_REBOOT; - - error = guest_heartbeat_config_read(GUEST_HEARTBEAT_DEFAULT_CONFIG_FILE); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to read guest heartbeat configuration, error=%s.", - guest_error_str(error)); - return error; - } - - guest_heartbeat_config_dump(); - - if (GUEST_HEARTBEAT_MIN_INTERVAL_MS > _config.heartbeat_interval_ms) - { - DPRINTFE("Guest heartbeat interval configuration is less than %i ms.", - GUEST_HEARTBEAT_MIN_INTERVAL_MS); - return GUEST_FAILED; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Configuration - Finalize -// ======================================== -GuestErrorT guest_heartbeat_config_finalize( void ) -{ - memset(&_config, 0, sizeof(GuestHeartbeatConfigT)); - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.h deleted file mode 100755 index 6fd54a49..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_config.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HERATBEAT_CONFIGURATION_H__ -#define __GUEST_HEARTBEAT_CONFIGURATION_H__ - -#include "guest_limits.h" -#include "guest_types.h" - -#include "guest_heartbeat_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - int heartbeat_init_retry_ms; - int heartbeat_interval_ms; - int heartbeat_min_timeout_ms; - int vote_ms; - int shutdown_notice_ms; - int suspend_notice_ms; - int resume_notice_ms; - int restart_ms; - GuestHeartbeatActionT corrective_action; - int health_check_interval_ms; - char health_check_script[255]; - char event_handling_script[255]; -} GuestHeartbeatConfigT; - -// **************************************************************************** -// Guest Heartbeat Configuration - Get -// =================================== -extern GuestHeartbeatConfigT* guest_heartbeat_config_get( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Configuration - Initialize -// ========================================== -extern GuestErrorT guest_heartbeat_config_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Configuration - Finalize -// ======================================== -extern GuestErrorT guest_heartbeat_config_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_CONFIGURATION_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.c deleted file mode 100755 index 97af2984..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_disabled_state.h" - -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_timer.h" - -#include "guest_heartbeat_fsm.h" - -// **************************************************************************** -// Guest Heartbeat Disabled State - Enter -// ====================================== -GuestErrorT guest_heartbeat_disabled_state_enter( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Exit -// ===================================== -GuestErrorT guest_heartbeat_disabled_state_exit( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Transition -// =========================================== -GuestErrorT guest_heartbeat_disabled_state_transition( - GuestHeartbeatFsmStateT from_state ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Event Handler -// ============================================== -GuestErrorT guest_heartbeat_disabled_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ) -{ - switch (event) - { - case GUEST_HEARTBEAT_FSM_RELEASE: - case GUEST_HEARTBEAT_FSM_INIT_ACK: - case GUEST_HEARTBEAT_FSM_CHALLENGE: - case GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT: - case GUEST_HEARTBEAT_FSM_CHANNEL_DOWN: - case GUEST_HEARTBEAT_FSM_ACTION: - // Ignore - break; - - case GUEST_HEARTBEAT_FSM_CHANNEL_UP: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_ENABLING_STATE); - break; - - case GUEST_HEARTBEAT_FSM_SHUTDOWN: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_INITIAL_STATE); - break; - - default: - DPRINTFE("Ignoring event %s.", - guest_heartbeat_fsm_event_str(event)); - } - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Initialize -// =========================================== -GuestErrorT guest_heartbeat_disabled_state_initialize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Finalize -// ========================================= -GuestErrorT guest_heartbeat_disabled_state_finalize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.h deleted file mode 100755 index 38f88af9..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_disabled_state.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_DISABLED_STATE_H__ -#define __GUEST_HEARTBEAT_DISABLED_STATE_H__ - -#include "guest_types.h" -#include "guest_heartbeat_fsm.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Heartbeat Disabled State - Enter -// ====================================== -extern GuestErrorT guest_heartbeat_disabled_state_enter( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Exit -// ===================================== -extern GuestErrorT guest_heartbeat_disabled_state_exit( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Transition -// =========================================== -extern GuestErrorT guest_heartbeat_disabled_state_transition( - GuestHeartbeatFsmStateT from_state ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Event Handler -// ============================================== -extern GuestErrorT guest_heartbeat_disabled_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Initialize -// =========================================== -extern GuestErrorT guest_heartbeat_disabled_state_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Disabled State - Finalize -// ========================================= -extern GuestErrorT guest_heartbeat_disabled_state_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_DISABLED_STATE_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.c deleted file mode 100755 index 609cebcb..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.c +++ /dev/null @@ -1,698 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_enabled_state.h" - -#include -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_time.h" -#include "guest_timer.h" - -#include "guest_heartbeat_config.h" -#include "guest_heartbeat_msg.h" -#include "guest_heartbeat_fsm.h" -#include "guest_heartbeat_health_script.h" -#include "guest_heartbeat_event_script.h" -#include "guest_heartbeat_mgmt_api.h" - -static bool _wait_application; -static bool _wait_script; -static int _action_invocation_id; -static GuestHeartbeatEventT _action_event; -static GuestHeartbeatNotifyT _action_notify; -GuestHeartbeatVoteResultT _vote_result; -static int _action_timeout_ms; -static GuestTimerIdT _health_check_timer_id = GUEST_TIMER_ID_INVALID; -static GuestTimerIdT _challenge_timeout_timer_id = GUEST_TIMER_ID_INVALID; -static GuestTimerIdT _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; -static bool _health = true; -static char _health_log_msg[GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE]; -static char _action_log_msg[GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE]; -static GuestTimeT _last_time_reported; -static bool _last_health_reported = true; -static GuestHeartbeatActionT _last_corrective_action_reported; - -// **************************************************************************** -// Guest Heartbeat Enabled State - Health Callback -// =============================================== -static void guest_heartbeat_enabled_state_health_callback( - bool health, char* log_msg ) -{ - if (_health && !health) - { - DPRINTFI("Transition from healthy to unhealthy, msg=%s.", log_msg); - - } else if (!_health && health) { - DPRINTFI("Transition from unhealthy to healthy, msg=%s.", log_msg); - } - - _health = health; - snprintf(_health_log_msg, sizeof(_health_log_msg), "%s", log_msg); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Health Check -// ============================================ -static bool guest_heartbeat_enabled_state_health_check( - GuestTimerIdT timer_id ) -{ - GuestHeartbeatConfigT* config = guest_heartbeat_config_get(); - GuestErrorT error; - - guest_heartbeat_health_script_abort(); - - if ('\0' != config->health_check_script[0]) - { - error = guest_heartbeat_health_script_invoke( - config->health_check_script, - guest_heartbeat_enabled_state_health_callback); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to invoke health script %s.", - config->health_check_script); - return true; // rearm - } - } - - return true; // rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Challenge Timeout -// ================================================= -static bool guest_heartbeat_enabled_state_challenge_timeout( - GuestTimerIdT timer_id ) -{ - GuestHeartbeatConfigT* config = guest_heartbeat_config_get(); - GuestErrorT error; - int max_heartbeat_delay; - - max_heartbeat_delay = config->heartbeat_interval_ms*2; - if (max_heartbeat_delay < config->heartbeat_min_timeout_ms) - max_heartbeat_delay = config->heartbeat_min_timeout_ms; - - if (!guest_timer_scheduling_on_time_within(max_heartbeat_delay)) - { - DPRINTFE("Failed to receive a challenge in %i ms, but we are not " - "scheduling on time.", max_heartbeat_delay); - return true; // rearm - } - - DPRINTFE("Failed to receive a challenge in %i ms.", max_heartbeat_delay); - - error = guest_heartbeat_fsm_event_handler(GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT, - NULL); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to handle heartbeat-challenge-timeout event, " - "error=%s.", guest_error_str(error)); - return true; // rearm - } - - return true; // rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Action Timeout -// ============================================== -static bool guest_heartbeat_enabled_state_action_timeout( - GuestTimerIdT timer_id ) -{ - char log_msg[GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE]; - GuestHeartbeatVoteResultT vote_result; - GuestErrorT error; - - if (!guest_timer_scheduling_on_time_within(_action_timeout_ms)) - { - DPRINTFE("Failed to receive action script response in %i ms, but we " - "are not scheduling on time.", _action_timeout_ms); - return true; - } - - DPRINTFE("Failed to receive action responses in %i ms.", - _action_timeout_ms); - - guest_heartbeat_mgmt_api_action_abort(); - guest_heartbeat_event_script_abort(); - - if (((!_wait_application) || (!_wait_script)) && - (GUEST_HEARTBEAT_VOTE_RESULT_REJECT == _vote_result)) - { - vote_result = _vote_result; - snprintf(log_msg, sizeof(log_msg), "%s", _action_log_msg); - } else { - vote_result = GUEST_HEARTBEAT_VOTE_RESULT_TIMEOUT; - snprintf(log_msg, sizeof(log_msg), "Timeout on application and/or " - "script action responses."); - } - - error = guest_heartbeat_msg_send_action_response( - _action_invocation_id, _action_event, _action_notify, - vote_result, log_msg); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send action script response for event %s, " - "notification=%s, error=%s.", - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify), - guest_error_str(error)); - } - - _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; - return false; // don't rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Action Application Callback -// =========================================================== -static void guest_heartbeat_enabled_state_action_app_callback( - GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, - GuestHeartbeatVoteResultT vote_result, char* log_msg ) -{ - bool update; - GuestErrorT error; - - DPRINTFI("Received action application response, event=%s, notify=%s, " - "vote-result=%s, msg=%s.", guest_heartbeat_event_str(event), - guest_heartbeat_notify_str(notify), - guest_heartbeat_vote_result_str(vote_result), log_msg); - - _wait_application = false; - update = false; - - switch (vote_result) - { - case GUEST_HEARTBEAT_VOTE_RESULT_REJECT: - update = true; - break; - - case GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT: - case GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE: - if (GUEST_HEARTBEAT_VOTE_RESULT_REJECT != _vote_result) - update = true; - break; - - default: - update = false; - break; - } - - if (update) - { - _action_event = event; - _action_notify = notify; - _vote_result = vote_result; - snprintf(_action_log_msg, sizeof(_action_log_msg), "%s", log_msg); - } - - if (!_wait_script) - { - error = guest_heartbeat_msg_send_action_response( - _action_invocation_id, _action_event, _action_notify, - _vote_result, _action_log_msg); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send action response for event %s, " - "notification=%s, error=%s.", - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify), - guest_error_str(error)); - } - - if (GUEST_TIMER_ID_INVALID != _action_timeout_timer_id) - { - error = guest_timer_deregister(_action_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action script timeout timer, " - "error=%s.", guest_error_str(error)); - } - _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Action Script Callback -// ====================================================== -static void guest_heartbeat_enabled_state_action_script_callback( - GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, - GuestHeartbeatVoteResultT vote_result, char* log_msg ) -{ - bool update; - GuestErrorT error; - - DPRINTFI("Received event script response, event=%s, notify=%s, " - "vote-result=%s, msg=%s.", guest_heartbeat_event_str(event), - guest_heartbeat_notify_str(notify), - guest_heartbeat_vote_result_str(vote_result), log_msg); - - _wait_script = false; - update = false; - - switch (vote_result) - { - case GUEST_HEARTBEAT_VOTE_RESULT_REJECT: - update = true; - break; - - case GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT: - case GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE: - if (GUEST_HEARTBEAT_VOTE_RESULT_REJECT != _vote_result) - update = true; - break; - - default: - update = false; - break; - } - - if (update) - { - _action_event = event; - _action_notify = notify; - _vote_result = vote_result; - snprintf(_action_log_msg, sizeof(_action_log_msg), "%s", log_msg); - } - - if (!_wait_application) - { - error = guest_heartbeat_msg_send_action_response( - _action_invocation_id, _action_event, _action_notify, - _vote_result, _action_log_msg); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send action response for event %s, " - "notification=%s, error=%s.", - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify), - guest_error_str(error)); - } - - if (GUEST_TIMER_ID_INVALID != _action_timeout_timer_id) - { - error = guest_timer_deregister(_action_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action script timeout timer, " - "error=%s.", guest_error_str(error)); - } - _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Enter -// ===================================== -GuestErrorT guest_heartbeat_enabled_state_enter( void ) -{ - int heartbeat_timeout; - GuestHeartbeatConfigT* config = guest_heartbeat_config_get(); - GuestErrorT error; - - _health = true; - _last_health_reported = true; - - heartbeat_timeout = config->heartbeat_interval_ms*2; - if (heartbeat_timeout < config->heartbeat_min_timeout_ms) - heartbeat_timeout = config->heartbeat_min_timeout_ms; - - error = guest_timer_register(heartbeat_timeout, - guest_heartbeat_enabled_state_challenge_timeout, - &_challenge_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start challenge timeout timer, error=%s.", - guest_error_str(error)); - return error; - } - - if ((0 != config->health_check_interval_ms) && - ('\0' != config->health_check_script[0])) - { - error = guest_timer_register(config->health_check_interval_ms, - guest_heartbeat_enabled_state_health_check, - &_health_check_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start health check timer, error=%s.", - guest_error_str(error)); - return error; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Exit -// ==================================== -GuestErrorT guest_heartbeat_enabled_state_exit( void ) -{ - GuestErrorT error; - - if (GUEST_TIMER_ID_INVALID != _challenge_timeout_timer_id) - { - error = guest_timer_deregister(_challenge_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel challenge timeout timer, error=%s.", - guest_error_str(error)); - } - _challenge_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _health_check_timer_id) - { - error = guest_timer_deregister(_health_check_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel health check timer, error=%s.", - guest_error_str(error)); - } - _health_check_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _action_timeout_timer_id) - { - error = guest_timer_deregister(_action_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action timeout timer, error=%s.", - guest_error_str(error)); - } - _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - guest_heartbeat_health_script_abort(); - guest_heartbeat_event_script_abort(); - guest_heartbeat_mgmt_api_action_abort(); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Transition -// ========================================== -GuestErrorT guest_heartbeat_enabled_state_transition( - GuestHeartbeatFsmStateT from_state ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Event Handler -// ============================================= -GuestErrorT guest_heartbeat_enabled_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ) -{ - bool health = true; - GuestHeartbeatActionT corrective_action = GUEST_HEARTBEAT_ACTION_NONE; - char log_msg[GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE]; - GuestHeartbeatConfigT* config = guest_heartbeat_config_get(); - GuestErrorT error; - - switch (event) { - case GUEST_HEARTBEAT_FSM_RELEASE: - case GUEST_HEARTBEAT_FSM_INIT_ACK: - case GUEST_HEARTBEAT_FSM_CHANNEL_UP: - // Ignore. - break; - - case GUEST_HEARTBEAT_FSM_CHANNEL_DOWN: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_DISABLED_STATE); - break; - - case GUEST_HEARTBEAT_FSM_CHALLENGE: - guest_timer_reset(_challenge_timeout_timer_id); - - error = guest_heartbeat_mgmt_api_get_health(&health, - &corrective_action, log_msg, - GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to get application health, error=%s.", - guest_error_str(error)); - } - - if (health) - { - // Applications are healthy, use the last health script status. - health = _health; - corrective_action = config->corrective_action; - snprintf(log_msg, GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE, "%s", - _health_log_msg); - - } else if (!_health) { - // Applications are not healthy and the health script status - // is not healthy, need to merge the corrective action taken. - corrective_action = guest_heartbeat_merge_action( - corrective_action, - config->corrective_action); - - if (corrective_action == config->corrective_action) - { - snprintf(log_msg, GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE, "%s", - _health_log_msg); - } - } - - if (!health) - { - if ((health == _last_health_reported) && - (corrective_action == _last_corrective_action_reported) && - (60000 > guest_time_get_elapsed_ms(&_last_time_reported))) - { - DPRINTFD("Unhealthy, already reported corrective action " - "%s, setting corrective action to none.", - guest_heartbeat_action_str(corrective_action)); - - // Don't keep asking for a corrective action to be taken - // over and over again at the heartbeat interval if it has - // already been reported. - corrective_action = GUEST_HEARTBEAT_ACTION_NONE; - - } else { - _last_health_reported = health; - _last_corrective_action_reported = corrective_action; - memset(&_last_time_reported, 0, sizeof(_last_time_reported)); - - DPRINTFI("Unhealthy, reporting corrective action %s.", - guest_heartbeat_action_str(corrective_action)); - } - } else { - _last_health_reported = true; - _last_corrective_action_reported = GUEST_HEARTBEAT_ACTION_NONE; - memset(&_last_time_reported, 0, sizeof(_last_time_reported)); - } - - error = guest_heartbeat_msg_send_challenge_response(health, - corrective_action, log_msg); - if (GUEST_OKAY == error) - { - if (GUEST_HEARTBEAT_ACTION_NONE != corrective_action) - { - guest_time_get(&_last_time_reported); - } - } else { - DPRINTFE("Failed to send challenge response, error=%s.", - guest_error_str(error)); - return GUEST_OKAY; - } - break; - - case GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_ENABLING_STATE); - break; - - case GUEST_HEARTBEAT_FSM_ACTION: - guest_heartbeat_mgmt_api_action_abort(); - guest_heartbeat_event_script_abort(); - - _wait_application = false; - _wait_script = false; - _action_invocation_id = *(int*) event_data[0]; - _action_event = *(GuestHeartbeatEventT*) event_data[1]; - _action_notify = *(GuestHeartbeatNotifyT*) event_data[2]; - _action_timeout_ms = *(int*) event_data[3]; - _vote_result = GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN; - - error = guest_heartbeat_mgmt_api_action_notify( - _action_event, _action_notify, &_wait_application, - guest_heartbeat_enabled_state_action_app_callback); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to notify applications for event %s, " - "notification=%s.", - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify)); - } - - if ('\0' != config->event_handling_script[0]) - { - DPRINTFI("Invoke event script %s for event %s, " - "notification=%s.", config->event_handling_script, - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify)); - - error = guest_heartbeat_event_script_invoke( - config->event_handling_script, - _action_event, _action_notify, - guest_heartbeat_enabled_state_action_script_callback); - if (GUEST_OKAY == error) - { - _wait_script = true; - - } else { - DPRINTFE("Failed to invoke event script %s for event %s, " - "notification=%s.", config->event_handling_script, - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify)); - } - } - - if (_wait_application || _wait_script) - { - error = guest_timer_register(_action_timeout_ms, - guest_heartbeat_enabled_state_action_timeout, - &_action_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start action timeout timer, error=%s.", - guest_error_str(error)); - guest_heartbeat_mgmt_api_action_abort(); - guest_heartbeat_event_script_abort(); - return GUEST_OKAY; - } - } else { - error = guest_heartbeat_msg_send_action_response( - _action_invocation_id, _action_event, - _action_notify, GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE, - ""); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send action response for event %s, " - "notification=%s, error=%s.", - guest_heartbeat_event_str(_action_event), - guest_heartbeat_notify_str(_action_notify), - guest_error_str(error)); - } - } - break; - - case GUEST_HEARTBEAT_FSM_SHUTDOWN: - error = guest_heartbeat_msg_send_exit("Exiting..."); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send exit, error=%s.", - guest_error_str(error)); - } - - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_INITIAL_STATE); - break; - - default: - DPRINTFE("Ignoring event %s.", - guest_heartbeat_fsm_event_str(event)); - } - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Initialize -// ========================================== -GuestErrorT guest_heartbeat_enabled_state_initialize( void ) -{ - _health = true; - _health_check_timer_id = GUEST_TIMER_ID_INVALID; - _challenge_timeout_timer_id = GUEST_TIMER_ID_INVALID; - _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Finalize -// ======================================== -GuestErrorT guest_heartbeat_enabled_state_finalize( void ) -{ - GuestErrorT error; - - if (GUEST_TIMER_ID_INVALID != _challenge_timeout_timer_id) - { - error = guest_timer_deregister(_challenge_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel challenge timeout timer, error=%s.", - guest_error_str(error)); - } - _challenge_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _health_check_timer_id) - { - error = guest_timer_deregister(_health_check_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel health check timer, error=%s.", - guest_error_str(error)); - } - _health_check_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _action_timeout_timer_id) - { - error = guest_timer_deregister(_action_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action timeout timer, error=%s.", - guest_error_str(error)); - } - _action_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - _health = false; - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.h deleted file mode 100755 index 7b71065b..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabled_state.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_ENABLED_STATE_H__ -#define __GUEST_HEARTBEAT_ENABLED_STATE_H__ - -#include "guest_types.h" -#include "guest_heartbeat_fsm.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Heartbeat Enabled State - Enter -// ===================================== -extern GuestErrorT guest_heartbeat_enabled_state_enter( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Exit -// ==================================== -extern GuestErrorT guest_heartbeat_enabled_state_exit( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Transition -// ========================================== -extern GuestErrorT guest_heartbeat_enabled_state_transition( - GuestHeartbeatFsmStateT from_state ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Event Handler -// ============================================= -extern GuestErrorT guest_heartbeat_enabled_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Initialize -// ========================================== -extern GuestErrorT guest_heartbeat_enabled_state_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabled State - Finalize -// ======================================== -extern GuestErrorT guest_heartbeat_enabled_state_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_ENABLED_STATE_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.c deleted file mode 100755 index 826f2a36..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_enabling_state.h" - -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_timer.h" -#include "guest_config.h" - -#include "guest_heartbeat_config.h" -#include "guest_heartbeat_msg.h" -#include "guest_heartbeat_fsm.h" - -static int _prev_invocation_id; -static int _invocation_id; -static GuestTimerIdT _connect_timer_id = GUEST_TIMER_ID_INVALID; - -// **************************************************************************** -// Guest Heartbeat Enabling State - Attempt Connect -// ================================================ -static bool guest_heartbeat_enabling_state_connect( GuestTimerIdT timer_id ) -{ - GuestConfigT* cfg = guest_config_get(); - GuestHeartbeatMsgInitDataT data; - GuestHeartbeatConfigT* config = guest_heartbeat_config_get(); - GuestErrorT error; - - _prev_invocation_id = _invocation_id; - _invocation_id = rand(); - - memset(&data, 0, sizeof(data)); - snprintf(data.name, GUEST_NAME_MAX_CHAR, "%s", cfg->name); - data.heartbeat_interval_ms = config->heartbeat_interval_ms; - data.vote_ms = config->vote_ms; - data.shutdown_notice_ms = config->shutdown_notice_ms; - data.suspend_notice_ms = config->suspend_notice_ms; - data.resume_notice_ms = config->resume_notice_ms; - data.restart_ms = config->restart_ms; - data.corrective_action = config->corrective_action; - - error = guest_heartbeat_msg_send_init(_invocation_id, &data); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send heartbeat init message, error=%s.", - guest_error_str(error)); - return true; - } - - return true; // rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Enter -// ====================================== -GuestErrorT guest_heartbeat_enabling_state_enter( void ) -{ - GuestHeartbeatConfigT* config = guest_heartbeat_config_get(); - GuestErrorT error; - - error = guest_timer_register(config->heartbeat_init_retry_ms, - guest_heartbeat_enabling_state_connect, - &_connect_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start connect timer, error=%s.", - guest_error_str(error)); - return error; - } - - guest_heartbeat_enabling_state_connect(_connect_timer_id); - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Exit -// ===================================== -GuestErrorT guest_heartbeat_enabling_state_exit( void ) -{ - GuestErrorT error; - - if (GUEST_TIMER_ID_INVALID != _connect_timer_id) - { - error = guest_timer_deregister(_connect_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel connect timer, error=%s.", - guest_error_str(error)); - } - _connect_timer_id = GUEST_TIMER_ID_INVALID; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Transition -// =========================================== -GuestErrorT guest_heartbeat_enabling_state_transition( - GuestHeartbeatFsmStateT from_state ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Event Handler -// ============================================== -GuestErrorT guest_heartbeat_enabling_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ) -{ - int invocation_id; - - switch (event) - { - case GUEST_HEARTBEAT_FSM_RELEASE: - case GUEST_HEARTBEAT_FSM_CHALLENGE: - case GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT: - case GUEST_HEARTBEAT_FSM_ACTION: - case GUEST_HEARTBEAT_FSM_CHANNEL_UP: - // Ignore. - break; - - case GUEST_HEARTBEAT_FSM_CHANNEL_DOWN: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_DISABLED_STATE); - break; - - case GUEST_HEARTBEAT_FSM_INIT_ACK: - invocation_id = *(int*) event_data[0]; - - if ((invocation_id == _invocation_id) || - (invocation_id == _prev_invocation_id)) - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_ENABLED_STATE); - break; - - case GUEST_HEARTBEAT_FSM_SHUTDOWN: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_INITIAL_STATE); - break; - - default: - DPRINTFE("Ignoring event %s.", - guest_heartbeat_fsm_event_str(event)); - } - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Initialize -// =========================================== -GuestErrorT guest_heartbeat_enabling_state_initialize( void ) -{ - _connect_timer_id = GUEST_TIMER_ID_INVALID; - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Finalize -// ========================================= -GuestErrorT guest_heartbeat_enabling_state_finalize( void ) -{ - GuestErrorT error; - - if (GUEST_TIMER_ID_INVALID != _connect_timer_id) - { - error = guest_timer_deregister(_connect_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel connect timer, error=%s.", - guest_error_str(error)); - } - _connect_timer_id = GUEST_TIMER_ID_INVALID; - } - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.h deleted file mode 100755 index df17931f..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_enabling_state.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_ENABLING_STATE_H__ -#define __GUEST_HEARTBEAT_ENABLING_STATE_H__ - -#include "guest_types.h" -#include "guest_heartbeat_fsm.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Heartbeat Enabling State - Enter -// ====================================== -extern GuestErrorT guest_heartbeat_enabling_state_enter( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Exit -// ===================================== -extern GuestErrorT guest_heartbeat_enabling_state_exit( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Transition -// =========================================== -extern GuestErrorT guest_heartbeat_enabling_state_transition( - GuestHeartbeatFsmStateT from_state ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Event Handler -// ============================================== -extern GuestErrorT guest_heartbeat_enabling_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Initialize -// =========================================== -extern GuestErrorT guest_heartbeat_enabling_state_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Enabling State - Finalize -// ========================================= -extern GuestErrorT guest_heartbeat_enabling_state_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_ENABLING_STATE_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.c deleted file mode 100755 index c66d44c6..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_event_script.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_script.h" - -#include "guest_heartbeat_types.h" - -static GuestScriptIdT _script_id = GUEST_SCRIPT_ID_INVALID; -static GuestHeartbeatEventT _event; -static GuestHeartbeatNotifyT _notify; -static GuestHeartbeatEventScriptCallbackT _callback = NULL; - -// **************************************************************************** -// Guest Heartbeat Event Script - Event Argument -// ============================================= -const char* guest_heartbeat_event_script_event_arg( GuestHeartbeatEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_EVENT_STOP: return "stop"; - case GUEST_HEARTBEAT_EVENT_REBOOT: return "reboot"; - case GUEST_HEARTBEAT_EVENT_SUSPEND: return "suspend"; - case GUEST_HEARTBEAT_EVENT_PAUSE: return "pause"; - case GUEST_HEARTBEAT_EVENT_UNPAUSE: return "unpause"; - case GUEST_HEARTBEAT_EVENT_RESUME: return "resume"; - case GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN: return "resize_begin"; - case GUEST_HEARTBEAT_EVENT_RESIZE_END: return "resize_end"; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN: return "live_migrate_begin"; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END: return "live_migrate_end"; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN: return "cold_migrate_begin"; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END: return "cold_migrate_end"; - default: - return NULL; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Notify Argument -// ============================================== -const char* guest_heartbeat_event_script_notify_arg( GuestHeartbeatNotifyT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_NOTIFY_REVOCABLE: return "revocable"; - case GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE: return "irrevocable"; - default: - return NULL; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Abort -// ==================================== -void guest_heartbeat_event_script_abort( void ) -{ - if (GUEST_SCRIPT_ID_INVALID != _script_id) - { - DPRINTFI("Aborting event script for event %s, notification=%s, " - "script_id=%i.", guest_heartbeat_event_str(_event), - guest_heartbeat_notify_str(_notify), _script_id); - guest_script_abort(_script_id); - _script_id = GUEST_SCRIPT_ID_INVALID; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Callback -// ======================================= -static void guest_heartbeat_event_script_callback( - GuestScriptIdT script_id, int exit_code, char* log_msg ) -{ - GuestHeartbeatVoteResultT vote_result; - - if (script_id == _script_id) - { - switch (exit_code) - { - case 0: - vote_result = GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT; - break; - case 1: - vote_result = GUEST_HEARTBEAT_VOTE_RESULT_REJECT; - break; - default: - vote_result = GUEST_HEARTBEAT_VOTE_RESULT_ERROR; - break; - } - - if (NULL != _callback) - _callback(_event, _notify, vote_result, log_msg); - - _script_id = GUEST_SCRIPT_ID_INVALID; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Invoke -// ===================================== -GuestErrorT guest_heartbeat_event_script_invoke( - char script[], GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, - GuestHeartbeatEventScriptCallbackT callback) -{ - const char* event_arg = guest_heartbeat_event_script_event_arg(event); - const char* notify_arg = guest_heartbeat_event_script_notify_arg(notify); - const char* script_argv[] = {script, notify_arg, event_arg, NULL}; - GuestErrorT error; - - _event = event; - _notify = notify; - _callback = callback; - - if (NULL == event_arg) - { - DPRINTFE("Event argument invalid, event=%s.", - guest_heartbeat_event_str(event)); - return GUEST_FAILED; - } - - if (NULL == notify_arg) - { - DPRINTFE("Notify argument invalid, event=%s.", - guest_heartbeat_notify_str(notify)); - return GUEST_FAILED; - } - - error = guest_script_invoke(script, (char**) script_argv, - guest_heartbeat_event_script_callback, - &_script_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to invoke script %s, error=%s.", script, - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Initialize -// ========================================= -GuestErrorT guest_heartbeat_event_script_initialize( void ) -{ - _script_id = GUEST_SCRIPT_ID_INVALID; - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Finalize -// ======================================= -GuestErrorT guest_heartbeat_event_script_finalize( void ) -{ - guest_heartbeat_event_script_abort(); - _script_id = GUEST_SCRIPT_ID_INVALID; - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.h deleted file mode 100755 index 6b16931f..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_event_script.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_EVENT_SCRIPT_H__ -#define __GUEST_HEARTBEAT_EVENT_SCRIPT_H__ - -#include "guest_types.h" -#include "guest_heartbeat_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*GuestHeartbeatEventScriptCallbackT) - (GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, - GuestHeartbeatVoteResultT vote_result, char* log_msg); - -// **************************************************************************** -// Guest Heartbeat Event Script - Abort -// ==================================== -extern void guest_heartbeat_event_script_abort( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Invoke -// ===================================== -extern GuestErrorT guest_heartbeat_event_script_invoke( - char script[], GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, - GuestHeartbeatEventScriptCallbackT callback ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Initialize -// ========================================= -extern GuestErrorT guest_heartbeat_event_script_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Event Script - Finalize -// ======================================= -extern GuestErrorT guest_heartbeat_event_script_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_EVENT_SCRIPT_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.c deleted file mode 100755 index 21719ce7..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.c +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_fsm.h" - -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_heartbeat_initial_state.h" -#include "guest_heartbeat_enabling_state.h" -#include "guest_heartbeat_enabled_state.h" -#include "guest_heartbeat_disabled_state.h" - -typedef GuestErrorT (*GuestHeartbeatFsmStateEnterT) (void); -typedef GuestErrorT (*GuestHeartbeatFsmStateExitT) (void); -typedef GuestErrorT (*GuestHeartbeatFsmStateTransitionT) - (GuestHeartbeatFsmStateT from_state); -typedef GuestErrorT (*GuestHeartbeatFsmStateEventHandlerT) - (GuestHeartbeatFsmEventT event, void* event_data[]); -typedef GuestErrorT (*GuestHeartbeatFsmStateInitializeT) (void); -typedef GuestErrorT (*GuestHeartbeatFsmStateFinalizeT) (void); - -typedef struct { - char name[40]; - GuestHeartbeatFsmStateEnterT enter; - GuestHeartbeatFsmStateExitT exit; - GuestHeartbeatFsmStateTransitionT transition; - GuestHeartbeatFsmStateEventHandlerT event_handler; - GuestHeartbeatFsmStateInitializeT initialize; - GuestHeartbeatFsmStateFinalizeT finalize; -} GuestHeartbeatFsmStateEntryT; - -static GuestHeartbeatFsmStateEntryT _states[GUEST_HEARTBEAT_FSM_MAX_STATES]; -static GuestHeartbeatFsmStateT _current_state = GUEST_HEARTBEAT_FSM_INITIAL_STATE; - -// **************************************************************************** -// Guest Heartbeat FSM - State String -// ================================== -const char* guest_heartbeat_fsm_state_str( GuestHeartbeatFsmStateT state ) -{ - if ((0 > state) || (GUEST_HEARTBEAT_FSM_MAX_STATES <= state)) - { - return "state-???"; - } - - return _states[state].name; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Event String -// ================================== -const char* guest_heartbeat_fsm_event_str( GuestHeartbeatFsmEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_FSM_RELEASE: return "release"; - case GUEST_HEARTBEAT_FSM_INIT_ACK: return "init-ack"; - case GUEST_HEARTBEAT_FSM_CHALLENGE: return "challenge"; - case GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT: return "challenge-timeout"; - case GUEST_HEARTBEAT_FSM_ACTION: return "action"; - case GUEST_HEARTBEAT_FSM_CHANNEL_UP: return "channel-up"; - case GUEST_HEARTBEAT_FSM_CHANNEL_DOWN: return "channel-down"; - case GUEST_HEARTBEAT_FSM_SHUTDOWN: return "shutdown"; - default: - return "event-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Get State -// =============================== -GuestHeartbeatFsmStateT guest_heartbeat_fsm_get_state( void ) -{ - return _current_state; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Enter State -// ================================= -static GuestErrorT guest_heartbeat_fsm_enter_state( GuestHeartbeatFsmStateT state ) -{ - GuestHeartbeatFsmStateEntryT* entry = &(_states[state]); - GuestErrorT error; - - if (NULL != entry->enter) - { - error = entry->enter(); - if (GUEST_OKAY != error) - { - DPRINTFE("Unable to enter state %s, error=%s.", entry->name, - guest_error_str(error)); - return error; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Exit State -// ================================ -static GuestErrorT guest_heartbeat_fsm_exit_state( GuestHeartbeatFsmStateT state ) -{ - GuestHeartbeatFsmStateEntryT* entry = &(_states[state]); - GuestErrorT error; - - if (NULL != entry->exit) - { - error = entry->exit(); - if (GUEST_OKAY != error) - { - DPRINTFE("Unable to exit state %s, error=%s.", entry->name, - guest_error_str(error)); - return error; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Transition State -// ====================================== -static GuestErrorT guest_heartbeat_fsm_transition_state( - GuestHeartbeatFsmStateT from_state ) -{ - GuestHeartbeatFsmStateEntryT* entry = &(_states[from_state]); - GuestErrorT error; - - if (NULL != entry->transition) - { - error = entry->transition(from_state); - if (GUEST_OKAY != error) - { - DPRINTFE("Unable to transition from state %s, error=%s.", - entry->name, guest_error_str(error)); - return error; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Set State -// =============================== -GuestErrorT guest_heartbeat_fsm_set_state( GuestHeartbeatFsmStateT state ) -{ - GuestHeartbeatFsmStateT prev_state = _current_state; - GuestHeartbeatFsmStateEntryT* prev_entry; - GuestHeartbeatFsmStateEntryT* entry; - GuestErrorT error, error2; - - if ((0 > state) || (GUEST_HEARTBEAT_FSM_MAX_STATES <= state)) - { - DPRINTFE("Invalid state %i given.", state); - return GUEST_FAILED; - } - - prev_entry = &(_states[prev_state]); - entry = &(_states[state]); - - error = guest_heartbeat_fsm_exit_state(prev_state); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to exit state %s, error=%s.", prev_entry->name, - guest_error_str(error)); - return( error ); - } - - _current_state = state; - - error = guest_heartbeat_fsm_transition_state(prev_state); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to transition to state %s, error=%s.", - prev_entry->name, guest_error_str(error)); - goto STATE_CHANGE_TRANSITION_ERROR; - } - - error = guest_heartbeat_fsm_enter_state(state); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to enter state %s, error=%s.", entry->name, - guest_error_str(error)); - goto STATE_CHANGE_ENTER_ERROR; - } - - return( GUEST_OKAY ); - -STATE_CHANGE_ENTER_ERROR: - error2 = guest_heartbeat_fsm_transition_state(state); - if (GUEST_OKAY != error2) - { - DPRINTFE("Failed to transition from state %s, error=%s.", - entry->name, guest_error_str(error2)); - abort(); - } - -STATE_CHANGE_TRANSITION_ERROR: - _current_state = prev_state; - - error2 = guest_heartbeat_fsm_enter_state(prev_state); - if (GUEST_OKAY != error2) - { - DPRINTFE("Failed to enter state (%s), error=%s.", prev_entry->name, - guest_error_str(error2)); - abort(); - } - - return error; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Event Handler -// =================================== -GuestErrorT guest_heartbeat_fsm_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ) -{ - GuestHeartbeatFsmStateT prev_state = _current_state; - GuestHeartbeatFsmStateEntryT* entry = &(_states[_current_state]); - GuestErrorT error; - - if (NULL != entry->event_handler) - { - error = entry->event_handler(event, event_data); - if (GUEST_OKAY != error) - { - DPRINTFE("Unable to handle event %s in state %s, error=%s.", - guest_heartbeat_fsm_event_str(event), entry->name, - guest_error_str(error)); - return error; - } - - if (prev_state != _current_state) - { - DPRINTFI("Guest-Client heartbeat state change from %s to %s, " - "event=%s.", guest_heartbeat_fsm_state_str(prev_state), - guest_heartbeat_fsm_state_str(_current_state), - guest_heartbeat_fsm_event_str(event)); - } else { - DPRINTFV("Guest-Client heartbeat no state change from %s, " - "event=%s.", guest_heartbeat_fsm_state_str(prev_state), - guest_heartbeat_fsm_event_str(event)); - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Initialize -// ================================ -GuestErrorT guest_heartbeat_fsm_initialize( void ) -{ - GuestHeartbeatFsmStateEntryT* entry; - - memset(_states, 0, sizeof(_states)); - _current_state = GUEST_HEARTBEAT_FSM_INITIAL_STATE; - - // Initial State - entry = &(_states[GUEST_HEARTBEAT_FSM_INITIAL_STATE]); - snprintf(entry->name, sizeof(entry->name), "initial"); - entry->enter = guest_heartbeat_initial_state_enter; - entry->exit = guest_heartbeat_initial_state_exit; - entry->transition = guest_heartbeat_initial_state_transition; - entry->event_handler = guest_heartbeat_initial_state_event_handler; - entry->initialize = guest_heartbeat_initial_state_initialize; - entry->finalize = guest_heartbeat_initial_state_finalize; - - // Enabling State - entry = &(_states[GUEST_HEARTBEAT_FSM_ENABLING_STATE]); - snprintf(entry->name, sizeof(entry->name), "enabling"); - entry->enter = guest_heartbeat_enabling_state_enter; - entry->exit = guest_heartbeat_enabling_state_exit; - entry->transition = guest_heartbeat_enabling_state_transition; - entry->event_handler = guest_heartbeat_enabling_state_event_handler; - entry->initialize = guest_heartbeat_enabling_state_initialize; - entry->finalize = guest_heartbeat_enabling_state_finalize; - - // Enabled State - entry = &(_states[GUEST_HEARTBEAT_FSM_ENABLED_STATE]); - snprintf(entry->name, sizeof(entry->name), "enabled"); - entry->enter = guest_heartbeat_enabled_state_enter; - entry->exit = guest_heartbeat_enabled_state_exit; - entry->transition = guest_heartbeat_enabled_state_transition; - entry->event_handler = guest_heartbeat_enabled_state_event_handler; - entry->initialize = guest_heartbeat_enabled_state_initialize; - entry->finalize = guest_heartbeat_enabled_state_finalize; - - // Disabled State - entry = &(_states[GUEST_HEARTBEAT_FSM_DISABLED_STATE]); - snprintf(entry->name, sizeof(entry->name), "disabled"); - entry->enter = guest_heartbeat_disabled_state_enter; - entry->exit = guest_heartbeat_disabled_state_exit; - entry->transition = guest_heartbeat_disabled_state_transition; - entry->event_handler = guest_heartbeat_disabled_state_event_handler; - entry->initialize = guest_heartbeat_disabled_state_initialize; - entry->finalize = guest_heartbeat_disabled_state_finalize; - - unsigned int state_i; - for (state_i=0; GUEST_HEARTBEAT_FSM_MAX_STATES > state_i; ++state_i) - { - entry = &(_states[state_i]); - if (NULL != entry->initialize) - entry->initialize(); - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Finalize -// ============================== -GuestErrorT guest_heartbeat_fsm_finalize( void ) -{ - GuestHeartbeatFsmStateEntryT* entry; - - unsigned int state_i; - for (state_i=0; GUEST_HEARTBEAT_FSM_MAX_STATES > state_i; ++state_i) - { - entry = &(_states[state_i]); - if (NULL != entry->finalize) - entry->finalize(); - } - - memset(_states, 0, sizeof(_states)); - _current_state = GUEST_HEARTBEAT_FSM_INITIAL_STATE; - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.h deleted file mode 100755 index 6ff54456..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_fsm.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_FSM_H__ -#define __GUEST_HEARTBEAT_FSM_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - GUEST_HEARTBEAT_FSM_INITIAL_STATE, - GUEST_HEARTBEAT_FSM_ENABLING_STATE, - GUEST_HEARTBEAT_FSM_ENABLED_STATE, - GUEST_HEARTBEAT_FSM_DISABLED_STATE, - GUEST_HEARTBEAT_FSM_MAX_STATES -} GuestHeartbeatFsmStateT; - -typedef enum { - GUEST_HEARTBEAT_FSM_RELEASE, - GUEST_HEARTBEAT_FSM_INIT_ACK, - GUEST_HEARTBEAT_FSM_CHALLENGE, - GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT, - GUEST_HEARTBEAT_FSM_ACTION, - GUEST_HEARTBEAT_FSM_CHANNEL_UP, - GUEST_HEARTBEAT_FSM_CHANNEL_DOWN, - GUEST_HEARTBEAT_FSM_SHUTDOWN, - GUEST_HEARTBEAT_FSM_MAX_EVENTS -} GuestHeartbeatFsmEventT; - -// **************************************************************************** -// Guest Heartbeat FSM - State String -// ================================== -extern const char* guest_heartbeat_fsm_state_str( GuestHeartbeatFsmStateT state ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Event String -// ================================== -extern const char* guest_heartbeat_fsm_event_str( GuestHeartbeatFsmEventT event ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Get State -// =============================== -extern GuestHeartbeatFsmStateT guest_heartbeat_fsm_get_state( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Set State -// =============================== -extern GuestErrorT guest_heartbeat_fsm_set_state( GuestHeartbeatFsmStateT state ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Event Handler -// =================================== -extern GuestErrorT guest_heartbeat_fsm_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Initialize -// ================================ -extern GuestErrorT guest_heartbeat_fsm_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat FSM - Finalize -// ============================== -extern GuestErrorT guest_heartbeat_fsm_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_FSM_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.c deleted file mode 100755 index 73c4a38c..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_health_script.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_script.h" - -static GuestScriptIdT _script_id = GUEST_SCRIPT_ID_INVALID; -static GuestHeartbeatHealthScriptCallbackT _callback = NULL; - -// **************************************************************************** -// Guest Heartbeat Health Script - Abort -// ===================================== -void guest_heartbeat_health_script_abort( void ) -{ - if (GUEST_SCRIPT_ID_INVALID != _script_id) - { - DPRINTFI("Aborting health script, script_id=%i.", _script_id); - guest_script_abort(_script_id); - _script_id = GUEST_SCRIPT_ID_INVALID; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Callback -// ======================================== -static void guest_heartbeat_health_script_callback( - GuestScriptIdT script_id, int exit_code, char* log_msg ) -{ - if (script_id == _script_id) - { - if (NULL != _callback) - _callback((1 != exit_code), log_msg); - - _script_id = GUEST_SCRIPT_ID_INVALID; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Invoke -// ====================================== -GuestErrorT guest_heartbeat_health_script_invoke( - char script[], GuestHeartbeatHealthScriptCallbackT callback) -{ - const char* script_argv[] = {script, NULL}; - GuestErrorT error; - - _callback = callback; - - error = guest_script_invoke(script, (char**) script_argv, - guest_heartbeat_health_script_callback, - &_script_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to invoke script %s, error=%s.", script, - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Initialize -// ========================================== -GuestErrorT guest_heartbeat_health_script_initialize( void ) -{ - _script_id = GUEST_SCRIPT_ID_INVALID; - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Finalize -// ======================================== -GuestErrorT guest_heartbeat_health_script_finalize( void ) -{ - guest_heartbeat_health_script_abort(); - _script_id = GUEST_SCRIPT_ID_INVALID; - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.h deleted file mode 100755 index 6e52119e..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_health_script.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_HEALTH_SCRIPT_H__ -#define __GUEST_HEARTBEAT_HEALTH_SCRIPT_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*GuestHeartbeatHealthScriptCallbackT) (bool health, char* log_msg); - -// **************************************************************************** -// Guest Heartbeat Health Script - Abort -// ===================================== -extern void guest_heartbeat_health_script_abort( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Invoke -// ====================================== -extern GuestErrorT guest_heartbeat_health_script_invoke( - char script[], GuestHeartbeatHealthScriptCallbackT callback ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Initialize -// ========================================== -extern GuestErrorT guest_heartbeat_health_script_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Health Script - Finalize -// ======================================== -extern GuestErrorT guest_heartbeat_health_script_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_HEALTH_SCRIPT_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.c deleted file mode 100755 index 9df06f6d..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_initial_state.h" - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_heartbeat_fsm.h" - -// **************************************************************************** -// Guest Heartbeat Initial State - Enter -// ===================================== -GuestErrorT guest_heartbeat_initial_state_enter( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Exit -// ==================================== -GuestErrorT guest_heartbeat_initial_state_exit( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Transition -// ========================================== -GuestErrorT guest_heartbeat_initial_state_transition( - GuestHeartbeatFsmStateT from_state ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Event Handler -// ============================================= -GuestErrorT guest_heartbeat_initial_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ) -{ - switch (event) - { - case GUEST_HEARTBEAT_FSM_INIT_ACK: - case GUEST_HEARTBEAT_FSM_CHALLENGE: - case GUEST_HEARTBEAT_FSM_CHALLENGE_TIMEOUT: - case GUEST_HEARTBEAT_FSM_ACTION: - case GUEST_HEARTBEAT_FSM_SHUTDOWN: - // Ignore - break; - - case GUEST_HEARTBEAT_FSM_RELEASE: - case GUEST_HEARTBEAT_FSM_CHANNEL_UP: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_ENABLING_STATE); - break; - - case GUEST_HEARTBEAT_FSM_CHANNEL_DOWN: - guest_heartbeat_fsm_set_state(GUEST_HEARTBEAT_FSM_DISABLED_STATE); - break; - - default: - DPRINTFV("Ignoring event %s.", - guest_heartbeat_fsm_event_str(event)); - } - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Initialize -// ========================================== -GuestErrorT guest_heartbeat_initial_state_initialize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Finalize -// ======================================== -GuestErrorT guest_heartbeat_initial_state_finalize( void ) -{ - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.h deleted file mode 100755 index db05cf83..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_initial_state.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_INITIAL_STATE_H__ -#define __GUEST_HEARTBEAT_INITIAL_STATE_H__ - -#include "guest_types.h" -#include "guest_heartbeat_fsm.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Heartbeat Initial State - Enter -// ===================================== -extern GuestErrorT guest_heartbeat_initial_state_enter( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Exit -// ==================================== -extern GuestErrorT guest_heartbeat_initial_state_exit( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Transition -// ========================================== -extern GuestErrorT guest_heartbeat_initial_state_transition( - GuestHeartbeatFsmStateT from_state ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Event Handler -// ============================================= -extern GuestErrorT guest_heartbeat_initial_state_event_handler( - GuestHeartbeatFsmEventT event, void* event_data[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Initialize -// ========================================== -extern GuestErrorT guest_heartbeat_initial_state_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Initial State - Finalize -// ======================================== -extern GuestErrorT guest_heartbeat_initial_state_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_INITIAL_STATE_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.c deleted file mode 100755 index 00ee9dc3..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.c +++ /dev/null @@ -1,1400 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_mgmt_api.h" - -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_selobj.h" -#include "guest_unix.h" -#include "guest_stream.h" -#include "guest_timer.h" - -#include "guest_heartbeat_types.h" -#include "guest_heartbeat_api_msg_defs.h" - -#define GUEST_HEARTBEAT_MGMT_API_CHALLENGE_DEPTH 4 - -typedef struct { - char name[GUEST_HEARTBEAT_API_MSG_MAX_APPLICATION_NAME_SIZE]; - int heartbeat_interval_ms; - int vote_ms; - int shutdown_notice_ms; - int suspend_notice_ms; - int resume_notice_ms; - GuestHeartbeatActionT corrective_action; -} GuestHeartbeatMgmtApiAppConfigT; - -typedef struct { - bool healthy; - GuestHeartbeatActionT corrective_action; - char log_msg[GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE]; -} GuestHeartbeatMgmtApiAppHealthT; - -typedef struct { - bool running; - int invocation_id; - GuestHeartbeatEventT event; - GuestHeartbeatNotifyT notify; - GuestHeartbeatVoteResultT vote_result; - char log_msg[GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE]; -} GuestHeartbeatMgmtApiAppActionT; - -typedef struct { - bool inuse; - bool registered; - bool final; - int sock; - GuestStreamT stream; - int challenge_depth; - int last_challenge[GUEST_HEARTBEAT_MGMT_API_CHALLENGE_DEPTH]; - bool send_challenge_response; - GuestTimerIdT heartbeat_timer; - GuestTimerIdT heartbeat_timeout_timer; - GuestTimerIdT action_timer; - GuestHeartbeatMgmtApiAppConfigT application_config; - GuestHeartbeatMgmtApiAppHealthT application_health; - GuestHeartbeatMgmtApiAppActionT application_action; -} GuestHeartbeatMgmtApiConnectionT; - -static int _sock = -1; -static uint32_t _msg_sequence; -static GuestHeartbeatMgmtApiActionResponseT _callback; -static GuestHeartbeatMgmtApiConnectionT _connections[GUEST_APPLICATIONS_MAX]; - -// **************************************************************************** -// Guest Heartbeat Management API - Handle Action Completed -// ======================================================== -static void guest_heartbeat_mgmt_api_handle_action_completed( void ) -{ - bool update; - bool invoke_callback; - GuestHeartbeatMgmtApiAppConfigT* app_config; - GuestHeartbeatMgmtApiAppActionT* app_action; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestHeartbeatEventT event; - GuestHeartbeatNotifyT notify; - GuestHeartbeatVoteResultT vote_result; - char* log_msg; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse && connection->registered) - { - if (connection->application_action.running) - { - DPRINTFD("Still waiting for application %s to respond.", - connection->application_config.name); - return; - } - } - } - - if (NULL == _callback) - return; - - vote_result = GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN; - invoke_callback = false; - - // All action responses received or timed out. - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse && connection->registered) - { - app_config = &(connection->application_config); - app_action = &(connection->application_action); - - DPRINTFI("Application %s vote %s for event %s, notification=%s.", - app_config->name, - guest_heartbeat_vote_result_str(app_action->vote_result), - guest_heartbeat_event_str(app_action->event), - guest_heartbeat_notify_str(app_action->notify)); - - update = false; - - switch (app_action->vote_result) - { - case GUEST_HEARTBEAT_VOTE_RESULT_REJECT: - update = true; - break; - - case GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT: - case GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE: - if (GUEST_HEARTBEAT_VOTE_RESULT_REJECT != vote_result) - update = true; - break; - - default: - update = false; - break; - } - - if (update) - { - event = app_action->event; - notify = app_action->notify; - vote_result = app_action->vote_result; - log_msg = &(app_action->log_msg[0]); - invoke_callback = true; - } - } - } - - if (invoke_callback) - _callback(event, notify, vote_result, log_msg); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Close Connection -// ================================================= -static void guest_heartbeat_mgmt_api_close_connection( - GuestHeartbeatMgmtApiConnectionT* connection ) -{ - GuestErrorT error; - - if (0 <= connection->sock) - { - error = guest_selobj_deregister(connection->sock); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister select on unix socket, error=%s.", - guest_error_str(error)); - } - - close(connection->sock); - } - - if (GUEST_TIMER_ID_INVALID != connection->heartbeat_timer) - { - error = guest_timer_deregister(connection->heartbeat_timer); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - } - - if (GUEST_TIMER_ID_INVALID != connection->heartbeat_timeout_timer) - { - error = guest_timer_deregister(connection->heartbeat_timeout_timer); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - } - - if (GUEST_TIMER_ID_INVALID != connection->action_timer) - { - error = guest_timer_deregister(connection->action_timer); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action timer, error=%s.", - guest_error_str(error)); - } - } - - memset(connection, 0, sizeof(GuestHeartbeatMgmtApiConnectionT)); - connection->sock = -1; - connection->heartbeat_timer = GUEST_TIMER_ID_INVALID; - connection->heartbeat_timeout_timer = GUEST_TIMER_ID_INVALID; - connection->action_timer = GUEST_TIMER_ID_INVALID; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Action (Network to Host) -// ========================================================= -static GuestHeartbeatActionT guest_heartbeat_mgmt_api_action_ntoh( - GuestHeartbeatApiMsgActionT action ) -{ - switch (action) - { - case GUEST_HEARTBEAT_API_MSG_ACTION_NONE: - return GUEST_HEARTBEAT_ACTION_NONE; - case GUEST_HEARTBEAT_API_MSG_ACTION_REBOOT: - return GUEST_HEARTBEAT_ACTION_REBOOT; - case GUEST_HEARTBEAT_API_MSG_ACTION_STOP: - return GUEST_HEARTBEAT_ACTION_STOP; - case GUEST_HEARTBEAT_API_MSG_ACTION_LOG: - return GUEST_HEARTBEAT_ACTION_LOG; - default: - DPRINTFE("Unknown action %i.", action); - return GUEST_HEARTBEAT_ACTION_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Event (Host to Network) -// ======================================================== -static GuestHeartbeatApiMsgEventT guest_heartbeat_mgmt_api_event_hton( - GuestHeartbeatEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_EVENT_STOP: - return GUEST_HEARTBEAT_API_MSG_EVENT_STOP; - case GUEST_HEARTBEAT_EVENT_REBOOT: - return GUEST_HEARTBEAT_API_MSG_EVENT_REBOOT; - case GUEST_HEARTBEAT_EVENT_SUSPEND: - return GUEST_HEARTBEAT_API_MSG_EVENT_SUSPEND; - case GUEST_HEARTBEAT_EVENT_PAUSE: - return GUEST_HEARTBEAT_API_MSG_EVENT_PAUSE; - case GUEST_HEARTBEAT_EVENT_UNPAUSE: - return GUEST_HEARTBEAT_API_MSG_EVENT_UNPAUSE; - case GUEST_HEARTBEAT_EVENT_RESUME: - return GUEST_HEARTBEAT_API_MSG_EVENT_RESUME; - case GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN: - return GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_BEGIN; - case GUEST_HEARTBEAT_EVENT_RESIZE_END: - return GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_END; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END: - return GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_END; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END: - return GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_END; - default: - DPRINTFE("Unknown event %i.", event); - return GUEST_HEARTBEAT_API_MSG_EVENT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Event (Network to Host) -// ======================================================== -static GuestHeartbeatEventT guest_heartbeat_mgmt_api_event_ntoh( - GuestHeartbeatApiMsgEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_API_MSG_EVENT_STOP: - return GUEST_HEARTBEAT_EVENT_STOP; - case GUEST_HEARTBEAT_API_MSG_EVENT_REBOOT: - return GUEST_HEARTBEAT_EVENT_REBOOT; - case GUEST_HEARTBEAT_API_MSG_EVENT_SUSPEND: - return GUEST_HEARTBEAT_EVENT_SUSPEND; - case GUEST_HEARTBEAT_API_MSG_EVENT_PAUSE: - return GUEST_HEARTBEAT_EVENT_PAUSE; - case GUEST_HEARTBEAT_API_MSG_EVENT_UNPAUSE: - return GUEST_HEARTBEAT_EVENT_UNPAUSE; - case GUEST_HEARTBEAT_API_MSG_EVENT_RESUME: - return GUEST_HEARTBEAT_EVENT_RESUME; - case GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_BEGIN: - return GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN; - case GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_END: - return GUEST_HEARTBEAT_EVENT_RESIZE_END; - case GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_END: - return GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END; - case GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_END: - return GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END; - default: - DPRINTFE("Unknown event %i.", event); - return GUEST_HEARTBEAT_EVENT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Notify (Host to Network) -// ========================================================= -static GuestHeartbeatApiMsgNotifyT guest_heartbeat_mgmt_api_notify_hton( - GuestHeartbeatNotifyT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_NOTIFY_REVOCABLE: - return GUEST_HEARTBEAT_API_MSG_NOTIFY_REVOCABLE; - case GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE: - return GUEST_HEARTBEAT_API_MSG_NOTIFY_IRREVOCABLE; - default: - DPRINTFE("Unknown notify type %i.", notify); - return GUEST_HEARTBEAT_API_MSG_NOTIFY_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Notify (Network to Host) -// ========================================================= -static GuestHeartbeatNotifyT guest_heartbeat_mgmt_api_notify_ntoh( - GuestHeartbeatApiMsgNotifyT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_API_MSG_NOTIFY_REVOCABLE: - return GUEST_HEARTBEAT_NOTIFY_REVOCABLE; - case GUEST_HEARTBEAT_API_MSG_NOTIFY_IRREVOCABLE: - return GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE; - default: - DPRINTFE("Unknown notify type %i.", notify); - return GUEST_HEARTBEAT_NOTIFY_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Vote Result (Network to Host) -// ============================================================== -static GuestHeartbeatVoteResultT guest_heartbeat_mgmt_api_vote_result_ntoh( - GuestHeartbeatApiMsgVoteResultT vote_result ) -{ - switch (vote_result) - { - case GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_ACCEPT: - return GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT; - case GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_REJECT: - return GUEST_HEARTBEAT_VOTE_RESULT_REJECT; - case GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_COMPLETE: - return GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE; - default: - DPRINTFE("Unknown vote result %i.", vote_result); - return GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Send Init Ack -// ============================================== -static GuestErrorT guest_heartbeat_mgmt_api_send_init_ack( int s, bool accept ) -{ - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT *hdr = &(msg.header); - GuestHeartbeatApiMsgInitAckT *bdy = &(msg.body.init_ack); - GuestErrorT error; - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_INIT_ACK; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - bdy->accepted = accept; - - error = guest_unix_send(s, &msg, sizeof(msg)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat register ack message, " - "error=%s.", guest_error_str(error)); - return error; - } - - DPRINTFD("Sent register ack."); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Send Heartbeat -// =============================================== -static GuestErrorT guest_heartbeat_mgmt_api_send_heartbeat( int s, int challenge ) -{ - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT *hdr = &(msg.header); - GuestHeartbeatApiMsgChallengeT *bdy = &(msg.body.challenge); - GuestErrorT error; - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_CHALLENGE; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - bdy->heartbeat_challenge = challenge; - - error = guest_unix_send(s, &msg, sizeof(msg)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat message, error=%s.", - guest_error_str(error)); - return error; - } - - DPRINTFD("Sent heartbeat message."); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Send Action Notify -// =================================================== -static GuestErrorT guest_heartbeat_mgmt_api_send_action_notify( - int s, int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify ) -{ - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT *hdr = &(msg.header); - GuestHeartbeatApiMsgActionNotifyT *bdy = &(msg.body.action_notify); - GuestErrorT error; - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_ACTION_NOTIFY; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - bdy->invocation_id = invocation_id; - bdy->event_type = guest_heartbeat_mgmt_api_event_hton(event); - bdy->notification_type = guest_heartbeat_mgmt_api_notify_hton(notify); - - error = guest_unix_send(s, &msg, sizeof(msg)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat action notify message, " - "error=%s.", guest_error_str(error)); - return error; - } - - DPRINTFD("Sent action notify."); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Heartbeat Interval -// =================================================== -static bool guest_heartbeat_mgmt_api_heartbeat_interval( GuestTimerIdT timer_id ) -{ - int challenge; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse) - if (timer_id == connection->heartbeat_timer) - break; - } - - if (GUEST_APPLICATIONS_MAX <= connection_i) - { - DPRINTFE("Uknown timer %i.", timer_id); - return false; // don't rearm - } - - if (!(connection->send_challenge_response)) - { - DPRINTFD("Waiting for challenge response for previous iteration."); - return true; // rearm - } - - challenge = rand(); - ++connection->challenge_depth; - if (GUEST_HEARTBEAT_MGMT_API_CHALLENGE_DEPTH <= connection->challenge_depth) - connection->challenge_depth = 0; - - connection->last_challenge[connection->challenge_depth] = challenge; - - error = guest_heartbeat_mgmt_api_send_heartbeat( connection->sock, - challenge ); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send heartbeat, error=%s.", guest_error_str(error)); - return true; // rearm - } - - connection->send_challenge_response = false; - return true; // rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Heartbeat Timeout -// ================================================== -static bool guest_heartbeat_mgmt_api_heartbeat_timeout( GuestTimerIdT timer_id ) -{ - bool prev_health; - GuestHeartbeatMgmtApiAppConfigT* app_config; - GuestHeartbeatMgmtApiAppHealthT* app_health; - GuestHeartbeatMgmtApiConnectionT* connection; - int max_heartbeat_delay; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse) - if (timer_id == connection->heartbeat_timeout_timer) - break; - } - - if (GUEST_APPLICATIONS_MAX <= connection_i) - { - DPRINTFE("Uknown timer %i.", timer_id); - return false; // don't rearm - } - - app_config = &(connection->application_config); - app_health = &(connection->application_health); - - max_heartbeat_delay = app_config->heartbeat_interval_ms*2; - - if (!guest_timer_scheduling_on_time_within(max_heartbeat_delay)) - { - DPRINTFE("Failed to receive a heartbeat in %i ms, but we are not " - "scheduling on time.", max_heartbeat_delay); - return true; // rearm - } - - prev_health = app_health->healthy; - app_health->healthy = false; - app_health->corrective_action = app_config->corrective_action; - snprintf(app_health->log_msg, GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE, - "Application %s heartbeat timeout %i ms.", app_config->name, - app_config->heartbeat_interval_ms*2); - - if (prev_health) - { - DPRINTFI("Application %s heartbeat timeout %i ms, " - "corrective_action=%s, log_msg=%s.", app_config->name, - max_heartbeat_delay, - guest_heartbeat_action_str(app_health->corrective_action), - app_health->log_msg); - } - return true; // rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Receive Init -// ============================================= -static void guest_heartbeat_mgmt_api_recv_init( - GuestHeartbeatMgmtApiConnectionT* connection ) -{ - bool accepted = true; - GuestHeartbeatMgmtApiAppConfigT* app_config; - GuestHeartbeatMgmtApiAppHealthT* app_health; - GuestHeartbeatMgmtApiAppActionT* app_action; - char* ptr = connection->stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - GuestErrorT error; - - DPRINTFD("Heartbeat Init received..."); - - app_config = &(connection->application_config); - app_health = &(connection->application_health); - app_action = &(connection->application_action); - - snprintf(app_config->name, - GUEST_HEARTBEAT_API_MSG_MAX_APPLICATION_NAME_SIZE, "%s", ptr); - ptr += GUEST_HEARTBEAT_API_MSG_MAX_APPLICATION_NAME_SIZE; - app_config->heartbeat_interval_ms = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - app_config->vote_ms = (*(uint32_t*) ptr) * 1000; - ptr += sizeof(uint32_t); - app_config->shutdown_notice_ms = (*(uint32_t*) ptr) * 1000; - ptr += sizeof(uint32_t); - app_config->suspend_notice_ms = (*(uint32_t*) ptr) * 1000; - ptr += sizeof(uint32_t); - app_config->resume_notice_ms = (*(uint32_t*) ptr) * 1000; - ptr += sizeof(uint32_t); - app_config->corrective_action - = guest_heartbeat_mgmt_api_action_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - - if (GUEST_HEARTBEAT_MIN_INTERVAL_MS > app_config->heartbeat_interval_ms) - { - DPRINTFE("Not accepting application %s registration, unsupported " - "heartbeat interval, less than %s ms.", app_config->name, - GUEST_HEARTBEAT_MIN_INTERVAL_MS); - accepted = false; - } - - error = guest_heartbeat_mgmt_api_send_init_ack(connection->sock, accepted); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send register ack message, error=%s.", - guest_error_str(error)); - return; - } - - if (!accepted) - return; - - error = guest_timer_register(app_config->heartbeat_interval_ms, - guest_heartbeat_mgmt_api_heartbeat_interval, - &(connection->heartbeat_timer)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register heartbeat timer, error=%s.", - guest_error_str(error)); - return; - } - - error = guest_timer_register(app_config->heartbeat_interval_ms*2, - guest_heartbeat_mgmt_api_heartbeat_timeout, - &(connection->heartbeat_timeout_timer)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register heartbeat timeout timer, error=%s.", - guest_error_str(error)); - return; - } - - app_health->healthy = true; - app_health->corrective_action = GUEST_HEARTBEAT_ACTION_NONE; - app_health->log_msg[0] = '\0'; - - app_action->event = GUEST_HEARTBEAT_EVENT_UNKNOWN; - app_action->notify = GUEST_HEARTBEAT_NOTIFY_UNKNOWN; - app_action->vote_result = GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN; - app_action->log_msg[0] = '\0'; - - connection->send_challenge_response = true; - connection->registered = true; - connection->final = false; - - DPRINTFI("Connection accepted from %s.", app_config->name); - DPRINTFI(" socket: %i", connection->sock); - DPRINTFI(" heartbeat_interval_ms: %i", app_config->heartbeat_interval_ms); - DPRINTFI(" vote_ms: %i", app_config->vote_ms); - DPRINTFI(" shutdown_notice_ms: %i", app_config->shutdown_notice_ms); - DPRINTFI(" resume_notice_ms: %i", app_config->resume_notice_ms); - DPRINTFI(" corrective_action: %s", - guest_heartbeat_action_str(app_config->corrective_action)); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Receive Final -// ============================================== -static void guest_heartbeat_mgmt_api_recv_final( - GuestHeartbeatMgmtApiConnectionT* connection ) -{ - char* log_msg; - char* ptr = connection->stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - - log_msg = ptr; - ptr += GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE; - - DPRINTFD("Heartbeat Final Response received..."); - - DPRINTFI("Application %s has deregistered, msg=%s.", - connection->application_config.name, log_msg); - - connection->registered = false; - connection->final = true; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Receive Challenge Response -// =========================================================== -static void guest_heartbeat_mgmt_api_recv_challenge_response( - GuestHeartbeatMgmtApiConnectionT* connection ) -{ - uint32_t heartbeat_response; - uint32_t health; - GuestHeartbeatActionT corrective_action; - char* log_msg; - GuestHeartbeatMgmtApiAppConfigT* app_config; - GuestHeartbeatMgmtApiAppHealthT* app_health; - char* ptr = connection->stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - - heartbeat_response = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - health = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - corrective_action - = guest_heartbeat_mgmt_api_action_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - log_msg = ptr; - ptr += GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE; - - unsigned int challenge_i; - for (challenge_i=0; GUEST_HEARTBEAT_MGMT_API_CHALLENGE_DEPTH > challenge_i; - ++challenge_i) - { - if (connection->last_challenge[challenge_i] == heartbeat_response) - break; - } - - if (GUEST_HEARTBEAT_MGMT_API_CHALLENGE_DEPTH == challenge_i) - { - DPRINTFE("Mismatch between last transmitted challenges and received " - "challenge."); - return; - } - - DPRINTFD("Heartbeat Challenge Response received..."); - connection->send_challenge_response = true; - - app_config = &(connection->application_config); - app_health = &(connection->application_health); - - if (health != app_health->healthy) - { - DPRINTFI("Application %s health state change, prev_health=%i, " - "health=%i, corrective_action=%s, log_msg=%s.", - app_config->name, app_health->healthy, health, - guest_heartbeat_action_str(corrective_action), - log_msg); - } - - app_health->healthy = health; - app_health->corrective_action = corrective_action; - snprintf(app_health->log_msg, GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE, "%s", - log_msg); - - guest_timer_reset(connection->heartbeat_timeout_timer); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Receive Action Response -// ======================================================== -static void guest_heartbeat_mgmt_api_recv_action_response( - GuestHeartbeatMgmtApiConnectionT* connection ) -{ - int invocation_id; - GuestHeartbeatEventT event; - GuestHeartbeatNotifyT notify; - GuestHeartbeatVoteResultT vote_result; - GuestHeartbeatMgmtApiAppActionT* app_action; - char* log_msg; - char* ptr = connection->stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - GuestErrorT error; - - app_action = &(connection->application_action); - - invocation_id = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - event = guest_heartbeat_mgmt_api_event_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - notify = guest_heartbeat_mgmt_api_notify_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - vote_result = guest_heartbeat_mgmt_api_vote_result_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - log_msg = ptr; - ptr += GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE; - - if (!(app_action->running)) - { - DPRINTFD("No action inprogress."); - return; - } - - if (invocation_id != app_action->invocation_id) - { - DPRINTFE("Unexpected action invocation %i received for %s.", - invocation_id, guest_heartbeat_event_str(event)); - return; - } - - DPRINTFD("Heartbeat Action Response received..."); - - app_action->running = false; - app_action->event = event; - app_action->notify = notify; - app_action->vote_result = vote_result; - snprintf(app_action->log_msg, GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE, "%s", - log_msg); - - if (GUEST_TIMER_ID_INVALID != connection->action_timer) - { - error = guest_timer_deregister(connection->action_timer); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action timer, error=%s.", - guest_error_str(error)); - } - - connection->action_timer = GUEST_TIMER_ID_INVALID; - } - - guest_heartbeat_mgmt_api_handle_action_completed(); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Dispatch -// ========================================= -static void guest_heartbeat_mgmt_api_dispatch( int selobj ) -{ - static bool have_start = false; - static bool have_header = false; - static GuestHeartbeatApiMsgHeaderT hdr; - - bool more; - int bytes_received; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse) - if (selobj == connection->sock) - break; - } - - if (GUEST_APPLICATIONS_MAX <= connection_i) - { - DPRINTFE("Uknown selection object %i.", selobj); - close(selobj); - return; - } - - error = guest_unix_receive(connection->sock, connection->stream.end_ptr, - connection->stream.avail, &bytes_received); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to receive message, error=%s.", - guest_error_str(error)); - return; - } - - if (0 == bytes_received) - { - DPRINTFI("Connection closed on %i.", connection->sock); - guest_heartbeat_mgmt_api_close_connection(connection); - return; - } - - DPRINTFD("Bytes received is %i.", bytes_received); - - connection->stream.end_ptr += bytes_received; - connection->stream.avail -= bytes_received; - connection->stream.size += bytes_received; - - do - { - more = false; - - if (!have_start) - { - memset(&hdr, 0 ,sizeof(GuestHeartbeatApiMsgHeaderT)); - have_start = guest_stream_get_next(&(connection->stream)); - } - - if (have_start && !have_header) - { - if (sizeof(GuestHeartbeatApiMsgHeaderT) <= connection->stream.size) - { - char* ptr = connection->stream.bytes - + GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE; - - hdr.version = *(uint8_t*) ptr; - ptr += sizeof(uint8_t); - hdr.revision = *(uint8_t*) ptr; - ptr += sizeof(uint8_t); - hdr.msg_type = *(uint16_t*) ptr; - ptr += sizeof(uint16_t); - hdr.sequence = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - hdr.size = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - - DPRINTFD("Message header: version=%i, revision=%i, " - "msg_type=%i, sequence=%u, size=%u", hdr.version, - hdr.revision, hdr.msg_type, hdr.sequence, hdr.size); - - if (GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT == hdr.version) - { - have_header = true; - } else { - have_start = false; - have_header = false; - guest_stream_advance(GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE, - &connection->stream); - more = true; - } - } - } - - if (have_start && have_header) - { - if (sizeof(GuestHeartbeatApiMsgT) <= connection->stream.size) - { - switch(hdr.msg_type) - { - case GUEST_HEARTBEAT_API_MSG_INIT: - guest_heartbeat_mgmt_api_recv_init(connection); - break; - - case GUEST_HEARTBEAT_API_MSG_FINAL: - guest_heartbeat_mgmt_api_recv_final(connection); - break; - - case GUEST_HEARTBEAT_API_MSG_CHALLENGE_RESPONSE: - guest_heartbeat_mgmt_api_recv_challenge_response(connection); - break; - - case GUEST_HEARTBEAT_API_MSG_ACTION_RESPONSE: - guest_heartbeat_mgmt_api_recv_action_response(connection); - break; - - default: - DPRINTFV("Unknown message type %i.", - (int) hdr.msg_type); - break; - } - - have_start = false; - have_header = false; - guest_stream_advance(sizeof(GuestHeartbeatApiMsgT), - &(connection->stream)); - more = true; - } - } - } while (more); - - if (0 >= connection->stream.avail) - guest_stream_reset(&(connection->stream)); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Connect Handler -// ================================================ -static void guest_heartbeat_mgmt_api_connect_handler( int selobj, char* address ) -{ - int stream_size; - GuestSelObjCallbacksT callbacks; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - DPRINTFD("Connect on socket %i.", selobj); - - // Find unused connection. - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (!connection->inuse) - { - memset(connection, 0, sizeof(GuestHeartbeatMgmtApiConnectionT)); - connection->inuse = true; - connection->registered = false; - connection->sock = selobj; - connection->heartbeat_timer = GUEST_TIMER_ID_INVALID; - connection->heartbeat_timeout_timer = GUEST_TIMER_ID_INVALID; - connection->action_timer = GUEST_TIMER_ID_INVALID; - break; - } - } - - if (GUEST_APPLICATIONS_MAX <= connection_i) - { - // Find unregistered connection and replace. - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if ((connection->inuse) && (!connection->registered)) - { - guest_heartbeat_mgmt_api_close_connection(connection); - connection->inuse = true; - connection->registered = false; - connection->sock = selobj; - break; - } - } - } - - if (GUEST_APPLICATIONS_MAX <= connection_i) - { - DPRINTFE("Failed to allocate connection."); - close(selobj); - return; - } - - stream_size = sizeof(GuestHeartbeatApiMsgT)*4; - if (8192 > stream_size) - stream_size = 8192; - - error = guest_stream_setup(GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE, - stream_size, &(connection->stream)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to setup stream, error=%s.", guest_error_str(error)); - close(connection->sock); - memset(connection, 0, sizeof(GuestHeartbeatMgmtApiConnectionT)); - connection->sock = -1; - connection->heartbeat_timer = GUEST_TIMER_ID_INVALID; - connection->heartbeat_timeout_timer = GUEST_TIMER_ID_INVALID; - connection->action_timer = GUEST_TIMER_ID_INVALID; - - return; - } - - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.read_callback = guest_heartbeat_mgmt_api_dispatch; - - error = guest_selobj_register(connection->sock, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register select on unix socket, error=%s.", - guest_error_str(error)); - close(connection->sock); - guest_stream_release(&(connection->stream)); - memset(connection, 0, sizeof(GuestHeartbeatMgmtApiConnectionT)); - connection->sock = -1; - connection->heartbeat_timer = GUEST_TIMER_ID_INVALID; - connection->heartbeat_timeout_timer = GUEST_TIMER_ID_INVALID; - connection->action_timer = GUEST_TIMER_ID_INVALID; - return; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Get Health -// =========================================== -GuestErrorT guest_heartbeat_mgmt_api_get_health( - bool* health, GuestHeartbeatActionT* corrective_action, char log_msg[], - int log_msg_size ) -{ - GuestHeartbeatMgmtApiAppHealthT* app_health; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestHeartbeatActionT update; - - *health = true; - *corrective_action = GUEST_HEARTBEAT_ACTION_NONE; - log_msg[0] = '\0'; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if ((connection->inuse) && (connection->registered)) - { - app_health = &(connection->application_health); - if (!(app_health->healthy)) - { - update = guest_heartbeat_merge_action( - *corrective_action, app_health->corrective_action); - - if (update == app_health->corrective_action) - { - *health = false; - *corrective_action = update; - snprintf(log_msg, log_msg_size, "%s", app_health->log_msg); - } - } - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Action Timeout -// =============================================== -static bool guest_heartbeat_mgmt_api_action_timeout( GuestTimerIdT timer_id ) -{ - GuestHeartbeatMgmtApiAppActionT* app_action; - GuestHeartbeatMgmtApiConnectionT* connection; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse) - if (timer_id == connection->action_timer) - break; - } - - if (GUEST_APPLICATIONS_MAX <= connection_i) - { - DPRINTFE("Uknown timer %i.", timer_id); - return false; // don't rearm - } - - app_action = &(connection->application_action); - - if (app_action->running) - { - app_action->running = false; - app_action->vote_result = GUEST_HEARTBEAT_VOTE_RESULT_TIMEOUT; - } - - guest_heartbeat_mgmt_api_handle_action_completed(); - connection->action_timer = GUEST_TIMER_ID_INVALID; - return false; // don't rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Action Abort -// ============================================= -void guest_heartbeat_mgmt_api_action_abort( void ) -{ - GuestHeartbeatMgmtApiAppConfigT* app_config; - GuestHeartbeatMgmtApiAppActionT* app_action; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse && connection->registered) - { - app_config = &(connection->application_config); - app_action = &(connection->application_action); - - if (app_action->running) - { - DPRINTFI("Aborting action %s for application %s, " - "notification=%s.", app_config->name, - guest_heartbeat_event_str(app_action->event), - guest_heartbeat_notify_str(app_action->notify)); - } - - app_action->running = false; - - if (GUEST_TIMER_ID_INVALID != connection->action_timer) - { - error = guest_timer_deregister(connection->action_timer); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel action timer, error=%s.", - guest_error_str(error)); - } - connection->action_timer = GUEST_TIMER_ID_INVALID; - } - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Action Notify -// ============================================== -GuestErrorT guest_heartbeat_mgmt_api_action_notify( - GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, bool* wait, - GuestHeartbeatMgmtApiActionResponseT callback ) -{ - int action_timeout_ms; - GuestHeartbeatMgmtApiAppConfigT* app_config; - GuestHeartbeatMgmtApiAppActionT* app_action; - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - *wait = false; - _callback = NULL; - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - if (connection->inuse && connection->registered) - { - app_config = &(connection->application_config); - app_action = &(connection->application_action); - - app_action->running = true; - app_action->invocation_id = rand(); - app_action->event = event; - app_action->notify = notify; - app_action->vote_result = GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN; - - error = guest_heartbeat_mgmt_api_send_action_notify( - connection->sock, app_action->invocation_id, event, - notify ); - if (GUEST_OKAY == error) - { - DPRINTFI("Sent action to appplication %s for event %s, " - "notification=%s.", app_config->name, - guest_heartbeat_event_str(event), - guest_heartbeat_notify_str(notify)); - } else { - DPRINTFE("Failed to send action to application %s for " - "event %s, notification=%s.", app_config->name, - guest_heartbeat_event_str(event), - guest_heartbeat_notify_str(notify)); - } - - if (GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE == notify) - { - switch (event) - { - case GUEST_HEARTBEAT_EVENT_STOP: - case GUEST_HEARTBEAT_EVENT_REBOOT: - action_timeout_ms = app_config->shutdown_notice_ms; - break; - - case GUEST_HEARTBEAT_EVENT_PAUSE: - case GUEST_HEARTBEAT_EVENT_SUSPEND: - case GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN: - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN: - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN: - action_timeout_ms = app_config->suspend_notice_ms; - break; - - case GUEST_HEARTBEAT_EVENT_UNPAUSE: - case GUEST_HEARTBEAT_EVENT_RESUME: - case GUEST_HEARTBEAT_EVENT_RESIZE_END: - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END: - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END: - action_timeout_ms = app_config->resume_notice_ms; - break; - - default: - action_timeout_ms = app_config->shutdown_notice_ms; - break; - } - } else { - action_timeout_ms = app_config->vote_ms; - } - - error = guest_timer_register(action_timeout_ms, - guest_heartbeat_mgmt_api_action_timeout, - &(connection->action_timer)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register action timeout timer, error=%s.", - guest_error_str(error)); - abort(); - } - - *wait = true; - _callback = callback; - } - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Initialize -// =========================================== -GuestErrorT guest_heartbeat_mgmt_api_initialize( void ) -{ - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - memset(&_connections, 0, sizeof(_connections)); - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - connection->sock = -1; - connection->heartbeat_timer = GUEST_TIMER_ID_INVALID; - connection->heartbeat_timeout_timer = GUEST_TIMER_ID_INVALID; - connection->action_timer = GUEST_TIMER_ID_INVALID; - } - - error = guest_unix_open(&_sock); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to open unix socket, error=%s.", - guest_error_str(error)); - return error; - } - - error = guest_unix_listen(_sock, GUEST_HEARTBEAT_API_MSG_ADDRESS, - guest_heartbeat_mgmt_api_connect_handler); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to listen on unix socket, error=%s.", - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Finalize -// ========================================= -GuestErrorT guest_heartbeat_mgmt_api_finalize( void ) -{ - GuestHeartbeatMgmtApiConnectionT* connection; - GuestErrorT error; - - if (0 <= _sock) - { - error = guest_selobj_deregister(_sock); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister select on unix socket, error=%s.", - guest_error_str(error)); - } - - error = guest_unix_close(_sock); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to close unix socket, error=%s.", - guest_error_str(error)); - } - _sock = -1; - } - - unsigned int connection_i; - for (connection_i=0; GUEST_APPLICATIONS_MAX > connection_i; ++connection_i) - { - connection = &(_connections[connection_i]); - guest_heartbeat_mgmt_api_close_connection(connection); - } - - memset(&_connections, 0, sizeof(_connections)); - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.h deleted file mode 100755 index d5663322..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_mgmt_api.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HERATBEAT_MGMT_API_H__ -#define __GUEST_HEARTBEAT_MGMT_API_H__ - -#include - -#include "guest_types.h" -#include "guest_heartbeat_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*GuestHeartbeatMgmtApiActionResponseT) - (GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, - GuestHeartbeatVoteResultT vote_result, char log_msg[]); - -// **************************************************************************** -// Guest Heartbeat Management API - Get Health -// =========================================== -extern GuestErrorT guest_heartbeat_mgmt_api_get_health( - bool* health, GuestHeartbeatActionT* corrective_action, char log_msg[], - int log_msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Action Abort -// ============================================= -extern void guest_heartbeat_mgmt_api_action_abort( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Action Notify -// ============================================== -extern GuestErrorT guest_heartbeat_mgmt_api_action_notify( - GuestHeartbeatEventT event, GuestHeartbeatNotifyT notify, bool* wait, - GuestHeartbeatMgmtApiActionResponseT callback ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Initialize -// =========================================== -extern GuestErrorT guest_heartbeat_mgmt_api_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Management API - Finalize -// ========================================= -extern GuestErrorT guest_heartbeat_mgmt_api_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_MGMT_API_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.c deleted file mode 100755 index 87aa977d..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.c +++ /dev/null @@ -1,1212 +0,0 @@ -/* - * Copyright (c) 2013-2018, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_msg_defs.h" -#include "guest_heartbeat_msg.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_selobj.h" -#include "guest_channel.h" -#include "guest_signal.h" -#include "guest_utils.h" - -#include "guest_heartbeat_types.h" - -#define GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS 1 -#define GUEST_HEARTBEAT_CHALLENGE_DEPTH 6 - -static int _signal_fd = -1; -static int _challenge_depth; -static uint32_t _last_tx_challenge[GUEST_HEARTBEAT_CHALLENGE_DEPTH]; -static uint32_t _last_rx_challenge; -static uint32_t _msg_sequence; -static GuestChannelIdT _channel_id = GUEST_CHANNEL_ID_INVALID; -static GuestHeartbeatMsgCallbacksT _callbacks; -// Tokener serves as reassembly buffer for host connection. -static struct json_tokener* tok; - -// **************************************************************************** -// Guest Heartbeat Message - Action (Host to Network) -// ================================================== -static const char *guest_heartbeat_msg_action_hton( - GuestHeartbeatActionT action ) -{ - switch (action) - { - case GUEST_HEARTBEAT_ACTION_NONE: - return GUEST_HEARTBEAT_MSG_ACTION_NONE; - case GUEST_HEARTBEAT_ACTION_REBOOT: - return GUEST_HEARTBEAT_MSG_ACTION_REBOOT; - case GUEST_HEARTBEAT_ACTION_STOP: - return GUEST_HEARTBEAT_MSG_ACTION_STOP; - case GUEST_HEARTBEAT_ACTION_LOG: - return GUEST_HEARTBEAT_MSG_ACTION_LOG; - default: - DPRINTFE("Unknown action %i.", action); - return GUEST_HEARTBEAT_MSG_ACTION_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Action (Network to Host) -// ================================================== -static GuestHeartbeatActionT guest_heartbeat_msg_action_ntoh( - const char *action ) -{ - if (!strcmp(action, GUEST_HEARTBEAT_MSG_ACTION_REBOOT)) - { - return GUEST_HEARTBEAT_ACTION_REBOOT; - } - else if (!strcmp(action, GUEST_HEARTBEAT_MSG_ACTION_STOP)) { - return GUEST_HEARTBEAT_ACTION_STOP; - } - else if (!strcmp(action, GUEST_HEARTBEAT_MSG_ACTION_LOG)) { - return GUEST_HEARTBEAT_ACTION_LOG; - } - else { - DPRINTFE("Unknown action %i.", action); - return GUEST_HEARTBEAT_ACTION_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Event (Host to Network) -// ================================================== -static const char *guest_heartbeat_msg_event_hton( - GuestHeartbeatEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_EVENT_STOP: - return GUEST_HEARTBEAT_MSG_EVENT_STOP; - case GUEST_HEARTBEAT_EVENT_REBOOT: - return GUEST_HEARTBEAT_MSG_EVENT_REBOOT; - case GUEST_HEARTBEAT_EVENT_SUSPEND: - return GUEST_HEARTBEAT_MSG_EVENT_SUSPEND; - case GUEST_HEARTBEAT_EVENT_PAUSE: - return GUEST_HEARTBEAT_MSG_EVENT_PAUSE; - case GUEST_HEARTBEAT_EVENT_UNPAUSE: - return GUEST_HEARTBEAT_MSG_EVENT_UNPAUSE; - case GUEST_HEARTBEAT_EVENT_RESUME: - return GUEST_HEARTBEAT_MSG_EVENT_RESUME; - case GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN: - return GUEST_HEARTBEAT_MSG_EVENT_RESIZE_BEGIN; - case GUEST_HEARTBEAT_EVENT_RESIZE_END: - return GUEST_HEARTBEAT_MSG_EVENT_RESIZE_END; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_MSG_EVENT_LIVE_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END: - return GUEST_HEARTBEAT_MSG_EVENT_LIVE_MIGRATE_END; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_MSG_EVENT_COLD_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END: - return GUEST_HEARTBEAT_MSG_EVENT_COLD_MIGRATE_END; - default: - DPRINTFE("Unknown event %i.", event); - return GUEST_HEARTBEAT_MSG_EVENT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Event (Network to Host) -// ================================================= -static GuestHeartbeatEventT guest_heartbeat_msg_event_ntoh( - const char *event ) -{ - if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_STOP)) - { - return GUEST_HEARTBEAT_EVENT_STOP; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_REBOOT)) { - return GUEST_HEARTBEAT_EVENT_REBOOT; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_SUSPEND)) { - return GUEST_HEARTBEAT_EVENT_SUSPEND; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_PAUSE)) { - return GUEST_HEARTBEAT_EVENT_PAUSE; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_UNPAUSE)) { - return GUEST_HEARTBEAT_EVENT_UNPAUSE; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_RESUME)) { - return GUEST_HEARTBEAT_EVENT_RESUME; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_RESIZE_BEGIN)) { - return GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_RESIZE_END)) { - return GUEST_HEARTBEAT_EVENT_RESIZE_END; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_LIVE_MIGRATE_BEGIN)) { - return GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_LIVE_MIGRATE_END)) { - return GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_COLD_MIGRATE_BEGIN)) { - return GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN; - } - else if (!strcmp(event, GUEST_HEARTBEAT_MSG_EVENT_COLD_MIGRATE_END)) { - return GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END; - } - else { - DPRINTFE("Unknown event %i.", event); - return GUEST_HEARTBEAT_EVENT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Notify (Host to Network) -// ================================================== -static const char *guest_heartbeat_msg_notify_hton( - GuestHeartbeatNotifyT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_NOTIFY_REVOCABLE: - return GUEST_HEARTBEAT_MSG_NOTIFY_REVOCABLE; - case GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE: - return GUEST_HEARTBEAT_MSG_NOTIFY_IRREVOCABLE; - default: - DPRINTFE("Unknown notify %i.", notify); - return GUEST_HEARTBEAT_MSG_NOTIFY_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Notify (Network to Host) -// ================================================== -static GuestHeartbeatNotifyT guest_heartbeat_msg_notify_ntoh( - const char *notify ) -{ - if (!strcmp(notify, GUEST_HEARTBEAT_MSG_NOTIFY_REVOCABLE)) - { - return GUEST_HEARTBEAT_NOTIFY_REVOCABLE; - } - else if (!strcmp(notify, GUEST_HEARTBEAT_MSG_NOTIFY_IRREVOCABLE)) { - return GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE; - } - else { - DPRINTFE("Unknown notify %i.", notify); - return GUEST_HEARTBEAT_NOTIFY_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Vote Result (Host to Network) -// ======================================================= -static const char * guest_heartbeat_msg_vote_result_hton( - GuestHeartbeatVoteResultT vote_result ) -{ - switch (vote_result) - { - case GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT: - return GUEST_HEARTBEAT_MSG_VOTE_RESULT_ACCEPT; - case GUEST_HEARTBEAT_VOTE_RESULT_REJECT: - return GUEST_HEARTBEAT_MSG_VOTE_RESULT_REJECT; - case GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE: - return GUEST_HEARTBEAT_MSG_VOTE_RESULT_COMPLETE; - case GUEST_HEARTBEAT_VOTE_RESULT_TIMEOUT: - return GUEST_HEARTBEAT_MSG_VOTE_RESULT_TIMEOUT; - case GUEST_HEARTBEAT_VOTE_RESULT_ERROR: - return GUEST_HEARTBEAT_MSG_VOTE_RESULT_ERROR; - default: - DPRINTFE("Unknown vote result %i.", vote_result); - return GUEST_HEARTBEAT_MSG_VOTE_RESULT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Vote Result (Network to Host) -// ======================================================= -static GuestHeartbeatVoteResultT guest_heartbeat_msg_vote_result_ntoh( - const char *vote_result ) -{ - if (!strcmp(vote_result, GUEST_HEARTBEAT_MSG_VOTE_RESULT_ACCEPT)) - { - return GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT; - } - else if (!strcmp(vote_result, GUEST_HEARTBEAT_MSG_VOTE_RESULT_REJECT)) { - return GUEST_HEARTBEAT_VOTE_RESULT_REJECT; - } - else if (!strcmp(vote_result, GUEST_HEARTBEAT_MSG_VOTE_RESULT_COMPLETE)) { - return GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE; - } - else if (!strcmp(vote_result, GUEST_HEARTBEAT_MSG_VOTE_RESULT_TIMEOUT)) { - return GUEST_HEARTBEAT_VOTE_RESULT_TIMEOUT; - } - else if (!strcmp(vote_result, GUEST_HEARTBEAT_MSG_VOTE_RESULT_ERROR)) { - return GUEST_HEARTBEAT_VOTE_RESULT_ERROR; - } - else { - DPRINTFE("Unknown vote result %i.", vote_result); - return GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Init -// =================================== -GuestErrorT guest_heartbeat_msg_send_init( - int invocation_id, GuestHeartbeatMsgInitDataT* data ) -{ - GuestErrorT error; - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":%d,\"%s\":\"%s\"," - "\"%s\":%d,\"%s\":%d,\"%s\":%d,\"%s\":%d,\"%s\":%d,\"%s\":%d," - "\"%s\":\"%s\"}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_INIT, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_INVOCATION_ID, invocation_id, - GUEST_HEARTBEAT_MSG_NAME, data->name, - - GUEST_HEARTBEAT_MSG_HEARTBEAT_INTERVAL_MS, - data->heartbeat_interval_ms, - GUEST_HEARTBEAT_MSG_VOTE_SECS, - data->vote_ms/1000 + GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS, - GUEST_HEARTBEAT_MSG_SHUTDOWN_NOTICE_SECS, - data->shutdown_notice_ms/1000 + GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS, - GUEST_HEARTBEAT_MSG_SUSPEND_NOTICE_SECS, - data->suspend_notice_ms/1000 + GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS, - GUEST_HEARTBEAT_MSG_RESUME_NOTICE_SECS, - data->resume_notice_ms/1000 + GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS, - GUEST_HEARTBEAT_MSG_RESTART_SECS, - data->restart_ms/1000 + GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS, - - GUEST_HEARTBEAT_MSG_CORRECTIVE_ACTION, - guest_heartbeat_msg_action_hton(data->corrective_action)); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat init message, error=%s.", - guest_error_str(error)); - return error; - } - - DPRINTFI("Sent heartbeat init message, invocation_id=%i.", invocation_id); - DPRINTFD("Sent heartbeat init message: %s", msg); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Init Ack -// ======================================= -GuestErrorT guest_heartbeat_msg_send_init_ack( int invocation_id ) -{ - GuestErrorT error; - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":%d}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_INIT_ACK, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_INVOCATION_ID, invocation_id); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat init ack message, error=%s.", - guest_error_str(error)); - return error; - } - - DPRINTFI("Sent heartbeat init ack message: %s", msg); - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Exit -// =================================== -GuestErrorT guest_heartbeat_msg_send_exit( char log_msg[] ) -{ - GuestErrorT error; - - char log_msg_buf[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - snprintf(log_msg_buf, GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE, "%s", - guest_utils_remove_newline(log_msg)); - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":\"%s\"}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_EXIT, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_LOG_MSG, log_msg_buf); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat exit message, error=%s.", - guest_error_str(error)); - return error; - } - - DPRINTFI("Sent heartbeat exit message: %s", msg); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Challenge -// ======================================== -GuestErrorT guest_heartbeat_msg_send_challenge( void ) -{ - GuestErrorT error; - - ++_challenge_depth; - if (GUEST_HEARTBEAT_CHALLENGE_DEPTH <= _challenge_depth) - _challenge_depth = 0; - - _last_tx_challenge[_challenge_depth] = rand(); - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":%d}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_CHALLENGE, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_HEARTBEAT_CHALLENGE, _last_tx_challenge[_challenge_depth]); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat challenge message, " - "error=%s.", guest_error_str(error)); - return error; - } - - DPRINTFD("Sent heartbeat challenge message, challenge=%i.", - _last_tx_challenge[_challenge_depth]); - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Challenge Response -// ================================================= -GuestErrorT guest_heartbeat_msg_send_challenge_response( - bool health, GuestHeartbeatActionT corrective_action, char log_msg[] ) -{ - GuestErrorT error; - - char log_msg_buf[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - snprintf(log_msg_buf, GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE, "%s", - guest_utils_remove_newline(log_msg)); - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":%d,\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\"}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_CHALLENGE_RESPONSE, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_HEARTBEAT_RESPONSE, _last_rx_challenge, - GUEST_HEARTBEAT_MSG_HEARTBEAT_HEALTH, - health ? GUEST_HEARTBEAT_MSG_HEALTHY : GUEST_HEARTBEAT_MSG_UNHEALTHY, - GUEST_HEARTBEAT_MSG_CORRECTIVE_ACTION, - guest_heartbeat_msg_action_hton(corrective_action), - GUEST_HEARTBEAT_MSG_LOG_MSG, log_msg_buf); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat challenge response message, " - "error=%s.", guest_error_str(error)); - return error; - } - // print info logs with message content only if not healthy - if (!health) - { - DPRINTFI("Unhealthy, sent heartbeat challenge response message: %s", msg); - } - else { - DPRINTFD("Sent heartbeat challenge response message, challenge=%i.", - _last_rx_challenge); - } - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Action Notify -// ============================================ -GuestErrorT guest_heartbeat_msg_send_action_notify( - int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, int timeout_ms ) -{ - GuestErrorT error; - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":%d,\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":%d}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_ACTION_NOTIFY, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_INVOCATION_ID, invocation_id, - GUEST_HEARTBEAT_MSG_EVENT_TYPE, guest_heartbeat_msg_event_hton(event), - GUEST_HEARTBEAT_MSG_NOTIFICATION_TYPE, guest_heartbeat_msg_notify_hton(notify), - GUEST_HEARTBEAT_MSG_TIMEOUT_MS, timeout_ms); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat action notify message, " - "error=%s.", guest_error_str(error)); - return error; - } - - DPRINTFI("Sent heartbeat action notify message, invocation_id=%i.", - invocation_id); - DPRINTFD("Sent heartbeat action notify message: %s", msg); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Action Response -// ============================================== -GuestErrorT guest_heartbeat_msg_send_action_response( - int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, GuestHeartbeatVoteResultT vote_result, - char log_msg[] ) -{ - GuestErrorT error; - - char log_msg_buf[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - snprintf(log_msg_buf, GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE, "%s", - guest_utils_remove_newline(log_msg)); - - - char msg[GUEST_HEARTBEAT_MSG_MAX_MSG_SIZE]; - snprintf(msg, sizeof(msg), "\n{\"%s\":%d,\"%s\":%d,\"%s\":\"%s\",\"%s\":%d," - "\"%s\":%d,\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\"}\n", - GUEST_HEARTBEAT_MSG_VERSION, GUEST_HEARTBEAT_MSG_VERSION_CURRENT, - GUEST_HEARTBEAT_MSG_REVISION, GUEST_HEARTBEAT_MSG_REVISION_CURRENT, - GUEST_HEARTBEAT_MSG_MSG_TYPE, GUEST_HEARTBEAT_MSG_ACTION_RESPONSE, - GUEST_HEARTBEAT_MSG_SEQUENCE, ++_msg_sequence, - - GUEST_HEARTBEAT_MSG_INVOCATION_ID, invocation_id, - GUEST_HEARTBEAT_MSG_EVENT_TYPE, guest_heartbeat_msg_event_hton(event), - GUEST_HEARTBEAT_MSG_NOTIFICATION_TYPE, guest_heartbeat_msg_notify_hton(notify), - GUEST_HEARTBEAT_MSG_VOTE_RESULT, guest_heartbeat_msg_vote_result_hton(vote_result), - GUEST_HEARTBEAT_MSG_LOG_MSG, log_msg_buf); - - error = guest_channel_send(_channel_id, msg, strlen(msg)); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat action response message, " - "error=%s.", guest_error_str(error)); - return error; - } - - DPRINTFI("Sent heartbeat action response message: %s", msg); - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Init -// ====================================== -static void guest_heartbeat_msg_recv_init( struct json_object *jobj_msg ) -{ - char name[GUEST_HEARTBEAT_MSG_MAX_NAME_SIZE]; - uint32_t invocation_id; - char corrective_action[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - GuestHeartbeatMsgInitDataT data; - uint32_t vote_secs, shutdown_notice_secs, suspend_notice_secs; - uint32_t resume_notice_secs, restart_secs; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_INVOCATION_ID, &invocation_id)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_NAME, &name)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_HEARTBEAT_INTERVAL_MS, &data.heartbeat_interval_ms)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_VOTE_SECS, &vote_secs)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_SHUTDOWN_NOTICE_SECS, &shutdown_notice_secs)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_SUSPEND_NOTICE_SECS, &suspend_notice_secs)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_RESUME_NOTICE_SECS, &resume_notice_secs)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_RESTART_SECS, &restart_secs)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_CORRECTIVE_ACTION, &corrective_action)) - return; - - data.vote_ms = vote_secs*1000; - data.shutdown_notice_ms = shutdown_notice_secs*1000; - data.suspend_notice_ms = suspend_notice_secs*1000; - data.resume_notice_ms= resume_notice_secs*1000; - data.restart_ms = restart_secs*1000; - - snprintf(data.name, GUEST_NAME_MAX_CHAR, "%s", name); - data.corrective_action = guest_heartbeat_msg_action_ntoh(corrective_action); - - DPRINTFI("Heartbeat Init received, invocation_id=%i", invocation_id); - - const char *msg = json_object_to_json_string_ext(jobj_msg, JSON_C_TO_STRING_PLAIN); - DPRINTFD("Heartbeat Init message received: %s", msg); - - if (NULL != _callbacks.recv_init) - _callbacks.recv_init(invocation_id, &data); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Init Ack -// ========================================== -static void guest_heartbeat_msg_recv_init_ack( struct json_object *jobj_msg ) -{ - uint32_t invocation_id; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_INVOCATION_ID, &invocation_id)) - return; - - DPRINTFI("Heartbeat Init Ack received, invocation_id=%i.", - invocation_id); - - const char *msg = json_object_to_json_string_ext(jobj_msg, JSON_C_TO_STRING_PLAIN); - DPRINTFD("Heartbeat Init Ack message received: %s", msg); - - if (NULL != _callbacks.recv_init_ack) - _callbacks.recv_init_ack(invocation_id); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Exit -// ====================================== -static void guest_heartbeat_msg_recv_exit( struct json_object *jobj_msg ) -{ - char log_msg[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_LOG_MSG, &log_msg)) - return; - - DPRINTFI("Heartbeat Exit received, msg=%s.", log_msg); - - const char *msg = json_object_to_json_string_ext(jobj_msg, JSON_C_TO_STRING_PLAIN); - DPRINTFD("Heartbeat Exit message received: %s", msg); - - if (NULL != _callbacks.recv_exit) - _callbacks.recv_exit(log_msg); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Challenge -// =========================================== -static void guest_heartbeat_msg_recv_challenge( struct json_object *jobj_msg ) -{ - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_HEARTBEAT_CHALLENGE, &_last_rx_challenge)) - return; - - DPRINTFD("Heartbeat Challenge received, challenge=%i.", _last_rx_challenge); - - if (NULL != _callbacks.recv_challenge) - _callbacks.recv_challenge(); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Challenge Ack -// =============================================== -static void guest_heartbeat_msg_recv_challenge_ack( struct json_object *jobj_msg ) -{ - char health[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - char corrective_action_str[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - GuestHeartbeatActionT corrective_action; - char log_msg[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_HEARTBEAT_RESPONSE, &_last_rx_challenge)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_HEARTBEAT_HEALTH, &health)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_CORRECTIVE_ACTION, &corrective_action_str)) - return; - - corrective_action = guest_heartbeat_msg_action_ntoh(corrective_action_str); - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_LOG_MSG, &log_msg)) - return; - - DPRINTFD("Heartbeat Challenge Response received, challenge=%i.", - _last_rx_challenge); - - unsigned int challenge_i; - for (challenge_i=0; GUEST_HEARTBEAT_CHALLENGE_DEPTH > challenge_i; - ++challenge_i) - { - if (_last_tx_challenge[challenge_i] == _last_rx_challenge) - break; - } - - if (GUEST_HEARTBEAT_CHALLENGE_DEPTH == challenge_i) - { - DPRINTFE("Mismatch between last transmitted challenges and last " - "received challenge."); - return; - } - if (NULL != _callbacks.recv_challenge_ack) - _callbacks.recv_challenge_ack(!strcmp(health, GUEST_HEARTBEAT_MSG_HEALTHY), - corrective_action, log_msg); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Action Notify -// =============================================== -static void guest_heartbeat_msg_recv_action_notify( struct json_object *jobj_msg ) -{ - uint32_t invocation_id; - char event_type[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - char notification_type[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - uint32_t timeout_ms; - GuestHeartbeatEventT event; - GuestHeartbeatNotifyT notify; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_INVOCATION_ID, &invocation_id)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_EVENT_TYPE, &event_type)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_NOTIFICATION_TYPE, ¬ification_type)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_TIMEOUT_MS, &timeout_ms)) - return; - - if (timeout_ms > (GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS*1000)) - timeout_ms -= (GUEST_HEARTBEAT_PROPAGATION_DELAY_IN_SECS * 1000); - - event = guest_heartbeat_msg_event_ntoh(event_type); - notify = guest_heartbeat_msg_notify_ntoh(notification_type); - - DPRINTFI("Heartbeat Action Notify received, invocation_id=%i.", - invocation_id); - const char *msg = json_object_to_json_string_ext(jobj_msg, JSON_C_TO_STRING_PLAIN); - DPRINTFD("Heartbeat Action Notify message received: %s", msg); - - if (NULL != _callbacks.recv_action_notify) - _callbacks.recv_action_notify(invocation_id, event, notify, timeout_ms); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Action Response -// ================================================= -static void guest_heartbeat_msg_recv_action_response( struct json_object *jobj_msg ) -{ - uint32_t invocation_id; - char event_type[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - char notification_type[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - char vote_result[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - GuestHeartbeatEventT event; - GuestHeartbeatNotifyT notify; - GuestHeartbeatVoteResultT result; - char log_msg[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_INVOCATION_ID, &invocation_id)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_EVENT_TYPE, &event_type)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_NOTIFICATION_TYPE, ¬ification_type)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_VOTE_RESULT, &vote_result)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_LOG_MSG, &log_msg)) - return; - - event = guest_heartbeat_msg_event_ntoh(event_type); - notify = guest_heartbeat_msg_notify_ntoh(notification_type); - result = guest_heartbeat_msg_vote_result_ntoh(vote_result); - - DPRINTFI("Heartbeat Action Response received, invocation_id=%i.", - invocation_id); - const char *msg = json_object_to_json_string_ext(jobj_msg, JSON_C_TO_STRING_PLAIN); - DPRINTFD("Heartbeat Action Response message received: %s", msg); - - if (NULL != _callbacks.recv_action_response) - _callbacks.recv_action_response(invocation_id, event, notify, - result, log_msg); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive Nack -// ================================================= -static void guest_heartbeat_msg_recv_nack( struct json_object *jobj_msg ) -{ - uint32_t invocation_id; - char log_msg[GUEST_HEARTBEAT_MSG_MAX_LOG_SIZE]; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_INVOCATION_ID, &invocation_id)) - return; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_LOG_MSG, &log_msg)) - return; - - DPRINTFE("Heartbeat Nack message received, invocation_id=%i, error msg: %s", - invocation_id, log_msg); - - const char *msg = json_object_to_json_string_ext(jobj_msg, JSON_C_TO_STRING_PLAIN); - DPRINTFD("Heartbeat Nack message received: %s", msg); - -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Dispatch -// ================================== -void guest_heartbeat_msg_dispatch(json_object *jobj_msg) -{ - int version; - char msg_type[GUEST_HEARTBEAT_MSG_MAX_VALUE_SIZE]; - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_VERSION, &version)) - return; - - if (GUEST_HEARTBEAT_MSG_VERSION_CURRENT > version) - { - DPRINTFI("message received version %d, expected %d, dropping\n", - version, GUEST_HEARTBEAT_MSG_VERSION_CURRENT); - return; - } - - if (guest_utils_json_get_value(jobj_msg, GUEST_HEARTBEAT_MSG_MSG_TYPE, &msg_type)) - return; - - if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_INIT)) { - guest_heartbeat_msg_recv_init(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_INIT_ACK)) { - guest_heartbeat_msg_recv_init_ack(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_EXIT)) { - guest_heartbeat_msg_recv_exit(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_CHALLENGE)) { - guest_heartbeat_msg_recv_challenge(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_CHALLENGE_RESPONSE)) { - guest_heartbeat_msg_recv_challenge_ack(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_ACTION_NOTIFY)) { - guest_heartbeat_msg_recv_action_notify(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_ACTION_RESPONSE)) { - guest_heartbeat_msg_recv_action_response(jobj_msg); - } else if (!strcmp(msg_type, GUEST_HEARTBEAT_MSG_NACK)) { - guest_heartbeat_msg_recv_nack(jobj_msg); - } else { - DPRINTFV("Unknown message type %s.", msg_type); - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Parser -// ================================== -/** - Multiple messages from the host can be bundled together into a single "read" - so we need to check message boundaries and handle breaking the message apart. - Assume a valid message does not contain newline '\n', and newline is added to - the beginning and end of each message by the sender to delimit the boundaries. -*/ -void guest_heartbeat_msg_parser(void *buf, ssize_t len, json_tokener* tok, int newline_found) -{ - json_object *jobj = json_tokener_parse_ex(tok, buf, len); - enum json_tokener_error jerr = json_tokener_get_error(tok); - - if (jerr == json_tokener_success) { - guest_heartbeat_msg_dispatch(jobj); - json_object_put(jobj); - return; - } - - else if (jerr == json_tokener_continue) { - // partial JSON is parsed , continue to read from socket. - if (newline_found) { - // if newline was found in the middle of the buffer, the message - // should be completed at this point. Throw out incomplete message - // by resetting tokener. - json_tokener_reset(tok); - } - } - else - { - // parsing error - json_tokener_reset(tok); - } -} -// **************************************************************************** - - -// **************************************************************************** -// Guest Heartbeat Message - Handler -// ================================== -void guest_heartbeat_msg_handler(void *buf, ssize_t len,json_tokener* tok) -{ - void *newline; - ssize_t len_head; - -next: - if (len == 0) - return; - - // search for newline as delimiter - newline = memchr(buf, '\n', len); - - if (newline) { - // split buffer to head and tail at the location of newline. - // feed the head to the parser and recursively process the tail. - len_head = newline-buf; - - // parse head - if (len_head > 0) - guest_heartbeat_msg_parser(buf, len_head, tok, 1); - - // start of the tail: skip newline - buf += len_head+1; - // length of the tail: deduct 1 for the newline character - len -= len_head+1; - - // continue to process the tail. - goto next; - } - else { - guest_heartbeat_msg_parser(buf, len, tok, 0); - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Receive -// ================================== -static void guest_heartbeat_msg_receiver( int selobj ) -{ - int bytes_received; - GuestErrorT error; - char buf[4096]; - - error = guest_channel_receive(_channel_id, buf, sizeof(buf), - &bytes_received); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to receive message, error=%s.", - guest_error_str(error)); - return; - } - - DPRINTFV("Bytes received is %i.", bytes_received); - guest_heartbeat_msg_handler(buf, bytes_received, tok); - -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Signal Handler -// ======================================== -static void guest_heartbeat_msg_signal_handler( int signum ) -{ - int64_t sigval = signum; - int result; - - if ((SIGIO == signum) && (0 <= _signal_fd)) - { - result = write(_signal_fd, &sigval, sizeof(sigval)); - if (0 > result) - { - DPRINTFE("Failed to write signal, error=%s", strerror(errno)); - return; - } - - guest_signal_ignore(signum); - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Hangup -// ================================ -static void guest_heartbeat_msg_hangup( int selobj ) -{ - DPRINTFI("Heartbeat messaging hangup."); - - if (GUEST_CHANNEL_ID_INVALID != _channel_id) - { - int selobj; - - selobj = guest_channel_get_selobj(_channel_id); - if (0 <= selobj) - { - GuestErrorT error; - - error = guest_selobj_deregister(selobj); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister selection object %i, " - "error=%s.", selobj, guest_error_str(error)); - } - - guest_signal_register_handler(SIGIO, - guest_heartbeat_msg_signal_handler); - - if (NULL != _callbacks.channel_state_change) - _callbacks.channel_state_change(false); - } - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Signal Dispatch -// ========================================= -static void guest_heartbeat_msg_signal_dispatch( int selobj ) -{ - int signum; - int64_t sigval = 0; - int result; - GuestSelObjCallbacksT callbacks; - GuestErrorT error; - - result = read(_signal_fd, &sigval, sizeof(sigval)); - if (0 > result) - { - if (EINTR == errno) - { - DPRINTFD("Interrupted on signal read, error=%s.", strerror(errno)); - } else { - DPRINTFE("Failed to dispatch signal, error=%s.", strerror(errno)); - } - return; - } - - signum = sigval; - - if (SIGIO == signum) - { - DPRINTFI("Heartbeat messaging available."); - - if (GUEST_CHANNEL_ID_INVALID != _channel_id) - { - selobj = guest_channel_get_selobj(_channel_id); - if (0 <= selobj) - { - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.read_callback = guest_heartbeat_msg_receiver; - callbacks.hangup_callback = guest_heartbeat_msg_hangup; - - error = guest_selobj_register(selobj, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register selection object %i, " - "error=%s.", selobj, guest_error_str(error)); - abort(); - } - - if (NULL != _callbacks.channel_state_change) - _callbacks.channel_state_change(true); - } - } - } else { - DPRINTFI("Ignoring signal %i.", signum); - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Initialize -// ==================================== -GuestErrorT guest_heartbeat_msg_initialize( - char* comm_device, GuestHeartbeatMsgCallbacksT* callbacks ) -{ - int selobj; - GuestSelObjCallbacksT selobj_callbacks; - GuestErrorT error; - - _channel_id = GUEST_CHANNEL_ID_INVALID; - - error = guest_channel_open(comm_device, &_channel_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to open communication channel over device %s, " - "error=%s.", comm_device, guest_error_str(error)); - return error; - } - - selobj = guest_channel_get_selobj(_channel_id); - if (0 <= selobj) - { - memset(&selobj_callbacks, 0, sizeof(selobj_callbacks)); - selobj_callbacks.read_callback = guest_heartbeat_msg_receiver; - selobj_callbacks.hangup_callback = guest_heartbeat_msg_hangup; - - error = guest_selobj_register(selobj, &selobj_callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register selection object %i, error=%s.", - selobj, guest_error_str(error)); - return error; - } - } - - _signal_fd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); - if (0 > _signal_fd) - { - DPRINTFE("Failed to open signal file descriptor,error=%s.", - strerror(errno)); - return GUEST_FAILED; - } - - memset(&selobj_callbacks, 0, sizeof(selobj_callbacks)); - selobj_callbacks.read_callback = guest_heartbeat_msg_signal_dispatch; - - error = guest_selobj_register(_signal_fd, &selobj_callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register selection object, error=%s.", - guest_error_str(error)); - close(_signal_fd); - _signal_fd = -1; - return error; - } - - memcpy(&_callbacks, callbacks, sizeof(GuestHeartbeatMsgCallbacksT)); - - tok = json_tokener_new(); - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Finalize -// ================================== -GuestErrorT guest_heartbeat_msg_finalize( void ) -{ - int selobj; - GuestErrorT error; - - memset(&_callbacks, 0, sizeof(GuestHeartbeatMsgCallbacksT)); - free(tok); - - if (0 <= _signal_fd) - { - error = guest_selobj_deregister(_signal_fd); - if (GUEST_OKAY != error) - DPRINTFE("Failed to deregister selection object, error=%s.", - guest_error_str(error)); - - close(_signal_fd); - _signal_fd = -1; - } - - if (GUEST_CHANNEL_ID_INVALID != _channel_id) - { - selobj = guest_channel_get_selobj(_channel_id); - if (0 <= selobj) - { - error = guest_selobj_deregister(selobj); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister selection object %i, error=%s.", - selobj, guest_error_str(error)); - } - } - - error = guest_channel_close(_channel_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed close communication channel, error=%s.", - guest_error_str(error)); - } - _channel_id = GUEST_CHANNEL_ID_INVALID; - } - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.h deleted file mode 100755 index 4bb296c3..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HERATBEAT_MESSAGE_H__ -#define __GUEST_HEARTBEAT_MESSAGE_H__ - -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" - -#include "guest_heartbeat_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_HEARTBEAT_MAX_LOG_MSG_SIZE 192 - -typedef struct { - char name[GUEST_NAME_MAX_CHAR]; - unsigned int heartbeat_interval_ms; - unsigned int vote_ms; - unsigned int shutdown_notice_ms; - unsigned int suspend_notice_ms; - unsigned int resume_notice_ms; - unsigned int restart_ms; - GuestHeartbeatActionT corrective_action; -} GuestHeartbeatMsgInitDataT; - -typedef void (*GuestHeartbeatMsgChannelStateChangeT) (bool state); -typedef void (*GuestHeartbeatMsgRecvInitT) - (int invocation_id, GuestHeartbeatMsgInitDataT* data); -typedef void (*GuestHeartbeatMsgRecvInitAckT) (int invocation_id); -typedef void (*GuestHeartbeatMsgRecvExitT) (char log_msg[]); -typedef void (*GuestHeartbeatMsgRecvChallengeT) (void); -typedef void (*GuestHeartbeatMsgRecvChallengeAckT) - (bool health, GuestHeartbeatActionT corrective_action, char log_msg[]); -typedef void (*GuestHeartbeatMsgRecvActionNotifyT) - (int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, int timeout_ms); -typedef void (*GuestHeartbeatMsgRecvActionResponseT) - (int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, GuestHeartbeatVoteResultT vote_result, - char log_msg[]); - -typedef struct { - GuestHeartbeatMsgChannelStateChangeT channel_state_change; - GuestHeartbeatMsgRecvInitT recv_init; - GuestHeartbeatMsgRecvInitAckT recv_init_ack; - GuestHeartbeatMsgRecvExitT recv_exit; - GuestHeartbeatMsgRecvChallengeT recv_challenge; - GuestHeartbeatMsgRecvChallengeAckT recv_challenge_ack; - GuestHeartbeatMsgRecvActionNotifyT recv_action_notify; - GuestHeartbeatMsgRecvActionResponseT recv_action_response; -} GuestHeartbeatMsgCallbacksT; - -// **************************************************************************** -// Guest Heartbeat Message - Send Init -// =================================== -extern GuestErrorT guest_heartbeat_msg_send_init( int invocation_id, - GuestHeartbeatMsgInitDataT* data ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Init Ack -// ======================================= -extern GuestErrorT guest_heartbeat_msg_send_init_ack( int invocation_id ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Exit -// =================================== -extern GuestErrorT guest_heartbeat_msg_send_exit( char log_msg[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Challenge -// ======================================== -extern GuestErrorT guest_heartbeat_msg_send_challenge( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Challenge Response -// ================================================= -extern GuestErrorT guest_heartbeat_msg_send_challenge_response( - bool health, GuestHeartbeatActionT corrective_action, char log_msg[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Action Notify -// ============================================ -extern GuestErrorT guest_heartbeat_msg_send_action_notify( - int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, int timeout_ms ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Send Action Response -// ============================================== -GuestErrorT guest_heartbeat_msg_send_action_response( - int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, GuestHeartbeatVoteResultT vote_result, - char log_msg[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Initialize -// ==================================== -extern GuestErrorT guest_heartbeat_msg_initialize( - char* comm_device, GuestHeartbeatMsgCallbacksT* callbacks ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Message - Finalize -// ================================== -extern GuestErrorT guest_heartbeat_msg_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_MESSAGE_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.c b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.c deleted file mode 100755 index 6edcc9c8..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_types.h" - -// **************************************************************************** -// Guest Heartbeat Types - Action String -// ===================================== -const char* guest_heartbeat_action_str( GuestHeartbeatActionT action ) -{ - switch (action) - { - case GUEST_HEARTBEAT_ACTION_NONE: return "none"; - case GUEST_HEARTBEAT_ACTION_REBOOT: return "reboot"; - case GUEST_HEARTBEAT_ACTION_STOP: return "stop"; - case GUEST_HEARTBEAT_ACTION_LOG: return "log"; - default: - return "action-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Event String -// ==================================== -const char* guest_heartbeat_event_str( GuestHeartbeatEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_EVENT_STOP: return "stop"; - case GUEST_HEARTBEAT_EVENT_REBOOT: return "reboot"; - case GUEST_HEARTBEAT_EVENT_SUSPEND: return "suspend"; - case GUEST_HEARTBEAT_EVENT_PAUSE: return "pause"; - case GUEST_HEARTBEAT_EVENT_UNPAUSE: return "unpause"; - case GUEST_HEARTBEAT_EVENT_RESUME: return "resume"; - case GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN: return "resize-begin"; - case GUEST_HEARTBEAT_EVENT_RESIZE_END: return "resize-end"; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN: return "live-migrate-begin"; - case GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END: return "live-migrate-end"; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN: return "cold-migrate-begin"; - case GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END: return "cold-migrate-end"; - default: - return "event-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Notify String -// ===================================== -const char* guest_heartbeat_notify_str( GuestHeartbeatNotifyT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_NOTIFY_REVOCABLE: return "revocable"; - case GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE: return "irrevocable"; - default: - return "notify-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Vote Result String -// ========================================== -const char* guest_heartbeat_vote_result_str( GuestHeartbeatVoteResultT result ) -{ - switch (result) - { - case GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT: return "accept"; - case GUEST_HEARTBEAT_VOTE_RESULT_REJECT: return "reject"; - case GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE: return "complete"; - case GUEST_HEARTBEAT_VOTE_RESULT_TIMEOUT: return "timeout"; - case GUEST_HEARTBEAT_VOTE_RESULT_ERROR: return "error"; - default: - return "vote-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Merge Action -// ==================================== -GuestHeartbeatActionT guest_heartbeat_merge_action( - GuestHeartbeatActionT current_action, GuestHeartbeatActionT new_action ) -{ - switch (new_action) - { - case GUEST_HEARTBEAT_ACTION_STOP: - return new_action; - - case GUEST_HEARTBEAT_ACTION_REBOOT: - if (GUEST_HEARTBEAT_ACTION_STOP != current_action) - return new_action; - return current_action; - - case GUEST_HEARTBEAT_ACTION_LOG: - if ((GUEST_HEARTBEAT_ACTION_STOP != current_action) && - (GUEST_HEARTBEAT_ACTION_REBOOT != current_action)) - return new_action; - return current_action; - - default: - return current_action; - } -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.h b/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.h deleted file mode 100755 index bf0a5463..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_types.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_TYPES_H__ -#define __GUEST_HEARTBEAT_TYPES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - GUEST_HEARTBEAT_ACTION_UNKNOWN, - GUEST_HEARTBEAT_ACTION_NONE, - GUEST_HEARTBEAT_ACTION_REBOOT, - GUEST_HEARTBEAT_ACTION_STOP, - GUEST_HEARTBEAT_ACTION_LOG, - GUEST_HEARTBEAT_ACTION_MAX, -} GuestHeartbeatActionT; - -typedef enum { - GUEST_HEARTBEAT_EVENT_UNKNOWN, - GUEST_HEARTBEAT_EVENT_STOP, - GUEST_HEARTBEAT_EVENT_REBOOT, - GUEST_HEARTBEAT_EVENT_SUSPEND, - GUEST_HEARTBEAT_EVENT_PAUSE, - GUEST_HEARTBEAT_EVENT_UNPAUSE, - GUEST_HEARTBEAT_EVENT_RESUME, - GUEST_HEARTBEAT_EVENT_RESIZE_BEGIN, - GUEST_HEARTBEAT_EVENT_RESIZE_END, - GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_BEGIN, - GUEST_HEARTBEAT_EVENT_LIVE_MIGRATE_END, - GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_BEGIN, - GUEST_HEARTBEAT_EVENT_COLD_MIGRATE_END, - GUEST_HEARTBEAT_EVENT_MAX, -} GuestHeartbeatEventT; - -typedef enum { - GUEST_HEARTBEAT_NOTIFY_UNKNOWN, - GUEST_HEARTBEAT_NOTIFY_REVOCABLE, - GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE, - GUEST_HEARTBEAT_NOTIFY_MAX, -} GuestHeartbeatNotifyT; - -typedef enum { - GUEST_HEARTBEAT_VOTE_RESULT_UNKNOWN, - GUEST_HEARTBEAT_VOTE_RESULT_ACCEPT, - GUEST_HEARTBEAT_VOTE_RESULT_REJECT, - GUEST_HEARTBEAT_VOTE_RESULT_COMPLETE, - GUEST_HEARTBEAT_VOTE_RESULT_TIMEOUT, - GUEST_HEARTBEAT_VOTE_RESULT_ERROR, - GUEST_HEARTBEAT_VOTE_RESULT_MAX, -} GuestHeartbeatVoteResultT; - -// **************************************************************************** -// Guest Heartbeat Types - Action String -// ===================================== -extern const char* guest_heartbeat_action_str( GuestHeartbeatActionT action ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Event String -// ==================================== -extern const char* guest_heartbeat_event_str( GuestHeartbeatEventT event ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Notify String -// ===================================== -extern const char* guest_heartbeat_notify_str( GuestHeartbeatNotifyT notify ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Vote Result String -// ========================================== -extern const char* guest_heartbeat_vote_result_str( GuestHeartbeatVoteResultT result ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Types - Merge Action -// ==================================== -extern GuestHeartbeatActionT guest_heartbeat_merge_action( - GuestHeartbeatActionT current_action, GuestHeartbeatActionT new_action ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_TYPES_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/Makefile b/guest-client/guest-client-3.0.1/guest_client/src/test/Makefile deleted file mode 100755 index b58cb799..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -SHELL = /bin/sh - -## Configuration Directory Variables -prefix := /usr/local -exec_prefix := $(prefix) -sysconfdir := $(prefix)/etc -includedir := $(prefix)/include -libdir := $(exec_prefix)/lib -bindir := $(exec_prefix)/bin - -MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) -CURRENT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) -BUILD_DIR := $(CURRENT_DIR)/build - -.SUFFIXES: -.SUFFIXES: .c .o - -.PHONY: all build create_build_dir clean distclean - -program_NAME := guest-client-test -program_C_INCLUDES := -I$(CURRENT_DIR) -I$(CURRENT_DIR)/../ -program_C_INCLUDES += -I$(CURRENT_DIR)/../heartbeat -program_C_INCLUDES += -I$(CURRENT_DIR)/../../include -program_C_SRCS := $(wildcard *.c) -program_C_OBJS := ${program_C_SRCS:.c=.o} -program_LDLIBS := -lrt - -CFLAGS = -g -O2 -Wall -Werror -Wformat -DSYSCONFDIR=$(sysconfdir) - -all: build - -%.o: %.c - $(CC) $(CFLAGS) $(program_C_INCLUDES) -c $^ -o $(BUILD_DIR)/$@ -ljson-c - -$(program_NAME): $(program_C_OBJS) - @(cd ../; make --no-print-directory build sysconfdir=$(sysconfdir) BUILD_DIR=$(BUILD_DIR)) - @-($(RM) $(BUILD_DIR)/guest_client.o $(BUILD_DIR)/guest-client) - $(CC) $(CFLAGS) $(BUILD_DIR)/*.o $(program_LDLIBS) -o $(BUILD_DIR)/$(program_NAME) -ljson-c - -create_build_dir: - mkdir -p --mode 755 $(BUILD_DIR) - -build: create_build_dir $(program_NAME) - -clean: - @-($(RM) $(BUILD_DIR)/*) - -distclean: clean diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.c b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.c deleted file mode 100755 index a321f372..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.c +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_test.h" - -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_timer.h" - -#include "guest_heartbeat_types.h" -#include "guest_heartbeat_msg.h" - -static bool _challenge_response_recvd = false; -static GuestTimerIdT _heartbeat_timer_id = GUEST_TIMER_ID_INVALID; -static GuestTimerIdT _heartbeat_timeout_timer_id = GUEST_TIMER_ID_INVALID; - -// **************************************************************************** -// Guest Heartbeat - Timeout -// ========================= -static bool guest_heartbeat_timeout( GuestTimerIdT timer_id ) -{ - GuestErrorT error; - - DPRINTFE("--------> HEARTBEAT TIMEOUT <--------"); - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timer_id) - { - error = guest_timer_deregister(_heartbeat_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timer_id = GUEST_TIMER_ID_INVALID; - } - - return false; // don't rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Periodic -// ========================== -static bool guest_heartbeat_periodic( GuestTimerIdT timer_id ) -{ - GuestErrorT error; - - if (_challenge_response_recvd) - { - error = guest_heartbeat_msg_send_challenge(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send challenge, error=%s.", - guest_error_str(error)); - } - _challenge_response_recvd = false; - } - return true; // rearm -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Init Message -// ====================================== -static void guest_heartbeat_recv_init_msg( - int invocation_id, GuestHeartbeatMsgInitDataT* data ) -{ - GuestErrorT error; - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timer_id) - { - error = guest_timer_deregister(_heartbeat_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timer_id = GUEST_TIMER_ID_INVALID; - } - - error = guest_timer_register(data->heartbeat_interval_ms, - guest_heartbeat_periodic, - &_heartbeat_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start heartbeat timer, error=%s.", - guest_error_str(error)); - return; - } - - error = guest_heartbeat_msg_send_init_ack(invocation_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send init ack, error=%s.", guest_error_str(error)); - } - - error = guest_heartbeat_msg_send_challenge(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to send challenge, error=%s.", guest_error_str(error)); - } - - _challenge_response_recvd = false; - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timeout_timer_id) - { - error = guest_timer_deregister(_heartbeat_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timeout timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - error = guest_timer_register(data->heartbeat_interval_ms*2, - guest_heartbeat_timeout, - &_heartbeat_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to start heartbeat timeout timer, error=%s.", - guest_error_str(error)); - return; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Exit Message -// ====================================== -static void guest_heartbeat_recv_exit_msg( char log_msg[] ) -{ - GuestErrorT error; - - DPRINTFI("--------> HEARTBEAT EXIT <--------"); - DPRINTFI("reason=%s", log_msg); - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timer_id) - { - error = guest_timer_deregister(_heartbeat_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timeout_timer_id) - { - error = guest_timer_deregister(_heartbeat_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timeout timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Challenge Ack Message -// =============================================== -static void guest_heartbeat_recv_challenge_ack_msg( - bool health, GuestHeartbeatActionT corrective_action, char log_msg[] ) -{ - GuestErrorT error; - - _challenge_response_recvd = true; - - if (!health) - { - DPRINTFE("--------> HEARTBEAT UNHEALTHY <--------"); - DPRINTFE("corrective_action=%s, reason=%s", - guest_heartbeat_action_str(corrective_action), log_msg); - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timer_id) - { - error = guest_timer_deregister(_heartbeat_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timeout_timer_id) - { - error = guest_timer_deregister(_heartbeat_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timeout timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - return; - } - - guest_timer_reset(_heartbeat_timeout_timer_id); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat - Receive Action Response Message -// ================================================= -static void guest_heartbeat_recv_action_response_msg( - int invocation_id, GuestHeartbeatEventT event, - GuestHeartbeatNotifyT notify, GuestHeartbeatVoteResultT vote_result, - char log_msg[] ) -{ - DPRINTFI("--------> ACTION RESPONSE <--------"); - DPRINTFI("invocation_id=%i event=%s, notify=%s, vote-result=%s, reason=%s", - invocation_id, guest_heartbeat_event_str(event), - guest_heartbeat_notify_str(notify), - guest_heartbeat_vote_result_str(vote_result), log_msg); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test - Initialize -// ======================= -GuestErrorT guest_test_initialize( char* comm_device ) -{ - GuestHeartbeatMsgCallbacksT callbacks; - GuestErrorT error; - - memset(&callbacks, 0, sizeof(callbacks)); - - callbacks.recv_init = guest_heartbeat_recv_init_msg; - callbacks.recv_exit = guest_heartbeat_recv_exit_msg; - callbacks.recv_challenge_ack = guest_heartbeat_recv_challenge_ack_msg; - callbacks.recv_action_response = guest_heartbeat_recv_action_response_msg; - - error = guest_heartbeat_msg_initialize(comm_device, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize heartbeat messaging, error=%s.", - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test - Finalize -// ===================== -GuestErrorT guest_test_finalize( void ) -{ - GuestErrorT error; - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timer_id) - { - error = guest_timer_deregister(_heartbeat_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timer_id = GUEST_TIMER_ID_INVALID; - } - - if (GUEST_TIMER_ID_INVALID != _heartbeat_timeout_timer_id) - { - error = guest_timer_deregister(_heartbeat_timeout_timer_id); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to cancel heartbeat timeout timer, error=%s.", - guest_error_str(error)); - } - _heartbeat_timeout_timer_id = GUEST_TIMER_ID_INVALID; - } - - error = guest_heartbeat_msg_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize heartbeat messaging, error=%s.", - guest_error_str(error)); - } - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.h b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.h deleted file mode 100755 index 409cac3c..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_TEST_H__ -#define __GUEST_TEST_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Test - Initialize -// ======================= -extern GuestErrorT guest_test_initialize( char* comm_device ); -// **************************************************************************** - -// **************************************************************************** -// Guest Test - Finalize -// ===================== -extern GuestErrorT guest_test_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_TEST_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.c b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.c deleted file mode 100755 index 094ce171..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_test_cli.h" - -#include -#include -#include -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_selobj.h" -#include "guest_stream.h" - -#include "guest_heartbeat_msg.h" - -static GuestStreamT _stream; - -// **************************************************************************** -// Guest Test CLI - Usage -// ====================== -void guest_test_cli_usage( void ) -{ - printf("***************************************************\n"); - printf("* CLI Options: *\n"); - printf("* 1 - send action request [pause, revocable] *\n"); - printf("* 2 - send action request [pause, irrevocable] *\n"); - printf("***************************************************\n"); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test CLI - Dispatch -// ========================= -static void guest_test_cli_dispatch( int selobj ) -{ - int msg_size; - int bytes_received; - int result; - GuestErrorT error; - - result = read(STDIN_FILENO, _stream.end_ptr, _stream.avail); - if (0 > result) - { - if (EINTR == errno) - { - DPRINTFD("Interrupted on socket read, error=%s.", strerror(errno)); - return; - - } else { - DPRINTFE("Failed to read from socket, error=%s.", strerror(errno)); - return; - } - } else if (0 == result) { - DPRINTFD("No message received from socket."); - return; - - } else { - DPRINTFV("Received message, msg_size=%i.", result); - bytes_received = result; - } - - _stream.end_ptr += bytes_received; - _stream.avail -= bytes_received; - _stream.size += bytes_received; - - msg_size = guest_stream_get(&_stream); - if (0 <= msg_size) - { - _stream.bytes[msg_size] = '\0'; - DPRINTFD("CLI message: %s, msg_size=%i", _stream.bytes, msg_size); - - switch(_stream.bytes[0]) - { - case 'h': - guest_test_cli_usage(); - break; - - case '1': - error = guest_heartbeat_msg_send_action_notify( - rand(), GUEST_HEARTBEAT_EVENT_PAUSE, - GUEST_HEARTBEAT_NOTIFY_REVOCABLE, 5); - if (GUEST_OKAY != error) - DPRINTFE("Failed to send action notify, error=%s.", - guest_error_str(error)); - break; - - case '2': - error = guest_heartbeat_msg_send_action_notify( - rand(), GUEST_HEARTBEAT_EVENT_PAUSE, - GUEST_HEARTBEAT_NOTIFY_IRREVOCABLE, 5); - if (GUEST_OKAY != error) - DPRINTFE("Failed to send action notify, error=%s.", - guest_error_str(error)); - break; - - default: - break; - } - - guest_stream_advance(msg_size+1, &_stream); - } - - if (0 >= _stream.avail) - guest_stream_reset(&_stream); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test CLI - Initialize -// =========================== -GuestErrorT guest_test_cli_initialize( void ) -{ - GuestSelObjCallbacksT callbacks; - GuestErrorT error; - - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.read_callback = guest_test_cli_dispatch; - - error = guest_selobj_register(STDIN_FILENO, &callbacks); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to register stdin selection object, error=%s.", - guest_error_str(error)); - return error; - } - - error = guest_stream_setup("\n", 1, 256*2, &_stream); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to setup stdin stream, error=%s.", - guest_error_str(error)); - return error; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test CLI - Finalize -// ========================= -GuestErrorT guest_test_cli_finalize( void ) -{ - GuestErrorT error; - - error = guest_stream_release(&_stream); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed release stream, error=%s.", guest_error_str(error)); - } - - error = guest_selobj_deregister(STDIN_FILENO); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to deregister stdin selection object, error=%s.", - guest_error_str(error)); - } - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.h b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.h deleted file mode 100755 index 82be5861..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_cli.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_TEST_CLI_H__ -#define __GUEST_TEST_CLI_H__ - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Test CLI - Usage -// ====================== -extern void guest_test_cli_usage( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Test CLI - Initialize -// =========================== -extern GuestErrorT guest_test_cli_initialize( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Test CLI - Finalize -// ========================= -extern GuestErrorT guest_test_cli_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_TEST_CLI_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_client.c b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_client.c deleted file mode 100755 index 9626cfec..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_client.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include -#include - -#include "guest_types.h" -#include "guest_debug.h" - -#include "guest_test_process.h" - -// **************************************************************************** -// Guest Test Client - Main -// ======================== -int main( int argc, char *argv[], char *envp[] ) -{ - GuestErrorT error; - - error = guest_debug_initialize("Guest-Client-Test"); - if (GUEST_OKAY != error) - { - printf("Debug initialization failed, error=%s.\n", - guest_error_str(error)); - return EXIT_FAILURE; - } - - error = guest_test_process_main(argc, argv, envp); - if (GUEST_OKAY != error) - { - printf("Process failure, error=%s.\n", guest_error_str(error)); - return EXIT_FAILURE; - } - - error = guest_debug_finalize(); - if (GUEST_OKAY != error) - { - printf("Debug finalization failed, error=%s.\n", - guest_error_str(error)); - } - - return EXIT_SUCCESS; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.c b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.c deleted file mode 100755 index e80be3bd..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.c +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_test_process.h" - -#include -#include -#include -#include - -#include "guest_limits.h" -#include "guest_types.h" -#include "guest_debug.h" -#include "guest_signal.h" -#include "guest_config.h" -#include "guest_selobj.h" -#include "guest_timer.h" -#include "guest_channel.h" -#include "guest_stream.h" -#include "guest_test.h" -#include "guest_test_cli.h" - -static sig_atomic_t _stay_on = 1; - -// **************************************************************************** -// Guest Test Process - Signal Handler -// =================================== -static void guest_test_process_signal_handler( int signum ) -{ - switch (signum) - { - case SIGINT: - case SIGTERM: - case SIGQUIT: - _stay_on = 0; - break; - - case SIGCONT: - DPRINTFD("Ignoring signal SIGCONT (%i).", signum); - break; - - case SIGPIPE: - DPRINTFD("Ignoring signal SIGPIPE (%i).", signum); - break; - - default: - DPRINTFD("Signal (%i) ignored.", signum); - break; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test Process - Initialize -// =============================== -static GuestErrorT guest_test_process_initialize( - int argc, char *argv[], char *envp[] ) -{ - GuestConfigT* config = NULL; - GuestErrorT error; - - error = guest_config_initialize(argc, argv, envp); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize configuration module, error=%s.", - guest_error_str(error)); - guest_config_show_usage(); - return GUEST_FAILED; - } - - error = guest_selobj_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize selection object module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_timer_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize timer module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_channel_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize channel module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_stream_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize stream module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - config = guest_config_get(); - - error = guest_test_initialize(config->comm_device); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize test module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - error = guest_test_cli_initialize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to initialize test cli module, error=%s.", - guest_error_str(error)); - return GUEST_FAILED; - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test Process - Finalize -// ============================= -static GuestErrorT guest_test_process_finalize( void ) -{ - GuestErrorT error; - - error = guest_test_cli_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize test cli module, error=%s.", - guest_error_str(error)); - } - - error = guest_test_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize test module, error=%s.", - guest_error_str(error)); - } - - error = guest_stream_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize stream module, error=%s.", - guest_error_str(error)); - } - - error = guest_channel_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize channel module, error=%s.", - guest_error_str(error)); - } - - error = guest_timer_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finalize timer module, error=%s.", - guest_error_str(error)); - } - - error = guest_selobj_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finialize selection object module, error=%s.", - guest_error_str(error)); - } - - error = guest_config_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed to finialize configuration module, error=%s.", - guest_error_str(error)); - } - - return GUEST_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Test Process - Main -// ========================= -GuestErrorT guest_test_process_main( int argc, char *argv[], char *envp[] ) -{ - unsigned int next_interval_in_ms; - GuestErrorT error; - - DPRINTFI("Starting."); - - guest_signal_register_handler(SIGINT, guest_test_process_signal_handler); - guest_signal_register_handler(SIGTERM, guest_test_process_signal_handler); - guest_signal_register_handler(SIGQUIT, guest_test_process_signal_handler); - guest_signal_register_handler(SIGCONT, guest_test_process_signal_handler); - guest_signal_register_handler(SIGPIPE, guest_test_process_signal_handler); - - error = guest_test_process_initialize(argc, argv, envp); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed initialize test process, error=%s.", - guest_error_str(error)); - return error; - } - - DPRINTFI("Started."); - - guest_test_cli_usage(); - - while (_stay_on) - { - next_interval_in_ms = guest_timer_schedule(); - - error = guest_selobj_dispatch(next_interval_in_ms); - if (GUEST_OKAY != error) - { - DPRINTFE("Selection object dispatch failed, error=%s.", - guest_error_str(error)); - break; - } - } - - DPRINTFI("Shutting down."); - - error = guest_test_process_finalize(); - if (GUEST_OKAY != error) - { - DPRINTFE("Failed finalize test process, error=%s.", - guest_error_str(error) ); - } - - DPRINTFI("Shutdown complete."); - - return GUEST_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.h b/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.h deleted file mode 100755 index e582093c..00000000 --- a/guest-client/guest-client-3.0.1/guest_client/src/test/guest_test_process.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_TEST_PROCESS_H__ -#define __GUEST_TEST_PROCESS_H__ - -#include - -#include "guest_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest Test Process - Main -// ==================== -extern GuestErrorT guest_test_process_main( int argc, char *argv[], char *envp[] ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_TEST_PROCESS_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client_api/Makefile b/guest-client/guest-client-3.0.1/guest_client_api/Makefile deleted file mode 100755 index 4fce699d..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/Makefile +++ /dev/null @@ -1,123 +0,0 @@ -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -SHELL = /bin/sh - -## Configuration Directory Variables -prefix := /usr/local -exec_prefix := $(prefix) -sysconfdir := $(prefix)/etc -includedir := $(prefix)/include -libdir := $(exec_prefix)/lib -bindir := $(exec_prefix)/bin - -MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) -CURRENT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) -BUILD_DIR := $(CURRENT_DIR)/build -PACKAGE_DIR := $(BUILD_DIR)/package -PACKAGE_ROOT_DIR := $(PACKAGE_DIR)/rootdir - -.PHONY: all build create_build_dir sample common heartbeat clean distclean package - -C_INCLUDES = -I$(CURRENT_DIR) -I$(CURRENT_DIR)/../include - -common_NAME := guest_common_api -common_C_SRCS := guest_api_types.c guest_api_debug.c guest_api_stream.c -common_C_SRCS += guest_api_unix.c -common_C_OBJS := ${common_C_SRCS:.c=.o} -common_LDFLAGS := -fPIC -g -shared -common_LIB_NAME := lib$(common_NAME).so -common_LIB_VER_MJR_NAME := $(common_LIB_NAME).3 -common_LIB_VER_NAME := $(common_LIB_VER_MJR_NAME).0.1 -common_BUILD_OBJS := $(addprefix $(BUILD_DIR)/, $(common_C_OBJS)) - -heartbeat_NAME := guest_heartbeat_api -heartbeat_C_SRCS := guest_heartbeat_api.c -heartbeat_C_OBJS := ${heartbeat_C_SRCS:.c=.o} -heartbeat_LDFLAGS := -fPIC -g -shared -heartbeat_LIB_NAME := lib$(heartbeat_NAME).so -heartbeat_LIB_VER_MJR_NAME := $(heartbeat_LIB_NAME).3 -heartbeat_LIB_VER_NAME := $(heartbeat_LIB_VER_MJR_NAME).0.1 -heartbeat_BUILD_OBJS := $(addprefix $(BUILD_DIR)/, $(heartbeat_C_OBJS)) - -sample_NAME := sample-guest-app -sample_C_SRCS := sample_guest_app.c -sample_C_OBJS := ${sample_C_SRCS:.c=.o} -sample_LDLIBS := -L$(BUILD_DIR) -l$(common_NAME) -l$(heartbeat_NAME) -lrt -sample_BUILD_OBJS := $(addprefix $(BUILD_DIR)/, $(sample_C_OBJS)) - -CFLAGS = -g -O2 -Wall -Werror -Wformat -fPIC -DSYSCONFDIR=$(sysconfdir) -Wformat-security - -all: build - -%.o: %.c - $(CC) $(CFLAGS) $(C_INCLUDES) -c $^ -o $(BUILD_DIR)/$@ - -common: $(common_C_OBJS) - $(CC) $(CFLAGS) $(common_BUILD_OBJS) -Wl,-soname,$(common_LIB_VER_MJR_NAME) \ - -o $(BUILD_DIR)/$(common_LIB_VER_NAME) $(common_LDFLAGS) - ln -sf $(common_LIB_VER_NAME) $(BUILD_DIR)/$(common_LIB_NAME) - ln -sf $(common_LIB_VER_NAME) $(BUILD_DIR)/$(common_LIB_VER_MJR_NAME) - -heartbeat: common $(heartbeat_C_OBJS) - $(CC) $(CFLAGS) $(heartbeat_BUILD_OBJS) -Wl,-soname,$(heartbeat_LIB_VER_MJR_NAME) \ - -o $(BUILD_DIR)/$(heartbeat_LIB_VER_NAME) $(heartbeat_LDFLAGS) - ln -sf $(heartbeat_LIB_VER_NAME) $(BUILD_DIR)/$(heartbeat_LIB_NAME) - ln -sf $(heartbeat_LIB_VER_NAME) $(BUILD_DIR)/$(heartbeat_LIB_VER_MJR_NAME) - -create_build_dir: - mkdir -p --mode 755 $(BUILD_DIR) - -build: create_build_dir common heartbeat - -sample: create_build_dir common heartbeat $(sample_C_OBJS) - $(CC) $(CFLAGS) $(sample_BUILD_OBJS) -o $(BUILD_DIR)/$(sample_NAME) $(sample_LDLIBS) - -clean: - @-($(RM) -Rf $(BUILD_DIR)/*) - -distclean: clean - -package: - @(mkdir -p --mode 755 $(PACKAGE_ROOT_DIR)/$(includedir)) - @(mkdir -p --mode 755 $(PACKAGE_ROOT_DIR)/$(libdir)) - @(echo "Packaging guest_api_types.h in $(PACKAGE_ROOT_DIR)/$(includedir)") - @(cp $(CURRENT_DIR)/guest_api_types.h $(PACKAGE_ROOT_DIR)/$(includedir)/guest_api_types.h) - @(echo "Packaging guest_heartbeat_api.h in $(PACKAGE_ROOT_DIR)/$(includedir)") - @(cp $(CURRENT_DIR)/guest_heartbeat_api.h $(PACKAGE_ROOT_DIR)/$(includedir)/guest_heartbeat_api.h) - @(echo "Packaging $(common_LIB_NAME) in $(PACKAGE_ROOT_DIR)/$(libdir)") - @(cp $(BUILD_DIR)/$(common_LIB_VER_NAME) $(PACKAGE_ROOT_DIR)/$(libdir)/$(common_LIB_VER_NAME)) - @(chmod 644 $(PACKAGE_ROOT_DIR)/$(libdir)/$(common_LIB_VER_NAME)) - ln -sf $(common_LIB_VER_NAME) $(PACKAGE_ROOT_DIR)/$(libdir)/$(common_LIB_NAME) - ln -sf $(common_LIB_VER_NAME) $(PACKAGE_ROOT_DIR)/$(libdir)/$(common_LIB_VER_MJR_NAME) - @(echo "Packaging $(heartbeat_LIB_NAME) in $(PACKAGE_ROOT_DIR)/$(libdir)") - @(cp $(BUILD_DIR)/$(heartbeat_LIB_VER_NAME) $(PACKAGE_ROOT_DIR)/$(libdir)/$(heartbeat_LIB_VER_NAME)) - @(chmod 644 $(PACKAGE_ROOT_DIR)/$(libdir)/$(heartbeat_LIB_VER_NAME)) - ln -sf $(heartbeat_LIB_VER_NAME) $(PACKAGE_ROOT_DIR)/$(libdir)/$(heartbeat_LIB_NAME) - ln -sf $(heartbeat_LIB_VER_NAME) $(PACKAGE_ROOT_DIR)/$(libdir)/$(heartbeat_LIB_VER_MJR_NAME) diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.c b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.c deleted file mode 100755 index dac09405..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_api_debug.h" - -#include -#include -#include - -#include "guest_api_types.h" - -#define GUEST_DEBUG_WANT_SYSLOG -#ifdef GUEST_DEBUG_WANT_SYSLOG -#include -#endif - -static char _process_name[30]; -static GuestApiDebugLogLevelT _log_level = GUEST_API_DEBUG_LOG_LEVEL_INFO; - -// **************************************************************************** -// Guest API Debug - Log Level String -// ================================== -const char* guest_api_debug_log_level_str( GuestApiDebugLogLevelT level ) -{ - switch (level) { - case GUEST_API_DEBUG_LOG_LEVEL_ERROR: return "error"; - case GUEST_API_DEBUG_LOG_LEVEL_INFO: return " info"; - case GUEST_API_DEBUG_LOG_LEVEL_DEBUG: return "debug"; - case GUEST_API_DEBUG_LOG_LEVEL_VERBOSE: return " verb"; - default: - return "???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Set Log Level -// =============================== -void guest_api_debug_set_log_level( GuestApiDebugLogLevelT level ) -{ - _log_level = level; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Want Log -// ========================== -bool guest_api_debug_want_log( GuestApiDebugLogLevelT level ) -{ - return (level <= _log_level); -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Log -// ===================== -void guest_api_debug_log( const char* format, ... ) -{ - char time_str[80]; - char date_str[32]; - struct tm t_real; - struct timespec ts_real; - va_list arguments; - char log_data[256]; - - va_start(arguments, format); - vsnprintf(log_data, sizeof(log_data), format, arguments); - va_end(arguments); - - clock_gettime(CLOCK_REALTIME, &ts_real); - - if (NULL == localtime_r(&(ts_real.tv_sec), &t_real)) - { - snprintf( time_str, sizeof(time_str), - "YYYY:MM:DD HH:MM:SS.xxx" ); - } else { - strftime( date_str, sizeof(date_str), "%b %e %H:%M:%S", - &t_real ); - snprintf( time_str, sizeof(time_str), "%s.%03ld", date_str, - ts_real.tv_nsec/1000000 ); - } - -#ifdef GUEST_DEBUG_WANT_SYSLOG - syslog(LOG_INFO, "%s", log_data); -#else - printf("%s %s: %s\n", time_str, _process_name, log_data); -#endif -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Initialize -// ============================ -GuestApiErrorT guest_api_debug_initialize( char process_name[] ) -{ - _log_level = GUEST_API_DEBUG_LOG_LEVEL_INFO; - snprintf(_process_name, sizeof(_process_name), "%s", process_name); - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Finalize -// ========================== -GuestApiErrorT guest_api_debug_finalize( void ) -{ - _log_level = GUEST_API_DEBUG_LOG_LEVEL_INFO; - _process_name[0] = '\0'; - - return GUEST_API_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.h b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.h deleted file mode 100755 index f276fbae..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_debug.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_API_DEBUG_H__ -#define __GUEST_API_DEBUG_H__ - -#include - -#include "guest_api_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - GUEST_API_DEBUG_LOG_LEVEL_ERROR, - GUEST_API_DEBUG_LOG_LEVEL_INFO, - GUEST_API_DEBUG_LOG_LEVEL_DEBUG, - GUEST_API_DEBUG_LOG_LEVEL_VERBOSE, -} GuestApiDebugLogLevelT; - -#define DPRINTF(level, format, args...) \ - if (guest_api_debug_want_log(level)) \ - guest_api_debug_log("%s: %s(%i): " format, \ - guest_api_debug_log_level_str(level), \ - __FILE__, __LINE__, ##args) -#define DPRINTFE(format, args...) \ - DPRINTF(GUEST_API_DEBUG_LOG_LEVEL_ERROR, format, ##args) -#define DPRINTFI(format, args...) \ - DPRINTF(GUEST_API_DEBUG_LOG_LEVEL_INFO, format, ##args) -#define DPRINTFD(format, args...) \ - DPRINTF(GUEST_API_DEBUG_LOG_LEVEL_DEBUG, format, ##args) -#define DPRINTFV(format, args... ) \ - DPRINTF(GUEST_API_DEBUG_LOG_LEVEL_VERBOSE, format, ##args) - -// **************************************************************************** -// Guest API Debug - Log Level String -// ================================== -extern const char* guest_api_debug_log_level_str( GuestApiDebugLogLevelT level ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Set Log Level -// =============================== -extern void guest_api_debug_set_log_level( GuestApiDebugLogLevelT level ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Want Log -// ========================== -extern bool guest_api_debug_want_log( GuestApiDebugLogLevelT level ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Log -// ===================== -extern void guest_api_debug_log( const char* format, ... ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Initialize -// ============================ -extern GuestApiErrorT guest_api_debug_initialize( char process_name[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Debug - Finalize -// ========================== -extern GuestApiErrorT guest_api_debug_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_API_DEBUG_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.c b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.c deleted file mode 100755 index 5f21a39e..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_api_stream.h" - -#include -#include -#include - -#include "guest_api_types.h" -#include "guest_api_debug.h" - -// **************************************************************************** -// Guest API Stream - Get -// ====================== -int guest_api_stream_get( GuestApiStreamT* stream ) -{ - char* byte_ptr; - int delimiter_i = 0; - - if (stream->delimiter_size > stream->size) - return -1; - - for (byte_ptr = stream->bytes; byte_ptr != stream->end_ptr; ++byte_ptr) - { - if (stream->delimiter[delimiter_i] == *byte_ptr) - { - ++delimiter_i; - if (delimiter_i == stream->delimiter_size) - { - return (byte_ptr - stream->bytes); - } - } else { - delimiter_i = 0; - } - } - - return -1; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Get Next -// =========================== -bool guest_api_stream_get_next( GuestApiStreamT* stream ) -{ - char* byte_ptr; - int delimiter_i = 0; - - if (stream->delimiter_size > stream->size) - return false; - - for (byte_ptr = stream->bytes; byte_ptr != stream->end_ptr; ++byte_ptr) - { - --stream->size; - if (stream->delimiter[delimiter_i] == *byte_ptr) - { - ++delimiter_i; - if (delimiter_i == stream->delimiter_size) - { - byte_ptr -= (stream->delimiter_size-1); - stream->size += stream->delimiter_size; - memmove(stream->bytes, byte_ptr, stream->size); - stream->avail = stream->max_size - stream->size; - stream->end_ptr = stream->bytes + stream->size; - break; - } - } else { - delimiter_i = 0; - } - } - - if (byte_ptr == stream->end_ptr) - { - // Empty the stream - memset(stream->bytes, 0, stream->max_size); - stream->avail = stream->max_size; - stream->size = 0; - stream->end_ptr = stream->bytes; - return false; - } - - return true; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Advance -// ========================== -void guest_api_stream_advance( int adv, GuestApiStreamT* stream ) -{ - stream->size -= adv; - memmove(stream->bytes, stream->bytes+adv, stream->size); - stream->avail = stream->max_size - stream->size; - stream->end_ptr = stream->bytes + stream->size; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Reset -// ======================== -void guest_api_stream_reset( GuestApiStreamT* stream ) -{ - memset(stream->bytes, 0, stream->max_size); - stream->avail = stream->max_size; - stream->size = 0; - stream->end_ptr = stream->bytes; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Setup -// ======================== -GuestApiErrorT guest_api_stream_setup( - const char* delimiter, int delimiter_size, int stream_size, - GuestApiStreamT* stream ) -{ - stream->delimiter = malloc(delimiter_size); - if (NULL == stream->delimiter) - { - DPRINTFE("Failed to allocated delimiter storage, needed=%i.", - delimiter_size); - return GUEST_API_FAILED; - } - - stream->bytes = malloc(stream_size); - if (NULL == stream->delimiter) - { - DPRINTFE("Failed to allocated stream storage, needed=%i.", stream_size); - free(stream->delimiter); - return GUEST_API_FAILED; - } - - memcpy(stream->delimiter, delimiter, delimiter_size); - stream->delimiter_size = delimiter_size; - memset(stream->bytes, 0, stream_size); - stream->end_ptr = stream->bytes; - stream->avail = stream_size; - stream->size = 0; - stream->max_size = stream_size; - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Release -// ========================== -GuestApiErrorT guest_api_stream_release( GuestApiStreamT* stream ) -{ - if (NULL != stream->delimiter) - free(stream->delimiter); - - if (NULL != stream->bytes) - free(stream->bytes); - - memset(stream, 0, sizeof(GuestApiStreamT)); - return GUEST_API_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.h b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.h deleted file mode 100755 index 3a71ea06..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_stream.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_API_STREAM_H__ -#define __GUEST_API_STREAM_H__ - -#include - -#include "guest_api_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char* delimiter; - int delimiter_size; - char* end_ptr; - char* bytes; - int avail; - int size; - int max_size; -} GuestApiStreamT; - -// **************************************************************************** -// Guest API Stream - Get -// ====================== -extern int guest_api_stream_get( GuestApiStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Get Next -// =========================== -extern bool guest_api_stream_get_next( GuestApiStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Advance -// ========================== -extern void guest_api_stream_advance( int adv, GuestApiStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Reset -// ======================== -extern void guest_api_stream_reset( GuestApiStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Setup -// ======================== -extern GuestApiErrorT guest_api_stream_setup( - const char* delimiter, int delimiter_size, int stream_size, - GuestApiStreamT* stream ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Stream - Release -// ========================== -extern GuestApiErrorT guest_api_stream_release( GuestApiStreamT* stream ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_API_STREAM_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.c b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.c deleted file mode 100755 index 4a0fe2e9..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_api_types.h" - -// **************************************************************************** -// Guest API - Error String -// ======================== -const char* guest_api_error_str( GuestApiErrorT error ) -{ - switch (error) - { - case GUEST_API_OKAY: return "OKAY"; - case GUEST_API_FAILED: return "FAILED"; - case GUEST_API_INTERRUPTED: return "INTERRUPTED"; - case GUEST_API_TRY_AGAIN: return "TRY_AGAIN"; - default: - return "???"; - } -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.h b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.h deleted file mode 100755 index 486c943a..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_types.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_API_TYPES_H__ -#define __GUEST_API_TYPES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - GUEST_API_OKAY, - GUEST_API_FAILED, - GUEST_API_INTERRUPTED, - GUEST_API_TRY_AGAIN, -} GuestApiErrorT; - -// **************************************************************************** -// Guest API - Error String -// ======================== -extern const char* guest_api_error_str( GuestApiErrorT error ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_API_TYPES_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.c b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.c deleted file mode 100755 index c6035131..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_api_unix.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "guest_api_types.h" -#include "guest_api_debug.h" - -// **************************************************************************** -// Guest API Unix - Connect -// ======================== -GuestApiErrorT guest_api_unix_connect( int s, char* address ) -{ - struct sockaddr_un remote; - int len, result; - - memset(&remote, 0, sizeof(remote)); - - remote.sun_family = AF_UNIX; - len = sizeof(remote.sun_family); - len += snprintf(remote.sun_path, sizeof(remote.sun_path), "%s", address); - - result = connect(s, (struct sockaddr*) &remote, sizeof(remote)); - if (0 > result) - { - if ((ENOENT == errno) || (ECONNREFUSED == errno)) - { - DPRINTFD("Failed to connect to %s, error=%s.", address, - strerror(errno)); - return GUEST_API_TRY_AGAIN; - } else { - DPRINTFE("Failed to connect to %s, error=%s.", address, - strerror(errno)); - return GUEST_API_FAILED; - } - } - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Send -// ===================== -GuestApiErrorT guest_api_unix_send( int s, void* msg, int msg_size ) -{ - int result; - - result = write(s, msg, msg_size); - if (0 > result) - { - if (errno == EPIPE) - { - DPRINTFI("Failed to write to socket, error=%s.", strerror(errno)); - return GUEST_API_TRY_AGAIN; - } else { - DPRINTFE("Failed to write to socket, error=%s.", strerror(errno)); - return GUEST_API_FAILED; - } - } - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Receive -// ======================== -GuestApiErrorT guest_api_unix_receive( - int s, void* msg_buf, int msg_buf_size, int* msg_size ) -{ - int result; - - result = read(s, msg_buf, msg_buf_size); - if (0 > result) - { - if (EINTR == errno) - { - DPRINTFD("Interrupted on socket read, error=%s.", strerror(errno)); - return GUEST_API_INTERRUPTED; - } else if (ECONNRESET == errno) { - DPRINTFD("Peer connection reset, error=%s.", strerror(errno)); - *msg_size = 0; - return GUEST_API_OKAY; - } else{ - DPRINTFE("Failed to read from socket, error=%s.", strerror(errno)); - return GUEST_API_FAILED; - } - } else if (0 == result) { - DPRINTFD("No message received from socket."); - *msg_size = 0; - return GUEST_API_OKAY; - } else { - DPRINTFV("Received message, msg_size=%i.", result); - *msg_size = result; - } - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Open -// ===================== -GuestApiErrorT guest_api_unix_open( int* s ) -{ - int sock; - int reuse_addr = 1; - struct sockaddr_un local; - int result; - - *s = -1; - memset(&local, 0, sizeof(local)); - - sock = socket(AF_UNIX, SOCK_STREAM, 0); - if (0 > sock) - { - DPRINTFE("Failed to open socket, error=%s.", strerror(errno)); - return GUEST_API_FAILED; - } - - result = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, - sizeof(reuse_addr)); - if (0 > result) - { - DPRINTFE("Failed to set socket option (REUSEADDR), error=%s.", - strerror(errno)); - close(sock); - return GUEST_API_FAILED; - } - - result = fcntl(sock, F_SETFD, FD_CLOEXEC); - if (0 > result) - { - DPRINTFE("Failed to set to close on exec, error=%s.", strerror(errno)); - close(sock); - return GUEST_API_FAILED; - } - - result = fcntl(sock, F_GETFL); - if (0 > result) - { - DPRINTFE("Failed to get socket options, error=%s.", strerror(errno)); - close(sock); - return GUEST_API_FAILED; - } - - result = fcntl(sock, F_SETFL, result | O_NONBLOCK); - if (0 > result) - { - DPRINTFE("Failed to set socket options, error=%s.", strerror(errno)); - close(sock); - return GUEST_API_FAILED; - } - - *s = sock; - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Close -// ====================== -GuestApiErrorT guest_api_unix_close( int s ) -{ - if (0 <= s) - close(s); - - return GUEST_API_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.h b/guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.h deleted file mode 100755 index 6e0b71c5..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_api_unix.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_API_UNIX_H__ -#define __GUEST_API_UNIX_H__ - -#include "guest_api_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// **************************************************************************** -// Guest API Unix - Connect -// ======================== -extern GuestApiErrorT guest_api_unix_connect( int s, char* address ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Send -// ===================== -extern GuestApiErrorT guest_api_unix_send( int s, void* msg, int msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Receive -// ======================== -extern GuestApiErrorT guest_api_unix_receive( - int s, void* msg_buf, int msg_buf_size, int* msg_size ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Open -// ===================== -extern GuestApiErrorT guest_api_unix_open( int* s ); -// **************************************************************************** - -// **************************************************************************** -// Guest API Unix - Close -// ====================== -extern GuestApiErrorT guest_api_unix_close( int s ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_API_UNIX_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.c b/guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.c deleted file mode 100755 index 99e7d31a..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.c +++ /dev/null @@ -1,748 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "guest_heartbeat_api.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "guest_api_types.h" -#include "guest_api_debug.h" -#include "guest_api_unix.h" -#include "guest_api_stream.h" - -#include "guest_heartbeat_api_msg_defs.h" - -static int _sock = -1; -static bool _connected = false; -static uint32_t _msg_sequence; -static GuestApiStreamT _stream; -static GuestHeartbeatApiCallbacksT _callbacks; - -// **************************************************************************** -// Guest Heartbeat API - Action String -// =================================== -const char* guest_heartbeat_api_action_str( GuestHeartbeatApiActionT action ) -{ - switch (action) - { - case GUEST_HEARTBEAT_API_ACTION_NONE: return "none"; - case GUEST_HEARTBEAT_API_ACTION_REBOOT: return "reboot"; - case GUEST_HEARTBEAT_API_ACTION_STOP: return "stop"; - case GUEST_HEARTBEAT_API_ACTION_LOG: return "log"; - default: - return "action-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Event String -// ================================== -const char* guest_heartbeat_api_event_str( GuestHeartbeatApiEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_API_EVENT_STOP: return "stop"; - case GUEST_HEARTBEAT_API_EVENT_REBOOT: return "reboot"; - case GUEST_HEARTBEAT_API_EVENT_SUSPEND: return "suspend"; - case GUEST_HEARTBEAT_API_EVENT_PAUSE: return "pause"; - case GUEST_HEARTBEAT_API_EVENT_UNPAUSE: return "unpause"; - case GUEST_HEARTBEAT_API_EVENT_RESUME: return "resume"; - case GUEST_HEARTBEAT_API_EVENT_RESIZE_BEGIN: return "resize-begin"; - case GUEST_HEARTBEAT_API_EVENT_RESIZE_END: return "resize-end"; - case GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_BEGIN: return "live-migrate-begin"; - case GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_END: return "live-migrate-end"; - case GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_BEGIN: return "cold-migrate-begin"; - case GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_END: return "cold-migrate-end"; - default: - return "event-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Notify String -// =================================== -const char* guest_heartbeat_api_notify_str( - GuestHeartbeatApiNotifyTypeT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_API_NOTIFY_TYPE_REVOCABLE: return "revocable"; - case GUEST_HEARTBEAT_API_NOTIFY_TYPE_IRREVOCABLE: return "irrevocable"; - default: - return "notify-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Vote Result String -// ======================================== -const char* guest_heartbeat_api_vote_result_str( - GuestHeartbeatApiVoteResultT vote_result ) -{ - switch (vote_result) - { - case GUEST_HEARTBEAT_API_VOTE_RESULT_ACCEPT: return "accept"; - case GUEST_HEARTBEAT_API_VOTE_RESULT_REJECT: return "reject"; - case GUEST_HEARTBEAT_API_VOTE_RESULT_COMPLETE: return "complete"; - default: - return "vote-???"; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Action (Host to Network) -// ============================================== -static GuestHeartbeatApiMsgActionT guest_heartbeat_api_action_hton( - GuestHeartbeatApiActionT action ) -{ - switch (action) - { - case GUEST_HEARTBEAT_API_ACTION_NONE: - return GUEST_HEARTBEAT_API_MSG_ACTION_NONE; - case GUEST_HEARTBEAT_API_ACTION_REBOOT: - return GUEST_HEARTBEAT_API_MSG_ACTION_REBOOT; - case GUEST_HEARTBEAT_API_ACTION_STOP: - return GUEST_HEARTBEAT_API_MSG_ACTION_STOP; - case GUEST_HEARTBEAT_API_ACTION_LOG: - return GUEST_HEARTBEAT_API_MSG_ACTION_LOG; - default: - DPRINTFE("Unknown action %i.", action); - return GUEST_HEARTBEAT_API_MSG_ACTION_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Event (Host to Network) -// ============================================= -static GuestHeartbeatApiMsgEventT guest_heartbeat_api_event_hton( - GuestHeartbeatApiEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_API_EVENT_STOP: - return GUEST_HEARTBEAT_API_MSG_EVENT_STOP; - case GUEST_HEARTBEAT_API_EVENT_REBOOT: - return GUEST_HEARTBEAT_API_MSG_EVENT_REBOOT; - case GUEST_HEARTBEAT_API_EVENT_SUSPEND: - return GUEST_HEARTBEAT_API_MSG_EVENT_SUSPEND; - case GUEST_HEARTBEAT_API_EVENT_PAUSE: - return GUEST_HEARTBEAT_API_MSG_EVENT_PAUSE; - case GUEST_HEARTBEAT_API_EVENT_UNPAUSE: - return GUEST_HEARTBEAT_API_MSG_EVENT_UNPAUSE; - case GUEST_HEARTBEAT_API_EVENT_RESUME: - return GUEST_HEARTBEAT_API_MSG_EVENT_RESUME; - case GUEST_HEARTBEAT_API_EVENT_RESIZE_BEGIN: - return GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_BEGIN; - case GUEST_HEARTBEAT_API_EVENT_RESIZE_END: - return GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_END; - case GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_END: - return GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_END; - case GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_END: - return GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_END; - default: - DPRINTFE("Unknown event %i.", event); - return GUEST_HEARTBEAT_API_MSG_EVENT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Event (Network to Host) -// ============================================= -static GuestHeartbeatApiEventT guest_heartbeat_api_event_ntoh( - GuestHeartbeatApiMsgEventT event ) -{ - switch (event) - { - case GUEST_HEARTBEAT_API_MSG_EVENT_STOP: - return GUEST_HEARTBEAT_API_EVENT_STOP; - case GUEST_HEARTBEAT_API_MSG_EVENT_REBOOT: - return GUEST_HEARTBEAT_API_EVENT_REBOOT; - case GUEST_HEARTBEAT_API_MSG_EVENT_SUSPEND: - return GUEST_HEARTBEAT_API_EVENT_SUSPEND; - case GUEST_HEARTBEAT_API_MSG_EVENT_PAUSE: - return GUEST_HEARTBEAT_API_EVENT_PAUSE; - case GUEST_HEARTBEAT_API_MSG_EVENT_UNPAUSE: - return GUEST_HEARTBEAT_API_EVENT_UNPAUSE; - case GUEST_HEARTBEAT_API_MSG_EVENT_RESUME: - return GUEST_HEARTBEAT_API_EVENT_RESUME; - case GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_BEGIN: - return GUEST_HEARTBEAT_API_EVENT_RESIZE_BEGIN; - case GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_END: - return GUEST_HEARTBEAT_API_EVENT_RESIZE_END; - case GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_END: - return GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_END; - case GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_BEGIN: - return GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_BEGIN; - case GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_END: - return GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_END; - default: - DPRINTFE("Unknown event %i.", event); - return GUEST_HEARTBEAT_API_EVENT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Notify (Host to Network) -// ============================================== -static GuestHeartbeatApiMsgNotifyT guest_heartbeat_api_notify_hton( - GuestHeartbeatApiNotifyTypeT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_API_NOTIFY_TYPE_REVOCABLE: - return GUEST_HEARTBEAT_API_MSG_NOTIFY_REVOCABLE; - case GUEST_HEARTBEAT_API_NOTIFY_TYPE_IRREVOCABLE: - return GUEST_HEARTBEAT_API_MSG_NOTIFY_IRREVOCABLE; - default: - DPRINTFE("Unknown notify type %i.", notify); - return GUEST_HEARTBEAT_API_MSG_NOTIFY_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Notify (Network to Host) -// ============================================== -static GuestHeartbeatApiNotifyTypeT guest_heartbeat_api_notify_ntoh( - GuestHeartbeatApiMsgNotifyT notify ) -{ - switch (notify) - { - case GUEST_HEARTBEAT_API_MSG_NOTIFY_REVOCABLE: - return GUEST_HEARTBEAT_API_NOTIFY_TYPE_REVOCABLE; - case GUEST_HEARTBEAT_API_MSG_NOTIFY_IRREVOCABLE: - return GUEST_HEARTBEAT_API_NOTIFY_TYPE_IRREVOCABLE; - default: - DPRINTFE("Unknown notify type %i.", notify); - return GUEST_HEARTBEAT_API_NOTIFY_TYPE_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Vote Result (Host to Network) -// =================================================== -static GuestHeartbeatApiMsgVoteResultT guest_heartbeat_api_vote_result_hton( - GuestHeartbeatApiVoteResultT vote_result ) -{ - switch (vote_result) - { - case GUEST_HEARTBEAT_API_VOTE_RESULT_ACCEPT: - return GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_ACCEPT; - case GUEST_HEARTBEAT_API_VOTE_RESULT_REJECT: - return GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_REJECT; - case GUEST_HEARTBEAT_API_VOTE_RESULT_COMPLETE: - return GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_COMPLETE; - default: - DPRINTFE("Unknown vote result %i.", vote_result); - return GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_UNKNOWN; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Register -// ============================== -GuestApiErrorT guest_heartbeat_api_register( - GuestHeartbeatApiInitDataT* init_data ) -{ - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT* hdr = &(msg.header); - GuestHeartbeatApiMsgInitT* bdy = &(msg.body.init); - GuestApiErrorT error; - - if (0 > _sock) - { - error = guest_api_unix_open(&_sock); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to open unix socket, error=%s.", - guest_api_error_str(error)); - return error; - } - } - - if (!_connected) - { - error = guest_api_unix_connect(_sock, GUEST_HEARTBEAT_API_MSG_ADDRESS); - if (GUEST_API_OKAY != error) - { - if (GUEST_API_TRY_AGAIN != error) - { - DPRINTFD("Failed to connect unix socket, error=%s.", - guest_api_error_str(error)); - return error; - } else { - DPRINTFE("Failed to connect unix socket, error=%s.", - guest_api_error_str(error)); - return error; - } - } - - _connected = true; - } - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_INIT; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - snprintf(bdy->application_name, - GUEST_HEARTBEAT_API_MSG_MAX_APPLICATION_NAME_SIZE, "%s", - init_data->application_name); - bdy->heartbeat_interval_ms = init_data->heartbeat_interval_ms; - bdy->vote_secs = init_data->vote_secs; - bdy->shutdown_notice_secs = init_data->shutdown_notice_secs; - bdy->suspend_notice_secs = init_data->suspend_notice_secs; - bdy->resume_notice_secs = init_data->resume_notice_secs; - bdy->corrective_action - = guest_heartbeat_api_action_hton(init_data->corrective_action); - - error = guest_api_unix_send(_sock, &msg, sizeof(msg)); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat register message, error=%s.", - guest_api_error_str(error)); - return error; - } - - DPRINTFD("Sent register request."); - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Deregister -// ================================ -GuestApiErrorT guest_heartbeat_api_deregister( char log_msg[] ) -{ - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT* hdr = &(msg.header); - GuestHeartbeatApiMsgFinalT* bdy = &(msg.body.final); - GuestApiErrorT error; - - if (!_connected) - { - DPRINTFD("Not connected."); - return GUEST_API_OKAY; - } - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_FINAL; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - snprintf(bdy->log_msg, GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE, "%s", log_msg); - - error = guest_api_unix_send(_sock, &msg, sizeof(msg)); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat api deregister message, " - "error=%s.", guest_api_error_str(error)); - return error; - } - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Send Action Response -// ========================================== -GuestApiErrorT guest_heartbeat_api_send_action_response( - int invocation_id, GuestHeartbeatApiEventT event, - GuestHeartbeatApiNotifyTypeT notify_type, - GuestHeartbeatApiVoteResultT vote_result, char log_msg[] ) -{ - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT* hdr = &(msg.header); - GuestHeartbeatApiMsgActionResponseT* bdy = &(msg.body.action_response); - GuestApiErrorT error; - - if (!_connected) - { - DPRINTFD("Not connected."); - return GUEST_API_OKAY; - } - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_ACTION_RESPONSE; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - bdy->invocation_id = invocation_id; - bdy->event_type = guest_heartbeat_api_event_hton(event); - bdy->notification_type = guest_heartbeat_api_notify_hton(notify_type); - bdy->vote_result = guest_heartbeat_api_vote_result_hton(vote_result); - snprintf(bdy->log_msg, GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE, "%s", log_msg); - - error = guest_api_unix_send(_sock, &msg, sizeof(msg)); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat api action response message, " - "error=%s.", guest_api_error_str(error)); - return error; - } - - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Api - Receive Init Ack -// ====================================== -static void guest_heartbeat_api_recv_init_ack( void ) -{ - uint32_t accepted; - char* ptr = _stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - - accepted = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - - DPRINTFI("Registration %s.", accepted ? "accepted" : "not accepted"); - - if (NULL != _callbacks.register_state) - _callbacks.register_state(accepted); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Api - Receive Challenge -// ======================================= -static void guest_heartbeat_api_recv_challenge( void ) -{ - bool health = true; - GuestHeartbeatApiActionT corrective_action = GUEST_HEARTBEAT_API_ACTION_NONE; - char log_msg[GUEST_HEARTBEAT_API_LOG_MAX] = ""; - int heartbeat_challenge; - GuestHeartbeatApiMsgT msg; - GuestHeartbeatApiMsgHeaderT* hdr = &(msg.header); - GuestHeartbeatApiMsgChallengeResponseT* bdy = &(msg.body.challenge_response); - GuestApiErrorT error; - char* ptr = _stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - - heartbeat_challenge = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - - if (NULL != _callbacks.health_check) - _callbacks.health_check(&health, &corrective_action, log_msg); - - memset(&msg, 0, sizeof(msg)); - - memcpy(&(hdr->magic), GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE); - hdr->version = GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT; - hdr->revision = GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT; - hdr->msg_type = GUEST_HEARTBEAT_API_MSG_CHALLENGE_RESPONSE; - hdr->sequence = ++_msg_sequence; - hdr->size = sizeof(msg); - - bdy->heartbeat_response = heartbeat_challenge; - bdy->health = health; - bdy->corrective_action - = guest_heartbeat_api_action_hton(corrective_action); - snprintf(bdy->log_msg, GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE, "%s", log_msg); - - error = guest_api_unix_send(_sock, &msg, sizeof(msg)); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to send guest heartbeat api challenge response " - "message, error=%s.", guest_api_error_str(error)); - return; - } - - DPRINTFD("Sent guest heartbeat api challenge response sent."); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat Api - Receive Action Notify -// =========================================== -static void guest_heartbeat_api_recv_action_notify( void ) -{ - int invocation_id; - GuestHeartbeatApiEventT event; - GuestHeartbeatApiNotifyTypeT notify_type; - char* ptr = _stream.bytes + sizeof(GuestHeartbeatApiMsgHeaderT); - - invocation_id = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - event = guest_heartbeat_api_event_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - notify_type = guest_heartbeat_api_notify_ntoh(*(uint32_t*) ptr); - ptr += sizeof(uint32_t); - - if (NULL != _callbacks.action_notify) - _callbacks.action_notify(invocation_id, event, notify_type); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Dispatch -// ============================== -void guest_heartbeat_api_dispatch( int selobj ) -{ - static bool have_start = false; - static bool have_header = false; - static GuestHeartbeatApiMsgHeaderT hdr; - - bool more; - int bytes_received; - GuestApiErrorT error; - - if (selobj != _sock) - return; - - error = guest_api_unix_receive(_sock, _stream.end_ptr, _stream.avail, - &bytes_received); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to receive message, error=%s.", - guest_api_error_str(error)); - return; - } - - if (0 == bytes_received) - { - DPRINTFI("Registration dropped."); - _connected = false; - - error = guest_api_unix_close(_sock); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to close unix socket, error=%s.", - guest_api_error_str(error)); - } - _sock = -1; - - if (NULL != _callbacks.register_state) - _callbacks.register_state(false); - } - - DPRINTFV("Bytes received is %i.", bytes_received); - - _stream.end_ptr += bytes_received; - _stream.avail -= bytes_received; - _stream.size += bytes_received; - - do - { - more = false; - - if (!have_start) - { - memset(&hdr, 0, sizeof(GuestHeartbeatApiMsgHeaderT)); - have_start = guest_api_stream_get_next(&_stream); - } - - if (have_start && !have_header) - { - if (sizeof(GuestHeartbeatApiMsgHeaderT) <= _stream.size) - { - char *ptr = _stream.bytes + GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE; - - hdr.version = *(uint8_t*) ptr; - ptr += sizeof(uint8_t); - hdr.revision = *(uint8_t*) ptr; - ptr += sizeof(uint8_t); - hdr.msg_type = *(uint16_t*) ptr; - ptr += sizeof(uint16_t); - hdr.sequence = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - hdr.size = *(uint32_t*) ptr; - ptr += sizeof(uint32_t); - - DPRINTFD("Message header: version=%i, revision=%i, " - "msg_type=%i, sequence=%u, size=%u", hdr.version, - hdr.revision, hdr.msg_type, hdr.sequence, hdr.size); - - if (GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT == hdr.version) - { - have_header = true; - } else { - have_start = false; - have_header = false; - guest_api_stream_advance(GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE, - &_stream); - more = true; - } - } - } - - if (have_start && have_header) - { - if (sizeof(GuestHeartbeatApiMsgT) <= _stream.size) - { - switch (hdr.msg_type) - { - case GUEST_HEARTBEAT_API_MSG_INIT_ACK: - guest_heartbeat_api_recv_init_ack(); - break; - - case GUEST_HEARTBEAT_API_MSG_CHALLENGE: - guest_heartbeat_api_recv_challenge(); - break; - - case GUEST_HEARTBEAT_API_MSG_ACTION_NOTIFY: - guest_heartbeat_api_recv_action_notify(); - break; - - default: - DPRINTFV("Unknown message type %i.", - (int) hdr.msg_type); - break; - } - - have_start = false; - have_header = false; - guest_api_stream_advance(sizeof(GuestHeartbeatApiMsgT), - &_stream); - more = true; - } - } - } while (more); - - if (0 >= _stream.avail) - guest_api_stream_reset(&_stream); -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Get Selection Object -// ========================================== -int guest_heartbeat_api_get_selobj( void ) -{ - return _sock; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Initialize -// ================================ -GuestApiErrorT guest_heartbeat_api_initialize( - GuestHeartbeatApiCallbacksT* callbacks ) -{ - int stream_size; - GuestApiErrorT error; - - if ((NULL == callbacks->register_state) || - (NULL == callbacks->health_check) || - (NULL == callbacks->action_notify)) - { - DPRINTFE("Not all callbacks are valid."); - return GUEST_API_FAILED; - } - - _sock = -1; - - stream_size = sizeof(GuestHeartbeatApiMsgT)*4; - if (8192 > stream_size) - stream_size = 8192; - - error = guest_api_stream_setup(GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE, - GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE, - stream_size, &_stream); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to setup stream, error=%s.", - guest_api_error_str(error)); - return error; - } - - memcpy(&_callbacks, callbacks, sizeof(_callbacks)); - return GUEST_API_OKAY; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Finalize -// ============================== -GuestApiErrorT guest_heartbeat_api_finalize( void ) -{ - GuestApiErrorT error; - - memset(&_callbacks, 0, sizeof(_callbacks)); - - error = guest_api_stream_release(&_stream); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed release stream, error=%s.", - guest_api_error_str(error)); - } - - if (0 <= _sock) - { - error = guest_api_unix_close(_sock); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to close unix socket, error=%s.", - guest_api_error_str(error)); - } - _sock = -1; - } - - return GUEST_API_OKAY; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.h b/guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.h deleted file mode 100755 index 5f03365b..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/guest_heartbeat_api.h +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HERATBEAT_API_H__ -#define __GUEST_HEARTBEAT_API_H__ - -#include - -#include "guest_api_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_HEARTBEAT_API_APPLICATION_NAME_MAX 40 -#define GUEST_HEARTBEAT_API_LOG_MAX 192 - -typedef enum { - - GUEST_HEARTBEAT_API_ACTION_UNKNOWN, - GUEST_HEARTBEAT_API_ACTION_NONE, - GUEST_HEARTBEAT_API_ACTION_REBOOT, - GUEST_HEARTBEAT_API_ACTION_STOP, - GUEST_HEARTBEAT_API_ACTION_LOG, - GUEST_HEARTBEAT_API_ACTION_MAX, -} GuestHeartbeatApiActionT; - -typedef enum { - GUEST_HEARTBEAT_API_EVENT_UNKNOWN, - GUEST_HEARTBEAT_API_EVENT_STOP, - GUEST_HEARTBEAT_API_EVENT_REBOOT, - GUEST_HEARTBEAT_API_EVENT_SUSPEND, - GUEST_HEARTBEAT_API_EVENT_PAUSE, - GUEST_HEARTBEAT_API_EVENT_UNPAUSE, - GUEST_HEARTBEAT_API_EVENT_RESUME, - GUEST_HEARTBEAT_API_EVENT_RESIZE_BEGIN, - GUEST_HEARTBEAT_API_EVENT_RESIZE_END, - GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_BEGIN, - GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_END, - GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_BEGIN, - GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_END, - GUEST_HEARTBEAT_API_EVENT_MAX, -} GuestHeartbeatApiEventT; - -typedef enum { - GUEST_HEARTBEAT_API_NOTIFY_TYPE_UNKNOWN, - GUEST_HEARTBEAT_API_NOTIFY_TYPE_REVOCABLE, // vote on an action - GUEST_HEARTBEAT_API_NOTIFY_TYPE_IRREVOCABLE, // notification of an action - GUEST_HEARTBEAT_API_NOTIFY_TYPE_MAX, -} GuestHeartbeatApiNotifyTypeT; - -typedef enum { -// - GUEST_HEARTBEAT_API_VOTE_RESULT_UNKNOWN, - GUEST_HEARTBEAT_API_VOTE_RESULT_ACCEPT, // vote to accept an action - GUEST_HEARTBEAT_API_VOTE_RESULT_REJECT, // vote to reject an action - GUEST_HEARTBEAT_API_VOTE_RESULT_COMPLETE, // ready for action - GUEST_HEARTBEAT_API_VOTE_RESULT_MAX, -} GuestHeartbeatApiVoteResultT; - -// **************************************************************************** -// Guest Heartbeat API - Initialization Data -// ========================================= -// Description: -// Configuration data used on registration. -// -// Fields: -// application_name name of the application, used for logging -// heartbeat_interval_ms the interval for heartbeat challenges -// vote_secs maximum time to wait for a vote to complete -// shutdown_notice_secs maximum time to wait for a shutdown prep -// suspend_notice_secs maximum time to wait for a suspend prep -// resume_notice_secs maximum time to wait for a resume prep -// corrective_action corrective action on heartbeat timeouts -// -// Note: minimum heartbeat interval is 400 milliseconds. Anything below this -// interval will cause the registration to be rejected. -// -typedef struct { - char application_name[GUEST_HEARTBEAT_API_APPLICATION_NAME_MAX]; - int heartbeat_interval_ms; - int vote_secs; - int shutdown_notice_secs; - int suspend_notice_secs; - int resume_notice_secs; - GuestHeartbeatApiActionT corrective_action; -} GuestHeartbeatApiInitDataT; -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Register State Callback -// ============================================= -// Description: -// Called when the registration with the Guest-Client changes. Situations -// this callback can be invoked are the following: -// - Guest-Client accepts the registration, -// - Guest-Client rejects the registration, and -// - Guest-Client connection fails. -// -// If the registration state is False, the application needs to register -// again with the Guest-Client. -// -// Parameters: -// state the registration state of the application. -// -typedef void (*GuestHeartbeatApiRegisterStateCallbackT) - (bool state); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Health Check Callback -// =========================================== -// Description: -// Called by the Guest-Client to request the current health of the -// application. -// -// Parameters: -// health the health of the application -// corrective_action the corrective action to be taken when unhealthy -// log_msg an indication of why the application is unhealthy. -// -typedef void (*GuestHeartbeatApiHealthCheckCallbackT) - (bool* health, GuestHeartbeatApiActionT* corrective_action, - char log_msg[]); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Action Notify Callback -// ============================================ -// Description: -// Called when the Guest-Client wants to notify the application of an -// action. The notification type indicates if this is a vote or a -// notification. -// -// Parameters: -// invocation_id the unique identifier for the action. -// event the type of event for the action. -// notify_type the type of notification for the action. -// -typedef void (*GuestHeartbeatApiActionNotifyCallbackT) - (int invocation_id, GuestHeartbeatApiEventT event, - GuestHeartbeatApiNotifyTypeT notify_type); -// **************************************************************************** - -typedef struct { - GuestHeartbeatApiRegisterStateCallbackT register_state; - GuestHeartbeatApiHealthCheckCallbackT health_check; - GuestHeartbeatApiActionNotifyCallbackT action_notify; -} GuestHeartbeatApiCallbacksT; - -// **************************************************************************** -// Guest Heartbeat API - Action String -// =================================== -extern const char* guest_heartbeat_api_action_str( - GuestHeartbeatApiActionT action ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Event String -// ================================== -extern const char* guest_heartbeat_api_event_str( - GuestHeartbeatApiEventT event ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Notify String -// =================================== -extern const char* guest_heartbeat_api_notify_str( - GuestHeartbeatApiNotifyTypeT notify ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Vote Result String -// ======================================== -extern const char* guest_heartbeat_api_vote_result_str( - GuestHeartbeatApiVoteResultT vote_result ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Register -// ============================== -// Description: -// Sends a registration request to the Guest-Client. A try-again can be -// returned which indicates that registration should be attempted again -// at a later time. -// -// Parameters: -// init_data configuration parameters and timeout values for -// this application. -// -// Returns: -// GUEST_API_OKAY on success, GUEST_API_TRY_AGAIN if Guest-Client could -// not be reached, otherwise failure. -// -extern GuestApiErrorT guest_heartbeat_api_register( - GuestHeartbeatApiInitDataT* init_data ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Deregister -// ================================ -// Description: -// Sends a deregister to the Guest-Client. -// -// Parameters: -// log_msg indication of the reason for the de-registration. -// -// Returns: -// GUEST_API_OKAY on success, otherwise failure. -// -extern GuestApiErrorT guest_heartbeat_api_deregister( char log_msg[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Send Action Response -// ========================================== -// Description: -// Sends an action response to the Guest-Client indicating the action -// is accepted, rejected or completed. -// -// Parameters: -// invocation_id the unique identifier from the action callback. -// event the type of event from the action callback. -// notify_type the type of notification from the action callback. -// vote_result indication of acceptance of the action. -// log_msg an indication of why the action was rejected. -// -// Returns: -// GUEST_API_OKAY on success, otherwise failure. -// -extern GuestApiErrorT guest_heartbeat_api_send_action_response( - int invocation_id, GuestHeartbeatApiEventT event, - GuestHeartbeatApiNotifyTypeT notify_type, - GuestHeartbeatApiVoteResultT vote_result, char log_msg[] ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Dispatch -// ============================== -// Description: -// Called when the selection object returned by guest_heartbeat_api_get_selobj -// becomes readable. -// -// Parameters: -// selobj the selection object that has become readable. -// -// Returns: -// Nothing -// -extern void guest_heartbeat_api_dispatch( int selobj ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Get Selection Object -// ========================================== -// Description: -// Returns a selection object that can be used with poll or select. -// -// Parameters: -// None -// -// Returns: -// A valid selection object, otherwise -1. -// -extern int guest_heartbeat_api_get_selobj( void ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Initialize -// ================================ -// Description: -// Initialize the Guest Heartbeat API library for use. -// -// Parameters: -// callbacks a listing of callbacks for receiving registration -// state changes, health checks, and action notifications -// (all are required to be non-NULL). -// -// Returns: -// GUEST_API_OKAY on success, otherwise failure. -// -extern GuestApiErrorT guest_heartbeat_api_initialize( - GuestHeartbeatApiCallbacksT* callbacks ); -// **************************************************************************** - -// **************************************************************************** -// Guest Heartbeat API - Finalize -// ============================== -// Description: -// Finalize the Guest Heartbeat API library. -// -// Parameters: -// None -// -// Returns: -// GUEST_API_OKAY on success, otherwise failure. -// -extern GuestApiErrorT guest_heartbeat_api_finalize( void ); -// **************************************************************************** - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_API_H__ */ diff --git a/guest-client/guest-client-3.0.1/guest_client_api/sample_guest_app.c b/guest-client/guest-client-3.0.1/guest_client_api/sample_guest_app.c deleted file mode 100755 index c9ae5b77..00000000 --- a/guest-client/guest-client-3.0.1/guest_client_api/sample_guest_app.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include -#include -#include -#include -#include -#include -#include - -#include "guest_api_types.h" -#include "guest_api_debug.h" -#include "guest_heartbeat_api.h" - -static int _heartbeat_selobj = -1; -static bool _heartbeat_registered = false; -static bool _heartbeat_registering = false; -static char _application_name[40] = "sample-guest-app"; -static GuestHeartbeatApiActionT _corrective_action; - -static sig_atomic_t _stay_on = 1; - -// **************************************************************************** -// Guest Application - Register State Callback -// =========================================== -static void guest_app_register_state_callback( bool state ) -{ - if (state) - _heartbeat_registering = false; - - _heartbeat_registered = state; -} -// **************************************************************************** - -// **************************************************************************** -// Guest Application - Health Check Callback -// ========================================= -static void guest_app_health_check_callback( - bool* healthy, GuestHeartbeatApiActionT* corrective_action, - char log_msg[GUEST_HEARTBEAT_API_LOG_MAX] ) -{ - char filename[80]; - int result; - - snprintf(filename, sizeof(filename), "/tmp/%s_unhealthy", - _application_name); - - result = access(filename, F_OK); - if (0 == result) - { - *healthy = false; - *corrective_action = _corrective_action; - snprintf(log_msg, GUEST_HEARTBEAT_API_LOG_MAX, "File %s exists.", - filename); - } else { - *healthy = true; - *corrective_action = GUEST_HEARTBEAT_API_ACTION_NONE; - log_msg[0] = '\0'; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Application - Action Notify Callback -// ========================================== -static void guest_app_action_notify_callback( - int invocation_id, GuestHeartbeatApiEventT event, - GuestHeartbeatApiNotifyTypeT notify_type ) -{ - char filename[80]; - GuestHeartbeatApiVoteResultT vote_result; - char log_msg[GUEST_HEARTBEAT_API_LOG_MAX]; - GuestApiErrorT error; - int result; - - snprintf(filename, sizeof(filename), "/tmp/%s_event_timeout", - _application_name); - - result = access(filename, F_OK); - if (0 == result) - return; - - if (GUEST_HEARTBEAT_API_NOTIFY_TYPE_REVOCABLE == notify_type) - { - switch (event) - { - case GUEST_HEARTBEAT_API_EVENT_STOP: - snprintf(filename, sizeof(filename), - "/tmp/%s_vote_no_to_stop", _application_name); - break; - - case GUEST_HEARTBEAT_API_EVENT_REBOOT: - snprintf(filename, sizeof(filename), - "/tmp/%s_vote_no_to_reboot", _application_name); - break; - case GUEST_HEARTBEAT_API_EVENT_SUSPEND: - case GUEST_HEARTBEAT_API_EVENT_PAUSE: - snprintf(filename, sizeof(filename), - "/tmp/%s_vote_no_to_suspend", _application_name); - break; - case GUEST_HEARTBEAT_API_EVENT_RESIZE_BEGIN: - snprintf(filename, sizeof(filename), - "/tmp/%s_vote_no_to_resize", _application_name); - break; - case GUEST_HEARTBEAT_API_EVENT_LIVE_MIGRATE_BEGIN: - case GUEST_HEARTBEAT_API_EVENT_COLD_MIGRATE_BEGIN: - snprintf(filename, sizeof(filename), - "/tmp/%s_vote_no_to_migrate", _application_name); - break; - default: - DPRINTFE("Should never be asked to vote on event %s.", - guest_heartbeat_api_event_str(event)); - return; - } - - result = access(filename, F_OK); - if (0 == result) - { - vote_result = GUEST_HEARTBEAT_API_VOTE_RESULT_REJECT; - snprintf(log_msg, GUEST_HEARTBEAT_API_LOG_MAX, "File %s exists.", - filename); - } else { - vote_result = GUEST_HEARTBEAT_API_VOTE_RESULT_ACCEPT; - log_msg[0] = '\0'; - } - } else { - vote_result = GUEST_HEARTBEAT_API_VOTE_RESULT_COMPLETE; - } - - error = guest_heartbeat_api_send_action_response(invocation_id, event, - notify_type, vote_result, log_msg); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to send action response, error=%s.", - guest_api_error_str(error)); - return; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Application - Signal Handler -// ================================== -static void guest_app_signal_handler( int signum ) -{ - switch (signum) - { - case SIGINT: - case SIGTERM: - case SIGQUIT: - _stay_on = 0; - break; - - case SIGCONT: - DPRINTFD("Ignoring signal SIGCONT (%i).", signum); - break; - - case SIGPIPE: - DPRINTFD("Ignoring signal SIGPIPE (%i).", signum); - break; - - default: - DPRINTFD("Signal (%i) ignored.", signum); - break; - } -} -// **************************************************************************** - -// **************************************************************************** -// Guest Application - Main -// ======================== -int main( int argc, char *argv[], char *envp[] ) -{ - GuestHeartbeatApiCallbacksT callbacks; - GuestApiErrorT error; - - error = guest_api_debug_initialize("Guest-Application"); - if (GUEST_API_OKAY != error) - { - printf("Debug initialization failed, error=%s.\n", - guest_api_error_str(error)); - return EXIT_FAILURE; - } - - DPRINTFI("Starting."); - - signal(SIGINT, guest_app_signal_handler); - signal(SIGTERM, guest_app_signal_handler); - signal(SIGQUIT, guest_app_signal_handler); - signal(SIGCONT, guest_app_signal_handler); - signal(SIGPIPE, guest_app_signal_handler); - - _corrective_action = GUEST_HEARTBEAT_API_ACTION_REBOOT; - - unsigned int arg_i; - for (arg_i=1; arg_i < argc; ++arg_i) - { - if (0 == strcmp("--name", argv[arg_i])) - { - arg_i++; - if (arg_i < argc) - snprintf(_application_name, sizeof(_application_name), "%s", - argv[arg_i]); - - } else if (0 == strcmp("--corrective-action", argv[arg_i])) { - arg_i++; - if (arg_i < argc) - { - if (0 == strcmp("reboot", argv[arg_i])) - { - _corrective_action = GUEST_HEARTBEAT_API_ACTION_REBOOT; - - } else if (0 == strcmp("stop", argv[arg_i])) { - _corrective_action = GUEST_HEARTBEAT_API_ACTION_STOP; - - } else if (0 == strcmp("log", argv[arg_i])) { - _corrective_action = GUEST_HEARTBEAT_API_ACTION_LOG; - } - } - } - } - - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.register_state = guest_app_register_state_callback; - callbacks.health_check = guest_app_health_check_callback; - callbacks.action_notify = guest_app_action_notify_callback; - - error = guest_heartbeat_api_initialize(&callbacks); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to initialize guest heartbeat api, error=%s.", - guest_api_error_str(error)); - return EXIT_FAILURE; - } - - DPRINTFI("Started."); - - while (_stay_on) - { - int num_fds; - fd_set fds; - struct timeval tv; - int result; - - tv.tv_sec = 1; - tv.tv_usec = 0; - - num_fds = 0; - FD_ZERO(&fds); - - if (!_heartbeat_registered) - { - GuestHeartbeatApiInitDataT init_data; - - snprintf(init_data.application_name, - sizeof(init_data.application_name), "%s", - _application_name); - init_data.heartbeat_interval_ms = 1000; - init_data.vote_secs = 8; - init_data.shutdown_notice_secs = 5; - init_data.suspend_notice_secs = 5; - init_data.resume_notice_secs = 5; - init_data.corrective_action = _corrective_action; - - error = guest_heartbeat_api_register(&init_data); - if (GUEST_API_OKAY == error) - { - _heartbeat_registering = true; - } else { - _heartbeat_registering = false; - - if (GUEST_API_TRY_AGAIN != error) - { - DPRINTFE("Failed to register for guest heartbeating, " - "error=%s.", guest_api_error_str(error)); - return EXIT_FAILURE; - } - } - } - - if (_heartbeat_registering || _heartbeat_registered) - { - _heartbeat_selobj = guest_heartbeat_api_get_selobj(); - FD_SET(_heartbeat_selobj, &fds); - num_fds = _heartbeat_selobj; - } - - result = select(num_fds+1, &fds, NULL, NULL, &tv); - if (0 > result) - { - if (errno == EINTR) - { - DPRINTFD("Interrupted by a signal."); - } else { - DPRINTFE("Select failed, error=%s.", strerror(errno)); - } - } else if (0 == result) { - DPRINTFD("Nothing selected."); - } else { - if (FD_ISSET(_heartbeat_selobj, &fds)) - { - guest_heartbeat_api_dispatch(_heartbeat_selobj); - } - } - } - - DPRINTFI("Shutting down."); - - error = guest_heartbeat_api_deregister("Exiting"); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to deregister from guest heartbeat api, error=%s.", - guest_api_error_str(error)); - } - - error = guest_heartbeat_api_finalize(); - if (GUEST_API_OKAY != error) - { - DPRINTFE("Failed to finalize guest heartbeat api, error=%s.", - guest_api_error_str(error)); - } - - DPRINTFI("Shutdown complete."); - - error = guest_api_debug_finalize(); - if (GUEST_API_OKAY != error) - { - printf("Debug finalization failed, error=%s.\n", - guest_api_error_str(error)); - } - - return EXIT_SUCCESS; -} -// **************************************************************************** diff --git a/guest-client/guest-client-3.0.1/include/guest_heartbeat_api_msg_defs.h b/guest-client/guest-client-3.0.1/include/guest_heartbeat_api_msg_defs.h deleted file mode 100755 index f178c618..00000000 --- a/guest-client/guest-client-3.0.1/include/guest_heartbeat_api_msg_defs.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __GUEST_HEARTBEAT_API_MESSAGE_DEFINITIONS_H__ -#define __GUEST_HEARTBEAT_API_MESSAGE_DEFINITIONS_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define GUEST_HEARTBEAT_API_MSG_ADDRESS "/var/run/.guest_heartbeat_api" - -#define GUEST_HEARTBEAT_API_MSG_MAGIC_VALUE "FDFDA5A5" -#define GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE 8 -#define GUEST_HEARTBEAT_API_MSG_VERSION_CURRENT 2 -#define GUEST_HEARTBEAT_API_MSG_REVISION_CURRENT 1 - -#define GUEST_HEARTBEAT_API_MSG_MAX_APPLICATION_NAME_SIZE 40 -#define GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE 192 - -typedef enum { - GUEST_HEARTBEAT_API_MSG_ACTION_UNKNOWN, - GUEST_HEARTBEAT_API_MSG_ACTION_NONE, - GUEST_HEARTBEAT_API_MSG_ACTION_REBOOT, - GUEST_HEARTBEAT_API_MSG_ACTION_STOP, - GUEST_HEARTBEAT_API_MSG_ACTION_LOG, - GUEST_HEARTBEAT_API_MSG_ACTION_MAX, -} GuestHeartbeatApiMsgActionT; - -typedef enum { - GUEST_HEARTBEAT_API_MSG_EVENT_UNKNOWN, - GUEST_HEARTBEAT_API_MSG_EVENT_STOP, - GUEST_HEARTBEAT_API_MSG_EVENT_REBOOT, - GUEST_HEARTBEAT_API_MSG_EVENT_SUSPEND, - GUEST_HEARTBEAT_API_MSG_EVENT_PAUSE, - GUEST_HEARTBEAT_API_MSG_EVENT_UNPAUSE, - GUEST_HEARTBEAT_API_MSG_EVENT_RESUME, - GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_BEGIN, - GUEST_HEARTBEAT_API_MSG_EVENT_RESIZE_END, - GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_BEGIN, - GUEST_HEARTBEAT_API_MSG_EVENT_LIVE_MIGRATE_END, - GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_BEGIN, - GUEST_HEARTBEAT_API_MSG_EVENT_COLD_MIGRATE_END, - GUEST_HEARTBEAT_API_MSG_EVENT_MAX, -} GuestHeartbeatApiMsgEventT; - -typedef enum { - GUEST_HEARTBEAT_API_MSG_NOTIFY_UNKNOWN, - GUEST_HEARTBEAT_API_MSG_NOTIFY_REVOCABLE, - GUEST_HEARTBEAT_API_MSG_NOTIFY_IRREVOCABLE, - GUEST_HEARTBEAT_API_MSG_NOTIFY_MAX, -} GuestHeartbeatApiMsgNotifyT; - -typedef enum { - GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_UNKNOWN, - GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_ACCEPT, - GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_REJECT, - GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_COMPLETE, - GUEST_HEARTBEAT_API_MSG_VOTE_RESULT_MAX, -} GuestHeartbeatApiMsgVoteResultT; - -typedef enum { - GUEST_HEARTBEAT_API_MSG_INIT, - GUEST_HEARTBEAT_API_MSG_INIT_ACK, - GUEST_HEARTBEAT_API_MSG_FINAL, - GUEST_HEARTBEAT_API_MSG_CHALLENGE, - GUEST_HEARTBEAT_API_MSG_CHALLENGE_RESPONSE, - GUEST_HEARTBEAT_API_MSG_ACTION_NOTIFY, - GUEST_HEARTBEAT_API_MSG_ACTION_RESPONSE, - GUEST_HEARTBEAT_API_MSG_TYPE_MAX, -} GuestHeartbeatApiMsgTypeT; - -typedef struct { - char magic[GUEST_HEARTBEAT_API_MSG_MAGIC_SIZE]; - uint8_t version; - uint8_t revision; - uint16_t msg_type; - uint32_t sequence; - uint32_t size; -} GuestHeartbeatApiMsgHeaderT; - -typedef struct { - char application_name[GUEST_HEARTBEAT_API_MSG_MAX_APPLICATION_NAME_SIZE]; - uint32_t heartbeat_interval_ms; - uint32_t vote_secs; - uint32_t shutdown_notice_secs; - uint32_t suspend_notice_secs; - uint32_t resume_notice_secs; - uint32_t corrective_action; -} GuestHeartbeatApiMsgInitT; - -typedef struct { - uint32_t accepted; -} GuestHeartbeatApiMsgInitAckT; - -typedef struct { - char log_msg[GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE]; -} GuestHeartbeatApiMsgFinalT; - -typedef struct { - uint32_t heartbeat_challenge; -} GuestHeartbeatApiMsgChallengeT; - -typedef struct { - uint32_t heartbeat_response; - uint32_t health; - uint32_t corrective_action; - char log_msg[GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE]; -} GuestHeartbeatApiMsgChallengeResponseT; - -typedef struct { - uint32_t invocation_id; - uint32_t event_type; - uint32_t notification_type; -} GuestHeartbeatApiMsgActionNotifyT; - -typedef struct { - uint32_t invocation_id; - uint32_t event_type; - uint32_t notification_type; - uint32_t vote_result; - char log_msg[GUEST_HEARTBEAT_API_MSG_MAX_LOG_SIZE]; -} GuestHeartbeatApiMsgActionResponseT; - -typedef union { - GuestHeartbeatApiMsgInitT init; - GuestHeartbeatApiMsgInitAckT init_ack; - GuestHeartbeatApiMsgFinalT final; - GuestHeartbeatApiMsgChallengeT challenge; - GuestHeartbeatApiMsgChallengeResponseT challenge_response; - GuestHeartbeatApiMsgActionNotifyT action_notify; - GuestHeartbeatApiMsgActionResponseT action_response; -} GuestHeartbeatApiMsgBodyT; - -typedef struct { - GuestHeartbeatApiMsgHeaderT header; - GuestHeartbeatApiMsgBodyT body; -} GuestHeartbeatApiMsgT; - -#ifdef __cplusplus -} -#endif - -#endif /* __GUEST_HEARTBEAT_API_MESSAGE_DEFINITIONS_H__ */ diff --git a/guest-client/guest-client-3.0.1/packaging/guest-client.pkg b/guest-client/guest-client-3.0.1/packaging/guest-client.pkg deleted file mode 100755 index cd3df1e8..00000000 --- a/guest-client/guest-client-3.0.1/packaging/guest-client.pkg +++ /dev/null @@ -1,108 +0,0 @@ -#! /bin/bash -# -# Copyright(c) 2013-2016, Wind River Systems, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Wind River Systems nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -RETVAL=0 - -CMD=$1 -INIT_TYPE=$2 -DESTDIR=$3 - -# Note: the variable, DESTDIR has to be an absolute path. - -if [ -z ${INIT_TYPE} ] -then - INIT_TYPE="sysv" -fi - -if [ -z ${DESTDIR} ] -then - DESTDIR="/" -fi - -case "$CMD" in - install) - find ./rootdir/ -type d | while read source_dir; do - target_dir=${source_dir#./rootdir/} - mkdir -p $DESTDIR/$target_dir - done - - cp --preserve=links -R ./rootdir/* $DESTDIR - - if [ "$INIT_TYPE" = "systemd" ] - then - mkdir -p --mode 755 $DESTDIR/etc/guest-client/ - cp guest-client.systemd $DESTDIR/etc/guest-client/ - mkdir -p --mode 755 $DESTDIR/etc/systemd/system - cp guest-client.service $DESTDIR/lib/systemd/system/guest-client.service - ln -s $DESTDIR/lib/systemd/system/guest-client.service $DESTDIR/etc/systemd/system/guest-client.service - - elif [ "$INIT_TYPE" = "sysv" ] - then - mkdir -p --mode 755 $DESTDIR/etc/init.d - cp guest-client.init $DESTDIR/etc/init.d/guest-client - - else - echo "Unknown init-type given, INIT_TYPE=$INIT_TYPE" - fi - ;; - - uninstall) - if [ "$INIT_TYPE" = "systemd" ] - then - rm $DESTDIR/etc/guest-client/guest-client.systemd - rm $DESTDIR/lib/systemd/system/guest-client.service - rm $DESTDIR/etc/systemd/system/guest-client.service - - elif [ "$INIT_TYPE" = "sysv" ] - then - rm $DESTDIR/etc/init.d/guest-client - - else - echo "Unknown init type given, INIT_TYPE=$INIT_TYPE" - fi - - find ./rootdir -type l | while read source_file; do - target_file=${source_file#./rootdir/} - rm $DESTDIR/$target_file - done - - find ./rootdir -type f | while read source_file; do - target_file=${source_file#./rootdir/} - rm $DESTDIR/$target_file - done - ;; - - *) - echo "usage: $0 { install | uninstall }" - ;; -esac - -exit ${RETVAL} diff --git a/mtce-guest/centos/build_srpm.data b/mtce-guest/centos/build_srpm.data index d872dde9..01e786b1 100644 --- a/mtce-guest/centos/build_srpm.data +++ b/mtce-guest/centos/build_srpm.data @@ -1,3 +1,3 @@ SRC_DIR="src" -TIS_PATCH_VER=141 +TIS_PATCH_VER=142 BUILD_IS_SLOW=5 diff --git a/mtce-guest/centos/mtce-guest.spec b/mtce-guest/centos/mtce-guest.spec index f96c65ef..8fda8ee7 100644 --- a/mtce-guest/centos/mtce-guest.spec +++ b/mtce-guest/centos/mtce-guest.spec @@ -21,7 +21,6 @@ BuildRequires: libuuid BuildRequires: libuuid-devel BuildRequires: fm-common BuildRequires: fm-common-dev -BuildRequires: guest-client-devel BuildRequires: mtce-common-dev >= 1.0 BuildRequires: systemd-devel BuildRequires: cppcheck diff --git a/mtce-guest/src/guestBase.h b/mtce-guest/src/guestBase.h index 5857bb85..25785b88 100644 --- a/mtce-guest/src/guestBase.h +++ b/mtce-guest/src/guestBase.h @@ -2,7 +2,7 @@ #define __INCLUDE_GUESTBASE_H__ /* - * Copyright (c) 2013-2016 Wind River Systems, Inc. + * Copyright (c) 2013-2019 Wind River Systems, Inc. * * SPDX-License-Identifier: Apache-2.0 * @@ -31,10 +31,10 @@ #include #include -#include using namespace std; +#include "guest_heartbeat_msg_defs.h" #include "msgClass.h" #include "nodeBase.h" #include "httpUtil.h" diff --git a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg_defs.h b/mtce-guest/src/guest_heartbeat_msg_defs.h old mode 100755 new mode 100644 similarity index 79% rename from guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg_defs.h rename to mtce-guest/src/guest_heartbeat_msg_defs.h index 2a12c86f..dce3f11e --- a/guest-client/guest-client-3.0.1/guest_client/src/heartbeat/guest_heartbeat_msg_defs.h +++ b/mtce-guest/src/guest_heartbeat_msg_defs.h @@ -1,30 +1,8 @@ /* - * Copyright (c) 2013-2016, Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * Copyright (c) 2013-2019 Wind River Systems, Inc. +* +* SPDX-License-Identifier: Apache-2.0 +* */ #ifndef __GUEST_HEARTBEAT_MESSAGE_DEFINITIONS_H__ #define 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 diff --git a/guest-client/guest-client-3.0.1/TiS-Guest-Heartbeat-Service.pdf b/guest-client/guest-client-3.0.1/TiS-Guest-Heartbeat-Service.pdf deleted file mode 100644 index f2e90b7cd41ff1f2d408446af66b869cf4854f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105859 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 ~Z5}(KJSc3?yu;SBizE~Yo0q@_xzrtfvv2fGP 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