Github user phrocker commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi-cpp/pull/134#discussion_r139699391
  
    --- Diff: libminifi/include/c2/C2Payload.h ---
    @@ -0,0 +1,187 @@
    +/**
    + *
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +#ifndef LIBMINIFI_INCLUDE_C2_C2PAYLOAD_H_
    +#define LIBMINIFI_INCLUDE_C2_C2PAYLOAD_H_
    +
    +#include <memory>
    +#include <string>
    +#include <map>
    +#include "core/state/UpdateController.h"
    +
    +namespace org {
    +namespace apache {
    +namespace nifi {
    +namespace minifi {
    +namespace c2 {
    +
    +enum Operation {
    +  ACKNOWLEDGE,
    +  START,
    +  STOP,
    +  RESTART,
    +  DESCRIBE,
    +  HEARTBEAT,
    +  UPDATE,
    +  VALIDATE,
    +  CLEAR
    +};
    +
    +enum Direction {
    +  TRANSMIT,
    +  RECEIVE
    +};
    +
    +class C2ContentResponse {
    + public:
    +  C2ContentResponse(Operation op);
    +
    +  C2ContentResponse(const C2ContentResponse &other);
    +
    +  C2ContentResponse(const C2ContentResponse &&other);
    +
    +  C2ContentResponse & operator=(const C2ContentResponse &&other);
    +
    +  C2ContentResponse & operator=(const C2ContentResponse &other);
    +
    +  Operation op;
    +  // determines if the operation is required
    +  bool required;
    +  // identifier
    +  std::string ident;
    +  // delay before running
    +  uint32_t delay;
    +  // max time before this response will no longer be honored.
    +  uint64_t ttl;
    +  // name applied to commands
    +  std::string name;
    +  // commands that correspond with the operation.
    +  std::map<std::string, std::string> operation_arguments;
    +//  std::vector<std::string> content;
    +};
    +
    +/**
    + * C2Payload is an update for the state manager.
    + * Note that the payload can either consist of other payloads or
    + * have content directly within it, represented by C2ContentResponse 
objects, above.
    + *
    + * Payloads can also contain raw data, which can be binary data.
    + */
    +class C2Payload : public state::Update {
    + public:
    +  virtual ~C2Payload() {
    +
    +  }
    +
    +  C2Payload(Operation op, std::string identifier, bool resp = false, bool 
isRaw = false);
    +
    +  C2Payload(Operation op, bool resp = false, bool isRaw = false);
    +
    +  C2Payload(Operation op, state::UpdateState state, bool resp = false, 
bool isRaw = false);
    +
    +  C2Payload(const C2Payload &other);
    +
    +  C2Payload(const C2Payload &&other);
    +
    +  void setIdentifier(const std::string &ident);
    +
    +  std::string getIdentifier() const;
    +
    +  void setLabel(const std::string label) {
    +    label_ = label;
    +  }
    +
    +  std::string getLabel() const {
    +    return label_;
    +  }
    +
    +  /**
    +   * Gets the operation for this payload. May be nested or a single 
operation.
    +   */
    +  Operation getOperation() const;
    +
    +  /**
    +   * Validate the payload, if necessary and/or possible.
    +   */
    +  virtual bool validate();
    +
    +  /**
    +   * Get content responses from this payload.
    +   */
    +  const std::vector<C2ContentResponse> &getContent() const;
    +
    +  /**
    +   * Add a content response to this payload.
    +   */
    +  void addContent(const C2ContentResponse &&content);
    +
    +  /**
    +   * Determines if this object contains raw data.
    +   */
    +  bool isRaw() const;
    +
    +  /**
    +   * Sets raw data within this object.
    +   */
    +  void setRawData(const std::string &data);
    --- End diff --
    
    A string contains raw bytes. It can be accessed with std::string::data. I 
don't know if there is really a fundamental difference between vector<char> and 
std::string. Performance is negligible and a setRawData(vector<char> data ) 
exists, so we don't impose a semantic that says you must use text, if the 
developer interprets the signature as such. 


---

Reply via email to