#include <frsh.h>
#include <frsh_transaction.h>
+#include <fres_transaction.h>
+#include <fcb.h>
+#include "frsh_forb.h"
+int
+frsh_transaction_init(frsh_transaction_t *transaction,
+ char *name)
+{
+ int ret = 0;
+ if (!transaction) {
+ ret = FRSH_ERR_BAD_ARGUMENT;
+ goto err;
+ }
+ *transaction = fres_transaction_new();
+ (*transaction)->name = name;
+err:
+ return ret;
+}
+
+void
+frsh_transaction_destroy(frsh_transaction_t *transaction)
+{
+ fres_transaction_destroy(*transaction);
+}
+
+int
+frsh_transaction_add_contract(frsh_transaction_t *transaction,
+ frsh_contract_t *contract,
+ int id)
+{
+ int ret;
+ if (!transaction || !*transaction ||
+ !contract || !*contract ||
+ id < 0) {
+ ret = FRSH_ERR_BAD_ARGUMENT;
+ goto err;
+ }
+
+ ret = fres_transaction_add_contract(*transaction, *contract);
+ if (ret == -1)
+ ret = FRSH_ERR_INTERNAL_ERROR;
+ else
+ ret = 0;
+err:
+ return ret;
+}
int
frsh_transaction_negotiate(frsh_transaction_t *trans)
+{
+ int ret;
+ struct forb_env env;
+ if (!trans || !*trans) {
+ ret = FRSH_ERR_BAD_ARGUMENT;
+ goto err;
+ }
+ ret = fres_contract_broker_negotiate_transaction(
+ frsh_forb_global.fcb, *trans, &env);
+ if (forb_exception_occurred(&env)) {
+ ret = fres_forbex2err(&env);
+ goto err;
+ }
+err:
+ return ret;
+}
+
+int
+frsh_transaction_cancel(frsh_transaction_t *trans)
{
return FRSH_ERR_NOT_IMPLEMENTED;
}
+int
+frsh_transaction_wait_for_name(frsh_transaction_t *transaction,
+ const char *name)
+{
+ return FRSH_ERR_NOT_IMPLEMENTED;
+}
+
+int
+frsh_transaction_alloc_vres(frsh_transaction_t *t,
+ int id,
+ frsh_vres_id_t *vres)
+{
+ return FRSH_ERR_NOT_IMPLEMENTED;
+}