diff options
Diffstat (limited to 'src/lib/cdap.c')
-rw-r--r-- | src/lib/cdap.c | 193 |
1 files changed, 68 insertions, 125 deletions
diff --git a/src/lib/cdap.c b/src/lib/cdap.c index 4a6408f6..d06a7d39 100644 --- a/src/lib/cdap.c +++ b/src/lib/cdap.c @@ -83,49 +83,58 @@ static void * handle_cdap_msg(void * o) switch (msg->opcode) { case OPCODE__READ: if (msg->name != NULL) - instance->ops->cdap_read(instance, - msg->invoke_id, - msg->name); + instance->ops->cdap_request(instance, + msg->invoke_id, + CDAP_READ, + msg->name, + NULL, 0, 0); break; case OPCODE__WRITE: if (msg->name != NULL && msg->has_value) - instance->ops->cdap_write(instance, - msg->invoke_id, - msg->name, - msg->value.data, - msg->value.len, - msg->flags); + instance->ops->cdap_request(instance, + msg->invoke_id, + CDAP_WRITE, + msg->name, + msg->value.data, + msg->value.len, + msg->flags); break; case OPCODE__CREATE: if (msg->name != NULL && msg->has_value) - instance->ops->cdap_create(instance, - msg->invoke_id, - msg->name, - msg->value.data, - msg->value.len); + instance->ops->cdap_request(instance, + msg->invoke_id, + CDAP_CREATE, + msg->name, + msg->value.data, + msg->value.len, 0); break; case OPCODE__DELETE: if (msg->name != NULL && msg->has_value) - instance->ops->cdap_delete(instance, - msg->invoke_id, - msg->name, - msg->value.data, - msg->value.len); + instance->ops->cdap_request(instance, + msg->invoke_id, + CDAP_DELETE, + msg->name, + msg->value.data, + msg->value.len, 0); break; case OPCODE__START: if (msg->name != NULL) - instance->ops->cdap_start(instance, - msg->invoke_id, - msg->name); + instance->ops->cdap_request(instance, + msg->invoke_id, + CDAP_START, + msg->name, + NULL, 0, 0); break; case OPCODE__STOP: if (msg->name != NULL) - instance->ops->cdap_stop(instance, - msg->invoke_id, - msg->name); + instance->ops->cdap_request(instance, + msg->invoke_id, + CDAP_STOP, + msg->name, + NULL, 0, 0); break; case OPCODE__REPLY: instance->ops->cdap_reply(instance, @@ -191,12 +200,7 @@ struct cdap * cdap_create(struct cdap_ops * ops, if (ops == NULL || fd < 0 || ops->cdap_reply == NULL || - ops->cdap_read == NULL || - ops->cdap_write == NULL || - ops->cdap_create == NULL || - ops->cdap_delete == NULL || - ops->cdap_start == NULL || - ops->cdap_stop == NULL) + ops->cdap_request == NULL) return NULL; flags = flow_cntl(fd, FLOW_F_GETFL, 0); @@ -274,9 +278,12 @@ static int write_msg(struct cdap * instance, return ret; } -static int send_read_or_start_or_stop(struct cdap * instance, - char * name, - opcode_t code) +int cdap_send_request(struct cdap * instance, + enum cdap_opcode code, + char * name, + uint8_t * data, + size_t len, + uint32_t flags) { int id; cdap_t msg = CDAP__INIT; @@ -288,75 +295,39 @@ static int send_read_or_start_or_stop(struct cdap * instance, if (!bmp_is_id_valid(instance->ids, id)) return -1; - msg.opcode = code; - msg.invoke_id = id; - msg.name = name; - - if (write_msg(instance, &msg)) - return -1; - - return id; -} - -static int send_create_or_delete(struct cdap * instance, - char * name, - uint8_t * data, - size_t len, - opcode_t code) -{ - int id; - cdap_t msg = CDAP__INIT; - - if (instance == NULL || name == NULL || data == NULL) - return -1; - - id = next_invoke_id(instance); - if (!bmp_is_id_valid(instance->ids, id)) - return -1; - - msg.opcode = code; - msg.name = name; - msg.invoke_id = id; - msg.has_value = true; - msg.value.data = data; - msg.value.len = len; - - if (write_msg(instance, &msg)) - return -1; - - return id; -} - -int cdap_send_read(struct cdap * instance, - char * name) -{ - return send_read_or_start_or_stop(instance, name, OPCODE__READ); -} - -int cdap_send_write(struct cdap * instance, - char * name, - uint8_t * data, - size_t len, - uint32_t flags) -{ - int id; - cdap_t msg = CDAP__INIT; - - if (instance == NULL || name == NULL || data == NULL) - return -1; - - id = next_invoke_id(instance); - if (!bmp_is_id_valid(instance->ids, id)) + switch (code) { + case CDAP_READ: + msg.opcode = OPCODE__READ; + break; + case CDAP_WRITE: + msg.opcode = OPCODE__WRITE; + break; + case CDAP_CREATE: + msg.opcode = OPCODE__CREATE; + break; + case CDAP_DELETE: + msg.opcode = OPCODE__DELETE; + break; + case CDAP_START: + msg.opcode = OPCODE__START; + break; + case CDAP_STOP: + msg.opcode = OPCODE__STOP; + break; + default: + release_invoke_id(instance, id); return -1; + } - msg.opcode = OPCODE__WRITE; msg.name = name; msg.has_flags = true; msg.flags = flags; msg.invoke_id = id; - msg.has_value = true; - msg.value.data = data; - msg.value.len = len; + if (data != NULL) { + msg.has_value = true; + msg.value.data = data; + msg.value.len = len; + } if (write_msg(instance, &msg)) return -1; @@ -364,34 +335,6 @@ int cdap_send_write(struct cdap * instance, return id; } -int cdap_send_create(struct cdap * instance, - char * name, - uint8_t * data, - size_t len) -{ - return send_create_or_delete(instance, name, data, len, OPCODE__CREATE); -} - -int cdap_send_delete(struct cdap * instance, - char * name, - uint8_t * data, - size_t len) -{ - return send_create_or_delete(instance, name, data, len, OPCODE__DELETE); -} - -int cdap_send_start(struct cdap * instance, - char * name) -{ - return send_read_or_start_or_stop(instance, name, OPCODE__START); -} - -int cdap_send_stop(struct cdap * instance, - char * name) -{ - return send_read_or_start_or_stop(instance, name, OPCODE__STOP); -} - int cdap_send_reply(struct cdap * instance, int invoke_id, int result, |