コード例 #1
0
ファイル: protocol_client_test.c プロジェクト: m-h-w/samba
static void test_ctdb_req_header(void)
{
	TALLOC_CTX *mem_ctx;
	uint8_t *pkt;
	size_t pkt_len;
	struct ctdb_req_header *h, h2;
	int ret;

	printf("ctdb_req_header\n");
	fflush(stdout);

	mem_ctx = talloc_new(NULL);
	assert(mem_ctx != NULL);

	ret = allocate_pkt(mem_ctx, sizeof(struct ctdb_req_header),
			   &pkt, &pkt_len);
	assert(ret == 0);

	h = (struct ctdb_req_header *)pkt;
	ctdb_req_header_fill(h, GENERATION, OPERATION, DESTNODE, SRCNODE,
			     REQID);

	ret = ctdb_req_header_pull(pkt, pkt_len, &h2);
	assert(ret == 0);

	verify_ctdb_req_header(h, &h2);

	talloc_free(mem_ctx);
}
コード例 #2
0
ファイル: protocol_control.c プロジェクト: Distrotech/samba
int ctdb_reply_control_push(struct ctdb_req_header *h,
			    struct ctdb_reply_control *reply,
			    TALLOC_CTX *mem_ctx,
			    uint8_t **pkt, size_t *pkt_len)
{
	struct ctdb_reply_control_wire *wire;
	uint8_t *buf;
	size_t length, buflen, datalen, errlen;
	int ret;

	if (reply->status == 0) {
		datalen = ctdb_reply_control_data_len(&reply->rdata);
	} else {
		datalen = 0;
	}

	if (reply->errmsg == NULL) {
		errlen = 0;
	} else {
		errlen = strlen(reply->errmsg) + 1;
	}

	length = offsetof(struct ctdb_reply_control_wire, data) +
		 datalen + errlen;

	ret = allocate_pkt(mem_ctx, length, &buf, &buflen);
	if (ret != 0) {
		return ret;
	}

	wire = (struct ctdb_reply_control_wire *)buf;

	h->length = buflen;
	memcpy(&wire->hdr, h, sizeof(struct ctdb_req_header));

	wire->status = reply->status;

	wire->datalen = datalen;
	if (reply->status == 0) {
		ctdb_reply_control_data_push(&reply->rdata, wire->data);
	}

	wire->errorlen = errlen;
	if (errlen > 0) {
		memcpy(wire->data + datalen, reply->errmsg, wire->errorlen);
	}

	*pkt = buf;
	*pkt_len = buflen;
	return 0;
}
コード例 #3
0
ファイル: protocol_control.c プロジェクト: Distrotech/samba
int ctdb_req_control_push(struct ctdb_req_header *h,
			  struct ctdb_req_control *request,
			  TALLOC_CTX *mem_ctx,
			  uint8_t **pkt, size_t *pkt_len)
{
	struct ctdb_req_control_wire *wire;
	uint8_t *buf;
	size_t length, buflen, datalen;
	int ret;

	datalen = ctdb_req_control_data_len(&request->rdata);
	length = offsetof(struct ctdb_req_control_wire, data) + datalen;

	ret = allocate_pkt(mem_ctx, length, &buf, &buflen);
	if (ret != 0) {
		return ret;
	}

	wire = (struct ctdb_req_control_wire *)buf;

	h->length = buflen;
	memcpy(&wire->hdr, h, sizeof(struct ctdb_req_header));

	wire->opcode = request->opcode;
	wire->pad = request->pad;
	wire->srvid = request->srvid;
	wire->client_id = request->client_id;
	wire->flags = request->flags;

	wire->datalen = datalen;
	ctdb_req_control_data_push(&request->rdata, wire->data);

	*pkt = buf;
	*pkt_len = buflen;
	return 0;
}