617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*******************************************************************************
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Redistribution and use in source and binary forms, with or without
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * modification, are permitted provided that the following conditions are met:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions of source code must retain the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions in binary form must reproduce the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer in the documentation
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * and/or other materials provided with the distribution.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Neither the name of Intel Corp. nor the names of its
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * contributors may be used to endorse or promote products derived from this
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * software without specific prior written permission.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * POSSIBILITY OF SUCH DAMAGE.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *******************************************************************************/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan//----------------------------------------------------------------------------
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan//
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan// File: PTHICommand.cpp
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan//
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan//----------------------------------------------------------------------------
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#ifdef HAVE_CONFIG_H
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include "config.h"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#endif
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include <cstdio>
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include <cstdlib>
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include "PTHICommand.h"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganPTHICommand::PTHICommand(bool verbose, unsigned long sendTimeout) :
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganPTHIClient(HECI_PTHI, verbose),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganm_sendTimeout(sendTimeout)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganPTHICommand::~PTHICommand(void)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_call(const unsigned char *command, UINT32 command_size, UINT8 **readBuffer, UINT32 rcmd, unsigned int expSize)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 inBuffSize;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 outBuffSize = 0;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan inBuffSize = PTHIClient.GetBufferSize();
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *readBuffer = (UINT8 *)malloc(sizeof(UINT8) * inBuffSize);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == *readBuffer)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_RESOURCES;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memset(*readBuffer, 0, inBuffSize);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan int bytesWritten = PTHIClient.SendMessage(command, command_size, m_sendTimeout);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if ((UINT32)bytesWritten != command_size)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan outBuffSize = PTHIClient.ReceiveMessage(*readBuffer, inBuffSize);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (0 == outBuffSize)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTHI_STATUS_EMPTY_RESPONSE;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = ((PTHI_RESPONSE_MESSAGE_HEADER *)*readBuffer)->Status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyResponseHeader(rcmd, ((PTHI_RESPONSE_MESSAGE_HEADER *)*readBuffer)->Header, outBuffSize);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if ((expSize != 0) && (expSize != outBuffSize))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the response message header
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* and the response message size
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* command - appropriate Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response_header - reference to the response message header
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response_size - value that holds the actual size of the
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* expected_size - value that holds the expected size of the
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyResponseHeader(
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command, const PTHI_MESSAGE_HEADER &response_header,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 response_size)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (response_size < sizeof(PTHI_RESPONSE_MESSAGE_HEADER)) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } else if (response_size != (response_header.Length + sizeof(PTHI_MESSAGE_HEADER))) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } else if (response_header.Command.cmd.val != command) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } else if (response_header.Reserved != 0) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } else if (response_header.Version.MajorNumber != AMT_MAJOR_VERSION
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan || response_header.Version.MinorNumber < AMT_MINOR_VERSION) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the GetCodeVersions response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyCodeVersions(
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const CFG_GET_CODE_VERSIONS_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 codeVerLen;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 ptVerTypeCount;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 len = 0;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 i;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan codeVerLen = response.Header.Header.Length - sizeof(AMT_STATUS);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ptVerTypeCount = codeVerLen - sizeof(response.CodeVersions.BiosVersion)- sizeof(response.CodeVersions.VersionsCount);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (response.CodeVersions.VersionsCount != (ptVerTypeCount/sizeof(AMT_VERSION_TYPE)))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan for (i = 0; i < (response.CodeVersions.VersionsCount); i ++)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan len = response.CodeVersions.Versions[i].Description.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (len > UNICODE_STRING_LEN)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan len = response.CodeVersions.Versions[i].Version.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (response.CodeVersions.Versions[i].Version.String[len] != '\0' ||
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan (len != strlen((CHAR *)(response.CodeVersions.Versions[i].Version.String))))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* GetVersions response message PTHI command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the CODE_VERSIONS struct
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetCodeVersions(CODE_VERSIONS &codeVersions)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_CODE_VERSION_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_CODE_VERSION_HEADER), sizeof(GET_CODE_VERSION_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, CODE_VERSIONS_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_CODE_VERSIONS_RESPONSE *tmp_response = (CFG_GET_CODE_VERSIONS_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyCodeVersions(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(&codeVersions, &(tmp_response->CodeVersions), sizeof(CODE_VERSIONS));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetProvisioningMode Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* mode - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetProvisioningMode(CFG_PROVISIONING_MODE &mode)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_PROVISIONING_MODE_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_PROVISIONING_MODE_HEADER), sizeof(GET_PROVISIONING_MODE_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, PROVISIONING_MODE_RESPONSE, sizeof(CFG_GET_PROVISIONING_MODE_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_PROVISIONING_MODE_RESPONSE *tmp_response = (CFG_GET_PROVISIONING_MODE_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan mode = tmp_response->ProvisioningMode;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetProvisioningMode(CFG_PROVISIONING_MODE &mode, AMT_BOOLEAN &legacy)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_PROVISIONING_MODE_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_PROVISIONING_MODE_HEADER), sizeof(GET_PROVISIONING_MODE_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, PROVISIONING_MODE_RESPONSE, sizeof(CFG_GET_PROVISIONING_MODE_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_PROVISIONING_MODE_RESPONSE *tmp_response = (CFG_GET_PROVISIONING_MODE_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan mode = tmp_response->ProvisioningMode;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan legacy = tmp_response->LegacyMode;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetProvisioningState Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* state - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetProvisioningState(AMT_PROVISIONING_STATE &state)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_PROVISIONING_STATE_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_PROVISIONING_STATE_HEADER), sizeof(GET_PROVISIONING_STATE_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, PROVISIONING_STATE_RESPONSE, sizeof(CFG_GET_PROVISIONING_STATE_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_PROVISIONING_STATE_RESPONSE *tmp_response = (CFG_GET_PROVISIONING_STATE_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan state = tmp_response->ProvisioningState;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetFeatureState Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* requestID Indicates what feature status to query:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* 0 Redirection Sessions Status
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* 1 System Defense Status
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* 2 WebUI Status
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* requestStatus The requested feature state(the size depand on the requestID).(OUT)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetFeaturesState(UINT32 requestID, AMT_BOOLEAN (&requestStatus)[2])
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(CFG_GET_FEATURES_STATE_REQUEST);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &GET_FEATURES_STATE_HEADER, sizeof(GET_FEATURES_STATE_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(GET_FEATURES_STATE_HEADER), &(requestID), sizeof(UINT32));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_FEATURES_STATE_RESPONSE, sizeof(CFG_GET_FEATURES_STATE_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_FEATURES_STATE_RESPONSE *tmp_response = (CFG_GET_FEATURES_STATE_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan GET_FEATURES_REDIRECTION_SESSION_STATUS redirectionState;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan GET_FEATURES_SYSTEM_DEFENSE_STATUS_RESPONSE systemDefenseState;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan GET_FEATURES_WEB_UI_STATUS_RESPONSE webUIState;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan switch (requestID)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan case REDIRECTION_SESSION:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan redirectionState = tmp_response->Data.rs;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan requestStatus[0] = redirectionState.SolOpen;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan requestStatus[1] = redirectionState.IderOpen;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan case SYSTEM_DEFENSE:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan systemDefenseState = tmp_response->Data.sd;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan requestStatus[0] = systemDefenseState.SystemDefenseActivated;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan case WEB_UI:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan webUIState = tmp_response->Data.webUI;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan requestStatus[0] = webUIState.WebUiEnabled;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetLastHostResetReason Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* reason Indicates whether the last host reason was because of remote control operation(0)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* or other reason(1). (OUT)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* remoteControlTimeStamp In case the reason was due to remote control then this field
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* indicates the timestamp of when the remote control command has been executed.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* (The timestamp is the number of seconds since 1/1/1970)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetLastHostResetReason(UINT32 &reason, UINT32 &remoteControlTimeStamp)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_LAST_HOST_RESET_REASON_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_LAST_HOST_RESET_REASON_HEADER), sizeof(GET_LAST_HOST_RESET_REASON_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_LAST_HOST_RESET_REASON_RESPONSE, sizeof(CFG_GET_LAST_HOST_RESET_REASON_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_LAST_HOST_RESET_REASON_RESPONSE *tmp_response = (CFG_GET_LAST_HOST_RESET_REASON_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan reason = tmp_response->Reason;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan remoteControlTimeStamp = tmp_response->RemoteControlTimeStamp;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetCurrentPowerPolicy Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* policyName The power policy name. (OUT)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetCurrentPowerPolicy(AMT_ANSI_STRING &policyName)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_CURRENT_POWER_POLICY_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_CURRENT_POWER_POLICY_HEADER), sizeof(GET_CURRENT_POWER_POLICY_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_CURRENT_POWER_POLICY_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_CURRENT_POWER_POLICY_RESPONSE *tmp_response = (CFG_GET_CURRENT_POWER_POLICY_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyCurrentPowerPolicy(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan policyName.Length = tmp_response->PolicyName.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan policyName.Buffer = (CHAR *)malloc(policyName.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == policyName.Buffer) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } else {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(policyName.Buffer, &(tmp_response->PolicyName.Buffer),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan policyName.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the GetCurrentPowerPolicy response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyCurrentPowerPolicy(const CFG_GET_CURRENT_POWER_POLICY_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ULONG ByteCount = response.Header.Header.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ByteCount != (sizeof(CFG_GET_CURRENT_POWER_POLICY_RESPONSE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan - sizeof(PTHI_MESSAGE_HEADER) - sizeof(CHAR *)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan + response.PolicyName.Length))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetLanInterfaceSttings Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* interfaceSettings The interface to get the settings for.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* lanSettings reference to a pre allocated struct which will hold the lan settings. (OUT)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetLanInterfaceSettings(UINT32 interfaceSettings, LAN_SETTINGS &lanSettings)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(CFG_GET_LAN_INTERFACE_SETTINGS_REQUEST);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_LAN_INTERFACE_SETTINGS_HEADER), sizeof(GET_LAN_INTERFACE_SETTINGS_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(GET_LAN_INTERFACE_SETTINGS_HEADER),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan &(interfaceSettings), sizeof(UINT32));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_LAN_INTERFACE_SETTINGS_RESPONSE, sizeof(CFG_GET_LAN_INTERFACE_SETTINGS_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_LAN_INTERFACE_SETTINGS_RESPONSE *tmp_response = (CFG_GET_LAN_INTERFACE_SETTINGS_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lanSettings.Enabled = tmp_response->Enabled;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lanSettings.Ipv4Address = tmp_response->Ipv4Address;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lanSettings.DhcpEnabled = tmp_response->DhcpEnabled;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lanSettings.DhcpIpMode = tmp_response->DhcpIpMode;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lanSettings.LinkStatus = tmp_response->LinkStatus;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(lanSettings.MacAddress, tmp_response->MacAddress, sizeof(tmp_response->MacAddress));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/**
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Gets the HECI driver version
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* heciVersion - pointewr to HECI_VERSION struct (out)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INVALID_PARAM - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetHeciVersion(HECI_VERSION &heciVersion)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (PTHIClient.GetHeciVersion(heciVersion)) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetSecurityParameters Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* tlsEnabled true if AMT on TLS mode. (OUT)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetTLSEnabled(AMT_BOOLEAN &tlsEnabled)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_SECURITY_PARAMETERS_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_SECURITY_PARAMETERS_HEADER), sizeof(GET_SECURITY_PARAMETERS_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_SECURITY_PARAMETERS_RESPONSE, sizeof(CFG_GET_SECURITY_PARAMETERS_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_SECURITY_PARAMETERS_RESPONSE *tmp_response = (CFG_GET_SECURITY_PARAMETERS_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan tlsEnabled = tmp_response->TLSEnabled;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetDNSSuffixList Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* dnsSuffixList reference to list of DNS suffix strings. (OUT)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetDNSSuffixList(std::list<std::string> &dnsSuffixList)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_DNS_SUFFIX_LIST_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_DNS_SUFFIX_LIST_HEADER), sizeof(GET_DNS_SUFFIX_LIST_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_DNS_SUFFIX_LIST_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_DNS_SUFFIX_LIST_RESPONSE *tmp_response = (CFG_GET_DNS_SUFFIX_LIST_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyGetDNSSuffixList(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan char *current = (char *)tmp_response->Data;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan while (current < (char *)tmp_response->Data + tmp_response->DataLength)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan std::string dnsSuffix = current;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (dnsSuffix.length() > tmp_response->DataLength)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (!dnsSuffix.empty())
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan dnsSuffixList.push_back(dnsSuffix);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan current += dnsSuffix.length() + 1;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the GetDNSSuffixList response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyGetDNSSuffixList(const CFG_GET_DNS_SUFFIX_LIST_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ULONG ByteCount = response.Header.Header.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ByteCount != (sizeof(CFG_GET_DNS_SUFFIX_LIST_RESPONSE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan - sizeof(PTHI_MESSAGE_HEADER)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan + response.DataLength))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to SetEnterpriseAccess Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Flags flags
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* HostIPAddress host IP address for enterprise access
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* EnterpriseAccess enterprise access mode
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::SetEnterpriseAccess(UINT8 Flags, UINT8 HostIPAddress[16], UINT8 EnterpriseAccess)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(CFG_SET_ENTERPRISE_ACCESS_REQUEST);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(SET_ENTERPRISE_ACCESS_HEADER), sizeof(SET_ENTERPRISE_ACCESS_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_ENTERPRISE_ACCESS_HEADER), &(Flags), sizeof(UINT8));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_ENTERPRISE_ACCESS_HEADER) + sizeof(UINT8), HostIPAddress, sizeof(HostIPAddress));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_ENTERPRISE_ACCESS_HEADER) + sizeof(UINT8) + sizeof(HostIPAddress), &(EnterpriseAccess), sizeof(UINT8));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, SET_ENTERPRISE_ACCESS_RESPONSE, sizeof(CFG_SET_ENTERPRISE_ACCESS_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Get FW last reset reason
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* reason - last FW reason
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetFWResetReason(UINT8 &MEResetReason)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(STATE_GET_AMT_STATE_REQUEST);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_AMT_STATE_HEADER), sizeof(GET_AMT_STATE_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(GET_AMT_STATE_HEADER), &(AMT_UUID_LINK_STATE), sizeof(AMT_UUID));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_AMT_STATE_RESPONSE, sizeof(STATE_GET_AMT_STATE_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan STATE_GET_AMT_STATE_RESPONSE *tmp_response = (STATE_GET_AMT_STATE_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan MEResetReason = tmp_response->StateData.LastMEResetReason;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/* Calls to OpenUserInitiatedConnection Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::OpenUserInitiatedConnection()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(OPEN_USER_INITIATED_CONNECTION_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(OPEN_USER_INITIATED_CONNECTION_HEADER), sizeof(OPEN_USER_INITIATED_CONNECTION_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, OPEN_USER_INITIATED_CONNECTION_RESPONSE, sizeof(CFG_OPEN_USER_INITIATED_CONNECTION_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/* Calls to CloseUserInitiatedConnection Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::CloseUserInitiatedConnection()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(CLOSE_USER_INITIATED_CONNECTION_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(CLOSE_USER_INITIATED_CONNECTION_HEADER), sizeof(CLOSE_USER_INITIATED_CONNECTION_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, CLOSE_USER_INITIATED_CONNECTION_RESPONSE, sizeof(CFG_CLOSE_USER_INITIATED_CONNECTION_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/* Calls to GetRemoteAccessConnectionStatus Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetRemoteAccessConnectionStatus(REMOTE_ACCESS_STATUS &remoteAccessStatus)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_REMOTE_ACCESS_CONNECTION_STATUS_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_REMOTE_ACCESS_CONNECTION_STATUS_HEADER), sizeof(GET_REMOTE_ACCESS_CONNECTION_STATUS_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_REMOTE_ACCESS_CONNECTION_STATUS_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_REMOTE_ACCESS_CONNECTION_STATUS_RESPONSE *tmp_response = (CFG_GET_REMOTE_ACCESS_CONNECTION_STATUS_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyRemoteAccessConnectionStatus(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan remoteAccessStatus.AmtNetworkConnectionStatus = tmp_response->AmtNetworkConnectionStatus;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan remoteAccessStatus.RemoteAccessConnectionStatus = tmp_response->RemoteAccessConnectionStatus;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan remoteAccessStatus.RemoteAccessConnectionTrigger = tmp_response->RemoteAccessConnectionTrigger;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan remoteAccessStatus.MpsHostname.Length = tmp_response->MpsHostname.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan remoteAccessStatus.MpsHostname.Buffer = (CHAR *)malloc(remoteAccessStatus.MpsHostname.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == remoteAccessStatus.MpsHostname.Buffer) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = AMT_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } else {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(remoteAccessStatus.MpsHostname.Buffer,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan &(tmp_response->MpsHostname.Buffer),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan tmp_response->MpsHostname.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the GetRemoteAccessConnectionStatus response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyRemoteAccessConnectionStatus(const CFG_GET_REMOTE_ACCESS_CONNECTION_STATUS_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ULONG ByteCount = response.Header.Header.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ByteCount != (sizeof(CFG_GET_REMOTE_ACCESS_CONNECTION_STATUS_RESPONSE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan - sizeof(PTHI_MESSAGE_HEADER) - sizeof(CHAR *)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan + response.MpsHostname.Length))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GenerateRngKey Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* None
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - or AMT_STATUS_IN_PROGRESS on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GenerateRngKey()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GENERATE_RNG_SEED_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GENERATE_RNG_SEED_HEADER), sizeof(GENERATE_RNG_SEED_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GENERATE_RNG_SEED_RESPONSE, sizeof(CFG_GENERATE_RNG_SEED_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetRngSeedStatus Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* rngStatus - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetRngSeedStatus(AMT_RNG_STATUS &rngStatus)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_RNG_SEED_STATUS_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_RNG_SEED_STATUS_HEADER), sizeof(GET_RNG_SEED_STATUS_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_RNG_SEED_STATUS_RESPONSE, sizeof(CFG_GET_RNG_SEED_STATUS_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_RNG_SEED_STATUS_RESPONSE *tmp_response = (CFG_GET_RNG_SEED_STATUS_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan rngStatus = tmp_response->RngStatus;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to ZeroTouchEnabled Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* zeroTouchEnabled - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetZeroTouchEnabled(AMT_BOOLEAN &zeroTouchEnabled)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_ZERO_TOUCH_ENABLED_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_ZERO_TOUCH_ENABLED_HEADER), sizeof(GET_ZERO_TOUCH_ENABLED_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_ZERO_TOUCH_ENABLED_RESPONSE, sizeof(CFG_GET_ZERO_TOUCH_ENABLED_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_ZERO_TOUCH_ENABLED_RESPONSE *tmp_response = (CFG_GET_ZERO_TOUCH_ENABLED_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan zeroTouchEnabled = tmp_response->ZeroTouchEnabled;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetProvisioningTlsMode Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* provisioningTlsMode - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetProvisioningTlsMode(AMT_PROVISIONING_TLS_MODE &provisioningTlsMode)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_PROVISIONING_TLS_MODE_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_PROVISIONING_TLS_MODE_HEADER), sizeof(GET_PROVISIONING_TLS_MODE_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_PROVISIONING_TLS_MODE_RESPONSE, sizeof(CFG_GET_PROVISIONING_TLS_MODE_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_PROVISIONING_TLS_MODE_RESPONSE *tmp_response = (CFG_GET_PROVISIONING_TLS_MODE_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan provisioningTlsMode = tmp_response->ProvisioningTlsMode;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to StartConfiguration Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* None
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - or AMT_STATUS_CERTIFICATE_NOT_READY on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::StartConfiguration()
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(START_CONFIGURATION_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(START_CONFIGURATION_HEADER), sizeof(START_CONFIGURATION_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, START_CONFIGURATION_RESPONSE, sizeof(CFG_START_CONFIGURATION_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to SetProvisioningServerOTP Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* passwordOTP AMT_ANSI_STRING structure of OTP password
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::SetProvisioningServerOTP(AMT_ANSI_STRING passwordOTP)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == passwordOTP.Buffer)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INVALID_PARAM;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 msgLength = sizeof(passwordOTP.Length) + (passwordOTP.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan PTHI_MESSAGE_HEADER SET_PROVISIONING_SERVER_OTP_HEADER = {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {AMT_MAJOR_VERSION, AMT_MINOR_VERSION}, 0, {{SET_PROVISIONING_SERVER_OTP_REQUEST}}, msgLength
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan };
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(SET_PROVISIONING_SERVER_OTP_HEADER) + msgLength;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char *command;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan command = (unsigned char *)malloc(command_size);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == command)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &SET_PROVISIONING_SERVER_OTP_HEADER, sizeof(SET_PROVISIONING_SERVER_OTP_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_PROVISIONING_SERVER_OTP_HEADER), &(passwordOTP.Length), sizeof(passwordOTP.Length));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_PROVISIONING_SERVER_OTP_HEADER) + sizeof(passwordOTP.Length),
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan passwordOTP.Buffer, passwordOTP.Length);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, SET_PROVISIONING_SERVER_OTP_RESPONSE, sizeof(CFG_SET_PROVISIONING_SERVER_OTP_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL != command)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(command);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to SetDnsSuffix Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* dnsSuffix AMT_ANSI_STRING structure of DNS suffix
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::SetDnsSuffix(AMT_ANSI_STRING dnsSuffix)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == dnsSuffix.Buffer)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INVALID_PARAM;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT32 msgLength = sizeof(dnsSuffix.Length) + (dnsSuffix.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan PTHI_MESSAGE_HEADER SET_DNS_SUFFIX_HEADER = {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {AMT_MAJOR_VERSION, AMT_MINOR_VERSION}, 0, {{SET_DNS_SUFFIX_REQUEST}}, msgLength
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan };
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(SET_DNS_SUFFIX_HEADER) + msgLength;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char *command;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan command = (unsigned char *)malloc(command_size);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == command)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &SET_DNS_SUFFIX_HEADER, sizeof(SET_DNS_SUFFIX_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_DNS_SUFFIX_HEADER), &(dnsSuffix.Length), sizeof(dnsSuffix.Length));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(SET_DNS_SUFFIX_HEADER) + sizeof(dnsSuffix.Length), dnsSuffix.Buffer, dnsSuffix.Length);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, SET_DNS_SUFFIX_RESPONSE, sizeof(CFG_SET_DNS_SUFFIX_RESPONSE));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL != command)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(command);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to EnumerateHashHandles Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* hashHandles - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::EnumerateHashHandles(AMT_HASH_HANDLES &hashHandles)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(ENUMERATE_HASH_HANDLES_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(ENUMERATE_HASH_HANDLES_HEADER), sizeof(ENUMERATE_HASH_HANDLES_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, ENUMERATE_HASH_HANDLES_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_HASH_HANDLES_RESPONSE *tmp_response = (CFG_GET_HASH_HANDLES_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyHashHandles(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memset(hashHandles.Handles, 0, sizeof(UINT32) * CERT_HASH_MAX_NUMBER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hashHandles.Length = tmp_response->HashHandles.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (CERT_HASH_MAX_NUMBER < hashHandles.Length)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(hashHandles.Handles, tmp_response->HashHandles.Handles, sizeof(UINT32) * hashHandles.Length);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the EnumerateHashHandles response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyHashHandles(const CFG_GET_HASH_HANDLES_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ULONG ByteCount = response.Header.Header.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ByteCount !=
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sizeof(AMT_STATUS) + sizeof(response.HashHandles.Length) + (sizeof(UINT32) * response.HashHandles.Length))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetCertificateHashEntry Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* passwordOTP AMT_ANSI_STRING structure of DNS suffix
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetCertificateHashEntry(UINT32 hashHandle, CERTHASH_ENTRY &hashEntry)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(CFG_GET_CERTHASH_ENTRY_REQUEST);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_CERTHASH_ENTRY_HEADER), sizeof(GET_CERTHASH_ENTRY_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command + sizeof(GET_CERTHASH_ENTRY_HEADER), &(hashHandle), sizeof(hashHandle));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_CERTHASH_ENTRY_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_CERTHASH_ENTRY_RESPONSE *tmp_response = (CFG_GET_CERTHASH_ENTRY_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyGetCertificateHashEntry(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hashEntry.IsActive = tmp_response->Hash.IsActive;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hashEntry.IsDefault = tmp_response->Hash.IsDefault;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hashEntry.Name.Length = tmp_response->Hash.Name.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hashEntry.HashAlgorithm = tmp_response->Hash.HashAlgorithm;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(hashEntry.CertificateHash, tmp_response->Hash.CertificateHash, sizeof(tmp_response->Hash.CertificateHash));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan hashEntry.Name.Buffer = (CHAR *)malloc(hashEntry.Name.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == hashEntry.Name.Buffer)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(hashEntry.Name.Buffer, &(tmp_response->Hash.Name.Buffer), hashEntry.Name.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the GetCertificateHashEntry response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyGetCertificateHashEntry(const CFG_GET_CERTHASH_ENTRY_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ULONG ByteCount = response.Header.Header.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ByteCount !=
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan (sizeof(CFG_GET_CERTHASH_ENTRY_RESPONSE) - sizeof(PTHI_MESSAGE_HEADER)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan - sizeof(CHAR *) + response.Hash.Name.Length))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Calls to GetDnsSuffix Host interface command
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* dnsSuffix - reference to the pre-allocated structure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* which will hold the result
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* appropriate error value defined in StatusCodeDefinitions.h - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::GetDnsSuffix(AMT_ANSI_STRING &dnsSuffix)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan UINT8 *readBuffer = NULL;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan const UINT32 command_size = sizeof(GET_PKI_FQDN_SUFFIX_HEADER);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan unsigned char command[command_size];
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(command, &(GET_PKI_FQDN_SUFFIX_HEADER), sizeof(GET_PKI_FQDN_SUFFIX_HEADER));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan AMT_STATUS status = _call(command, command_size, &readBuffer, GET_PKI_FQDN_SUFFIX_RESPONSE, 0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan do {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan CFG_GET_PKI_FQDN_SUFFIX_RESPONSE *tmp_response = (CFG_GET_PKI_FQDN_SUFFIX_RESPONSE *)readBuffer;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = _verifyGetDnsSuffix(*tmp_response);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (status != AMT_STATUS_SUCCESS)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan dnsSuffix.Length = tmp_response->Suffix.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan dnsSuffix.Buffer = (CHAR *)malloc(dnsSuffix.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (NULL == dnsSuffix.Buffer)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan status = PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan break;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan memcpy(dnsSuffix.Buffer, &(tmp_response->Suffix.Buffer), dnsSuffix.Length * sizeof(CHAR));
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan } while (0);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (readBuffer != NULL)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan free(readBuffer);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return status;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Confirms the correctness of the GetDnsSuffix response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Arguments:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* response - reference to the response message
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* Return values:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* AMT_STATUS_SUCCESS - on success
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan* PTSDK_STATUS_INTERNAL_ERROR - on failure
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan*/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark LoganAMT_STATUS PTHICommand::_verifyGetDnsSuffix(const CFG_GET_PKI_FQDN_SUFFIX_RESPONSE &response)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ULONG ByteCount = response.Header.Header.Length;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ByteCount !=
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sizeof(AMT_STATUS) + sizeof(response.Suffix.Length) + response.Suffix.Length * sizeof(CHAR))
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return PTSDK_STATUS_INTERNAL_ERROR;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan }
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return AMT_STATUS_SUCCESS;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan}
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan