]> rtime.felk.cvut.cz Git - frescor/frsh.git/blobdiff - frsh_api/frsh_transaction.c
Start of transaction implementation and tests
[frescor/frsh.git] / frsh_api / frsh_transaction.c
index 6909d837dc85f1954e149c90d23c108149561727..fd7fb797e42ca87f75703bf6320fca5f75d6532b 100644 (file)
 
 #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;
+}