From 0afbf7c998bacc8edbca33d16cb86d62362cb251 Mon Sep 17 00:00:00 2001 From: Martin Molnar Date: Thu, 19 Jun 2008 18:35:33 +0200 Subject: [PATCH] Added fwp_contract_cancel fucntion --- fwp/lib/Makefile.omk | 2 +- fwp/lib/mngt/fwp_contract.c | 23 +++++++++++++++++++++++ fwp/lib/mngt/fwp_contract.h | 5 +++-- fwp/lib/mngt/fwp_msg.h | 3 ++- fwp/tests/fwp_msgtest/fwp_msgtest.c | 2 +- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/fwp/lib/Makefile.omk b/fwp/lib/Makefile.omk index ecdc2fa..d3bcade 100644 --- a/fwp/lib/Makefile.omk +++ b/fwp/lib/Makefile.omk @@ -1,5 +1,5 @@ lib_LIBRARIES = fwp -CFLAGS = -Wall -D_REENTRANT -g -D_FWP_INTERNALS_=1 +CFLAGS = -Wall -D_REENTRANT -g -D_FWP_INTERNALS_ SUBDIRS = core mngt #LDFLAGS = -lpthread -lrt fwp_SOURCES = core/fwp_util.c core/fwp_vres.c core/fwp_msgb.c core/fwp_msgq.c\ diff --git a/fwp/lib/mngt/fwp_contract.c b/fwp/lib/mngt/fwp_contract.c index a05a9c7..5076b23 100644 --- a/fwp/lib/mngt/fwp_contract.c +++ b/fwp/lib/mngt/fwp_contract.c @@ -130,3 +130,26 @@ int fwp_contract_commit(fwp_contract_d_t contractd, fwp_vres_d_t *vresdp) return 0; } +int fwp_contract_cancel(fwp_contract_d_t contractd) +{ + fwp_contract_data_t *contdata = contractd; + fwp_msgb_t *msgb; + + /* Send COMMIT to manager */ + msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header) + + sizeof(struct fwp_msg_contracthdr)); + fwp_msgb_reserve(msgb, sizeof(struct fwp_msg_header)); + fwp_msg_contracthdr_in(msgb->tail, contdata->id, contdata->status); + fwp_msgb_put(msgb, sizeof(struct fwp_msg_contracthdr)); + FWP_DEBUG("Cancel contract id =%d\n", contdata->id); + + fwp_mngt_send(FWP_MSG_CANCEL, msgb, + fwp_participant_this, fwp_participant_mngr); + + contdata->status = FWP_CONT_NOTNEGOTIATED; + fwp_vres_destroy(contdata->vresd); + /*contdata->vresd = NULL_vresd;*/ + + /*TODO: error handling */ + return 0; +} diff --git a/fwp/lib/mngt/fwp_contract.h b/fwp/lib/mngt/fwp_contract.h index ea15d38..2dfa690 100644 --- a/fwp/lib/mngt/fwp_contract.h +++ b/fwp/lib/mngt/fwp_contract.h @@ -6,8 +6,10 @@ /* *typedef struct mfrsh_contract_ops{ * fwp_contract_d_t (*create)(fwp_contract_t *contract); + * int (*destroy)(fwp_contract_t *contract); * int (*reserve)(fwp_contract_d_t contractd); * int (*commit)(fwp_contract_d_t contractd); + * int (*cancel)(fwp_contract_d_t contractd); *} mfrsh_contract_ops_t; * * typedef struct mfrsh_contract_d { @@ -34,7 +36,7 @@ typedef struct fwp_contract_data* fwp_contract_d_t; fwp_contract_d_t fwp_contract_create(fwp_contract_t *contract); int fwp_contract_negotiate(fwp_contract_d_t contract, fwp_vres_d_t *vresdp); int fwp_contract_is_negotiated(fwp_contract_d_t contract); - +int fwp_contract_cancel(fwp_contract_d_t contractd); #ifdef _FWP_INTERNALS_ @@ -65,7 +67,6 @@ typedef fwp_vres_id_t fwp_contract_id_t; * It is an internal representation of contract. * */ -typedef struct fwp_contract_data { fwp_contract_id_t id; /**< contract specified by user */ diff --git a/fwp/lib/mngt/fwp_msg.h b/fwp/lib/mngt/fwp_msg.h index ede4948..077350f 100644 --- a/fwp/lib/mngt/fwp_msg.h +++ b/fwp/lib/mngt/fwp_msg.h @@ -10,7 +10,8 @@ typedef enum { FWP_MSG_HELLO = 1<<1, FWP_MSG_RESERVE = 1<<2, - FWP_MSG_COMMIT = 1<<3 + FWP_MSG_COMMIT = 1<<3, + FWP_MSG_CANCEL = 1<<4 } fwp_msg_type_t; struct fwp_msg_header{ diff --git a/fwp/tests/fwp_msgtest/fwp_msgtest.c b/fwp/tests/fwp_msgtest/fwp_msgtest.c index 407c4da..603a6f3 100644 --- a/fwp/tests/fwp_msgtest/fwp_msgtest.c +++ b/fwp/tests/fwp_msgtest/fwp_msgtest.c @@ -6,7 +6,7 @@ #include #include -int main(int argc, char *argv[]) +int main(int argc, char** argv) { struct fwp_msgq msgq; struct fwp_msgb *msgb; -- 2.39.2