|
1 | 1 | #include "apis.h" |
2 | 2 |
|
| 3 | +// TODO: Generate actual pre shared keys |
| 4 | +static mam_psk_t const psk = { |
| 5 | + .id = {1, 0, -1, -1, 0, -1, -1, 0, 0, 1, -1, 0, 1, 0, 0, 1, 1, |
| 6 | + 1, -1, 1, 1, 0, 1, 1, 0, 0, -1, 1, -1, -1, -1, -1, -1, -1, |
| 7 | + -1, 1, -1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 1, 1, 1, 0, 0, |
| 8 | + -1, 1, -1, -1, -1, 0, -1, 1, -1, -1, -1, 1, 1, -1, 1, 0, 0, |
| 9 | + 1, 1, 1, -1, -1, 0, 0, -1, -1, 1, 0, -1, 1}, |
| 10 | + .key = {-1, 1, -1, -1, 1, -1, -1, 0, 0, 0, -1, -1, 1, 1, 1, -1, -1, |
| 11 | + -1, 0, 0, 0, 0, -1, -1, 1, 1, 1, 0, -1, -1, -1, 0, 0, 0, |
| 12 | + -1, -1, 1, -1, 0, 0, 1, 0, 0, -1, 1, 1, 0, -1, 0, 0, 1, |
| 13 | + -1, 1, 0, 1, 0, 0, -1, 1, 1, -1, 1, 0, -1, 0, -1, 1, -1, |
| 14 | + -1, -1, 0, -1, -1, 0, -1, -1, 0, 0, -1, -1, 1, -1, 0, 0, -1, |
| 15 | + -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 0, 1, |
| 16 | + 0, 1, -1, 0, 0, 1, 0, 1, 0, 0, 1, 0, -1, 0, 1, 1, 0, |
| 17 | + 0, -1, -1, 1, 1, 0, 0, 1, -1, 1, 1, 1, 0, 1, 1, 1, 0, |
| 18 | + 0, -1, -1, -1, -1, 1, 1, 1, 0, 0, -1, 0, 1, -1, 1, 1, 1, |
| 19 | + 0, 0, 1, -1, -1, 0, -1, 1, -1, 1, 0, 0, 1, -1, 0, 1, -1, |
| 20 | + 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, -1, 1, -1, 1, 0, 1, 1, |
| 21 | + 1, -1, 0, 0, -1, 1, 1, 0, -1, -1, 0, 0, -1, 1, 0, 1, -1, |
| 22 | + 0, 0, -1, 1, -1, 1, 1, 1, -1, 0, 1, 1, 0, 0, -1, -1, -1, |
| 23 | + 0, 0, 1, 0, 1, 0, -1, 1, -1, 0, 1, 0, -1, 1, 1, -1, -1, |
| 24 | + 0, 0, -1, 0, -1}}; |
| 25 | + |
3 | 26 | status_t api_get_tips(const iota_client_service_t* const service, |
4 | 27 | char** json_result) { |
5 | 28 | status_t ret = SC_OK; |
@@ -128,6 +151,54 @@ status_t api_find_transactions_obj_by_tag( |
128 | 151 | return ret; |
129 | 152 | } |
130 | 153 |
|
| 154 | +status_t api_receive_mam_message(const iota_client_service_t* const service, |
| 155 | + const char* const obj, char** json_result) { |
| 156 | + status_t ret = SC_OK; |
| 157 | + mam_api_t mam; |
| 158 | + |
| 159 | + tryte_t* payload_trytes = NULL; |
| 160 | + size_t payload_size = 0; |
| 161 | + bundle_transactions_t* bundle = NULL; |
| 162 | + bundle_transactions_new(&bundle); |
| 163 | + bool is_last_packet; |
| 164 | + |
| 165 | + // Creating MAM API |
| 166 | + if (mam_api_init(&mam, (tryte_t*)SEED)) { |
| 167 | + ret = SC_MAM_OOM; |
| 168 | + goto done; |
| 169 | + } |
| 170 | + |
| 171 | + // Get bundle which is find_transactions_by_bundle |
| 172 | + ret = ta_get_bundle(service, (tryte_t*)obj, bundle); |
| 173 | + if (ret) { |
| 174 | + goto done; |
| 175 | + } |
| 176 | + |
| 177 | + // Read MAM message from bundle |
| 178 | + mam_psk_t_set_add(&mam.psks, &psk); |
| 179 | + if (mam_api_bundle_read(&mam, bundle, &payload_trytes, &payload_size, |
| 180 | + &is_last_packet) == RC_OK) { |
| 181 | + if (payload_trytes == NULL || payload_size == 0) { |
| 182 | + ret = SC_MAM_NULL; |
| 183 | + } else { |
| 184 | + char* payload = calloc(payload_size * 2 + 1, sizeof(char)); |
| 185 | + |
| 186 | + trytes_to_ascii(payload_trytes, payload_size, payload); |
| 187 | + *json_result = payload; |
| 188 | + |
| 189 | + payload = NULL; |
| 190 | + free(payload_trytes); |
| 191 | + } |
| 192 | + } else { |
| 193 | + ret = SC_MAM_FAILED_RESPONSE; |
| 194 | + } |
| 195 | + |
| 196 | +done: |
| 197 | + mam_api_destroy(&mam); |
| 198 | + bundle_transactions_free(&bundle); |
| 199 | + return ret; |
| 200 | +} |
| 201 | + |
131 | 202 | status_t api_send_transfer(const iota_client_service_t* const service, |
132 | 203 | const char* const obj, char** json_result) { |
133 | 204 | status_t ret = SC_OK; |
|
0 commit comments