• Как настроить openvpn сервер с udp портом для клиентов с серыми ip?

    @res2001
    hunter0358,
    это невозможно как и описано в вопросе

    Я это понял. Поэтому и пишу вам про внешний VDS с белым IP.
    Без белого внешнего IP адреса OpenVPN не будет работать. Или вы должны иметь возможность настроить проброс порта, используемого OpenVPN с сервера NAT на сервер OpenVPN.
    Это, кстати, не ограничение OpenVPN - серые адреса не могут маршрутизироваться в интернете и подобные пакеты, если они попадут в интернет, тут же будут убиты первым же промежуточным шлюзом.
  • Как настроить openvpn сервер с udp портом для клиентов с серыми ip?

    @res2001
    hunter0358, Ошибка с таймаутом, чаще всего говорит о том, что нет связи с удаленным сервисом.
    Связи может не быть по разным причинам, в т.ч. и при блокировки трафика фаерволом.
  • Как настроить openvpn сервер с udp портом для клиентов с серыми ip?

    @res2001
    hunter0358,
    присвоил инстансу белый ip

    О чем речь вообще?
    Белый IP вам должен выдать оператор связи, который через него выпускает ваш комп в интернет.
  • Как настроить openvpn сервер с udp портом для клиентов с серыми ip?

    @res2001
    Владимир Юрченков,
    он не на столько безопасен

    Чем же, интерено, TCP безопаснее UDP? Тем что гарантирует доставку пакетов? Но это к безопасности не имеет отношения. Доставку пакетов поверх UDP гарантирует собственный протокол OpenVPN.
  • Как составлять header файл для статической библиотеки?

    @res2001
    Предварительно я бы вынес из hpp куда-нибудь в другое место объявления не касающиеся внешнего пользователя библиотеки, т.е. то что используется только внутри библиотеки и не должно использоваться (быть видимо) внешнему пользователю. Это может привести к увеличению количества заголовочных файлов.

    С другой стороны можно пойти от обратного - разместить в "пользовательском" hpp все что надо внешнему пользователю, а во "внутренних" hpp включать этот "пользовательский" hpp, если это необходимо.
    Копипастить код точно не надо.
  • Как получить сумму на каждый день день периода?

    @res2001
    Или все же SQL умеет такую выборку сам сделать?

    Конечно умеет. Используйте goup by дата в запросе.
  • Как запушить удаленный репозиторий?

    @res2001
    Как вы получили локальный репозиторий?
    Удаленный репозиторий существует?
    В локальный репозиторий добавлен удаленный репозиторий? (git remote -v)
  • Как исправить ошибку с построчным чтением из бинарного файла C++?

    @res2001
    Андрей Загородний, Это как раз то о чем я писал - string нельзя так сохранять/загружать.
    Вы просто можете посмотреть файл, который у вас записался на диск - там не будет строки AutoBase.Name.
    Вообще это относится не только к string, но и к любым сложно устроенным объектам - требуются отдельная процедура сериализации/десериализации.
    В вашем случае AutoBase.Name вы должны сохранять примерно так:
    uint32_t name_len = a.Name.length();
    In.write(&name_len, sizeof(name_len));
    In.write(a.Name.c_str(), name_len);

    Процесс чтения - аналогичный, сначала читаете размер, а затем заданное количество символов. После чтения размера можно подготовить строку - выделить память с помощью string.reserve() для последующего чтения.
    Такой подход будет работать с обычным строками, каждый символ которых представлен 1 байтом. Для многобайтных строк (все варианты Unicode) этот вариант уже не пройдет, т.к. string.length() - возвращает количество символов в строке, а не количество байт, а пишете в файл вы байты, а не символы.
  • Как решить эту проблему?

    @res2001
    true, устаревшей оси или браузера. Зависит от того где хранятся корневые сертификаты, используемые браузером: в собственном хранилище или используется хранилище ОС (как в винде, например). Как дело обстоит в Мас ОС не в курсе.
  • Почему не получается создать голый репозиторий на сервере для совместной работы с Git с использованием протокола SSH?

    @res2001
    На счет authorized_keys - это актуально, когда у тебя свой ssh сервер и ты к нему подключаешься. Тут же ты подключаешься по ssh к gitlab. Нужно просто через веб интерфейс загрузить туда свой публичный ключ. В документации gitlab должно быть написано как это сделать.
    Ключи, сгенерированные в putty нужно предварительно конвертировать в формат ssh, для этого в комплекте putty есть утилита puttygen. Формат хранения ключей putty PPK, формат, используемый ssh - PEM. В гугле полно статей по этому поводу.
  • Как OpenVPN сочетает redirect-gateway и push?

    @res2001
    776166,
    это понятно, не понятно остальное

    Что понятно? Вы, возможно, не правильно написали опцию. Я указал правильное написание и дал ссылку на мануал с описанием ее применения.
    Остальное будет работать. Маршрут по умолчанию применяется всегда когда не находится других более специализированных маршрутов. И это не специфика ВПН или openvpn - так работает маршрутизация в TCP/IP.

    Вообще вы можете прямо на локальной машине задать фиксированные маршруты, если вас такой вариант устраивает.
    Опции route/iroute и push route аналогично добавляют маршруты, разница только в том где они добавляют их - push route добавляет маршрут на ВПН клиенте, route/iroute - на ВПН сервере.
  • Как OpenVPN сочетает redirect-gateway и push?

    @res2001
    776166,
    но я тоже хочу их пушить с персональных настроек.

    Пожалуйста. Тот же самый push будет работать и в файле конфигурации пользователя. Для сетей за клиентом надо использовать iroute, вместо route.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Кода я и не заметил :-)
    Я писал выше про использование глобальных переменных. Вариант имеет право на существование, но когда у тебя будет проект побольше и с несколькими потоками глобальные переменные вообще не вариант, как правило.
    Вообще исопльзоавние глобальных переменных в принципе не очень хорошая идея, а не только для потоков.
    В некоторых случаях это допустимо, но таких случаев не много.
    И если уж ты хочешь научиться работать с потоками, то важно научиться и правильно передавать в поток параметры и принимать возвращаемое значение. И параметров и возвращаемых значений может быть не одно.
    И это я еще не начинал говорить о совместном использовании данных разными потоками - это вообще отдельная огромная тема.

    Обрати внимание, что твоя потоковая функция по сигнатуре не соответствует документации. Она должна быть такой: https://docs.microsoft.com/en-us/previous-versions...
    Твой код в принципе рабочий, но стоит добавить опций компилятору, как он начнет ругаться на эту ошибку, по формальным признакам.
    И еще - потоковая функция возвращает значение типа DWORD, в твоем случае можешь передавать возвращаемое значение потока через него, не используя глобальную переменную.
    В POSIX потоковые функции возвращают указатель void*
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton,
    передо мной стоит задача изучить именно CreateThread

    Изучай конечно. Просто работа с потоками она +-одинакова везде, т.к. поток - совершенно определенная сущность ОС, одинаковая для всех ОС. POSIX вариант потоков считаю наиболее продуманным и простым, а вариант стандартной библиотеки по сути копирует POSIX. Внутренняя реализация потоков в ядре ОС, конечно, разная для разных ОС, но это не должно волновать прикладного программиста.
    никак не могу понять, как будет выглядеть конструкция для, вот допустим, вывода на экран возвращаемого значения функции?

    Выкладывай код, который у тебя получился и вопросы по нему. Дальше в слепую уже трудно что-то советовать.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton, Я тут нахваливаю потоки стандартной библиотеки, но вы должны понимать, что все более высокоуровневые реализации используют реализацию потоков предоставляемую операционной системой, поэтому внутри того же thrd_create() из стандартной библиотеки спрятан вызов CreateThread в винде или pthread_create() в POSIX совместимых ОС. Никаких других потоков (так же как и процессов), кроме предоставляемых ОС быть не может.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton, (int *)gn
    Это не ссылка на параметр. Если gn целое, то вы просто меняете тип данных из целого в указатель, при этом само значение не меняется.
    Соответственно в потоковой функции вы должны сделать (int)arg для получения из указателя снова целого числа.
    В таком случае вы никак не можете вернуть из потока значение, разве что используя глобальные переменные, но это плохой вариант (для средних и крупных проектов).

    Если у вас возврат из потоковой функции имеет тот же тип, что и параметр, то можете передавать именно указатель на gn: &gn и через этот же указатель возвращать значение.
    Если же тип возвращаемого значения другой, то лучше всего объявить структуру, содержащую и параметр и возвращаемое значение и передавать указатель на структуру. А кроме того это самый наглядный и простоя для понимания вариант.
    Кстати, в реализации потоков стандартной библиотеки предусмотрен вариант возврата значения из потока в виде целого числа: https://en.cppreference.com/w/c/thread/thrd_join
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton,
    как теперь передать параметр?

    Четвертый параметр CreateThread предназначен для этого. И почитайте наконец MSDN: https://docs.microsoft.com/en-us/windows/win32/api...
    Обычно все необходимые параметры для потока собирают в структуру и передают указатель на структуру. Если у вас только целое число в качестве параметра, то можете конвертировать это целое в указатель и таким образом передать. В потоковой функции надо будет сделать обратное преобразование параметра.
    И надо подумать о том, как будете возвращать значение. Можно возвращать в той же структуре, которую передаете в праметре. Но сначала надо дождаться завершения потока!
    Вообще рекомендовал бы для потоков использовать функции стандартной библиотеки - потоки завезли в С11. Там синтаксис приближен к POSIX, он более прост и понятен, чем стандартные функции WinAPI. Кроме того, этим вы делаете код более платформонезависимым.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Дмитрий, Не так давно появилась книжка "Экстремальный Си". Ничего особо экстремального нет, но материал там уровнем по выше, чем в обычных учебниках. Хоть в книге есть и ошибки/опечатки, но в целом рекомендую.
    На счет учебников - сгодится люой для начала. Си язык простой и не большой. Дополнительную информацию ищите тут и в гугле то же всего полно.
    Есть несколько тем, обычно плохо понимаемых начинающими: указатели и адресная арифметика, работа с динамической памятью. На них надо обратить особое внимание.
  • Как реализовать строковой тип данных в Си?

    @res2001
    voproser45654, Текстуры складывайте в байтовые массивы uint8_t, например.