static void dnet_send_idc_fill(struct dnet_net_state *st, void *buf, int size, struct dnet_id *id, uint64_t trans, unsigned int command, int reply, int direct, int more) { struct dnet_node *n = st->n; struct dnet_cmd *cmd; struct dnet_raw_id *sid; struct dnet_addr_attr *addr; int i; memset(buf, 0, sizeof(*cmd) + sizeof(*addr)); cmd = buf; addr = (struct dnet_addr_attr *)(cmd + 1); sid = (struct dnet_raw_id *)(addr + 1); memcpy(&cmd->id, id, sizeof(struct dnet_id)); cmd->size = size - sizeof(struct dnet_cmd); cmd->trans = trans; cmd->flags = DNET_FLAGS_NOLOCK; if (more) cmd->flags |= DNET_FLAGS_MORE; if (direct) cmd->flags |= DNET_FLAGS_DIRECT; if (reply) cmd->trans |= DNET_TRANS_REPLY; cmd->cmd = command; addr->sock_type = n->sock_type; addr->family = n->family; addr->proto = n->proto; memcpy(&addr->addr, &st->addr, sizeof(struct dnet_addr)); for (i=0; i<st->idc->id_num; ++i) { memcpy(&sid[i], &st->idc->ids[i].raw, sizeof(struct dnet_raw_id)); dnet_convert_raw_id(&sid[i]); } dnet_convert_addr_cmd(buf); }
static void dnet_send_idc_fill(struct dnet_net_state *st, struct dnet_addr_cmd *acmd, int total_size, struct dnet_id *id, uint64_t trans, unsigned int command, int reply, int direct, int more) { struct dnet_node *n = st->n; struct dnet_cmd *cmd = &acmd->cmd; struct dnet_raw_id *sid; int i; acmd->cnt.addr_num = n->addr_num; if (!st->addrs) memcpy(acmd->cnt.addrs, n->addrs, n->addr_num * sizeof(struct dnet_addr)); else memcpy(acmd->cnt.addrs, st->addrs, n->addr_num * sizeof(struct dnet_addr)); sid = (struct dnet_raw_id *)(acmd->cnt.addrs + n->addr_num); memcpy(&cmd->id, id, sizeof(struct dnet_id)); cmd->size = total_size - sizeof(struct dnet_cmd); cmd->trans = trans; cmd->flags = DNET_FLAGS_NOLOCK; if (more) cmd->flags |= DNET_FLAGS_MORE; if (direct) cmd->flags |= DNET_FLAGS_DIRECT; if (reply) cmd->trans |= DNET_TRANS_REPLY; cmd->cmd = command; for (i = 0; i < st->idc->id_num; ++i) { memcpy(&sid[i], &st->idc->ids[i].raw, sizeof(struct dnet_raw_id)); dnet_convert_raw_id(&sid[i]); } dnet_convert_addr_cmd(acmd); }