本文整理匯總了C++中Bits_memcpyConst函數的典型用法代碼示例。如果您正苦於以下問題:C++ Bits_memcpyConst函數的具體用法?C++ Bits_memcpyConst怎麽用?C++ Bits_memcpyConst使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Bits_memcpyConst函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: SearchRunner_showActiveSearch
struct SearchRunner_SearchData* SearchRunner_showActiveSearch(struct SearchRunner* searchRunner,
int number,
struct Allocator* alloc)
{
struct SearchRunner_pvt* runner = Identity_check((struct SearchRunner_pvt*)searchRunner);
struct SearchRunner_Search* search = runner->firstSearch;
while (search && number > 0) {
search = search->nextSearch;
number--;
}
struct SearchRunner_SearchData* out =
Allocator_calloc(alloc, sizeof(struct SearchRunner_SearchData), 1);
if (search) {
Bits_memcpyConst(out->target, &search->target.ip6.bytes, 16);
Bits_memcpyConst(&out->lastNodeAsked, &search->lastNodeAsked, sizeof(struct Address));
out->totalRequests = search->totalRequests;
}
out->activeSearches = runner->searches;
return out;
}
示例2: receiveMessageTUN
static uint8_t receiveMessageTUN(struct Message* msg, struct Interface* iface)
{
receivedMessageTUNCount++;
uint16_t ethertype = TUNMessageType_pop(msg);
if (ethertype != Ethernet_TYPE_IP4) {
printf("Spurious packet with ethertype [%u]\n", Endian_bigEndianToHost16(ethertype));
return 0;
}
struct Headers_IP4Header* header = (struct Headers_IP4Header*) msg->bytes;
Assert_always(msg->length == Headers_IP4Header_SIZE + Headers_UDPHeader_SIZE + 12);
Assert_always(!Bits_memcmp(header->destAddr, testAddrB, 4));
Assert_always(!Bits_memcmp(header->sourceAddr, testAddrA, 4));
Bits_memcpyConst(header->destAddr, testAddrA, 4);
Bits_memcpyConst(header->sourceAddr, testAddrB, 4);
TUNMessageType_push(msg, ethertype);
return iface->sendMessage(msg, iface);
}
示例3: sendMessage
static uint8_t sendMessage(struct Message* message, struct Interface* ethIf)
{
struct ETHInterface* context = Identity_cast((struct ETHInterface*) ethIf);
struct sockaddr_ll addr;
Bits_memcpyConst(&addr, &context->addrBase, sizeof(struct sockaddr_ll));
Message_pop(message, addr.sll_addr, 8);
/* Cut down on the noise
uint8_t buff[sizeof(addr) * 2 + 1] = {0};
Hex_encode(buff, sizeof(buff), (uint8_t*)&addr, sizeof(addr));
Log_debug(context->logger, "Sending ethernet frame to [%s]", buff);
*/
// Check if we will have to pad the message and pad if necessary.
int pad = 0;
for (int length = message->length; length+2 < MIN_PACKET_SIZE; length += 8) {
pad++;
}
if (pad > 0) {
int length = message->length;
Message_shift(message, pad*8);
Bits_memset(message->bytes, 0, pad*8);
Bits_memmove(message->bytes, &message->bytes[pad*8], length);
}
Assert_true(pad < 8);
uint16_t padAndId_be = Endian_hostToBigEndian16((context->id << 3) | pad);
Message_push(message, &padAndId_be, 2);
if (sendto(context->socket,
message->bytes,
message->length,
0,
(struct sockaddr*) &addr,
sizeof(struct sockaddr_ll)) < 0)
{
switch (errno) {
case EMSGSIZE:
return Error_OVERSIZE_MESSAGE;
case ENOBUFS:
case EAGAIN:
return Error_LINK_LIMIT_EXCEEDED;
default:;
Log_info(context->logger, "Got error sending to socket [%s]", strerror(errno));
}
}
return 0;
}
示例4: ip6FromTun
// Called by the TUN device.
static inline uint8_t ip6FromTun(struct Message* message,
struct Interface* interface)
{
struct Ducttape* context = (struct Ducttape*) interface->receiverContext;
struct Headers_IP6Header* header = (struct Headers_IP6Header*) message->bytes;
if (memcmp(header->sourceAddr, context->myAddr.ip6.bytes, 16)) {
Log_warn(context->logger, "dropped message because only one address is allowed to be used "
"and the source address was different.\n");
return Error_INVALID;
}
if (!memcmp(header->destinationAddr, context->myAddr.ip6.bytes, 16)) {
// I'm Gonna Sit Right Down and Write Myself a Letter
interface->sendMessage(message, interface);
return Error_NONE;
}
context->switchHeader = NULL;
struct Node* bestNext = RouterModule_lookup(header->destinationAddr, context->routerModule);
if (bestNext) {
context->forwardTo = &bestNext->address;
if (!memcmp(header->destinationAddr, bestNext->address.ip6.bytes, 16)) {
// Direct send, skip the innermost layer of encryption.
#ifdef Log_DEBUG
uint8_t nhAddr[60];
Address_print(nhAddr, &bestNext->address);
Log_debug1(context->logger, "Forwarding data to %s (last hop)\n", nhAddr);
#endif
return sendToRouter(&bestNext->address, message, context);
}
}
// Grab out the header so it doesn't get clobbered.
struct Headers_IP6Header headerStore;
Bits_memcpyConst(&headerStore, header, Headers_IP6Header_SIZE);
context->ip6Header = &headerStore;
// Shift over the content.
Message_shift(message, -Headers_IP6Header_SIZE);
struct Interface* session =
SessionManager_getSession(headerStore.destinationAddr, NULL, context->sm);
// This comes out at outgoingFromMe()
context->layer = INNER_LAYER;
return session->sendMessage(message, session);
}
示例5: InterfaceController_getPeerStats
int InterfaceController_getPeerStats(struct InterfaceController* ifController,
struct Allocator* alloc,
struct InterfaceController_PeerStats** statsOut)
{
struct InterfaceController_pvt* ic =
Identity_check((struct InterfaceController_pvt*) ifController);
int count = 0;
for (int i = 0; i < ic->icis->length; i++) {
struct InterfaceController_Iface_pvt* ici = ArrayList_OfIfaces_get(ic->icis, i);
count += ici->peerMap.count;
}
struct InterfaceController_PeerStats* stats =
Allocator_calloc(alloc, sizeof(struct InterfaceController_PeerStats), count);
int xcount = 0;
for (int j = 0; j < ic->icis->length; j++) {
struct InterfaceController_Iface_pvt* ici = ArrayList_OfIfaces_get(ic->icis, j);
for (int i = 0; i < (int)ici->peerMap.count; i++) {
struct Peer* peer = Identity_check((struct Peer*) ici->peerMap.values[i]);
struct InterfaceController_PeerStats* s = &stats[xcount];
xcount++;
Bits_memcpyConst(&s->addr, &peer->addr, sizeof(struct Address));
s->bytesOut = peer->bytesOut;
s->bytesIn = peer->bytesIn;
s->timeOfLastMessage = peer->timeOfLastMessage;
s->state = peer->state;
s->isIncomingConnection = peer->isIncomingConnection;
if (peer->caSession->userName) {
s->user = String_clone(peer->caSession->userName, alloc);
}
struct ReplayProtector* rp = &peer->caSession->replayProtector;
s->duplicates = rp->duplicates;
s->lostPackets = rp->lostPackets;
s->receivedOutOfRange = rp->receivedOutOfRange;
struct PeerLink_Kbps kbps;
PeerLink_kbps(peer->peerLink, &kbps);
s->sendKbps = kbps.sendKbps;
s->recvKbps = kbps.recvKbps;
}
}
Assert_true(xcount == count);
*statsOut = stats;
return count;
}
示例6: sendResponse
static int sendResponse(struct Message* msg,
struct Ethernet* eth,
struct Headers_IP6Header* ip6,
struct NDPServer_pvt* ns)
{
Bits_memcpyConst(ip6->destinationAddr, ip6->sourceAddr, 16);
Bits_memcpyConst(ip6->sourceAddr, UNICAST_ADDR, 16);
ip6->hopLimit = 255;
struct NDPHeader_RouterAdvert* adv = (struct NDPHeader_RouterAdvert*) msg->bytes;
adv->checksum = Checksum_icmp6(ip6->sourceAddr, msg->bytes, msg->length);
Message_push(msg, ip6, sizeof(struct Headers_IP6Header), NULL);
// Eth
Message_push(msg, eth, sizeof(struct Ethernet), NULL);
struct Ethernet* ethP = (struct Ethernet*) msg->bytes;
Bits_memcpyConst(ethP->destAddr, eth->srcAddr, 6);
Bits_memcpyConst(ethP->srcAddr, eth->destAddr, 6);
printf("responding\n");
Interface_sendMessage(ns->wrapped, msg);
return 1;
}
示例7: decryptRndNonce
/**
* Decrypt and authenticate.
*
* @param nonce a 24 byte number, may be random, cannot repeat.
* @param msg a message to encipher and authenticate.
* @param secret a shared secret.
* @return 0 if decryption is succeddful, otherwise -1.
*/
static inline Gcc_USE_RET int decryptRndNonce(uint8_t nonce[24],
struct Message* msg,
uint8_t secret[32])
{
if (msg->length < 16) {
return -1;
}
Assert_true(msg->padding >= 16);
uint8_t* startAt = msg->bytes - 16;
uint8_t paddingSpace[16];
Bits_memcpyConst(paddingSpace, startAt, 16);
Bits_memset(startAt, 0, 16);
if (!Defined(NSA_APPROVED)) {
if (crypto_box_curve25519xsalsa20poly1305_open_afternm(
startAt, startAt, msg->length + 16, nonce, secret) != 0)
{
return -1;
}
}
Bits_memcpyConst(startAt, paddingSpace, 16);
Message_shift(msg, -16, NULL);
return 0;
}
示例8: sendMessage
static uint8_t sendMessage(struct Message* message, struct Interface* interface)
{
struct CryptoAuth_Wrapper* wrapper =
Identity_cast((struct CryptoAuth_Wrapper*) interface->senderContext);
// If there has been no incoming traffic for a while, reset the connection to state 0.
// This will prevent "connection in bad state" situations from lasting forever.
uint64_t nowSecs = Time_currentTimeSeconds(wrapper->context->eventBase);
if (nowSecs - wrapper->timeOfLastPacket > wrapper->context->pub.resetAfterInactivitySeconds) {
Log_debug(wrapper->context->logger, "No traffic in [%d] seconds, resetting connection.",
(int) (nowSecs - wrapper->timeOfLastPacket));
wrapper->timeOfLastPacket = nowSecs;
CryptoAuth_reset(interface);
return encryptHandshake(message, wrapper);
}
#ifdef Log_DEBUG
Assert_true(!((uintptr_t)message->bytes % 4) || !"alignment fault");
#endif
// nextNonce 0: sending hello, we are initiating connection.
// nextNonce 1: sending another hello, nothing received yet.
// nextNonce 2: sending key, hello received.
// nextNonce 3: sending key again, no data packet recieved yet.
// nextNonce >3: handshake complete
//
// if it's a blind handshake, every message will be empty and nextNonce will remain
// zero until the first message is received back.
if (wrapper->nextNonce < 5) {
if (wrapper->nextNonce < 4) {
return encryptHandshake(message, wrapper);
} else {
Log_debug(wrapper->context->logger,
"@%p Doing final step to send message. nonce=4\n", (void*) wrapper);
uint8_t secret[32];
getSharedSecret(secret,
wrapper->secret,
wrapper->tempKey,
NULL,
wrapper->context->logger);
Bits_memcpyConst(wrapper->secret, secret, 32);
}
}
return encryptMessage(message, wrapper);
}
示例9: searchStep
/**
* Send a search request to the next node in this search.
* This is called whenever a response comes in or after the global mean response time passes.
*/
static void searchStep(struct SearchRunner_Search* search)
{
struct SearchRunner_pvt* ctx = Identity_check((struct SearchRunner_pvt*)search->runner);
struct Node_Two* node;
struct SearchStore_Node* nextSearchNode;
for (;;) {
nextSearchNode = SearchStore_getNextNode(search->search);
// If the number of requests sent has exceeded the max search requests, let's stop there.
if (search->totalRequests >= MAX_REQUESTS_PER_SEARCH || nextSearchNode == NULL) {
if (search->pub.callback) {
search->pub.callback(&search->pub, 0, NULL, NULL);
}
Allocator_free(search->pub.alloc);
return;
}
node = NodeStore_getBest(&nextSearchNode->address, ctx->nodeStore);
if (!node) { continue; }
if (node == ctx->nodeStore->selfNode) { continue; }
if (Bits_memcmp(node->address.ip6.bytes, nextSearchNode->address.ip6.bytes, 16)) {
continue;
}
break;
}
Assert_true(node != ctx->nodeStore->selfNode);
Bits_memcpyConst(&search->lastNodeAsked, &node->address, sizeof(struct Address));
struct RouterModule_Promise* rp =
RouterModule_newMessage(&node->address, 0, ctx->router, search->pub.alloc);
Dict* message = Dict_new(rp->alloc);
Dict_putString(message, CJDHTConstants_QUERY, CJDHTConstants_QUERY_FN, rp->alloc);
Dict_putString(message, CJDHTConstants_TARGET, search->targetStr, rp->alloc);
rp->userData = search;
rp->callback = searchCallback;
RouterModule_sendMessage(rp, message);
search->totalRequests++;
}
示例10: incomingFromParent
static void incomingFromParent(evutil_socket_t socket, short eventType, void* vcontext)
{
struct ChildContext* context = (struct ChildContext*) vcontext;
errno = 0;
ssize_t amount = read(context->inFd, context->buffer, MAX_API_REQUEST_SIZE + TXID_LEN);
if (amount < 1) {
if (errno == EAGAIN) {
return;
}
if (amount < 0) {
perror("broken pipe");
} else {
fprintf(stderr, "admin connection closed\n");
}
exit(0);
return;
} else if (amount < 4) {
return;
}
Assert_compileTime(TXID_LEN == 4);
uint32_t connNumber;
Bits_memcpyConst(&connNumber, context->buffer, TXID_LEN);
if (connNumber >= MAX_CONNECTIONS) {
fprintf(stderr, "got message for connection #%u, max connections is %d\n",
connNumber, MAX_CONNECTIONS);
return;
}
struct Connection* conn = &context->connections[connNumber];
if (!conn->read) {
fprintf(stderr, "got message for closed #%u", connNumber);
return;
}
amount -= TXID_LEN;
ssize_t sent = send(conn->socket, context->buffer + TXID_LEN, amount, 0);
if (sent != amount) {
// All errors lead to closing the socket.
EVUTIL_CLOSESOCKET(conn->socket);
event_free(conn->read);
conn->read = NULL;
}
}
示例11: getPasswordHash_typeOne
static inline void getPasswordHash_typeOne(uint8_t output[32],
uint16_t derivations,
struct CryptoAuth_Auth* auth)
{
Bits_memcpyConst(output, auth->secret, 32);
if (derivations) {
union {
uint8_t bytes[2];
uint8_t asShort;
} deriv = { .asShort = derivations };
output[0] ^= deriv.bytes[0];
output[1] ^= deriv.bytes[1];
crypto_hash_sha256(output, output, 32);
}
}
示例12: searchStep
/**
* Send a search request to the next node in this search.
* This is called whenever a response comes in or after the global mean response time passes.
*/
static void searchStep(struct SearchRunner_Search* search)
{
struct SearchRunner_pvt* ctx = Identity_check((struct SearchRunner_pvt*)search->runner);
struct SearchStore_Node* nextSearchNode;
for (;;) {
nextSearchNode = SearchStore_getNextNode(search->search);
// If the number of requests sent has exceeded the max search requests, let's stop there.
if (search->totalRequests >= search->maxRequests) {
// fallthrough
} else if (search->numFinds > 0 && search->totalRequests >= search->maxRequestsIfFound) {
// fallthrough
} else if (nextSearchNode == NULL) {
// fallthrough
} else {
break;
}
if (search->pub.callback) {
search->pub.callback(&search->pub, 0, NULL, NULL);
}
Allocator_free(search->pub.alloc);
return;
}
Bits_memcpyConst(&search->lastNodeAsked, &nextSearchNode->address, sizeof(struct Address));
struct RouterModule_Promise* rp =
RouterModule_newMessage(&nextSearchNode->address, 0, ctx->router, search->pub.alloc);
Dict* message = Dict_new(rp->alloc);
if (!Bits_memcmp(nextSearchNode->address.ip6.bytes, search->target.ip6.bytes, 16)) {
Dict_putString(message, CJDHTConstants_QUERY, CJDHTConstants_QUERY_GP, rp->alloc);
} else {
Dict_putString(message, CJDHTConstants_QUERY, CJDHTConstants_QUERY_FN, rp->alloc);
}
Dict_putString(message, CJDHTConstants_TARGET, search->targetStr, rp->alloc);
rp->userData = search;
rp->callback = searchCallback;
RouterModule_sendMessage(rp, message);
search->totalRequests++;
}
示例13: receiveMessage
static uint8_t receiveMessage(struct Message* received, struct Interface* interface)
{
struct CryptoAuth_Wrapper* wrapper = (struct CryptoAuth_Wrapper*) interface->receiverContext;
union Headers_CryptoAuth* header = (union Headers_CryptoAuth*) received->bytes;
if (received->length < (wrapper->authenticatePackets ? 20 : 4)) {
Log_debug(wrapper->context->logger, "Dropped runt");
return Error_UNDERSIZE_MESSAGE;
}
Assert_true(received->padding >= 12 || "need at least 12 bytes of padding in incoming message");
#ifdef Log_DEBUG
Assert_true(!((uintptr_t)received->bytes % 4) || !"alignment fault");
#endif
Message_shift(received, -4);
uint32_t nonce = Endian_bigEndianToHost32(header->nonce);
if (wrapper->nextNonce < 5) {
if (nonce > 3 && nonce != UINT32_MAX && knowHerKey(wrapper)) {
Log_debug(wrapper->context->logger,
"@%p Trying final handshake step, nonce=%u\n", (void*) wrapper, nonce);
uint8_t secret[32];
getSharedSecret(secret,
wrapper->secret,
wrapper->tempKey,
NULL,
wrapper->context->logger);
if (decryptMessage(wrapper, nonce, received, secret)) {
Log_debug(wrapper->context->logger, "Final handshake step succeeded.\n");
wrapper->nextNonce += 3;
Bits_memcpyConst(wrapper->secret, secret, 32);
return Error_NONE;
}
CryptoAuth_reset(&wrapper->externalInterface);
Log_debug(wrapper->context->logger, "Final handshake step failed.\n");
}
} else if (nonce > 2 && decryptMessage(wrapper, nonce, received, wrapper->secret)) {
// If decryptMessage returns false then we will try the packet as a handshake.
return Error_NONE;
} else {
Log_debug(wrapper->context->logger, "Decryption failed, trying message as a handshake.\n");
}
Message_shift(received, 4);
return decryptHandshake(wrapper, nonce, received, header);
}
示例14: compile
static struct sock_fprog* compile(struct Filter* input, int inputLen, struct Allocator* alloc)
{
// compute gotos
int totalOut = 0;
for (int i = inputLen-1; i >= 0; i--) {
struct Filter* a = &input[i];
if (a->label == 0) {
// check for unresolved gotos...
Assert_true(a->jt == 0 && a->jf == 0);
totalOut++;
continue;
}
int diff = 0;
for (int j = i-1; j >= 0; j--) {
struct Filter* b = &input[j];
if (b->label != 0) { continue; }
if (b->jt == a->label) {
b->sf.jt = diff;
b->jt = 0;
}
if (b->jf == a->label) {
b->sf.jf = diff;
b->jf = 0;
}
diff++;
}
}
// copy into output filter array...
struct sock_filter* sf = Allocator_calloc(alloc, sizeof(struct sock_filter), totalOut);
int outI = 0;
for (int i = 0; i < inputLen; i++) {
if (input[i].label == 0) {
Bits_memcpyConst(&sf[outI++], &input[i].sf, sizeof(struct sock_filter));
}
Assert_true(outI <= totalOut);
Assert_true(i != inputLen-1 || outI == totalOut);
}
struct sock_fprog* out = Allocator_malloc(alloc, sizeof(struct sock_fprog));
out->len = (unsigned short) totalOut;
out->filter = sf;
return out;
}
示例15: responseCallback
static void responseCallback(struct RouterModule_Promise* promise,
uint32_t lagMilliseconds,
struct Address* from,
Dict* result)
{
struct Janitor_Search* search = Identity_check((struct Janitor_Search*)promise->userData);
if (from) {
Bits_memcpyConst(&search->best, from, sizeof(struct Address));
return;
}
search->janitor->searches--;
if (!search->best.path) {
Log_debug(search->janitor->logger, "Search completed with no nodes found");
}
Allocator_free(search->alloc);
}