Класс SecureLayer(абстрактный)
Сигналы
void | closed () |
void | error () |
void | readyRead () |
void | readyRead () |
Публичные функции
virtual int | bytesAvailable () const =0 |
virtual int | bytesOutgoingAvailable () const =0 |
virtual void | close () |
virtual int | convertBytesWritten (qint64 encryptedBytes)=0 |
virtual bool | isClosable () const |
virtual QByteArray | read ()=0 |
virtual QByteArray | readOutgoing (int *plainBytes=nullptr)=0 |
virtual QByteArray | readUnprocessed () |
SecureLayer (QObject *parent=nullptr) | |
virtual void | write (const QByteArray &a)=0 |
virtual void | writeIncoming (const QByteArray &a)=0 |
Подробное описание
Абстрактный интерфейс к слою безопасности.
Класс SecureLayer
обычно
используется между приложением и потенциально небезопасной сетью. Предоставляет возможности по
организации безопасных соединений поверх такой сети.
Концепция использования класса состоит в том, что после некоторой начальной настройки, приложение
может передать данные объекту, реализующему интерфейс
SecureLayer
, путём вызова
метода
write()
для шифрования (или защиты любым другим способом в зависимости от настроек). Объект, реализующий
интерфейс SecureLayer
, затем
испускает сигнал
readyReadOutgoing(),
а приложение использует метод
readOutgoing()
для получения зашифрованных данных. Зашифрованные данные затем высылаются по сети.
Кода зашифрованные данные приходят из сети, приложение вызывает метод
writeIncoming()
на объекте, реализующем интерфейс
SecureLayer
. Некоторое время
спустя объект, реализующий интерфейс
SecureLayer
, может испустить
сигналreadyRead().
При получении данного сигнала приложение использует метод
read(),
чтобы получить расшифрованные данные.
Стоит обратить внимание, что иногда реализации
SecureLayer
могут отправлять
данные между собой через сетевой интерфейс, даже если не происходит обмена данными между приложением
и объектом, реализующем интерфейс
SecureLayer
. Этот происходит
из-за первончальных переговоров, которые расходуют сетевой трафик для достижения согласия по
конфигурации шифрования, а также для других накладных расходов, связанных с поддержанием безопасного
соединения.
Описание конструкторов и деструктора
SecureLayer()
QCA::SecureLayer::SecureLayer (QObject * parent = nullptr) |
Конструктор для абстрактного безопасного слоя взаимодействия.
Параметры
parent | Родительский объект для этого экземпляра |
Описание методов
isClosable()
virtual bool QCA::SecureLayer::isClosable () const | virtual |
Возвращает true
, если слой предоставляет значимую реализацию метода «close».
Реализовано в QCA::TLS.
bytesAvailable()
virtual int QCA::SecureLayer::bytesAvailable () const | pure virtual |
Возвращает количество байтов, доступных для получения с помощью метода read() на стороне приложения.
Реализовано в QCA::SASL и QCA::TLS.
bytesOutgoingAvailable()
virtual int QCA::SecureLayer::bytesOutgoingAvailable () const | pure virtual |
Возвращает количесто байтов, доступных для чтения с помощью метода readOutgoing() на стороне сетевого взаимодействия.
Реализовано в QCA::SASL и QCA::TLS.
close()
virtual void QCA::SecureLayer::close () | virtual |
Закрывает сетевое соединение.
Следует обратить внимание, что данный метод может не иметь смысла или невозможен для всех реализаций.
См. также Метод isClosable() может быть использован для проверки возможности закрытия сетевого соединения.
Реализовано в QCA::TLS.
write()
virtual void QCA::SecureLayer::write (const QByteArray & a) | pure virtual |
Метод записывает незашифрованные данные в объект, реализующий интерфейс SecureLayer.
Обычно данный метод вызывается на стороне приложения.
Параметры
a | Источник данных со стороны приложения |
Реализовано в QCA::SASL и QCA::TLS.
read()
virtual QByteArray QCA::SecureLayer::read () | pure virtual |
Метод считывает расшифрованные данные из объекта, реализующего интерфейс SecureLayer.
Обычно данный метод вызывается на стороне приложения после получения сигнала readyRead().
Реализовано в QCA::SASL и QCA::TLS.
writeIncoming()
virtual void QCA::SecureLayer::writeIncoming (const QByteArray & a) | pure virtual |
Метод принимает закодированные (обычно зашифрованные) данные для обработки.
Обычно данный метод вызывается после получения информации из сетевого сокета, например, через
использование метода QTcpSocket::readAll()
. Чтение из сокета осуществляется после получения
сигнала о том, что в нём доступны данные для чтения.
Параметры
a | Массив ByteArray , из которого получаются данные со стороны сетевого взаимодействия |
Реализовано в QCA::SASL и QCA::TLS.
readOutgoing()
virtual QByteArray QCA::SecureLayer::readOutgoing (int * plainBytes = nullptr) | pure virtual |
Метод предоставляет закодированные (обычно зашифрованные) данные.
Обычно данный метод вызывается, чтобы получить данные для записи в сетевой сокет, например для
передачи в QTcepSocker::write()
. Данный метод обычно вызывается после получения сигнала
readyReadOutgoing().
Параметры
plainBytes | Количество прочитанных байтов |
Реализовано в QCA::SASL и QCA::TLS.
readUnprocessed()
virtual QByteArray QCA::SecureLayer::readUnprocessed () | virtual |
Метод позволяет считывать данные без выполнения дешифрования.
Метод предназначен для реализации протоколов, которые закрывают защищённое соедиение и переходят на использование простого текста. Обычно данный метод не используется.
Реализовано в QCA::TLS.
convertBytesWritten()
virtual int QCA::SecureLayer::convertBytesWritten (qint64encryptedBytes) | pure virtual |
Преобразует уже записанные зашифрованные байты в байты простого текста.
Параметры
encryptedBytes | Количество байтов для преобразования |
Реализовано в QCA::SASL и QCA::TLS.
readyRead
void QCA::SecureLayer::readyRead () | signal |
Сигнал испускается, когда SecureLayer расшифровал данные на стороне приложения, и они доступны для чтения.
Обычно данный сигнал подключается к слоту, который считывает данные с помощью метода read().
Примеры
saslclient.cpp, saslserver.cpp, sslservtest.cpp, ssltest.cpp и tlssocket.cpp.
readyReadOutgoing
void QCA::SecureLayer::readyReadOutgoing () | signal |
Сигнал испускается, когда
SecureLayer
зашифровал данные
на стороне сетевого взаимодействия, и данные готовы для чтения.
Обычно данный сигнал подключается к слоту, который считывает данные с помощью метода readOutgoing() и отправляет их через сетевой сокет.
Примеры
saslclient.cpp, saslserver.cpp, sslservtest.cpp, ssltest.cpp и tlssocket.cpp.
closed
void QCA::SecureLayer::closed () | signal |
Сигнал испускается, когда
SecureLayer
закрывает сетевое
соединение.
Примеры
sslservtest.cpp, ssltest.cpp и tlssocket.cpp.
error
void QCA::SecureLayer::error () | signal |
Сигнал испускается при обнаружении ошибки.
Можно определить тип ошибки с помощью метода errorCode()
.
Примеры
saslclient.cpp, saslserver.cpp, sslservtest.cpp, ssltest.cpp и tlssocket.cpp.