return -1;
}
+void get_resources(fres_contract_broker obj, fres_resource_seq** resources, CORBA_Environment *ev)
+{
+ struct fcb *fcb = o2fcb(obj);
+ fres_resource_seq *seq;
+ struct resource *res;
+ int n;
+
+ seq = malloc(sizeof(*seq));
+ if (!seq) {
+ ev->major = FORB_EX_NO_MEMORY;
+ return;
+ }
+ memset(seq, 0, sizeof(*seq));
+
+ n=0;
+ gavl_cust_for_each(fcb_resource, fcb, res) {
+ n++;
+ }
+
+ seq->_buffer = CORBA_sequence_fres_resource_allocbuf(n);
+ seq->_maximum = n;
+ seq->_length = n;
+
+ n = 0;
+ gavl_cust_for_each(fcb_resource, fcb, res) {
+ seq->_buffer[n].restype = res->key.type;
+ seq->_buffer[n].resid = res->key.id;
+ seq->_buffer[n].desc.manager = res->mng;
+ n++;
+ }
+
+ *resources = seq;
+}
+
#ifdef CONFIG_FCB_INET
static int register_inet_port(forb_orb orb)
{
.cancel_contract = cancel_contract,
.register_resource = register_resource,
.register_allocator = register_allocator,
+ .get_resources = get_resources,
};
int main(int argc, char *argv[])
/** Manager */
resource_manager manager;
};
+
+ struct resource {
+ frsh_resource_type_t restype;
+ frsh_resource_id_t resid;
+ resource_desc desc;
+ };
+
+ typedef sequence<resource> resource_seq;
+
interface contract_broker {
const string reg_name = "fcb";
/**
* canceled, non-zero code on error.
*/
long cancel_contract(in contract::id_t id);
+
+ /**
+ * Returns sequence of registered resources.
+ *
+ * @param[out] resources
+ */
+ void get_resources(out resource_seq resources);
};
};