本文整理汇总了C++中Identity_cast函数的典型用法代码示例。如果您正苦于以下问题:C++ Identity_cast函数的具体用法?C++ Identity_cast怎么用?C++ Identity_cast使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Identity_cast函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: removeReqFromSet
/** Called when the request allocator is freed. */
static int removeReqFromSet(struct Allocator_OnFreeJob* job)
{
struct Request* req = Identity_cast((struct Request*) job->userData);
struct Hermes* h = Identity_cast(req->hermes);
int index = Map_RequestSet_indexForHandle(req->handle, &h->requestSet);
if (index > -1) {
Map_RequestSet_remove(index, &h->requestSet);
} else {
Log_error(h->logger, "request with handle [%u] missing from set", req->handle);
}
return 0;
}
开发者ID:Arceliar,项目名称:cjdns,代码行数:13,代码来源:Hermes.c
示例2: EventBase_eventCount
int EventBase_eventCount(struct EventBase* eventBase)
{
int eventCount = 0;
struct EventBase_pvt* ctx = Identity_cast((struct EventBase_pvt*) eventBase);
uv_walk(ctx->loop, countCallback, &eventCount);
return eventCount;
}
开发者ID:AdUser,项目名称:cjdns,代码行数:7,代码来源:EventBase.c
示例3: addOnFreeJob
/** @see Allocator->onFree() */
static void* addOnFreeJob(void (* callback)(void* callbackContext),
void* callbackContext,
const struct Allocator* allocator)
{
struct CanaryAllocator_pvt* ctx = Identity_cast((struct CanaryAllocator_pvt*) allocator);
return ctx->alloc->onFree(callback, callbackContext, ctx->alloc);
}
开发者ID:coyotama,项目名称:cjdns,代码行数:8,代码来源:CanaryAllocator.c
示例4: childAllocator
/** @see Allocator_child() */
static struct Allocator* childAllocator(const struct Allocator* allocator,
const char* identFile,
int identLine)
{
struct CanaryAllocator_pvt* ctx = Identity_cast((struct CanaryAllocator_pvt*) allocator);
return CanaryAllocator_new(ctx->alloc->child(ctx->alloc, identFile, identLine), ctx->rand);
}
开发者ID:coyotama,项目名称:cjdns,代码行数:8,代码来源:CanaryAllocator.c
示例5: CryptoAuth_addUser
int32_t CryptoAuth_addUser(String* password,
uint8_t authType,
void* user,
struct CryptoAuth* ca)
{
struct CryptoAuth_pvt* context = Identity_cast((struct CryptoAuth_pvt*) ca);
if (authType != 1) {
return CryptoAuth_addUser_INVALID_AUTHTYPE;
}
if (context->passwordCount == context->passwordCapacity) {
// TODO: realloc password space and increase buffer.
return CryptoAuth_addUser_OUT_OF_SPACE;
}
struct CryptoAuth_Auth a;
hashPassword_sha256(&a, password);
for (uint32_t i = 0; i < context->passwordCount; i++) {
if (!Bits_memcmp(a.secret, context->passwords[i].secret, 32)) {
return CryptoAuth_addUser_DUPLICATE;
}
}
a.user = user;
Bits_memcpyConst(&context->passwords[context->passwordCount],
&a,
sizeof(struct CryptoAuth_Auth));
context->passwordCount++;
return 0;
}
开发者ID:Kingofhearts102,项目名称:cjdns,代码行数:27,代码来源:CryptoAuth.c
示例6: sendMessage
static uint8_t sendMessage(struct Message* message, struct Interface* iface)
{
struct UDPAddrInterface_pvt* context =
Identity_cast((struct UDPAddrInterface_pvt*) iface->senderContext);
struct Sockaddr_storage addrStore;
Message_pop(message, &addrStore, context->pub.addr->addrLen);
Assert_true(addrStore.addr.addrLen == context->pub.addr->addrLen);
if (Socket_sendto(context->socket,
message->bytes,
message->length,
0,
&addrStore.addr) < 0)
{
switch (Errno_get()) {
case Errno_EMSGSIZE:
return Error_OVERSIZE_MESSAGE;
case Errno_ENOBUFS:
case Errno_EAGAIN:
return Error_LINK_LIMIT_EXCEEDED;
default:;
Log_info(context->logger, "Got error sending to socket [%s]",
Errno_getString());
}
}
return 0;
}
开发者ID:CSRedRat,项目名称:cjdns,代码行数:30,代码来源:UDPAddrInterface.c
示例7: onPingResponse
static void onPingResponse(enum SwitchPinger_Result result,
uint64_t label,
String* data,
uint32_t millisecondsLag,
uint32_t version,
void* onResponseContext)
{
if (SwitchPinger_Result_OK != result) {
return;
}
struct IFCPeer* ep = Identity_cast((struct IFCPeer*) onResponseContext);
struct Context* ic = ifcontrollerForPeer(ep);
struct Address addr;
Bits_memset(&addr, 0, sizeof(struct Address));
Bits_memcpyConst(addr.key, CryptoAuth_getHerPublicKey(ep->cryptoAuthIf), 32);
addr.path = ep->switchLabel;
Log_debug(ic->logger, "got switch pong from node with version [%d]", version);
RouterModule_addNode(ic->routerModule, &addr, version);
#ifdef Log_DEBUG
// This will be false if it times out.
//Assert_true(label == ep->switchLabel);
uint8_t path[20];
AddrTools_printPath(path, label);
uint8_t sl[20];
AddrTools_printPath(sl, ep->switchLabel);
Log_debug(ic->logger, "Received [%s] from lazy endpoint [%s] [%s]",
SwitchPinger_resultString(result)->bytes, path, sl);
#endif
}
开发者ID:CSRedRat,项目名称:cjdns,代码行数:31,代码来源:DefaultInterfaceController.c
示例8: sendFromSwitch
// This is directly called from SwitchCore, message is not encrypted.
static uint8_t sendFromSwitch(struct Message* msg, struct Interface* switchIf)
{
struct IFCPeer* ep = Identity_cast((struct IFCPeer*) switchIf);
// This sucks but cryptoauth trashes the content when it encrypts
// and we need to be capable of sending back a coherent error message.
uint8_t top[255];
uint8_t* messageBytes = msg->bytes;
uint16_t padding = msg->padding;
uint16_t len = (msg->length < 255) ? msg->length : 255;
Bits_memcpy(top, msg->bytes, len);
uint8_t ret = ep->cryptoAuthIf->sendMessage(msg, ep->cryptoAuthIf);
// If this node is unresponsive then return an error.
struct Context* ic = ifcontrollerForPeer(ep);
uint64_t now = Time_currentTimeMilliseconds(ic->eventBase);
if (ret || now - ep->timeOfLastMessage > ic->unresponsiveAfterMilliseconds)
{
msg->bytes = messageBytes;
msg->padding = padding;
msg->length = len;
Bits_memcpy(msg->bytes, top, len);
return ret ? ret : Error_UNDELIVERABLE;
} else {
/* Way way way too much noise
Log_debug(ic->logger, "Sending to neighbor, last message from this node was [%u] ms ago.",
(now - ep->timeOfLastMessage));
*/
}
return Error_NONE;
}
开发者ID:CSRedRat,项目名称:cjdns,代码行数:35,代码来源:DefaultInterfaceController.c
示例9: sendTo
static uint8_t sendTo(struct Message* msg, struct Interface* iface)
{
struct TestFramework_Link* link =
Identity_cast((struct TestFramework_Link*)iface->senderContext);
struct Interface* dest;
struct TestFramework* srcTf;
if (&link->destIf == iface) {
dest = &link->srcIf;
srcTf = link->dest;
} else if (&link->srcIf == iface) {
dest = &link->destIf;
srcTf = link->src;
} else {
Assert_always(false);
}
printf("Transferring message to [%p] - message length [%d]\n", (void*)dest, msg->length);
// Store the original message and a copy of the original so they can be compared later.
srcTf->lastMsgBackup = Message_clone(msg, srcTf->alloc);
srcTf->lastMsg = msg;
if (msg->alloc) {
// If it's a message which was buffered inside of CryptoAuth then it will be freed
// so by adopting the allocator we can hold it in memory.
Allocator_adopt(srcTf->alloc, msg->alloc);
}
// Copy the original and send that to the other end.
struct Message* sendMsg = Message_clone(msg, dest->allocator);
return dest->receiveMessage(sendMsg, dest);
}
开发者ID:campadrenalin,项目名称:cjdns,代码行数:32,代码来源:TestFramework.c
示例10: allocatorMalloc
/** @see Allocator->malloc() */
static void* allocatorMalloc(size_t size, const struct Allocator* allocator)
{
struct CanaryAllocator_pvt* ctx = Identity_cast((struct CanaryAllocator_pvt*) allocator);
// get it on an even number of ints.
uint32_t* out = ctx->alloc->malloc(SIZE_BYTES(size), ctx->alloc);
return newAllocation(ctx, out, SIZE_INTS(size));
}
开发者ID:coyotama,项目名称:cjdns,代码行数:8,代码来源:CanaryAllocator.c
示例11: sendFromSwitch
// This is directly called from SwitchCore, message is not encrypted.
static uint8_t sendFromSwitch(struct Message* msg, struct Interface* switchIf)
{
struct IFCPeer* ep = Identity_cast((struct IFCPeer*) switchIf);
ep->bytesOut += msg->length;
struct Context* ic = ifcontrollerForPeer(ep);
uint8_t ret;
uint64_t now = Time_currentTimeMilliseconds(ic->eventBase);
if (now - ep->timeOfLastMessage > ic->unresponsiveAfterMilliseconds) {
// XXX: This is a hack because if the time of last message exceeds the
// unresponsive time, we need to send back an error and that means
// mangling the message which would otherwise be in the queue.
struct Allocator* tempAlloc = Allocator_child(ic->allocator);
struct Message* toSend = Message_clone(msg, tempAlloc);
ret = Interface_sendMessage(ep->cryptoAuthIf, toSend);
Allocator_free(tempAlloc);
} else {
ret = Interface_sendMessage(ep->cryptoAuthIf, msg);
}
// If this node is unresponsive then return an error.
if (ret || now - ep->timeOfLastMessage > ic->unresponsiveAfterMilliseconds) {
return ret ? ret : Error_UNDELIVERABLE;
} else {
/* Way way way too much noise
Log_debug(ic->logger, "Sending to neighbor, last message from this node was [%u] ms ago.",
(now - ep->timeOfLastMessage));
*/
}
return Error_NONE;
}
开发者ID:HyperGrundy,项目名称:cjdns,代码行数:34,代码来源:DefaultInterfaceController.c
示例12: timeout
static void timeout(void* vrequest)
{
struct Request* req = Identity_cast((struct Request*) vrequest);
Dict resp = Dict_CONST(String_CONST("error"), String_OBJ(String_CONST("timeout")), NULL);
req->onResponse(&resp, req->onResponseContext);
Allocator_free(req->alloc);
}
开发者ID:Arceliar,项目名称:cjdns,代码行数:7,代码来源:Hermes.c
示例13: sendMessage
static uint8_t sendMessage(struct Message* message, struct Interface* iface)
{
struct AddrInterfaceAdapter_pvt* context =
Identity_cast((struct AddrInterfaceAdapter_pvt*) iface);
Message_shift(message, -(context->pub.addr->addrLen), NULL);
return Interface_sendMessage(context->wrapped, message);
}
开发者ID:AdUser,项目名称:cjdns,代码行数:8,代码来源:AddrInterfaceAdapter.c
示例14: sendToTun
/**
* Send an arbitrary message to the tun device.
*
* @param message to be sent, must be prefixed with IpTunnel_PacketInfoHeader.
* @param iface an interface for which receiverContext is the ducttape.
*/
static uint8_t sendToTun(struct Message* message, struct Interface* iface)
{
struct Ducttape_pvt* context = Identity_cast((struct Ducttape_pvt*)iface->receiverContext);
if (context->userIf) {
return context->userIf->sendMessage(message, context->userIf);
}
return 0;
}
开发者ID:wpapper,项目名称:cjdns,代码行数:14,代码来源:Ducttape.c
示例15: receiveMessage
static uint8_t receiveMessage(struct Message* message, struct Interface* iface)
{
struct AddrInterfaceAdapter_pvt* context =
Identity_cast((struct AddrInterfaceAdapter_pvt*) iface->receiverContext);
Message_push(message, context->pub.addr, context->pub.addr->addrLen, NULL);
return Interface_receiveMessage(&context->pub.generic, message);
}
开发者ID:AdUser,项目名称:cjdns,代码行数:8,代码来源:AddrInterfaceAdapter.c
示例16: receiveMessage
static uint8_t receiveMessage(struct Message* msg, struct Interface* iface)
{
struct Hermes* hermes = Identity_cast((struct Hermes*) iface->receiverContext);
struct Allocator* alloc = Allocator_child(hermes->alloc);
receiveMessage2(msg, hermes, alloc);
Allocator_free(alloc);
return 0;
}
开发者ID:Arceliar,项目名称:cjdns,代码行数:8,代码来源:Hermes.c
示例17: requestOnFree
static int requestOnFree(struct Allocator_OnFreeJob* job)
{
struct Request* req = Identity_cast((struct Request*) job->userData);
int idx = Map_OfRequestByHandle_indexForHandle(req->handle, &req->ctx->outstandingRequests);
if (idx > -1) {
Map_OfRequestByHandle_remove(idx, &req->ctx->outstandingRequests);
}
return 0;
}
开发者ID:mgregoro,项目名称:cjdns,代码行数:9,代码来源:AdminClient.c
示例18: noPeers
static void noPeers(void* vtrace)
{
struct RouteTracer_Trace* trace = Identity_cast((struct RouteTracer_Trace*)vtrace);
// trace has stalled.
if (trace->pub.callback) {
trace->pub.callback(&trace->pub, 0, NULL, NULL);
}
Allocator_free(trace->pub.alloc);
}
开发者ID:AdUser,项目名称:cjdns,代码行数:9,代码来源:RouteTracer.c
示例19: receiveMessage
static uint8_t receiveMessage(struct Message* received, struct Interface* interface)
{
struct CryptoAuth_Wrapper* wrapper =
Identity_cast((struct CryptoAuth_Wrapper*) interface->receiverContext);
union Headers_CryptoAuth* header = (union Headers_CryptoAuth*) received->bytes;
if (received->length < (wrapper->authenticatePackets ? 20 : 4)) {
cryptoAuthDebug0(wrapper, "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)) {
cryptoAuthDebug(wrapper, "Trying final handshake step, nonce=%u\n", nonce);
uint8_t secret[32];
getSharedSecret(secret,
wrapper->secret,
wrapper->tempKey,
NULL,
wrapper->context->logger);
// We'll optimistically advance the nextNonce value because decryptMessage()
// passes the message on to the upper level and if this message causes a
// response, we want the CA to be in ESTABLISHED state.
// if the decryptMessage() call fails, we CryptoAuth_reset() it back.
wrapper->nextNonce += 3;
if (decryptMessage(wrapper, nonce, received, secret)) {
cryptoAuthDebug0(wrapper, "Final handshake step succeeded");
Bits_memcpyConst(wrapper->secret, secret, 32);
return callReceivedMessage(wrapper, received);
}
CryptoAuth_reset(&wrapper->externalInterface);
cryptoAuthDebug0(wrapper, "Final handshake step failed");
return Error_UNDELIVERABLE;
}
} else if (nonce > 4) {
if (decryptMessage(wrapper, nonce, received, wrapper->secret)) {
return callReceivedMessage(wrapper, received);
} else {
cryptoAuthDebug0(wrapper, "Failed to decrypt message");
return Error_UNDELIVERABLE;
}
} else {
cryptoAuthDebug0(wrapper, "Received handshake message during established connection");
}
Message_shift(received, 4);
return decryptHandshake(wrapper, nonce, received, header);
}
开发者ID:Kingofhearts102,项目名称:cjdns,代码行数:57,代码来源:CryptoAuth.c
示例20: closeInterface
static void closeInterface(void* vendpoint)
{
struct IFCPeer* toClose = Identity_cast((struct IFCPeer*) vendpoint);
struct Context* ic = ifcontrollerForPeer(toClose);
int index = Map_OfIFCPeerByExernalIf_indexForHandle(toClose->handle, &ic->peerMap);
Assert_true(index >= 0);
Map_OfIFCPeerByExernalIf_remove(index, &ic->peerMap);
}
开发者ID:CSRedRat,项目名称:cjdns,代码行数:10,代码来源:DefaultInterfaceController.c
注:本文中的Identity_cast函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论