Electroneum
hw::trezor::MessageMapper Class Reference

#include <messages_map.hpp>

Public Member Functions

 MessageMapper ()
 

Static Public Member Functions

::google::protobuf::Message * get_message (int wire_number)
 
::google::protobuf::Message * get_message (messages::MessageType)
 
::google::protobuf::Message * get_message (const std::string &msg_name)
 
static messages::MessageType get_message_wire_number (const google::protobuf::Message *msg)
 
static messages::MessageType get_message_wire_number (const google::protobuf::Message &msg)
 
static messages::MessageType get_message_wire_number (const std::string &msg_name)
 
template<class t_message = google::protobuf::Message>
static messages::MessageType get_message_wire_number ()
 

Detailed Description

Definition at line 52 of file messages_map.hpp.

Constructor & Destructor Documentation

◆ MessageMapper()

hw::trezor::MessageMapper::MessageMapper ( )
inline

Definition at line 54 of file messages_map.hpp.

54  {
55 
56  }

Member Function Documentation

◆ get_message() [1/3]

google::protobuf::Message * hw::trezor::MessageMapper::get_message ( int  wire_number)
static

Definition at line 58 of file messages_map.cpp.

58  {
59  return MessageMapper::get_message(static_cast<messages::MessageType>(wire_number));
60  }
::google::protobuf::Message * get_message(int wire_number)
Here is the caller graph for this function:

◆ get_message() [2/3]

google::protobuf::Message * hw::trezor::MessageMapper::get_message ( messages::MessageType  wire_number)
static

Definition at line 62 of file messages_map.cpp.

62  {
63  const string &messageTypeName = hw::trezor::messages::MessageType_Name(wire_number);
64  if (messageTypeName.empty()) {
65  throw exc::EncodingException(std::string("Message descriptor not found: ") + std::to_string(wire_number));
66  }
67 
68  string messageName = messageTypeName.substr(strlen(TYPE_PREFIX));
69  return MessageMapper::get_message(messageName);
70  }
::std::string string
Definition: gtest-port.h:1097
const char * TYPE_PREFIX
::google::protobuf::Message * get_message(int wire_number)
std::string to_string(t_connection_type type)
Here is the call graph for this function:

◆ get_message() [3/3]

google::protobuf::Message * hw::trezor::MessageMapper::get_message ( const std::string &  msg_name)
static

Definition at line 72 of file messages_map.cpp.

72  {
73  // Each package instantiation so lookup works
74  hw::trezor::messages::common::Success::default_instance();
75  hw::trezor::messages::management::Cancel::default_instance();
76  hw::trezor::messages::Electroneum::ElectroneumGetAddress::default_instance();
77 
78 #ifdef WITH_TREZOR_DEBUGGING
79  hw::trezor::messages::debug::DebugLinkDecision::default_instance();
80 #endif
81 
82  google::protobuf::Descriptor const * desc = nullptr;
83  for(const string &text : PACKAGES){
84  desc = google::protobuf::DescriptorPool::generated_pool()
85  ->FindMessageTypeByName(text + msg_name);
86  if (desc != nullptr){
87  break;
88  }
89  }
90 
91  if (desc == nullptr){
92  throw exc::EncodingException(std::string("Message not found: ") + msg_name);
93  }
94 
95  google::protobuf::Message* message =
96  google::protobuf::MessageFactory::generated_factory()
97  ->GetPrototype(desc)->New();
98 
99  return message;
100 
101 // // CODEGEN way, fast
102 // switch(wire_number){
103 // case 501:
104 // return new messages::Electroneum::ElectroneumTransactionSignRequest();
105 // default:
106 // throw std::runtime_error("not implemented");
107 // }
108 //
109 // // CODEGEN message -> number: specification
110 // // messages::MessageType get_message_wire_number(const messages::Electroneum::ElectroneumTransactionSignRequest * msg) { return 501; }
111 // // messages::MessageType get_message_wire_number(const messages::management::ping * msg)
112 //
113  }
::std::string string
Definition: gtest-port.h:1097
const char * PACKAGES[]
std::string message("Message requiring signing")
Here is the call graph for this function:

◆ get_message_wire_number() [1/4]

messages::MessageType hw::trezor::MessageMapper::get_message_wire_number ( const google::protobuf::Message *  msg)
static

Definition at line 115 of file messages_map.cpp.

115  {
116  return MessageMapper::get_message_wire_number(msg->GetDescriptor()->name());
117  }
static messages::MessageType get_message_wire_number()

◆ get_message_wire_number() [2/4]

messages::MessageType hw::trezor::MessageMapper::get_message_wire_number ( const google::protobuf::Message &  msg)
static

Definition at line 119 of file messages_map.cpp.

119  {
120  return MessageMapper::get_message_wire_number(msg.GetDescriptor()->name());
121  }
static messages::MessageType get_message_wire_number()

◆ get_message_wire_number() [3/4]

messages::MessageType hw::trezor::MessageMapper::get_message_wire_number ( const std::string &  msg_name)
static

Definition at line 123 of file messages_map.cpp.

123  {
124  string enumMessageName = std::string(TYPE_PREFIX) + msg_name;
125 
126  messages::MessageType res;
127  bool r = hw::trezor::messages::MessageType_Parse(enumMessageName, &res);
128  if (!r){
129  throw exc::EncodingException(std::string("Message ") + msg_name + " not found");
130  }
131 
132  return res;
133  }
const char * res
Definition: hmac_keccak.cpp:41
::std::string string
Definition: gtest-port.h:1097
const char * TYPE_PREFIX

◆ get_message_wire_number() [4/4]

template<class t_message = google::protobuf::Message>
static messages::MessageType hw::trezor::MessageMapper::get_message_wire_number ( )
inlinestatic

Definition at line 66 of file messages_map.hpp.

66  {
68  return get_message_wire_number(t_message::default_instance().GetDescriptor()->name());
69  }
static messages::MessageType get_message_wire_number()
const char * name
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1225

The documentation for this class was generated from the following files: