1 Commits

21 changed files with 87 additions and 411 deletions

View File

@@ -24,7 +24,7 @@ jobs:
- name: Create Build Dir - name: Create Build Dir
run: mkdir build run: mkdir build
- name: Clone - name: Clone
run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0 run: git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
- name: Build VCPKG - name: Build VCPKG
run: cd vcpkg && bootstrap-vcpkg.bat run: cd vcpkg && bootstrap-vcpkg.bat
shell: cmd shell: cmd
@@ -71,7 +71,7 @@ jobs:
- name: Create Build Dir - name: Create Build Dir
run: mkdir build run: mkdir build
- name: Clone - name: Clone
run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0 run: git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
- name: Build VCPKG - name: Build VCPKG
run: cd vcpkg && ./bootstrap-vcpkg.sh run: cd vcpkg && ./bootstrap-vcpkg.sh
shell: bash shell: bash

View File

@@ -1,20 +0,0 @@
name: Changelog Generator
on:
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- run: docker run -v $PWD:/workdir quay.io/git-chglog/git-chglog --next-tag vNext --output CHANGELOG-new.md vNext..
- name: GitHub Upload Release Artifacts
uses: actions/upload-artifact@v2
with:
name: CHANGELOG-new.md
path: |
./CHANGELOG-new.md

View File

@@ -21,7 +21,7 @@ jobs:
- name: Create Build Dir - name: Create Build Dir
run: mkdir build run: mkdir build
- name: Clone - name: Clone
run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0 run: git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
- name: Build VCPKG - name: Build VCPKG
run: cd vcpkg && bootstrap-vcpkg.bat run: cd vcpkg && bootstrap-vcpkg.bat
shell: cmd shell: cmd
@@ -54,7 +54,7 @@ jobs:
- name: Create Build Dir - name: Create Build Dir
run: mkdir build run: mkdir build
- name: Clone - name: Clone
run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0 run: git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
- name: Build VCPKG - name: Build VCPKG
run: cd vcpkg && ./bootstrap-vcpkg.sh run: cd vcpkg && ./bootstrap-vcpkg.sh
shell: bash shell: bash

View File

@@ -25,9 +25,8 @@ sudo apt install git cmake build-essential curl zip unzip tar pkg-config
Open a Terminal window. Open a Terminal window.
``` ```
git clone https://github.com/microsoft/vcpkg.git git clone -b 2020.11-1 https://github.com/microsoft/vcpkg.git
cd vcpkg cd vcpkg
git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0
./bootstrap-vcpkg.sh ./bootstrap-vcpkg.sh
./vcpkg install cpprestsdk[websockets] ./vcpkg install cpprestsdk[websockets]
``` ```
@@ -69,9 +68,8 @@ Steps below are for Windows 10 and Visual Studio 2019 Professional.
Open an x64 Native Tools Command Prompt for Visual Studio 2019. Open an x64 Native Tools Command Prompt for Visual Studio 2019.
``` ```
git clone https://github.com/microsoft/vcpkg.git git clone -b 2020.11-1 https://github.com/microsoft/vcpkg.git
cd vcpkg cd vcpkg
git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0
bootstrap-vcpkg.bat bootstrap-vcpkg.bat
vcpkg install cpprestsdk[websockets]:x64-windows-static vcpkg install cpprestsdk[websockets]:x64-windows-static
``` ```

View File

@@ -1,62 +1,3 @@
<a name="v2.0.0"></a>
## v2.0.0
### Build
- bump version to v1.3.0
- bump version to v2.0.0
### Ci
- update scanning
### Docs
- **readme:** wording
- **readme:** update readme
- **security:** added SECURITY.md file
### Feat
- update to OpenSSL 1.1.1l
- update workflows and Docker build.
- Update to latest vcpkg
- Update docs and scripts for Windows and Ubuntu.
- format json status messages
- add AMT wireless adapter info to amtinfo LAN settings.
### Fix
- klockwork reported success / failure check fix
- **spelling:** lan inteface -> lan interface in amtinfo
<a name="v1.2.2"></a>
## [v1.2.2] - 2021-06-22
### Ci
- remove Jenkins chron
- **changelog:** add automation for changelog generation
### Fix
- update examples text and version
<a name="v1.2.1"></a>
## [v1.2.1] - 2021-05-06
### Fix
**docker:** add missing ca-certs
<a name="v1.2.0"></a>
## v1.2.0
### Ci
- breakout docker build for merge only
### Feat
- update RPC version to 1.2.0.
- BREAKING CHANGE: add heartbeat capability, bump RPC Protocol version to 4.0.0
- add unit test framework
- add hostname to activation info
- **docker:** add dockerfile support for RPC
### Fix
- use message status instead, cleanup message fields.
<a name="v1.1.0"></a> <a name="v1.1.0"></a>
## [v1.1.0] - 2021-02-09 ## [v1.1.0] - 2021-02-09

View File

@@ -1,6 +1,6 @@
cmake_minimum_required (VERSION 3.1) cmake_minimum_required (VERSION 3.1)
project (rpc VERSION 2.0.0) project (rpc VERSION 1.2.0)
set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD 11)

View File

@@ -50,9 +50,8 @@ export PATH=/home/user/Downloads/git:$PATH
Using a Terminal window with the PATH and devtoolset enabled per the Dependencies. Using a Terminal window with the PATH and devtoolset enabled per the Dependencies.
``` ```
git clone https://github.com/microsoft/vcpkg.git git clone -b 2020.11-1 https://github.com/microsoft/vcpkg.git
cd vcpkg cd vcpkg
git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0
./bootstrap-vcpkg.sh ./bootstrap-vcpkg.sh
./vcpkg install cpprestsdk[websockets] ./vcpkg install cpprestsdk[websockets]
``` ```

View File

@@ -28,9 +28,8 @@ sudo yum install cmake
Using a Terminal window with the PATH and devtoolset enabled per the Dependencies. Using a Terminal window with the PATH and devtoolset enabled per the Dependencies.
``` ```
git clone https://github.com/microsoft/vcpkg.git git clone -b 2020.11-1 https://github.com/microsoft/vcpkg.git
cd vcpkg cd vcpkg
git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0
./bootstrap-vcpkg.sh ./bootstrap-vcpkg.sh
./vcpkg install cpprestsdk[websockets] ./vcpkg install cpprestsdk[websockets]
``` ```

View File

@@ -3,7 +3,7 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
#*********************************************************************/ #*********************************************************************/
FROM ubuntu:20.04 AS rpc-builder FROM ubuntu:20.10 AS rpc-builder
WORKDIR / WORKDIR /
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
@@ -11,11 +11,11 @@ RUN \
apt-get update -y -qq && \ apt-get update -y -qq && \
apt install -y -qq \ apt install -y -qq \
git cmake build-essential libssl-dev zlib1g-dev \ git cmake build-essential libssl-dev zlib1g-dev \
curl unzip zip pkg-config ca-certificates curl unzip zip pkg-config
RUN git clone https://github.com/open-amt-cloud-toolkit/rpc.git RUN git clone https://github.com/open-amt-cloud-toolkit/rpc.git
WORKDIR /rpc WORKDIR /rpc
RUN mkdir -p build RUN mkdir -p build
RUN git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0 RUN git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
RUN cd vcpkg && ./bootstrap-vcpkg.sh RUN cd vcpkg && ./bootstrap-vcpkg.sh
RUN ./vcpkg/vcpkg install cpprestsdk[websockets] RUN ./vcpkg/vcpkg install cpprestsdk[websockets]
@@ -23,7 +23,7 @@ WORKDIR /rpc/build
RUN cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=/rpc/vcpkg/scripts/buildsystems/vcpkg.cmake .. RUN cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=/rpc/vcpkg/scripts/buildsystems/vcpkg.cmake ..
RUN cmake --build . RUN cmake --build .
FROM ubuntu:20.04 FROM ubuntu:20.10
LABEL license='SPDX-License-Identifier: Apache-2.0' \ LABEL license='SPDX-License-Identifier: Apache-2.0' \
copyright='Copyright (c) 2021: Intel' copyright='Copyright (c) 2021: Intel'

154
Jenkinsfile vendored
View File

@@ -1,154 +0,0 @@
pipeline {
agent {
label 'docker-amt'
}
options {
buildDiscarder(logRotator(numToKeepStr: '5', daysToKeepStr: '30'))
timestamps()
timeout(unit: 'HOURS', time: 2)
}
stages {
stage ('Cloning Repository') {
steps {
script {
scmCheckout {
clean = true
}
}
}
}
stage('Static Code Scan - Protex') {
environment{
PROJECT_NAME = 'OpenAMT - RPC'
SCANNERS = 'protex'
}
steps {
rbheStaticCodeScan()
}
}
stage ('Parallel Builds') {
parallel {
stage ('Linux') {
agent { label 'docker-amt' }
stages {
stage('Build') {
agent {
docker {
image 'ubuntu:18.04'
reuseNode true
}
}
steps {
sh './scripts/jenkins-pre-build.sh'
sh './scripts/jenkins-build.sh'
stash includes: 'build/rpc', name: 'linux-rpc-app'
}
}
stage ('Archive') {
steps {
archiveArtifacts allowEmptyArchive: true, artifacts: 'build/rpc', caseSensitive: false, onlyIfSuccessful: true
}
}
}
}
stage ('Windows') {
agent { label 'openamt-win' }
stages{
stage ('Build') {
steps {
bat 'scripts\\jenkins-pre-build.cmd'
bat 'scripts\\jenkins-build.cmd'
// prepare stash for the binary scan
stash includes: '**/*.exe', name: 'win-rpc-app'
}
}
stage ('Archive') {
steps {
archiveArtifacts allowEmptyArchive: true, artifacts: 'build\\Release\\rpc.exe', caseSensitive: false, onlyIfSuccessful: true
}
}
}
}
}
}
stage('Prep Binary') {
steps {
sh 'mkdir -p ./bin'
dir('./bin') {
unstash 'linux-rpc-app'
unstash 'win-rpc-app'
}
}
}
stage('Linux Scans') {
environment{
PROJECT_NAME = 'OpenAMT - RPC - Linux'
SCANNERS = 'bdba,klocwork'
// protecode details
PROTECODE_BIN_DIR = './bin'
PROTECODE_INCLUDE_SUB_DIRS = true
// klocwork details
KLOCWORK_SCAN_TYPE = 'c++'
KLOCWORK_PRE_BUILD_SCRIPT = './scripts/jenkins-pre-build.sh'
KLOCWORK_BUILD_COMMAND = './scripts/jenkins-build.sh'
KLOCWORK_IGNORE_COMPILE_ERRORS = true
// publishArtifacts details
PUBLISH_TO_ARTIFACTORY = true
}
steps {
rbheStaticCodeScan()
dir('artifacts/Klockwork'){
sh 'cp kw_report.html kw_report_linux.html'
sh 'cp kw_report.csv kw_report_linux.csv'
archiveArtifacts allowEmptyArchive: true, artifacts: 'kw_report_linux.html'
archiveArtifacts allowEmptyArchive: true, artifacts: 'kw_report_linux.csv'
}
}
}
stage('Windows Scans'){
agent { label 'openamt-win' }
stages{
stage ('Windows Scans - klocwork') {
environment {
PROJECT_NAME = 'OpenAMT - RPC - Windows'
SCANNERS = 'klocwork'
// klocwork details
KLOCWORK_SCAN_TYPE = 'c++'
KLOCWORK_PRE_BUILD_SCRIPT = 'scripts\\jenkins-pre-build.cmd'
KLOCWORK_BUILD_COMMAND = 'scripts\\jenkins-build.cmd'
KLOCWORK_IGNORE_COMPILE_ERRORS = true
// publishArtifacts details
PUBLISH_TO_ARTIFACTORY = true
}
steps {
rbheStaticCodeScan()
dir('artifacts\\Klockwork'){
bat 'copy kw_report.html kw_report_windows.html'
bat 'copy kw_report.csv kw_report_windows.csv'
stash includes: 'kw_report_windows.*', name: 'win-kwreports'
archiveArtifacts allowEmptyArchive: true, artifacts: 'kw_report_windows.html'
archiveArtifacts allowEmptyArchive: true, artifacts: 'kw_report_windows.csv'
}
}
}
}
}
stage('Publish Artifacts'){
steps{
dir('artifacts/Klockwork'){
unstash 'win-kwreports'
}
publishArtifacts()
}
}
}
}

View File

@@ -4,43 +4,26 @@
The Remote Provisioning Client (RPC) is an application that enables remote capabilities for Intel® AMT, such as as device activation and configuration. To accomplish this, RPC communicates with the Remote Provisioning Server (RPS) to activate and connect the edge device. The Remote Provisioning Client (RPC) is an application that enables remote capabilities for Intel® AMT, such as as device activation and configuration. To accomplish this, RPC communicates with the Remote Provisioning Server (RPS) to activate and connect the edge device.
<br><br>
**For detailed documentation** about RPC or other features of the Open AMT Cloud Toolkit, see the [docs](https://open-amt-cloud-toolkit.github.io/docs/). **For detailed documentation** about RPC or other features of the Open AMT Cloud Toolkit, see the [docs](https://open-amt-cloud-toolkit.github.io/docs/).
<br>
## Prerequisites ## Prerequisites
We leverage GitHub Actions as a means to build RPC automatically leveraging Github's CI/CD Infrastructure. This avoids having to deal with the challenges of getting your build environment just right on your local machine and allows you to get up and running much faster. Read more about GitHub Actions [here](https://github.blog/2019-08-08-github-actions-now-supports-ci-cd/#:~:text=GitHub%20Actions%20is%20an%20API,every%20step%20along%20the%20way.) We leverage GitHub Actions as a means to build RPC automatically leveraging Github's CI/CD Infrastructure. This avoids having to deal with the challenges of getting your build environment just right on your local machine and allows you to get up and running much faster. Read more about GitHub Actions [here](https://github.blog/2019-08-08-github-actions-now-supports-ci-cd/#:~:text=GitHub%20Actions%20is%20an%20API,every%20step%20along%20the%20way.)
## Build the Remote Provisioning Client (RPC)
<p align="center"> <p align="center">
<img src="assets/animations/forkandbuild.gif" width="650" /> <img src="assets/animations/forkandbuild.gif" width="650" />
</p> </p>
## Build the Remote Provisioning Client (RPC) 1. Create a fork of the rpc repository [here](https://github.com/open-amt-cloud-toolkit/rpc/fork) or via the Fork button in the top-right corner of the rpc repository.
1. <a href="https://github.com/open-amt-cloud-toolkit/rpc/fork" target="_blank">Create a fork of rpc on GitHub.</a> 2. Click on "Actions" and Select "Build RPC (Native)" Workflow.
2. Click on the **Actions** tab at the top and select **Build RPC (Native) Debug/Release**. 3. Click "Run Workflow", select branch "master", and click "Run Workflow".
3. Click the **Run Workflow** dropdown. 4. Grab a coffee. The build for Windows will take approximately 30 minutes and the build for Linux will take approximately 5 minutes.
4. Select the **Branch: master**, or a preferred version, from the **Use workflow from** dropdown. 5. Once complete, click the completed job, and download the appropriate RPC for your OS under the "Artifacts" section.
5. By default, the Build Type should be **release**. For detailed documentation about RPC and using it to activate a device, see the [docs](https://open-amt-cloud-toolkit.github.io/docs/)
6. Click the **Run Workflow** button. Grab a coffee and take a break! The build time ranges from 15 to 20 minutes.
8. Once the download is complete, click the completed job which will feature a green checkmark.
9. Download the appropriate RPC for your managed device's OS under the **Artifacts** section.
### To Delete your workflow run
1. Click the ellipsis ( **...** ) menu for the workflow.
2. Choose the **Delete workflow run** option.
For detailed documentation about RPC and using it to activate a device, see the [docs](https://open-amt-cloud-toolkit.github.io/docs/)

View File

@@ -1,5 +0,0 @@
# Security Policy
Intel is committed to rapidly addressing security vulnerabilities affecting our customers and providing clear guidance on the solution, impact, severity and mitigation.
## Reporting a Vulnerability
Please report any security vulnerabilities in this project utilizing the guidelines [here](https://www.intel.com/content/www/us/en/security-center/vulnerability-handling-guidelines.html).

View File

@@ -282,54 +282,51 @@ bool cmd_get_certificate_hashes(std::vector<cert_hash_entry>& hash_entries)
for (int i = 0; i < (int) amt_hash_handles.Length; i++) for (int i = 0; i < (int) amt_hash_handles.Length; i++)
{ {
// get each entry // get each entry
AMT_STATUS amt_status = pthi_GetCertificateHashEntry(amt_hash_handles.Handles[i], &certhash_entry); AMT_STATUS status = pthi_GetCertificateHashEntry(amt_hash_handles.Handles[i], &certhash_entry);
if (amt_status == 0) int hashSize;
cert_hash_entry tmp;
switch (certhash_entry.HashAlgorithm) {
case 0: // MD5
hashSize = 16;
tmp.algorithm = "MD5";
break;
case 1: // SHA1
hashSize = 20;
tmp.algorithm = "SHA1";
break;
case 2: // SHA256
hashSize = 32;
tmp.algorithm = "SHA256";
break;
case 3: // SHA512
hashSize = 64;
tmp.algorithm = "SHA512";
break;
default:
hashSize = 0;
tmp.algorithm = "UNKNOWN";
break;
}
if (certhash_entry.IsActive == 1)
{ {
int hashSize; std::string cert_name(certhash_entry.Name.Buffer, certhash_entry.Name.Length);
cert_hash_entry tmp; tmp.name = cert_name;
switch (certhash_entry.HashAlgorithm) { tmp.is_default = certhash_entry.IsDefault;
case 0: // MD5 tmp.is_active = certhash_entry.IsActive;
hashSize = 16;
tmp.algorithm = "MD5";
break;
case 1: // SHA1
hashSize = 20;
tmp.algorithm = "SHA1";
break;
case 2: // SHA256
hashSize = 32;
tmp.algorithm = "SHA256";
break;
case 3: // SHA512
hashSize = 64;
tmp.algorithm = "SHA512";
break;
default:
hashSize = 0;
tmp.algorithm = "UNKNOWN";
break;
}
if (certhash_entry.IsActive == 1) std::string hashString;
for (int i = 0; i < hashSize; i++)
{ {
std::string cert_name(certhash_entry.Name.Buffer, certhash_entry.Name.Length); char hex[10];
tmp.name = cert_name; snprintf(hex, 10, "%02x", certhash_entry.CertificateHash[i]);
tmp.is_default = certhash_entry.IsDefault; hashString += hex;
tmp.is_active = certhash_entry.IsActive;
std::string hashString;
for (int i = 0; i < hashSize; i++)
{
char hex[10];
snprintf(hex, 10, "%02x", certhash_entry.CertificateHash[i]);
hashString += hex;
}
tmp.hash = hashString;
hash_entries.push_back(tmp);
} }
tmp.hash = hashString;
hash_entries.push_back(tmp);
} }
} }
@@ -380,14 +377,14 @@ bool cmd_get_remote_access_connection_status(int& network_status, int& remote_st
return false; return false;
} }
bool cmd_get_lan_interface_settings(lan_interface_settings& lan_interface_settings, bool wired_interface) bool cmd_get_lan_interface_settings(lan_interface_settings& lan_interface_settings)
{ {
// initialize HECI interface // initialize HECI interface
if (heci_Init(NULL, PTHI_CLIENT) == 0) return false; if (heci_Init(NULL, PTHI_CLIENT) == 0) return false;
// get wired interface // get wired interface
LAN_SETTINGS lan_settings; LAN_SETTINGS lan_settings;
UINT32 interface_settings = (wired_interface) ? 0 : 1; // wired=0, wireless=1 UINT32 interface_settings = 0; // wired=0, wireless=1
AMT_STATUS amt_status = pthi_GetLanInterfaceSettings(interface_settings, &lan_settings); AMT_STATUS amt_status = pthi_GetLanInterfaceSettings(interface_settings, &lan_settings);
if (amt_status == 0) if (amt_status == 0)
{ {
@@ -396,13 +393,11 @@ bool cmd_get_lan_interface_settings(lan_interface_settings& lan_interface_settin
lan_interface_settings.dhcp_enabled = lan_settings.DhcpEnabled; lan_interface_settings.dhcp_enabled = lan_settings.DhcpEnabled;
lan_interface_settings.link_status = lan_settings.LinkStatus; lan_interface_settings.link_status = lan_settings.LinkStatus;
lan_interface_settings.ip_address.clear();
lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address >> 24) & 0xff); lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address >> 24) & 0xff);
lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address >> 16) & 0xff); lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address >> 16) & 0xff);
lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address >> 8) & 0xff); lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address >> 8) & 0xff);
lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address) & 0xff); lan_interface_settings.ip_address.push_back((lan_settings.Ipv4Address) & 0xff);
lan_interface_settings.mac_address.clear();
lan_interface_settings.mac_address.push_back(lan_settings.MacAddress[0]); lan_interface_settings.mac_address.push_back(lan_settings.MacAddress[0]);
lan_interface_settings.mac_address.push_back(lan_settings.MacAddress[1]); lan_interface_settings.mac_address.push_back(lan_settings.MacAddress[1]);
lan_interface_settings.mac_address.push_back(lan_settings.MacAddress[2]); lan_interface_settings.mac_address.push_back(lan_settings.MacAddress[2]);

View File

@@ -49,6 +49,6 @@ bool cmd_get_dns_suffix(std::string& suffix);
bool cmd_get_wired_mac_address(std::vector<unsigned char>& address); bool cmd_get_wired_mac_address(std::vector<unsigned char>& address);
bool cmd_get_certificate_hashes(std::vector<cert_hash_entry>& hash_entries); bool cmd_get_certificate_hashes(std::vector<cert_hash_entry>& hash_entries);
bool cmd_get_remote_access_connection_status(int& network_status, int& remote_status, int& remote_trigger, std::string& mps_hostname); bool cmd_get_remote_access_connection_status(int& network_status, int& remote_status, int& remote_trigger, std::string& mps_hostname);
bool cmd_get_lan_interface_settings(lan_interface_settings& lan_interface_settings, bool wired_interface = true); bool cmd_get_lan_interface_settings(lan_interface_settings& lan_interface_settings);
#endif #endif

View File

@@ -20,7 +20,7 @@ void out_text(const std::string name, const std::vector<unsigned char> value, co
for (unsigned char tmp : value) for (unsigned char tmp : value)
{ {
(hex) ? std::cout << std::setfill('0') << std::setw(2) << std::hex << (unsigned int)tmp (hex) ? std::cout << std::setfill('0') << std::setw(2) << std::hex << (unsigned int)tmp
: std::cout << std::dec << (unsigned int)tmp; : std::cout << (unsigned int)tmp;
if (char_count++ < value.size()) if (char_count++ < value.size())
{ {
@@ -270,41 +270,15 @@ bool info_get_lan_interface_settings()
tmp.ip_address.clear(); tmp.ip_address.clear();
tmp.mac_address.clear(); tmp.mac_address.clear();
bool hasWired = cmd_get_lan_interface_settings(tmp); if (!cmd_get_lan_interface_settings(tmp)) return false;
if (hasWired)
{
out_text("LAN Interface", "wired");
out_text("DHCP Enabled", (tmp.dhcp_enabled) ? "true" : "false");
out_text("DHCP Mode", (tmp.dhcp_mode == 1) ? "active" : "passive");
out_text("Link Status", (tmp.link_status) ? "up" : "down");
out_text("IP Address", tmp.ip_address, '.', false);
out_text("MAC Address", tmp.mac_address, ':');
}
tmp.is_enabled = false;
tmp.link_status = false;
tmp.dhcp_enabled = false;
tmp.dhcp_mode = 0;
tmp.ip_address.clear();
tmp.mac_address.clear();
bool hasWireless = cmd_get_lan_interface_settings(tmp, false); out_text("DHCP Enabled", (tmp.dhcp_enabled) ? "true" : "false");
if (hasWireless) out_text("DHCP Mode", (tmp.dhcp_mode == 1) ? "active" : "passive");
{ out_text("Link Status", (tmp.link_status) ? "up" : "down");
out_text("LAN Interface", "wireless"); out_text("IP Address", tmp.ip_address, '.', false);
out_text("DHCP Enabled", (tmp.dhcp_enabled) ? "true" : "false"); out_text("MAC Address", tmp.mac_address, ':');
out_text("DHCP Mode", (tmp.dhcp_mode == 1) ? "active" : "passive");
out_text("Link Status", (tmp.link_status) ? "up" : "down");
out_text("IP Address", tmp.ip_address, '.', false);
out_text("MAC Address", tmp.mac_address, ':');
}
if (hasWired || hasWireless) return true;
{
return true;
}
return false;
} }
bool info_get(const std::string info) bool info_get(const std::string info)
@@ -368,4 +342,4 @@ bool info_get_verify(const std::string info)
} }
return false; return false;
} }

View File

@@ -7,7 +7,6 @@
#include <thread> #include <thread>
#include <cpprest/ws_client.h> #include <cpprest/ws_client.h>
#include <cpprest/json.h> #include <cpprest/json.h>
#include <algorithm>
#include "port.h" #include "port.h"
#include "lms.h" #include "lms.h"
#include "commands.h" #include "commands.h"
@@ -272,22 +271,7 @@ int main(int argc, char* argv[])
g_timeout_val = 0; g_timeout_val = 0;
// exit // exit
try { std::cout << std::endl << msgMessage << std::endl;
std::cout << std::endl;
utility::string_t tmp = utility::conversions::convertstring(msgMessage);
web::json::value parsed = web::json::value::parse(tmp);
for (const auto& obj : parsed.as_object()) {
std::string key = utility::conversions::to_utf8string(obj.first);
std::string value = utility::conversions::to_utf8string(obj.second.serialize());
value.erase(std::remove(value.begin(), value.end(), '"'), value.end());
std::cout << key << ": " << value << std::endl;
}
}
catch (...)
{
std::cout << std::endl << msgMessage << std::endl;
}
return; return;
} }
else if (msgStatus.compare("failed")==0) else if (msgStatus.compare("failed")==0)
@@ -296,22 +280,7 @@ int main(int argc, char* argv[])
g_timeout_val = 0; g_timeout_val = 0;
// exit // exit
try { std::cout << std::endl << msgMessage << std::endl;
std::cout << std::endl;
utility::string_t tmp = utility::conversions::convertstring(msgMessage);
web::json::value parsed = web::json::value::parse(tmp);
for (const auto& obj : parsed.as_object()) {
std::string key = utility::conversions::to_utf8string(obj.first);
std::string value = utility::conversions::to_utf8string(obj.second.serialize());
value.erase(std::remove(value.begin(), value.end(), '"'), value.end());
std::cout << key << ": " << value << std::endl;
}
}
catch (...)
{
std::cout << std::endl << msgMessage << std::endl;
}
return; return;
} }

View File

@@ -14,7 +14,7 @@ set BASE_DIR=%cd%
set VCPKG_DIR=C:\opt\vcpkg-source set VCPKG_DIR=C:\opt\vcpkg-source
REM build RPC REM build RPC
cd %BASE_DIR%/rpc
if exist "build" rd /q /s "build" if exist "build" rd /q /s "build"
@@ -23,4 +23,4 @@ cd build
echo %VCPKG_DIR%\vcpkg\scripts\buildsystems\vcpkg.cmake echo %VCPKG_DIR%\vcpkg\scripts\buildsystems\vcpkg.cmake
cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=%VCPKG_DIR%\vcpkg\scripts\buildsystems\vcpkg.cmake .. cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=%VCPKG_DIR%\vcpkg\scripts\buildsystems\vcpkg.cmake ..
cmake --build . --config Release cmake --build . --config Release
dir %BASE_DIR%\build dir %BASE_DIR%\rpc\build

View File

@@ -5,9 +5,9 @@ set -x
# Jenkins Build script # Jenkins Build script
# - Ubuntu 18.04 # - Ubuntu 18.04
# #
export BASE_DIR="$PWD"
export CMAKE_CXX_FLAGS="-isystem /usr/lib/gcc/x86_64-linux-gnu/7/include"
export CMAKE_CXX_FLAGS="-isystem /usr/lib/gcc/x86_64-linux-gnu/7/include"
cd "$BASE_DIR"/rpc
if [ -d "build" ]; then if [ -d "build" ]; then
rm -rf build rm -rf build
@@ -15,5 +15,5 @@ fi
mkdir build mkdir build
cd build cd build
cmake -DCMAKE_TOOLCHAIN_FILE="$BASE_DIR"/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release .. cmake -DCMAKE_TOOLCHAIN_FILE="$BASE_DIR"/rpc/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . cmake --build .

View File

@@ -15,9 +15,8 @@ set VCPKG_DIR=C:\opt\vcpkg-source
cd %VCPKG_DIR% cd %VCPKG_DIR%
REM build vcpkg REM build vcpkg
git clone https://github.com/microsoft/vcpkg.git git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
cd vcpkg cd vcpkg
git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0
cmd /c bootstrap-vcpkg.bat cmd /c bootstrap-vcpkg.bat
REM install CPPRestSDK REM install CPPRestSDK

View File

@@ -4,17 +4,15 @@
# - Ubuntu 18.04 # - Ubuntu 18.04
# #
apt update sudo apt install git cmake build-essential curl zip unzip tar pkg-config
apt install git cmake build-essential curl zip unzip tar pkg-config -y
## current dir - RPC source directory ## current dir - RPC source directory
#export BASE_DIR="$PWD" export BASE_DIR="$PWD"
#cd "$BASE_DIR"/rpc cd "$BASE_DIR"/rpc
## build vcpkg ## build vcpkg
git -C vcpkg pull || git clone https://github.com/microsoft/vcpkg.git vcpkg git clone --branch 2020.11-1 https://github.com/microsoft/vcpkg.git
cd vcpkg cd vcpkg
git checkout 772d435ba18bf2f342458e0187ab7b48b84fe3f0
./bootstrap-vcpkg.sh ./bootstrap-vcpkg.sh
## install CPPRestSDK ## install CPPRestSDK

View File

@@ -49,15 +49,15 @@ void usage_show_help()
std::cout << "Examples:" << std::endl; std::cout << "Examples:" << std::endl;
std::cout << " # Activate platform using profile1" << std::endl; std::cout << " # Activate platform using profile1" << std::endl;
std::cout << " " << PROJECT_NAME << \ std::cout << " " << PROJECT_NAME << \
" --url wss://192.168.86.100/activate --cmd \"-t activate --profile profile1\"" << std::endl; " --url wss://localhost:8080 --cmd \"-t activate --profile profile1\"" << std::endl;
std::cout << std::endl; std::cout << std::endl;
std::cout << " # Activate platform using profile1 and override DNS detection" << std::endl; std::cout << " # Activate platform using profile1 and override DNS detection" << std::endl;
std::cout << " " << PROJECT_NAME << \ std::cout << " " << PROJECT_NAME << \
" --url wss://mycloud.com/activate --cmd \"-t activate --profile profile1\" --dns corp.com" << std::endl; " --url wss://localhost:8080 --cmd \"-t activate --profile profile1\" --dns corp.com" << std::endl;
std::cout << std::endl; std::cout << std::endl;
std::cout << " # Deactivate platform and connect through a proxy" << std::endl; std::cout << " # Deactivate platform and connect through a proxy" << std::endl;
std::cout << " " << PROJECT_NAME << \ std::cout << " " << PROJECT_NAME << \
" -u wss://mycloud.com/activate -c \"-t deactivate --password P@ssw0rd\" -p http://proxy.com:1000" << std::endl; " -u wss://localhost:8080 -c \"-t deactivate --password P@ssw0rd\" -p http://proxy.com:1000" << std::endl;
std::cout << std::endl; std::cout << std::endl;
std::cout << " # Show all informational items" << std::endl; std::cout << " # Show all informational items" << std::endl;
std::cout << " " << PROJECT_NAME << " --amtinfo all" << std::endl; std::cout << " " << PROJECT_NAME << " --amtinfo all" << std::endl;