2 #include "contract_internal.h"
6 #include <frsh_error.h>
14 c = malloc(sizeof(*c));
16 memset(c, 0, sizeof(*c));
22 contract_destroy(struct contract *contract)
24 /* TODO handle all other deallocations */
29 contract_add_params(struct contract *contract,
30 enum contract_part_type type,
33 if (!TYPE_VALID(type) ||
34 contract->parts[type].state != CONTRACT_PART_EMPTY)
35 return FRSH_ERR_BAD_ARGUMENT;
37 contract->parts[type].u.data = part_data;
42 contract_del_params(struct contract *contract,
43 enum contract_part_type type)
45 if (TYPE_VALID(type)) {
46 switch (contract->parts[type].state) {
47 case CONTRACT_PART_EMPTY:
50 case CONTRACT_PART_DATA:
51 free(contract->parts[type].u.data);
52 contract->parts[type].state = CONTRACT_PART_EMPTY;
54 case CONTRACT_PART_STREAM:
55 /* TODO: stream_free(contract->parts[type].u.seq); */
56 contract->parts[type].state = CONTRACT_PART_EMPTY;
64 contract_get_params(struct contract *contract,
65 enum contract_part_type type)
69 contract->parts[type].state == CONTRACT_PART_DATA) {
70 return contract->parts[type].u.data;
77 contract_serialize(CDR_Codec *codec, const struct contract *contract)
86 l = contract->resource_id;
87 CORBA_long_serialize(codec, &l);
88 l = contract->resource_type;
89 CORBA_long_serialize(codec, &l);
93 for (i=0; i<_FRSH_CONTRACT_NUM_PARAMS; i++) {
94 if (contract->parts[i].state != CONTRACT_PART_EMPTY)
98 if (!CORBA_long_serialize(codec, &count))
101 for (i=0; i<_FRSH_CONTRACT_NUM_PARAMS; i++) {
102 if (contract->parts[i].state != CONTRACT_PART_EMPTY) {
104 CORBA_short_serialize(codec, &s);