lsquic_version.c revision 229fce07
1229fce07SDmitri Tikhonov/* Copyright (c) 2017 - 2019 LiteSpeed Technologies Inc. See LICENSE. */ 250aadb33SDmitri Tikhonov#include <string.h> 350aadb33SDmitri Tikhonov 450aadb33SDmitri Tikhonov#include "lsquic.h" 550aadb33SDmitri Tikhonov#include "lsquic_int_types.h" 650aadb33SDmitri Tikhonov#include "lsquic_version.h" 750aadb33SDmitri Tikhonov 850aadb33SDmitri Tikhonov 950aadb33SDmitri Tikhonovstatic const unsigned char version_tags[N_LSQVER][4] = 1050aadb33SDmitri Tikhonov{ 1150aadb33SDmitri Tikhonov [LSQVER_035] = { 'Q', '0', '3', '5', }, 1250aadb33SDmitri Tikhonov [LSQVER_039] = { 'Q', '0', '3', '9', }, 13c95974e9SDmitri Tikhonov [LSQVER_043] = { 'Q', '0', '4', '3', }, 149626cfc2SDmitri Tikhonov [LSQVER_044] = { 'Q', '0', '4', '4', }, 159626cfc2SDmitri Tikhonov#if LSQUIC_USE_Q098 169626cfc2SDmitri Tikhonov [LSQVER_098] = { 'Q', '0', '9', '8', }, 179626cfc2SDmitri Tikhonov#endif 1850aadb33SDmitri Tikhonov}; 1950aadb33SDmitri Tikhonov 2050aadb33SDmitri Tikhonov 2150aadb33SDmitri Tikhonovuint32_t 2250aadb33SDmitri Tikhonovlsquic_ver2tag (unsigned version) 2350aadb33SDmitri Tikhonov{ 2450aadb33SDmitri Tikhonov lsquic_ver_tag_t tag; 2550aadb33SDmitri Tikhonov if (version < N_LSQVER) 2650aadb33SDmitri Tikhonov { 2750aadb33SDmitri Tikhonov memcpy(&tag, version_tags[version], 4); 2850aadb33SDmitri Tikhonov return tag; 2950aadb33SDmitri Tikhonov } 3050aadb33SDmitri Tikhonov else 3150aadb33SDmitri Tikhonov return 0; 3250aadb33SDmitri Tikhonov} 3350aadb33SDmitri Tikhonov 3450aadb33SDmitri Tikhonov 3550aadb33SDmitri Tikhonovenum lsquic_version 3650aadb33SDmitri Tikhonovlsquic_tag2ver (uint32_t ver_tag) 3750aadb33SDmitri Tikhonov{ 3850aadb33SDmitri Tikhonov unsigned n; 3950aadb33SDmitri Tikhonov for (n = 0; n < sizeof(version_tags) / sizeof(version_tags[0]); ++n) 4050aadb33SDmitri Tikhonov if (0 == memcmp(version_tags[n], &ver_tag, sizeof(ver_tag))) 4150aadb33SDmitri Tikhonov return n; 4250aadb33SDmitri Tikhonov return -1; 4350aadb33SDmitri Tikhonov} 4450aadb33SDmitri Tikhonov 4550aadb33SDmitri Tikhonov 4650aadb33SDmitri Tikhonovenum lsquic_version 4750aadb33SDmitri Tikhonovlsquic_str2ver (const char *str, size_t len) 4850aadb33SDmitri Tikhonov{ 4950aadb33SDmitri Tikhonov uint32_t tag; 5050aadb33SDmitri Tikhonov 5150aadb33SDmitri Tikhonov if (len == sizeof(tag) && 'Q' == str[0]) 5250aadb33SDmitri Tikhonov { 5350aadb33SDmitri Tikhonov memcpy(&tag, str, sizeof(tag)); 5450aadb33SDmitri Tikhonov return lsquic_tag2ver(tag); 5550aadb33SDmitri Tikhonov } 5650aadb33SDmitri Tikhonov else 5750aadb33SDmitri Tikhonov return -1; 5850aadb33SDmitri Tikhonov} 5950aadb33SDmitri Tikhonov 6050aadb33SDmitri Tikhonov 6150aadb33SDmitri Tikhonovconst char *const lsquic_ver2str[N_LSQVER] = { 6250aadb33SDmitri Tikhonov [LSQVER_035] = "Q035", 6350aadb33SDmitri Tikhonov [LSQVER_039] = "Q039", 64c95974e9SDmitri Tikhonov [LSQVER_043] = "Q043", 659626cfc2SDmitri Tikhonov [LSQVER_044] = "Q044", 669626cfc2SDmitri Tikhonov#if LSQUIC_USE_Q098 679626cfc2SDmitri Tikhonov [LSQVER_098] = "Q098", 689626cfc2SDmitri Tikhonov#endif 6950aadb33SDmitri Tikhonov}; 7050aadb33SDmitri Tikhonov 7150aadb33SDmitri Tikhonov 72