Пример #1
0
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);
}
Пример #2
0
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);
}