Package xyz.cofe.trambda.tcp
Class TcpHeader
- java.lang.Object
-
- xyz.cofe.trambda.tcp.TcpHeader
-
public class TcpHeader extends Object
Заголовок TCP пакета.
Структура заголовка:- methodName = Имя метода : String, при том имя должно соответствовать:
- Соответствовать регулярному выражению
(?i)[\w\d\-_.]+ - Минимальная длина 1
- Не содержать
\n \r \0
- Соответствовать регулярному выражению
- append = Есть есть payload (полезная нагрузка), тогда
- ';payload-size='+(10ное число - payloadSize в байтах)
- ';payload-md5='+(hex значение MD5 хеша полезной нагрузки)
- extra = Если есть дополнительные
HeaderValueто они кодируются:headerValues.map { hv -> ';' + hv.getName() + '=' + hv.getValue() }
methodName + append + extra + '\n'
Потом данная строка кодируется в байты, кодировка ISO_8859_1
Формально можно преставить пакет таким образом0 ... HeadSize Заголовок Кодированная строка в ISO_8859_1 с одим переводом строки '\n'.
Содержит:Имя метода/класса + пробел Пары ключ/значение разделенные точкой с запятой ';' Ключ от значения отделяются знаком равно '='
Есть обязательные и опциональные значения:
- payload-size = размер полезной нагрузки
- payload-md5 = md5 хеш полезной нагрузки
- sid = идентификатор сообщения
- referrer = на какое сообщение-запрос ссылается это сообщение-ответ
HeadSize ... HeadSize + payload-size Полезные данные, обычно это должно быть сериализованное представление Message - methodName = Имя метода : String, при том имя должно соответствовать:
-
-
Field Summary
Fields Modifier and Type Field Description static HeaderValue.IntValuereferrerЗаголовок - идентификатор исходного сообщения, ответ на исходное сообщениеstatic HeaderValue.IntValuesidЗаголовок - идентификатор сообщения
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static byte[]encode(String method, byte[] payload)Кодировка заголовкаstatic byte[]encode(String method, byte[] payload, HeaderValue<? extends Object>... values)Кодировка заголовкаintgetHeaderSize()Возвращает размер заголовкаStringgetMethodName()Возвращает название методаOptional<byte[]>getPayloadMd5()intgetPayloadSize()Optional<Integer>getReferrer()Возвращает идентификатор исходного сообщения, ответ на исходное сообщениеOptional<Integer>getSid()Возвращает идентификатор сообщенияMap<String,String>getValues()Возвращает карту ключ/значение связанных с данным заголовкомbooleanmatched(byte[] buff, int off, int len)Сравнение полезной нагрузки с хеш значением указанным в заголовкеstatic Optional<TcpHeader>parse(byte[] buff, int off, int len)Парсинг заголовка
-
-
-
Field Detail
-
sid
public static final HeaderValue.IntValue sid
Заголовок - идентификатор сообщения
-
referrer
public static final HeaderValue.IntValue referrer
Заголовок - идентификатор исходного сообщения, ответ на исходное сообщение
-
-
Method Detail
-
getHeaderSize
public int getHeaderSize()
Возвращает размер заголовка- Returns:
- размер заголовка
-
getMethodName
public String getMethodName()
Возвращает название метода- Returns:
- название метода
-
getValues
public Map<String,String> getValues()
Возвращает карту ключ/значение связанных с данным заголовком- Returns:
- карта ключ/значение
-
getSid
public Optional<Integer> getSid()
Возвращает идентификатор сообщения- Returns:
- идентификатор сообщения
-
getReferrer
public Optional<Integer> getReferrer()
Возвращает идентификатор исходного сообщения, ответ на исходное сообщение- Returns:
- идентификатор на которое ссылается данное сообщение
-
getPayloadSize
public int getPayloadSize()
-
getPayloadMd5
public Optional<byte[]> getPayloadMd5()
-
matched
public boolean matched(byte[] buff, int off, int len)Сравнение полезной нагрузки с хеш значением указанным в заголовке- Parameters:
buff- полезная нагрузкаoff- полезная нагрузка, смещениеlen- полезная нагрузка, размер- Returns:
- true - есть совпадение, false - нет совпадения
-
encode
public static byte[] encode(String method, byte[] payload)
Кодировка заголовка- Parameters:
method- методpayload- полезная нагрузка- Returns:
- байтовое представление
-
encode
@SafeVarargs public static byte[] encode(String method, byte[] payload, HeaderValue<? extends Object>... values)
Кодировка заголовка- Parameters:
method- методpayload- полезная нагрузкаvalues- дополнительные опции заголовка- Returns:
- байтовое представление
-
-