4
4
*/
5
5
6
6
#include " codec/cbor/cbor_codec.hpp"
7
+ #include " data_transfer/message.hpp"
7
8
#include " primitives/address/address_codec.hpp"
8
9
#include " storage/ipfs/graphsync/extension.hpp"
9
10
@@ -24,3 +25,102 @@ namespace fc::storage::ipfs::graphsync {
24
25
return s << m;
25
26
}
26
27
} // namespace fc::storage::ipfs::graphsync
28
+
29
+ namespace fc ::data_transfer {
30
+ using codec::cbor::CborDecodeStream;
31
+ using codec::cbor::CborEncodeStream;
32
+
33
+ CBOR2_ENCODE (DataTransferRequest) {
34
+ auto m{CborEncodeStream::map ()};
35
+ m[" BCid" ] << v.base_cid ;
36
+ m[" Type" ] << v.type ;
37
+ m[" Paus" ] << v.is_pause ;
38
+ m[" Part" ] << v.is_part ;
39
+ m[" Pull" ] << v.is_pull ;
40
+ m[" Stor" ] << v.selector ;
41
+ m[" Vouch" ] << v.voucher ;
42
+ m[" VTyp" ] << v.voucher_type ;
43
+ m[" XferID" ] << v.transfer_id ;
44
+
45
+ // note: https://github.com/filecoin-project/go-data-transfer/pull/315
46
+ if (v.restart ) {
47
+ auto l{CborEncodeStream::list ()};
48
+ s << common::span::bytestr (v.restart ->initiator .toVector ());
49
+ s << common::span::bytestr (v.restart ->responder .toVector ());
50
+ l << v.restart ->id ;
51
+ m[" RestartChannel" ] << l;
52
+ } else {
53
+ m[" RestartChannel" ] << (CborEncodeStream::list () << " "
54
+ << " " << 0 );
55
+ }
56
+
57
+ return s << m;
58
+ }
59
+ CBOR2_DECODE (DataTransferRequest) {
60
+ auto m{s.map ()};
61
+ CborDecodeStream::named (m, " BCid" ) >> v.base_cid ;
62
+ CborDecodeStream::named (m, " Type" ) >> v.type ;
63
+ CborDecodeStream::named (m, " Paus" ) >> v.is_pause ;
64
+ CborDecodeStream::named (m, " Part" ) >> v.is_part ;
65
+ CborDecodeStream::named (m, " Pull" ) >> v.is_pull ;
66
+ CborDecodeStream::named (m, " Stor" ) >> v.selector ;
67
+ CborDecodeStream::named (m, " Vouch" ) >> v.voucher ;
68
+ CborDecodeStream::named (m, " VTyp" ) >> v.voucher_type ;
69
+ CborDecodeStream::named (m, " XferID" ) >> v.transfer_id ;
70
+
71
+ // note: https://github.com/filecoin-project/go-data-transfer/pull/315
72
+ {
73
+ v.restart .reset ();
74
+ auto l{CborDecodeStream::named (m, " RestartChannel" ).list ()};
75
+ std::string initiator;
76
+ std::string responder;
77
+ TransferId id;
78
+ l >> initiator >> responder >> id;
79
+ if (!initiator.empty () && !responder.empty ()) {
80
+ v.restart = ChannelId{
81
+ PeerId::fromBytes (common::span::cbytes (initiator)).value (),
82
+ PeerId::fromBytes (common::span::cbytes (responder)).value (),
83
+ id,
84
+ };
85
+ }
86
+ }
87
+
88
+ return s;
89
+ }
90
+
91
+ CBOR2_ENCODE (DataTransferResponse) {
92
+ auto m{CborEncodeStream::map ()};
93
+ m[" Type" ] << v.type ;
94
+ m[" Acpt" ] << v.is_accepted ;
95
+ m[" Paus" ] << v.is_pause ;
96
+ m[" XferID" ] << v.transfer_id ;
97
+ m[" VRes" ] << v.voucher ;
98
+ m[" VTyp" ] << v.voucher_type ;
99
+ return s << m;
100
+ }
101
+ CBOR2_DECODE (DataTransferResponse) {
102
+ auto m{s.map ()};
103
+ CborDecodeStream::named (m, " Type" ) >> v.type ;
104
+ CborDecodeStream::named (m, " Acpt" ) >> v.is_accepted ;
105
+ CborDecodeStream::named (m, " Paus" ) >> v.is_pause ;
106
+ CborDecodeStream::named (m, " XferID" ) >> v.transfer_id ;
107
+ CborDecodeStream::named (m, " VRes" ) >> v.voucher ;
108
+ CborDecodeStream::named (m, " VTyp" ) >> v.voucher_type ;
109
+ return s;
110
+ }
111
+
112
+ CBOR2_ENCODE (DataTransferMessage) {
113
+ auto m{CborEncodeStream::map ()};
114
+ m[" IsRq" ] << v.is_request ;
115
+ m[" Request" ] << v.request ;
116
+ m[" Response" ] << v.response ;
117
+ return s << m;
118
+ }
119
+ CBOR2_DECODE (DataTransferMessage) {
120
+ auto m{s.map ()};
121
+ CborDecodeStream::named (m, " IsRq" ) >> v.is_request ;
122
+ CborDecodeStream::named (m, " Request" ) >> v.request ;
123
+ CborDecodeStream::named (m, " Response" ) >> v.response ;
124
+ return s;
125
+ }
126
+ } // namespace fc::data_transfer
0 commit comments