Equity
Bitcoin Protocol Library
Message.h
1 #pragma once
2 
3 #include "Serialize.h"
4 #include <cstdint>
5 #include <stdexcept>
6 #include <string>
7 #include <vector>
8 
9 namespace P2p
10 {
11 
15 
16 class Message
17 {
18 public:
19 
20  class Header;
21 
23  typedef std::vector<uint8_t> Payload;
24 
25  // Constructor
28  Message(char const * type, std::vector<uint8_t> const & payload);
29 
31  std::string type() const { return type_; }
32 
34  Payload payload() const { return payload_; }
35 
37  size_t size() const { return payload_.size(); }
38 
40  uint32_t checksum() const;
41 
42 private:
43 
44  std::string type_;
45  Payload payload_;
46 };
47 
51 
53 {
54 public:
55 
56  // Known magic numbers
57  static uint32_t const MAGIC_MAIN = 0xD9B4BEF9;
58  static uint32_t const MAGIC_TEST = 0xDAB5BFFA;
59  static uint32_t const MAGIC_TEST3 = 0x0709110B;
60 
61  // Field sizes
62  static size_t const MAGIC_SIZE = 4;
63  static size_t const TYPE_SIZE = 12;
64  static size_t const LENGTH_SIZE = 4;
65  static size_t const CHECKSUM_SIZE = 4;
66 
67  uint32_t magic_;
68  char type_[TYPE_SIZE];
69  uint32_t length_;
70  uint32_t checksum_;
71 
74  virtual void serialize(std::vector<uint8_t> & out) const override;
75  virtual json toJson() const override;
76 
78 };
79 
81 struct InvalidMessageError : public std::runtime_error
82 {
83  InvalidMessageError() : std::runtime_error("invalid message data") {}
84 };
85 
86 } // namespace Network
uint32_t magic_
Magic number.
Definition: Message.h:67
An abstract class that enables an object to be serialized by the serialization functions.
Definition: Serialize.h:27
uint32_t length_
Length of the payload.
Definition: Message.h:69
Definition: Message.h:9
void serialize(uint8_t const &a, std::vector< uint8_t > &out)
Serializes a uint8_t.
Definition: Serialize.cpp:10
Payload payload() const
Returns the payload.
Definition: Message.h:34
size_t size() const
Returns the size of the payload.
Definition: Message.h:37
A P2P network message header.
Definition: Message.h:52
A P2P network message.
Definition: Message.h:16
std::string type() const
Returns the message type.
Definition: Message.h:31
uint32_t checksum() const
Returns the checksum of the payload.
json toJson(std::vector< uint8_t > const &v)
Converts a std::vector<uint8_t> to a JSON hex string toJson.
Definition: Serialize.cpp:144
std::vector< uint8_t > Payload
Contains a message&#39;s payload.
Definition: Message.h:20
Message(char const *type, std::vector< uint8_t > const &payload)
Definition: Message.cpp:12
Thrown by a message constructor if the data in the message is invalid.
Definition: Message.h:81
uint32_t checksum_
Payload checksum.
Definition: Message.h:70