// check the given transaction id to verify there is an associated transaction in the OPS state // having the same op_code // return associated transaction via tr // success: SUCCESS // failure: ERRNO_MP_NOT_FOUND, ERRNO_MP_INVALID_CARD, ERRNO_MP_NO_OPS int transaction_ops_done(transaction_t ** tr, packet_head_t * pkt_hdr_ptr, list_t * tr_list) { RET_ON_FAIL(transaction_get(tr, pkt_hdr_ptr->transaction_id, pkt_hdr_ptr->op_code, tr_list)); if(pkt_hdr_ptr->card_id != (*tr)->card_id) {return ERRNO_MP_INVALID_CARD;} if((*tr)->state != OPS) {return ERRNO_MP_NO_OPS;} return SUCCESS; }
// find the transaction in tr_list that was a purchase with purchase_id and return it in ref_tr // success: SUCCESS // failure: ERRNO_MP_NOT_FOUND int transaction_get_and_verify_purchase_id(list_t * tr_list, packet_data_refund_t * pdr, transaction_t ** ref_tr) { RET_ON_FAIL(transaction_get(ref_tr, pdr->transaction_id, PURCHASE, tr_list)); // verify purchase_id packet_data_purchase_t * p = (packet_data_purchase_t *)(*ref_tr)->details; if(p->purchase_id != pdr->purchase_id) {return ERRNO_MP_NOT_FOUND;} return SUCCESS; }
static val* execute_get(transaction* t, void* k, int ksize) { key _k; _k.data = k; _k.size = ksize; return transaction_get(t, &_k); }