本文整理汇总了C++中CBLogError函数的典型用法代码示例。如果您正苦于以下问题:C++ CBLogError函数的具体用法?C++ CBLogError怎么用?C++ CBLogError使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CBLogError函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CBNetworkAddressDeserialise
uint8_t CBNetworkAddressDeserialise(CBNetworkAddress * self, bool timestamp){
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (! bytes) {
CBLogError("Attempting to deserialise a CBNetworkAddress with no bytes.");
return 0;
}
if (bytes->length < 26 + timestamp * 4) {
CBLogError("Attempting to deserialise a CBNetworkAddress with less bytes than required.");
return 0;
}
uint8_t start;
uint64_t twoHoursAgo = time(NULL) - 3600;
if (timestamp) {
// Make sure we do not set self->lastSeen later than one hour ago.
self->lastSeen = CBByteArrayReadInt32(bytes, 0);
if (self->lastSeen > twoHoursAgo)
self->lastSeen = twoHoursAgo;
start = 4;
}else{
self->lastSeen = twoHoursAgo;
start = 0;
}
self->services = (CBVersionServices) CBByteArrayReadInt64(bytes, start);
self->ip = CBNewByteArraySubReference(bytes, start + 8, 16);
// Determine IP type
self->type = CBGetIPType(CBByteArrayGetData(self->ip));
self->port = CBByteArrayReadPort(bytes, start + 24);
return start + 26;
}
示例2: CBBlockChainStorageLoadOrphan
bool CBBlockChainStorageLoadOrphan(void * validator, uint8_t orphanNum){
CBFullValidator * validatorObj = validator;
CBDatabase * database = (CBDatabase *)validatorObj->storage;
CB_ORPHAN_KEY[2] = orphanNum;
uint32_t len = CBDatabaseGetLength(database, CB_ORPHAN_KEY);
CBByteArray * orphanData = CBNewByteArrayOfSize(len);
if (NOT orphanData) {
CBLogError("There was an error when initialising a byte array for an orphan.");
return false;
}
if (NOT CBDatabaseReadValue(database, CB_ORPHAN_KEY, CBByteArrayGetData(orphanData), len, 0)) {
CBLogError("There was an error when reading the data for an orphan.");
CBReleaseObject(orphanData);
return false;
}
validatorObj->orphans[orphanNum] = CBNewBlockFromData(orphanData);
CBBlockDeserialise(validatorObj->orphans[orphanNum], true);
if (NOT validatorObj->orphans[orphanNum]) {
CBLogError("There was an error when creating a block object for an orphan.");
CBReleaseObject(orphanData);
return false;
}
CBReleaseObject(orphanData);
return true;
}
示例3: CBBlockChainStorageLoadBlock
void * CBBlockChainStorageLoadBlock(void * validator, uint32_t blockID, uint32_t branch){
CBFullValidator * validatorObj = validator;
CBDatabase * database = (CBDatabase *)validatorObj->storage;
CB_BLOCK_KEY[2] = branch;
CBInt32ToArray(CB_BLOCK_KEY, 3, blockID);
uint32_t blockDataLen = CBDatabaseGetLength(database, CB_BLOCK_KEY);
if (NOT blockDataLen)
return NULL;
blockDataLen -= CB_BLOCK_START;
// Get block data
CBByteArray * data = CBNewByteArrayOfSize(blockDataLen);
if (NOT data) {
CBLogError("Could not initialise a byte array for loading a block.");
return NULL;
}
if (NOT CBDatabaseReadValue(database, CB_BLOCK_KEY, CBByteArrayGetData(data), blockDataLen, CB_BLOCK_START)){
CBLogError("Could not read a block from the database.");
CBReleaseObject(data);
return NULL;
}
// Make and return the block
CBBlock * block = CBNewBlockFromData(data);
CBReleaseObject(data);
if (NOT block) {
CBLogError("Could not create a block object when loading a block.");
return NULL;
}
return block;
}
示例4: CBBlockChainStorageLoadOutputs
bool CBBlockChainStorageLoadOutputs(void * validator, uint8_t * txHash, uint8_t ** data, uint32_t * dataAllocSize, uint32_t * position){
CBFullValidator * validatorObj = validator;
CBDatabase * database = (CBDatabase *)validatorObj->storage;
memcpy(CB_TRANSACTION_INDEX_KEY + 2, txHash, 32);
if (NOT CBDatabaseReadValue(database, CB_TRANSACTION_INDEX_KEY, CB_DATA_ARRAY, 14, 0)) {
CBLogError("Could not read a transaction reference from the transaction index.");
return false;
}
// Set position of outputs
*position = CBArrayToInt32(CB_DATA_ARRAY, CB_TRANSACTION_REF_POSITION_OUPTUTS);
// Get transaction to find position for output in the block
// Reallocate transaction data memory if needed.
if (CBArrayToInt32(CB_DATA_ARRAY, CB_TRANSACTION_REF_LENGTH_OUTPUTS) > *dataAllocSize) {
*dataAllocSize = CBArrayToInt32(CB_DATA_ARRAY, CB_TRANSACTION_REF_LENGTH_OUTPUTS);
*data = realloc(*data, *dataAllocSize);
if (NOT *data) {
CBLogError("Could not allocate memory for reading a transaction.");
return false;
}
}
// Read transaction from the block
CB_BLOCK_KEY[2] = CB_DATA_ARRAY[CB_TRANSACTION_REF_BRANCH];
memcpy(CB_BLOCK_KEY + 3, CB_DATA_ARRAY + CB_TRANSACTION_REF_BLOCK_INDEX, 4);
if (NOT CBDatabaseReadValue(database, CB_BLOCK_KEY, *data, CBArrayToInt32(CB_DATA_ARRAY, CB_TRANSACTION_REF_LENGTH_OUTPUTS), CB_BLOCK_START + *position)) {
CBLogError("Could not read a transaction from the block-chain database.");
return false;
}
return true;
}
示例5: CBDecodeBase58Checked
bool CBDecodeBase58Checked(CBBigInt * bi, char * str){
if(NOT CBDecodeBase58(bi, str)) {
CBLogError("Memory failure in CBDecodeBase58.");
return false;
}
if (bi->length < 4){
CBLogError("The string passed into CBDecodeBase58Checked decoded into data that was too short.");
return false;
}
// Reverse bytes for checksum generation
uint8_t * reversed = malloc(bi->length - 4);
if (NOT reversed) {
CBLogError("Cannot allocate %i bytes of memory in CBDecodeBase58Checked", bi->length - 4);
return false;
}
for (uint8_t x = 4; x < bi->length; x++)
reversed[bi->length - 1 - x] = bi->data[x];
// The checksum uses SHA-256, twice, for some reason unknown to man.
uint8_t checksum[32];
uint8_t checksum2[32];
CBSha256(reversed, bi->length - 4, checksum);
free(reversed);
CBSha256(checksum, 32, checksum2);
bool ok = true;
for (uint8_t x = 0; x < 4; x++)
if (checksum2[x] != bi->data[3-x])
ok = false;
if (NOT ok){
CBLogError("The data passed to CBDecodeBase58Checked is invalid. Checksum does not match.");
return false;
}
return true;
}
示例6: CBTransactionOutputSerialise
uint32_t CBTransactionOutputSerialise(CBTransactionOutput * self){
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (NOT bytes) {
CBLogError("Attempting to serialise a CBTransactionInput with no bytes.");
return 0;
}
if (NOT self->scriptObject){
CBLogError("Attempting to serialise a CBTransactionOutput without scriptObject.");
return 0;
}
CBVarInt scriptLen = CBVarIntFromUInt64(CBGetByteArray(self->scriptObject)->length);
uint32_t reqLen = 8 + scriptLen.size + CBGetByteArray(self->scriptObject)->length;
if (bytes->length < reqLen) {
CBLogError("Attempting to serialise a CBTransactionOutput with less bytes than required. %i < %i", bytes->length, reqLen);
return 0;
}
// Serialise data into the CBByteArray and rereference objects to this CBByteArray to save memory.
CBByteArraySetInt64(bytes, 0, self->value);
CBVarIntEncode(bytes, 8, scriptLen);
CBByteArrayCopyByteArray(bytes, 8 + scriptLen.size, CBGetByteArray(self->scriptObject));
CBByteArrayChangeReference(CBGetByteArray(self->scriptObject), bytes, 8 + scriptLen.size);
// Ensure length is correct
bytes->length = reqLen;
// Is serialised.
CBGetMessage(self)->serialised = true;
return reqLen;
}
示例7: CBChainDescriptorDeserialise
uint16_t CBChainDescriptorDeserialise(CBChainDescriptor * self){
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (! bytes) {
CBLogError("Attempting to deserialise a CBChainDescriptor with no bytes.");
return 0;
}
if (bytes->length < 1) {
CBLogError("Attempting to deserialise a CBChainDescriptor with no bytes");
return 0;
}
CBVarInt hashNum = CBVarIntDecode(bytes, 0);
if (hashNum.val > 500) {
CBLogError("Attempting to deserialise a CBChainDescriptor with a var int over 500.");
return 0;
}
if (bytes->length < hashNum.size + hashNum.val * 32) {
CBLogError("Attempting to deserialise a CBChainDescriptor with less bytes than required for the hashes.");
return 0;
}
// Deserialise each hash
self->hashes = malloc(sizeof(*self->hashes) * (size_t)hashNum.val);
self->hashNum = hashNum.val;
uint16_t cursor = hashNum.size;
for (uint16_t x = 0; x < self->hashNum; x++) {
self->hashes[x] = CBNewByteArraySubReference(bytes, cursor, 32);
cursor += 32;
}
return cursor;
}
示例8: CBTransactionInputDeserialise
uint32_t CBTransactionInputDeserialise(CBTransactionInput * self){
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (! bytes) {
CBLogError("Attempting to deserialise a CBTransactionInput with no bytes.");
return 0;
}
if (bytes->length < 41) {
CBLogError("Attempting to deserialise a CBTransactionInput with less than 41 bytes.");
return 0;
}
CBVarInt scriptLen = CBVarIntDecode(bytes, 36);
if (scriptLen.val > 10000) {
CBLogError("Attempting to deserialise a CBTransactionInput with too big a script.");
return 0;
}
uint32_t reqLen = (uint32_t)(40 + scriptLen.size + scriptLen.val);
if (bytes->length < reqLen) {
CBLogError("Attempting to deserialise a CBTransactionInput with less bytes than needed according to the length for the script. %i < %i", bytes->length, reqLen);
return 0;
}
// Deserialise by subreferencing byte arrays and reading integers.
self->prevOut.hash = CBByteArraySubReference(bytes, 0, 32);
self->prevOut.index = CBByteArrayReadInt32(bytes, 32);
self->scriptObject = CBNewScriptFromReference(bytes, 36 + scriptLen.size, (uint32_t) scriptLen.val);
self->sequence = CBByteArrayReadInt32(bytes, (uint32_t) (36 + scriptLen.size + scriptLen.val));
return reqLen;
}
示例9: CBAlertSerialiseSignature
int CBAlertSerialiseSignature(CBAlert * self, int offset) {
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (! bytes) {
CBLogError("Attempting to serialise a CBAlert with no bytes.");
return 0;
}
CBVarInt sigLen = CBVarIntFromUInt64(self->signature->length);
if (bytes->length < offset + sigLen.size + sigLen.val) {
CBLogError("Attempting to serialise a CBAlert with less bytes than required for the signature.");
return 0;
}
CBByteArraySetVarInt(bytes, offset, sigLen);
offset += sigLen.size;
CBByteArrayCopyByteArray(bytes, offset, self->signature);
CBByteArrayChangeReference(self->signature, bytes, offset);
bytes->length = offset + (int)sigLen.val;
CBGetMessage(self)->serialised = true;
return bytes->length;
}
示例10: CBBlockChainStorageSaveTransactionRef
bool CBBlockChainStorageSaveTransactionRef(void * validator, uint8_t * txHash, uint8_t branch, uint32_t blockIndex, uint32_t outputPos, uint32_t outputsLen, bool coinbase, uint32_t numOutputs){
CBFullValidator * validatorObj = validator;
CBDatabase * database = (CBDatabase *)validatorObj->storage;
memcpy(CB_TRANSACTION_INDEX_KEY + 2, txHash, 32);
if (CBDatabaseGetLength(database, CB_TRANSACTION_INDEX_KEY)) {
// We have the transaction already. Thus obtain the data already in the index.
if (NOT CBDatabaseReadValue(database, CB_TRANSACTION_INDEX_KEY, CB_DATA_ARRAY, 22, 0)) {
CBLogError("Could not read a transaction reference from the transaction index.");
return false;
}
// Increase the instance count. We change nothing else as we will use the first instance for all other instances.
CBInt32ToArray(CB_DATA_ARRAY, CB_TRANSACTION_REF_INSTANCE_COUNT, CBArrayToInt32(CB_DATA_ARRAY, CB_TRANSACTION_REF_INSTANCE_COUNT) + 1);
}else{
// This transaction has not yet been seen in the block chain.
CBInt32ToArray(CB_DATA_ARRAY, CB_TRANSACTION_REF_BLOCK_INDEX, blockIndex);
CB_DATA_ARRAY[CB_TRANSACTION_REF_BRANCH] = branch;
CBInt32ToArray(CB_DATA_ARRAY, CB_TRANSACTION_REF_POSITION_OUPTUTS, outputPos);
CBInt32ToArray(CB_DATA_ARRAY, CB_TRANSACTION_REF_LENGTH_OUTPUTS, outputsLen);
CB_DATA_ARRAY[CB_TRANSACTION_REF_IS_COINBASE] = coinbase;
// We start with an instance count of one
CBInt32ToArray(CB_DATA_ARRAY, CB_TRANSACTION_REF_INSTANCE_COUNT, 1);
}
// Always set the number of unspent outputs back to the number of outputs in the transaction
CBInt32ToArray(CB_DATA_ARRAY, CB_TRANSACTION_REF_NUM_UNSPENT_OUTPUTS, numOutputs);
// Write to the transaction index.
if (NOT CBDatabaseWriteValue(database, CB_TRANSACTION_INDEX_KEY, CB_DATA_ARRAY, 22)) {
CBLogError("Could not write transaction reference to transaction index.");
return false;
}
return true;
}
示例11: CBNetworkAddressSerialise
uint8_t CBNetworkAddressSerialise(CBNetworkAddress * self, bool timestamp){
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (! bytes) {
CBLogError("Attempting to serialise a CBNetworkAddress with no bytes.");
return 0;
}
if (bytes->length < 26 + timestamp * 4) {
CBLogError("Attempting to serialise a CBNetworkAddress with less bytes than required.");
return 0;
}
uint8_t cursor;
if (timestamp) {
CBByteArraySetInt32(bytes, 0, (uint32_t)(self->lastSeen - self->penalty));
cursor = 4;
}else cursor = 0;
CBByteArraySetInt64(bytes, cursor, self->services);
cursor += 8;
CBByteArrayCopyByteArray(bytes, cursor, self->ip);
CBByteArrayChangeReference(self->ip, bytes, cursor);
cursor += 16;
CBByteArraySetPort(bytes, cursor, self->port);
bytes->length = cursor + 2;
CBGetMessage(self)->serialised = true;
return cursor + 2;
}
示例12: CBAddressStorageSaveAddress
bool CBAddressStorageSaveAddress(uint64_t iself, void * address){
CBAddressStore * self = (CBAddressStore *)iself;
CBNetworkAddress * addrObj = address;
// Create key
memcpy(CB_ADDRESS_KEY + 1, CBByteArrayGetData(addrObj->ip), 16);
CBInt16ToArray(CB_ADDRESS_KEY, 17, addrObj->port);
// Create data
CBInt64ToArray(CB_DATA_ARRAY, 0, addrObj->lastSeen);
CBInt64ToArray(CB_DATA_ARRAY, 8, (uint64_t) addrObj->services);
CBInt32ToArray(CB_DATA_ARRAY, 16, addrObj->penalty);
// Write data
if (NOT CBDatabaseWriteValue(CBGetDatabase(self), CB_ADDRESS_KEY, CB_DATA_ARRAY, 20)) {
CBLogError("Could not write an address to storage.");
return false;
}
// Increase the number of addresses
CBInt32ToArray(CB_DATA_ARRAY, 0, --self->numAddresses);
if (NOT CBDatabaseWriteValue(CBGetDatabase(self), CB_ADDR_NUM_KEY, CB_DATA_ARRAY, 4)) {
CBLogError("Could not write the new number of addresses to storage.");
return false;
}
// Commit changes
if (NOT CBDatabaseCommit(CBGetDatabase(self))) {
CBLogError("Could not commit adding a new network address to storage.");
return false;
}
return true;
}
示例13: CBBlockChainStorageDeleteTransactionRef
bool CBBlockChainStorageDeleteTransactionRef(void * validator, uint8_t * txHash){
CBFullValidator * validatorObj = validator;
CBDatabase * database = (CBDatabase *)validatorObj->storage;
// Place transaction hash into the key
memcpy(CB_TRANSACTION_INDEX_KEY + 2, txHash, 32);
// Read the instance count
if (NOT CBDatabaseReadValue(database, CB_TRANSACTION_INDEX_KEY, CB_DATA_ARRAY, 22, 0)) {
CBLogError("Could not read a transaction reference from storage.");
return false;
}
uint32_t txInstanceNum = CB_DATA_ARRAY[CB_TRANSACTION_REF_INSTANCE_COUNT] - 1;
if (txInstanceNum) {
// There are still more instances of this transaction. Do not remove the transaction, only make the unspent output number equal to zero and decrement the instance count.
CB_DATA_ARRAY[CB_TRANSACTION_REF_NUM_UNSPENT_OUTPUTS] = 0;
CB_DATA_ARRAY[CB_TRANSACTION_REF_INSTANCE_COUNT] = txInstanceNum;
// Write to storage.
if (NOT CBDatabaseWriteValue(database, CB_TRANSACTION_INDEX_KEY, CB_DATA_ARRAY, 22)) {
CBLogError("Could not update a transaction reference for deleting an instance.");
return false;
}
}else{
// This was the last instance.
// Remove from storage
if (NOT CBDatabaseRemoveValue(database, CB_TRANSACTION_INDEX_KEY)) {
CBLogError("Could not remove a transaction reference from storage.");
return false;
}
}
return true;
}
示例14: CBInitNode
bool CBInitNode(CBNode * self, CBDepObject database, CBNodeFlags flags, CBNodeCallbacks nodeCallbacks, CBNetworkCommunicatorCallbacks commCallbacks, CBOnMessageReceivedAction (*onMessageReceived)(CBNode *, CBPeer *, CBMessage *)){
self->flags = flags;
self->database = database;
self->callbacks = nodeCallbacks;
self->onMessageReceived = onMessageReceived;
// Initialise network communicator
CBNetworkCommunicator * comm = CBGetNetworkCommunicator(self);
commCallbacks.onMessageReceived = CBNodeOnMessageReceived;
CBInitNetworkCommunicator(comm, CB_SERVICE_FULL_BLOCKS, commCallbacks);
// Set network communicator fields.
comm->flags = CB_NETWORK_COMMUNICATOR_AUTO_DISCOVERY | CB_NETWORK_COMMUNICATOR_AUTO_HANDSHAKE | CB_NETWORK_COMMUNICATOR_AUTO_PING;
if (flags & CB_NODE_BOOTSTRAP)
comm->flags |= CB_NETWORK_COMMUNICATOR_BOOTSTRAP;
comm->version = CB_PONG_VERSION;
comm->networkID = CB_PRODUCTION_NETWORK_BYTES; // ??? Add testnet support
CBNetworkCommunicatorSetAlternativeMessages(comm, NULL, NULL);
// Create address manager
comm->addresses = CBNewNetworkAddressManager(CBNodeOnBadTime);
comm->addresses->maxAddressesInBucket = 1000;
comm->addresses->callbackHandler = self;
// Initialise thread data
self->shutDownThread = false;
self->messageQueue = NULL;
CBNewMutex(&self->blockAndTxMutex);
CBNewMutex(&self->messageProcessMutex);
CBNewCondition(&self->messageProcessWaitCond);
CBNewThread(&self->messageProcessThread, CBNodeProcessMessages, self);
// Initialise the storage objects
if (CBNewBlockChainStorage(&self->blockChainStorage, database)) {
if (CBNewAccounterStorage(&self->accounterStorage, database)){
if (CBNewNodeStorage(&self->nodeStorage, database)){
// Setup address storage
if (CBNewAddressStorage(&comm->addrStorage, database)) {
if (CBAddressStorageLoadAddresses(comm->addrStorage, comm->addresses)){
comm->useAddrStorage = true;
return true;
}
}else
CBLogError("Could not create the address storage object for a node");
CBFreeNodeStorage(self->nodeStorage);
}else
CBLogError("Could not create the node storage object for a node");
CBFreeAccounterStorage(self->accounterStorage);
}else
CBLogError("Could not create the accounter storage object for a node");
CBFreeBlockChainStorage(self->blockChainStorage);
}else
CBLogError("Could not create the block storage object for a node");
CBDestroyNetworkCommunicator(self);
return false;
}
示例15: CBInventoryDeserialise
int CBInventoryDeserialise(CBInventory * self) {
CBByteArray * bytes = CBGetMessage(self)->bytes;
if (! bytes) {
CBLogError("Attempting to deserialise a CBInventory with no bytes.");
return CB_DESERIALISE_ERROR;
}
if (bytes->length < 37) {
CBLogError("Attempting to deserialise a CBInventory with less bytes than required for one item.");
return CB_DESERIALISE_ERROR;
}
CBVarInt itemNum = CBByteArrayReadVarInt(bytes, 0);
if (itemNum.val > 50000) {
CBLogError("Attempting to deserialise a CBInventory with a var int over 50000.");
return CB_DESERIALISE_ERROR;
}
self->itemNum = 0;
self->itemFront = NULL;
// Run through the items and deserialise each one.
int cursor = itemNum.size;
for (int x = 0; x < itemNum.val; x++) {
// Make new CBInventoryItem from the rest of the data.
CBByteArray * data = CBByteArraySubReference(bytes, cursor, bytes->length-cursor);
CBInventoryItem * item = CBNewInventoryItemFromData(data);
// Deserialise
int len = CBInventoryItemDeserialise(item);
if (len == CB_DESERIALISE_ERROR){
CBLogError("CBInventory cannot be deserialised because of an error with the CBInventoryItem number %u.", x);
CBReleaseObject(data);
return CB_DESERIALISE_ERROR;
}
// Take item
CBInventoryTakeInventoryItem(self, item);
// Adjust length
data->length = len;
CBReleaseObject(data);
cursor += len;
}
return cursor;
}