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); }
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; }
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; }