aboutsummaryrefslogtreecommitdiffstats
path: root/tools/generate_certificate.sh
blob: 76f8a194aca7dfa943efdcd84d45949c15b4cd06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-ri
#!/bin/bash
# generate_certificate.sh — Create a self-signed X.509 certificate for
# open62541 OPC UA applications.  Outputs DER-encoded certificate and
# private-key files suitable for the demo programs in this project.
#
# Arguments:
#   $1  certs_dir  — output directory for generated files (created if missing)
#   $2  name       — identity name (e.g. "ServerLDS", "ClientFindServers")
#   $3  uri        — (optional) application URI; defaults to urn:localhost:bobink:<name>
#
# Produces:
#   <certs_dir>/<name>_cert.der   — DER-encoded X.509 certificate
#   <certs_dir>/<name>_cert.pem   — PEM-encoded X.509 certificate
#   <certs_dir>/<name>_key.der    — DER-encoded RSA private key

set -euo pipefail # Fail fast; no unset vars; catch pipe failures.

if [ $# -lt 2 ] || [ $# -gt 3 ]; then
  echo "Usage: generate_certificate.sh <certs_dir> <name> [uri]" >&2
  exit 1
fi

certs_dir="$1"
name="$2"
cn="${name}@localhost"
uri="${3:-urn:localhost:bobink:${name}}"

mkdir -p "$certs_dir"

cnf="$certs_dir/${name}.cnf"
cat >"$cnf" <<EOF
[req]
distinguished_name = req_dn
x509_extensions = v3_ext
prompt = no

[req_dn]
C  = FR
O  = Bobink
CN = ${cn}

[v3_ext]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment, nonRepudiation, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = DNS:localhost, URI:${uri}
EOF

openssl req -x509 -newkey rsa:2048 -nodes -sha256 \
  -days 365 \
  -config "$cnf" \
  -keyout "$certs_dir/${name}_key.pem" \
  -out "$certs_dir/${name}_cert.pem" \
  2>/dev/null

openssl x509 -in "$certs_dir/${name}_cert.pem" -outform der \
  -out "$certs_dir/${name}_cert.der"
openssl rsa -in "$certs_dir/${name}_key.pem" -outform der \
  -out "$certs_dir/${name}_key.der" 2>/dev/null

echo "Generated certificate '$name' (CN=$cn, URI=$uri):"
echo "  $certs_dir/${name}_cert.der"
echo "  $certs_dir/${name}_cert.pem"
echo "  $certs_dir/${name}pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-co
: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: ConnectResponse.proto

#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
#include "ConnectResponse.pb.h"

#include <algorithm>

#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/port.h>
#include <google/protobuf/stubs/once.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes)

namespace Tango {
namespace PMR {
namespace Connection {
class ConnectResponseDefaultTypeInternal {
public:
 ::google::protobuf::internal::ExplicitlyConstructed<ConnectResponse>
     _instance;
} _ConnectResponse_default_instance_;

namespace protobuf_ConnectResponse_2eproto {


namespace {

::google::protobuf::Metadata file_level_metadata[1];

}  // namespace

PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField
    const TableStruct::entries[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0},
};

PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField
    const TableStruct::aux[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  ::google::protobuf::internal::AuxillaryParseTableField(),
};
PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const
    TableStruct::schema[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  { NULL, NULL, 0, -1, -1, -1, -1, NULL, false },
};

const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ConnectResponse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ConnectResponse, deviceinformation_),
};
static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  { 0, -1, sizeof(ConnectResponse)},
};

static ::google::protobuf::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::google::protobuf::Message*>(&_ConnectResponse_default_instance_),
};

namespace {

void protobuf_AssignDescriptors() {
  AddDescriptors();
  ::google::protobuf::MessageFactory* factory = NULL;
  AssignDescriptors(
      "ConnectResponse.proto", schemas, file_default_instances, TableStruct::offsets, factory,
      file_level_metadata, NULL, NULL);
}

void protobuf_AssignDescriptorsOnce() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &protobuf_AssignDescriptors);
}

void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD;
void protobuf_RegisterTypes(const ::std::string&) {
  protobuf_AssignDescriptorsOnce();
  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 1);
}

}  // namespace
void TableStruct::InitDefaultsImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  ::google::protobuf::internal::InitProtobufDefaults();
  ::Tango::PMR::Connection::protobuf_DeviceInformation_2eproto::InitDefaults();
  _ConnectResponse_default_instance_._instance.DefaultConstruct();
  ::google::protobuf::internal::OnShutdownDestroyMessage(
      &_ConnectResponse_default_instance_);_ConnectResponse_default_instance_._instance.get_mutable()->deviceinformation_ = const_cast< ::Tango::PMR::Connection::DeviceInformation*>(
      ::Tango::PMR::Connection::DeviceInformation::internal_default_instance());
}

void InitDefaults() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &TableStruct::InitDefaultsImpl);
}
namespace {
void AddDescriptorsImpl() {
  InitDefaults();
  static const char descriptor[] GOOGLE_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
      "\n\025ConnectResponse.proto\022\024Tango.PMR.Conne"
      "ction\032\027DeviceInformation.proto\"U\n\017Connec"
      "tResponse\022B\n\021DeviceInformation\030\001 \001(\0132\'.T"
      "ango.PMR.Connection.DeviceInformationB \n"
      "\036com.twine.tango.pmr.connectionb\006proto3"
  };
  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      descriptor, 199);
  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
    "ConnectResponse.proto", &protobuf_RegisterTypes);
  ::Tango::PMR::Connection::protobuf_DeviceInformation_2eproto::AddDescriptors();
}
} // anonymous namespace

void AddDescriptors() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &AddDescriptorsImpl);
}
// Force AddDescriptors() to be called at dynamic initialization time.
struct StaticDescriptorInitializer {
  StaticDescriptorInitializer() {
    AddDescriptors();
  }
} static_descriptor_initializer;

}  // namespace protobuf_ConnectResponse_2eproto


// ===================================================================

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int ConnectResponse::kDeviceInformationFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

ConnectResponse::ConnectResponse()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    protobuf_ConnectResponse_2eproto::InitDefaults();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:Tango.PMR.Connection.ConnectResponse)
}
ConnectResponse::ConnectResponse(const ConnectResponse& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_deviceinformation()) {
    deviceinformation_ = new ::Tango::PMR::Connection::DeviceInformation(*from.deviceinformation_);
  } else {
    deviceinformation_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:Tango.PMR.Connection.ConnectResponse)
}

void ConnectResponse::SharedCtor() {
  deviceinformation_ = NULL;
  _cached_size_ = 0;
}

ConnectResponse::~ConnectResponse() {
  // @@protoc_insertion_point(destructor:Tango.PMR.Connection.ConnectResponse)
  SharedDtor();
}

void ConnectResponse::SharedDtor() {
  if (this != internal_default_instance()) delete deviceinformation_;
}

void ConnectResponse::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* ConnectResponse::descriptor() {
  protobuf_ConnectResponse_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_ConnectResponse_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const ConnectResponse& ConnectResponse::default_instance() {
  protobuf_ConnectResponse_2eproto::InitDefaults();
  return *internal_default_instance();
}

ConnectResponse* ConnectResponse::New(::google::protobuf::Arena* arena) const {
  ConnectResponse* n = new ConnectResponse;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void ConnectResponse::Clear() {
// @@protoc_insertion_point(message_clear_start:Tango.PMR.Connection.ConnectResponse)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  if (GetArenaNoVirtual() == NULL && deviceinformation_ != NULL) {
    delete deviceinformation_;
  }
  deviceinformation_ = NULL;
  _internal_metadata_.Clear();
}

bool ConnectResponse::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:Tango.PMR.Connection.ConnectResponse)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .Tango.PMR.Connection.DeviceInformation DeviceInformation = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
               input, mutable_deviceinformation()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:Tango.PMR.Connection.ConnectResponse)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:Tango.PMR.Connection.ConnectResponse)
  return false;
#undef DO_
}

void ConnectResponse::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:Tango.PMR.Connection.ConnectResponse)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .Tango.PMR.Connection.DeviceInformation DeviceInformation = 1;
  if (this->has_deviceinformation()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, *this->deviceinformation_, output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:Tango.PMR.Connection.ConnectResponse)
}

::google::protobuf::uint8* ConnectResponse::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:Tango.PMR.Connection.ConnectResponse)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .Tango.PMR.Connection.DeviceInformation DeviceInformation = 1;
  if (this->has_deviceinformation()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageNoVirtualToArray(
        1, *this->deviceinformation_, deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:Tango.PMR.Connection.ConnectResponse)
  return target;
}

size_t ConnectResponse::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:Tango.PMR.Connection.ConnectResponse)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .Tango.PMR.Connection.DeviceInformation DeviceInformation = 1;
  if (this->has_deviceinformation()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
        *this->deviceinformation_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void ConnectResponse::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:Tango.PMR.Connection.ConnectResponse)
  GOOGLE_DCHECK_NE(&from, this);
  const ConnectResponse* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const ConnectResponse>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:Tango.PMR.Connection.ConnectResponse)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:Tango.PMR.Connection.ConnectResponse)
    MergeFrom(*source);
  }
}

void ConnectResponse::MergeFrom(const ConnectResponse& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:Tango.PMR.Connection.ConnectResponse)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_deviceinformation()) {
    mutable_deviceinformation()->::Tango::PMR::Connection::DeviceInformation::MergeFrom(from.deviceinformation());
  }
}

void ConnectResponse::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:Tango.PMR.Connection.ConnectResponse)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void ConnectResponse::CopyFrom(const ConnectResponse& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:Tango.PMR.Connection.ConnectResponse)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool ConnectResponse::IsInitialized() const {
  return true;
}

void ConnectResponse::Swap(ConnectResponse* other) {
  if (other == this) return;
  InternalSwap(other);
}
void ConnectResponse::InternalSwap(ConnectResponse* other) {
  using std::swap;
  swap(deviceinformation_, other->deviceinformation_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata ConnectResponse::GetMetadata() const {
  protobuf_ConnectResponse_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_ConnectResponse_2eproto::file_level_metadata[kIndexInFileMessages];
}

#if PROTOBUF_INLINE_NOT_IN_HEADERS
// ConnectResponse

// .Tango.PMR.Connection.DeviceInformation DeviceInformation = 1;
bool ConnectResponse::has_deviceinformation() const {
  return this != internal_default_instance() && deviceinformation_ != NULL;
}
void ConnectResponse::clear_deviceinformation() {
  if (GetArenaNoVirtual() == NULL && deviceinformation_ != NULL) delete deviceinformation_;
  deviceinformation_ = NULL;
}
const ::Tango::PMR::Connection::DeviceInformation& ConnectResponse::deviceinformation() const {
  const ::Tango::PMR::Connection::DeviceInformation* p = deviceinformation_;
  // @@protoc_insertion_point(field_get:Tango.PMR.Connection.ConnectResponse.DeviceInformation)
  return p != NULL ? *p : *reinterpret_cast<const ::Tango::PMR::Connection::DeviceInformation*>(
      &::Tango::PMR::Connection::_DeviceInformation_default_instance_);
}
::Tango::PMR::Connection::DeviceInformation* ConnectResponse::mutable_deviceinformation() {
  
  if (deviceinformation_ == NULL) {
    deviceinformation_ = new ::Tango::PMR::Connection::DeviceInformation;
  }
  // @@protoc_insertion_point(field_mutable:Tango.PMR.Connection.ConnectResponse.DeviceInformation)
  return deviceinformation_;
}
::Tango::PMR::Connection::DeviceInformation* ConnectResponse::release_deviceinformation() {
  // @@protoc_insertion_point(field_release:Tango.PMR.Connection.ConnectResponse.DeviceInformation)
  
  ::Tango::PMR::Connection::DeviceInformation* temp = deviceinformation_;
  deviceinformation_ = NULL;
  return temp;
}
void ConnectResponse::set_allocated_deviceinformation(::Tango::PMR::Connection::DeviceInformation* deviceinformation) {
  delete deviceinformation_;
  deviceinformation_ = deviceinformation;
  if (deviceinformation) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_set_allocated:Tango.PMR.Connection.ConnectResponse.DeviceInformation)
}

#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS

// @@protoc_insertion_point(namespace_scope)

}  // namespace Connection
}  // namespace PMR
}  // namespace Tango

// @@protoc_insertion_point(global_scope)