rendered paste bodystruct redis_struct { redisContext *redis_context; char redis_result[1024];};static voidfree_redis(struct redis_struct *redis_info){ if (redis_info == NULL) { return; } if (redis_info->redis_context != NULL) { redisFree(redis_info->redis_context); } if (redis_info->redis_result != NULL) { free(redis_info->redis_result); } free(redis_info);}intinit_function(struct vmod_priv *priv, const struct VCL_conf *cfg){ redisContext *c; struct redis_struct *redis_info; struct timeval timeout = { 1, 500000 }; // 1.5 seconds c = redisConnectWithTimeout((char*)"127.0.0.2", 6379, timeout); if (c->err) { return (0); } redis_info = malloc(sizeof(struct redis_struct)); if (redis_info == NULL) { return (0); } redis_info->redis_context = c; priv->priv = redis_info; priv->free = free_redis; return (0);}const char * __match_proto__()vmod_redis_get(struct sess *sp, struct vmod_priv *priv, const char *key){ redisReply *reply; struct redis_struct *redis_info = priv->priv; reply = redisCommand(redis_info->redis_context, "GET %s", key); if (reply->type == REDIS_REPLY_STRING) { strncpy(redis_info->redis_result, reply->str, 1024); } else if (reply->type == REDIS_REPLY_INTEGER) { snprintf(redis_info->redis_result, 1024, "%ll", reply->integer); } freeReplyObject(reply); return (redis_info->redis_result);}