+int
+fwp_mngr_contract_cancel(fwp_msgb_t *msgb, fwp_participant_id_t participant_id)
+{
+ fwp_participant_t *participant;
+ fwp_contract_data_t *contdata;
+ fwp_contract_id_t id;
+ fwp_contract_status_t status;
+
+ /* Find participant */
+ if (!(participant = fwp_participant_table_find(&participant_id))){
+ return -EPERM;
+ }
+
+ fwp_msg_contracthdr_out(msgb->data, &id, &status);
+ fwp_msgb_pull(msgb, sizeof(struct fwp_msg_contracthdr));
+
+ contdata = fwp_contract_table_find(&participant->contract_table, id);
+ contdata->status = FWP_CONT_NOTNEGOTIATED;
+ /* release vres */
+ fwp_vres_destroy(contdata->vresd);
+ /* delete contract from contract table */
+ fwp_contract_table_delete(&participant->contract_table, contdata);
+ fwp_contract_destroy(contdata);
+
+ FWP_DEBUG("Contract id=%d to canceled\n", id);
+
+ return 0;
+}
+