struct ctdb_disable_message *disable;
/* SRVID_DISABLE_IP_CHECK */
uint32_t timeout;
+ /* Other */
+ TDB_DATA data;
};
struct ctdb_req_message {
case CTDB_SRVID_DISABLE_IP_CHECK:
len = ctdb_uint32_len(mdata->timeout);
break;
+
+ default:
+ len = ctdb_tdb_data_len(mdata->data);
+ break;
}
return len;
case CTDB_SRVID_DISABLE_IP_CHECK:
ctdb_uint32_push(mdata->timeout, buf);
break;
+
+ default:
+ ctdb_tdb_data_push(mdata->data, buf);
+ break;
}
}
case CTDB_SRVID_DISABLE_IP_CHECK:
ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &mdata->timeout);
break;
+
+ default:
+ ret = ctdb_tdb_data_pull(buf, buflen, mem_ctx, &mdata->data);
+ break;
}
return ret;
int ctdb_srvid_message_pull(uint8_t *buf, size_t buflen, TALLOC_CTX *mem_ctx,
struct ctdb_srvid_message **out);
+size_t ctdb_tdb_data_len(TDB_DATA data);
+void ctdb_tdb_data_push(TDB_DATA data, uint8_t *buf);
+int ctdb_tdb_data_pull(uint8_t *buf, size_t buflen, TALLOC_CTX *mem_ctx,
+ TDB_DATA *out);
+
size_t ctdb_disable_message_len(struct ctdb_disable_message *disable);
void ctdb_disable_message_push(struct ctdb_disable_message *disable,
uint8_t *buf);
return 0;
}
+size_t ctdb_tdb_data_len(TDB_DATA data)
+{
+ return data.dsize;
+}
+
+void ctdb_tdb_data_push(TDB_DATA data, uint8_t *buf)
+{
+ memcpy(buf, data.dptr, data.dsize);
+}
+
+int ctdb_tdb_data_pull(uint8_t *buf, size_t buflen, TALLOC_CTX *mem_ctx,
+ TDB_DATA *out)
+{
+ TDB_DATA data;
+
+ data.dsize = buflen;
+ if (data.dsize > 0) {
+ data.dptr = talloc_memdup(mem_ctx, buf, buflen);
+ if (data.dptr == NULL) {
+ return ENOMEM;
+ }
+ } else {
+ data.dptr = NULL;
+ }
+
+ *out = data;
+ return 0;
+}
+
size_t ctdb_server_id_len(struct ctdb_server_id *sid)
{
return sizeof(struct ctdb_server_id);