neomer / binc Goto Github PK
View Code? Open in Web Editor NEWBasic International Network Currency
License: Apache License 2.0
Basic International Network Currency
License: Apache License 2.0
в файле HTTPgetRequest не реализована возможность указания порта в заголовке Host.
изменить строку: "Host: " + getUrl().host() + "\r\n"
Сделать базовый абстрактный класс IMessageWithHeaders
Класс должен содержать виртуальный метод для статусной строки, реализовывать который должны потомки.
В нем же реализовать следующие методы
IMessageWithHeaders::compile()
,
IMessageWithHeaders::compileHeaders()
,
IMessageWithHeaders::setHeader(QString, QString)
,
IMessageWithHeaders::header(QString)
Унаследовать классы HTTPRequest, HTTPreponse от этого класса, выпилить весь повторяющийся код.
Приложение как клиент должно
Приложение как сервер должно
При запуске встать на прослушивание указанного в настройках порта, ожидая подключение к нему по протоколу HTTP.
Парсить HTTP-запрос.
При подключении и запросе списка узлов выдавать все известные активные(?) узлы.
В методе void IJsonSerializable::fromString(IJsonSerializable *object, QByteArray data)
не проверяется результат десериализации.
При запуске Chat формируются одинаковые Guid для ConsoleInput и для UdpStream
В функции
HTTPResponse HTTPClient::get(QUrl url)
Есть инициализация QTcpSocket *socket = new QTcpSocket();
добавить удаление, так как потенциально приводит к утечке памяти.
Выпилить из интерфейса IJsonSerializable
статические методы и перенести из в другой класс.
Создать класс class BaseException : public std::exception
и унаследовать все исключения, которые в данных момент наследуются от std::exception
на этот класс. Добавить в нем поддержку и корректное отображение QString.
Создать класс class TextProcessingException : public BaseException
расширение с возможностью указания номера строки/символа вызвавшего исключение.
Провести рефакторинг кода и убрать всю работы напрямую с std::exception
на работу через указанные выше классы.
Изменить с
class NetDataStreamException : public std::exception
на
class NetDataStreamException : public DataStreamException
Должны поддерживаться следующие функции:
Работа с блокчейном
в void INetMessageWithHeaders::parse(QString data)
при парсинге происходит ошибка определения конца блока заголовков.
Парсинг идет до тех пор, пока в сообщении есть \r\n, при этом не отрабатывает двойной перенос каретки и тело сообщение воспринимается как заголовок, если в нем присутствует символ ":".
Создать сериализуемый класс для хранения настроек приложения.
Доступ к классу осуществлять через класс Context.
В классах работы с HTTP проверить где версия http прописана константой. Вместо этого необходимо использовать IHTTPMessage::getVersion()
Внутри #42 появляется интерфейс #include <core/IIdentifyed.h>
, который представляет собой консолидацию методов для работы с сущностями имеющими идентификатор : Guid.
В связи с этим необходимо провести рефакторинг кода и унаследовать все подходящие под определение сущности от этого интерфейса.
Добавить в класс HTTPResponse доступ к Url, Query
Класс должен содержать общие элементы для разных модулей системы
в методе void Context::load()
вместо if (!settingFile.exists()) { throw ContextException("Configuration file not found!"); }
сделать корректную генерацию файла настроек с конфигурацией по умолчанию
В класс IDataBlock и всем его наследникам реализовать возможность работы с блоками данных разбитыми на несколько пакетов.
Возможно ввести еще 1 слой абстракции, который бы разбивал IDataBlock на несколько сетевых пакетов.
Добавлено при #29
В методе void AbstractHTTPRequest::parse(QByteArray data)
выполняется проверка валидности HTTP запроса с помощью регулярного выражения
if (httpReqValidator.indexIn(sData.left(sData.indexOf('\n'))) == -1)
{
throw HTTPParsingException(0, "Data is not valid HTTP request!");
}
возможен вариант, когда запрос не является HTTP запросом, а строка будет передана в теле сообщения для обхода этой валидации.
Возможное решение проблемы - запоминать индекс первого вхождения регулярного выражения и отбрасывать всю информацию до этого вхождения.
Должны поддерживаться следующие функции:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.