static int ss_instance_init(struct redudp_instance_t *instance) { ss_instance * ss = (ss_instance *)(instance+1); const redudp_config *config = &instance->config; char buf1[RED_INET_ADDRSTRLEN]; int valid_cred = ss_is_valid_cred(config->login, config->password); if (!valid_cred || (ss->method = enc_init(&ss->info, config->password, config->login), ss->method == -1)) { log_error(LOG_ERR, "Invalided encrytion method or password."); return -1; } else { log_error(LOG_INFO, "%s @ %s: encryption method: %s", instance->relay_ss->name, red_inet_ntop(&instance->config.bindaddr, buf1, sizeof(buf1)), config->login); } // An additional buffer is allocated for each instance for encryption/decrption. ss->buff = malloc(MAX_UDP_PACKET_SIZE); if (!ss->buff) { log_error(LOG_ERR, "Out of memory."); return -1; } return 0; }
static int ss_instance_init(struct redsocks_instance_t *instance) { ss_instance * ss = (ss_instance *)(instance+1); const redsocks_config *config = &instance->config; int valid_cred = ss_is_valid_cred(config->login, config->password); if (!valid_cred || (ss->method = enc_init(&ss->info, config->password, config->login), ss->method == -1)) { log_error(LOG_ERR, "Invalided encrytion method or password."); return -1; } else { log_error(LOG_INFO, "using encryption method: %s", config->login); } return 0; }