Блог им. elektroyar |Kurlyk - еще одна С++ обертка для curl

В общем, нужна была мне библиотека для более удобного использования curl. Нашел библиотеки, которые были более менее удобные, но работают без curl, а тащить еще зависимостей в проект ради них не хотелось. Готовых же оберток вокруг curl было полно, но мне они не понравились, да и велосипед хотелось построить.

И придумал тогда я библиотеку Kurlyk.
Kurlyk - еще одна С++ обертка для curl

Описание

Братишка, я тебе покушать принёс


Фраза из артхаусного фильма “Зелёный слоник”

Что такое kurlyk? Да это же еще одна библиотека для более простой работы с curl! Если вас по тем или иным причинам не устроили библиотеки easyhttp-cpp, curl_request, curlpp-async, curlwrapper, curl-Easy-cpp, curlpp11, easycurl, curl-cpp-wrapper... То может быть, стоит попробовать эту?

Использование

Чтобы сделать запрос, достаточно создать объект класса kurlyk::Client и настроить все необходимое в 



( Читать дальше )

Блог им. elektroyar |Зашифрованный и сжатый JSON с комментариями в качестве файла конфигурации

В процессе разработки ПО для трейдинга столкнулся с тем, что программа должна иметь целую кучу файлов конфигурации, содержание которых хотелось бы скрыть от пользователя. Это могут быть настройки стратегий, параметры авторизации на сервере, текст для разных языков интерфейса и т.д.

Для файлов конфигурации я уже давно использую файлы с JSON. Очень удобная вещь. Осталось лишь добавить поддержку комментариев и зашифровать текст при помощи алгоритма AES. А для большей красоты еще и сжать текст перед шифровкой алгоритмом brotli.

Сказано — сделано. Встречайте — crypto-jsonпроект на гитхабе. Репозиторий содержит готовый редактор JSON с комментариями, который может также сохранить текст в зашифрованном виде. Настройки сжатия и шифрования можно задать перед сохранением файла и во время открытия. Также редактор позволяет сделать проверку JSON и может подсвечивать проблемные места.



( Читать дальше )

Блог им. elektroyar |Расчет HMAC в С++

Расчет HMAC в С++


Всем привет! Продолжаем курс велосипедостроения. И на этот раз зачем-то решил  сделать простенький алгоритм расчета HMAC для SHA256 и SHA512. А то иногда бывает нужно подключить какую нибудь криптобиржу, а там нужен этот самый HMAC. Вот ссылка на репозиторий самой либы.

Для расчета HMAC надо вызвать функцию get_hmac, которая имеет несколько параметров:

std::string get_hmac(
	std::string key, 
	const std::string &msg, 
	const TypeHash type, 
	const bool is_hex = true, 
	const bool is_upper = false);
  • key — Строка, содержащая секретный ключ.
  • msg — Строка, содержащая сообщение.
  • type — Тип хеш-функции. Указать hmac::TypeHash::SHA256 или hmac::TypeHash::SHA512.
  • is_hex — Флаг, который отвечает за формат ответа. Чтобы получить строку, содержащую HMAC в шестнадцетиричном формате, данный параметр должен быть указан как true. Иначе строка будет содержать числовое значение HMAC по 8 бит в каждом элеименте строки. По умолчанию данный параметр true.
  • is_upper — Флаг, который отвечает за регистр символов ответа (нижний или верхний). Данный флаг влияет на ответ функции только если установлен флаг is_hex. По умолчанию данный параметр false.
Простой пример кода для расчета HMAC SHA256 и SHA512:

( Читать дальше )

Блог им. elektroyar |С++ Библиотека для сервера и клиента Named Pipe

В общем, сделал библиотеку simple-named-pipe-server для  работы с именованными каналами. Библиотека содержит сервер и клиент для C++11, а также клиент для MQL4.

С++ Библиотека для сервера и клиента Named Pipe


Очень простая, многопоточная серверная и клиентская библиотека Named Pipe, реализованная с использованием C++11. Проект был проверен на компиляторе mingw 7.3.0 x64. Папка code_blocks содержит примеры для IDE Code::Blocks. Не забудьте в проектах указать свой компилятор, иначе проект не соберется. Сделал либу только сегодня, так что в ней могут быть ошибочки.

Пример сервера
#include <iostream>
#include "named-pipe-server.hpp"

int main() {
    /* в конструкторе сервера можно также задать размер буфера */
    SimpleNamedPipe::NamedPipeServer server("my_server");

    /* обработчики событий */
    server.on_open = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) {
        std::cout << "open, handle: " << connection->get_handle() << std::endl;
    };
    server.on_message = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, 
			const std::string &in_message) {
        /* обрабатываем входящие сообщения */
        std::cout << "message " << in_message << ", handle: " << connection->get_handle() << std::endl;
        connection->send("ok");
    };
    server.on_close = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) {
        std::cout << "close, handle: " << connection->get_handle() << std::endl;
    };
    server.on_error = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, const std::error_code &ec) {
        std::cout << "error, handle: " << connection->get_handle() << ", what " << ec.value() << std::endl;
    };

    /* запускаем сервер */
    server.start();
    std::system("pause");

    /* останавливаем сервер 
     * (деструктор класса сам выполнит остановку, вызывать не обязательно)
     */
    server.stop();
    std::cout << "close program" << std::endl;
    return EXIT_SUCCESS;
}


( Читать дальше )

....все тэги
UPDONW
Новый дизайн