CYNARA_API int cynara_async_check_cache(cynara_async *p_cynara, const char *client, const char *client_session, const char *user, const char *privilege) { if (!p_cynara || !p_cynara->impl) return CYNARA_API_INVALID_PARAM; if (!isStringValid(client) || !isStringValid(client_session)) return CYNARA_API_INVALID_PARAM; if (!isStringValid(user) || !isStringValid(privilege)) return CYNARA_API_INVALID_PARAM; return Cynara::tryCatch([&]() { std::string clientStr; std::string clientSessionStr; std::string userStr; std::string privilegeStr; try { clientStr = client; clientSessionStr = client_session; userStr = user; privilegeStr = privilege; } catch (const std::length_error &e) { LOGE("%s", e.what()); return CYNARA_API_INVALID_PARAM; } return p_cynara->impl->checkCache(clientStr, clientSessionStr, userStr, privilegeStr); }); }
AppletParameter::AppletParameter(const char *name, const char *value) : m_isValid(false), m_formattedString(NULL) { _ASSERT(name != NULL); _ASSERT(value != NULL); m_isValid = isStringValid(name) && isStringValid(value); if (isValid()) { const char *format = "<PARAM NAME=\"%s\" VALUE=\"%s\" >\n"; int len = _scprintf(format, name, value) + 1; m_formattedString = new char[len]; sprintf_s(m_formattedString, (size_t)(len), format, name, value); } }
CYNARA_API int cynara_async_create_simple_request(cynara_async *p_cynara, const char *client, const char *client_session, const char *user, const char *privilege, cynara_check_id *p_check_id, cynara_response_callback callback, void *user_response_data){ if (!p_cynara || !p_cynara->impl) return CYNARA_API_INVALID_PARAM; if (!isStringValid(client) || !isStringValid(client_session)) return CYNARA_API_INVALID_PARAM; if (!isStringValid(user) || !isStringValid(privilege)) return CYNARA_API_INVALID_PARAM; return Cynara::tryCatch([&]() { std::string clientStr; std::string clientSessionStr; std::string userStr; std::string privilegeStr; try { clientStr = client; clientSessionStr = client_session; userStr = user; privilegeStr = privilege; } catch (const std::length_error &e) { LOGE("%s", e.what()); return CYNARA_API_INVALID_PARAM; } cynara_check_id checkId; int ret = p_cynara->impl->createSimpleRequest(clientStr, clientSessionStr, userStr, privilegeStr, checkId, callback, user_response_data); if (p_check_id && ret == CYNARA_API_SUCCESS) *p_check_id = checkId; return ret; }); }
static bool startup( disruptor* d ) { bool wasCreated = false; redisContext* r; redisReply* reply; /* validate inputs. */ { if ( !isStringValid( d->address, 1, MAX_ADDRESS_LENGTH ) ) { handleError( d, "invalid length for string '%s'", d->address ); return false; } if ( !isStringValid( d->username, 1, MAX_USERNAME_LENGTH ) ) { handleError( d, "invalid length for string '%s'", d->username ); return false; } } /* connect to redis. */ r = d->redis = connectToRedis(); if ( !r ) { handleError( d, "could not connect to redis" ); return false; } /* determine a mapping for this connection. */ { int id = -1; /* try to fetch an existing mapping. */ { reply = redisCommand( r, "GET disruptor:%s:connections:%s:id", d->address, d->username ); if ( reply->type == REDIS_REPLY_STRING ) { id = atoi( reply->str ); } freeReplyObject( reply ); } /* if no mapping exists, then assign a new one. */ if ( id < 0 ) { { reply = redisCommand( r, "INCR disruptor:%s:connectionsCount", d->address ); if ( reply->type == REDIS_REPLY_INTEGER ) id = ( reply->integer - 1 ); freeReplyObject( reply ); } assert( id >= 0 ); if ( id < 0 ) { handleError( d, "could not determine mapping for username '%s'", d->username ); return false; } wasCreated = true; { reply = redisCommand( r, "SET disruptor:%s:connections:%s:id %d", d->address, d->username, id ); freeReplyObject( reply ); } { reply = redisCommand( r, "SET disruptor:%s:%d:username %s", d->address, id, d->username ); freeReplyObject( reply ); } } d->id = id; } /* determine the connection count. */ { d->connectionsCount = 0; reply = redisCommand( r, "GET disruptor:%s:connectionsCount", d->address, d->username ); if ( reply->type == REDIS_REPLY_STRING ) d->connectionsCount = atoi( reply->str ); freeReplyObject( reply ); if ( d->connectionsCount <= 0 ) { handleError( d, "could not determine the connection count." ); return false; } } handleInfo( d, "id=%d total=%d", d->id, d->connectionsCount ); /* open the shared header. */ { d->shHeader = shmemOpen( sizeof(sharedHeader), SHMEM_DEFAULT, "disruptor:%s", d->address ); d->header = shmemGetPtr( d->shHeader ); } /* open the shared ringbuffer. */ { d->shRingbuffer = shmemOpen( sizeof(sharedRingbuffer), SHMEM_DEFAULT, "disruptor:%s:rb", d->address ); d->ringbuffer = shmemGetPtr( d->shRingbuffer ); } { int i; /* create the shared memory sendBuffer. */ if ( wasCreated ) { shmem* s; handleInfo( d, "creating %d", d->id ); s = shmemOpen( d->sendBufferSize, SHMEM_MUST_CREATE, "disruptor:%s:%d", d->address, d->id ); shmemClose( s ); } /* map each connection. */ for ( i = 0; i < d->connectionsCount; ++i ) { if ( !mapClient( d, i ) ) { handleError( d, "could not map client %d", i ); return false; } } } return true; }