lsquic_version.c revision a37b0c96
1/* Copyright (c) 2017 - 2018 LiteSpeed Technologies Inc. See LICENSE. */ 2#include <string.h> 3 4#include "lsquic.h" 5#include "lsquic_int_types.h" 6#include "lsquic_version.h" 7 8 9static const unsigned char version_tags[N_LSQVER][4] = 10{ 11 [LSQVER_035] = { 'Q', '0', '3', '5', }, 12 [LSQVER_039] = { 'Q', '0', '3', '9', }, 13 [LSQVER_043] = { 'Q', '0', '4', '3', }, 14 [LSQVER_044] = { 'Q', '0', '4', '4', }, 15#if LSQUIC_USE_Q098 16 [LSQVER_098] = { 'Q', '0', '9', '8', }, 17#endif 18}; 19 20 21uint32_t 22lsquic_ver2tag (unsigned version) 23{ 24 lsquic_ver_tag_t tag; 25 if (version < N_LSQVER) 26 { 27 memcpy(&tag, version_tags[version], 4); 28 return tag; 29 } 30 else 31 return 0; 32} 33 34 35enum lsquic_version 36lsquic_tag2ver (uint32_t ver_tag) 37{ 38 unsigned n; 39 for (n = 0; n < sizeof(version_tags) / sizeof(version_tags[0]); ++n) 40 if (0 == memcmp(version_tags[n], &ver_tag, sizeof(ver_tag))) 41 return n; 42 return -1; 43} 44 45 46enum lsquic_version 47lsquic_str2ver (const char *str, size_t len) 48{ 49 uint32_t tag; 50 51 if (len == sizeof(tag) && 'Q' == str[0]) 52 { 53 memcpy(&tag, str, sizeof(tag)); 54 return lsquic_tag2ver(tag); 55 } 56 else 57 return -1; 58} 59 60 61const char *const lsquic_ver2str[N_LSQVER] = { 62 [LSQVER_035] = "Q035", 63 [LSQVER_039] = "Q039", 64 [LSQVER_043] = "Q043", 65 [LSQVER_044] = "Q044", 66#if LSQUIC_USE_Q098 67 [LSQVER_098] = "Q098", 68#endif 69}; 70 71 72