| 98 | } |
| 99 | |
| 100 | void encode_payload(uint64_t features) override { |
| 101 | if (header.version == 0) { |
| 102 | if (features & CEPH_FEATURE_MDSENC) |
| 103 | header.version = 3; |
| 104 | else if (features & CEPH_FEATURE_FLOCK) |
| 105 | header.version = 2; |
| 106 | else |
| 107 | header.version = 1; |
| 108 | } |
| 109 | |
| 110 | using ceph::encode; |
| 111 | data.clear(); |
| 112 | |
| 113 | if (header.version >= 4) { |
| 114 | encode(caps, data); |
| 115 | encode(realms, data); |
| 116 | encode(more, data); |
| 117 | } else { |
| 118 | // compat crap |
| 119 | if (header.version == 3) { |
| 120 | encode(caps, data); |
| 121 | } else if (header.version == 2) { |
| 122 | __u32 n = caps.size(); |
| 123 | encode(n, data); |
| 124 | for (auto& p : caps) { |
| 125 | encode(p.first, data); |
| 126 | p.second.encode_old(data); |
| 127 | } |
| 128 | } else { |
| 129 | std::map<inodeno_t, old_cap_reconnect_t> ocaps; |
| 130 | for (auto& p : caps) { |
| 131 | ocaps[p.first] = p.second; |
| 132 | encode(ocaps, data); |
| 133 | } |
| 134 | for (auto& r : realms) |
| 135 | r.encode_old(data); |
| 136 | } |
| 137 | } |
| 138 | } |
| 139 | void decode_payload() override { |
| 140 | using ceph::decode; |
| 141 | auto p = data.cbegin(); |
nothing calls this directly
no test coverage detected