lsquic_parse_common.c revision 9626cfc2
19626cfc2SDmitri Tikhonov/* Copyright (c) 2017 - 2018 LiteSpeed Technologies Inc.  See LICENSE. */
29626cfc2SDmitri Tikhonov#include <string.h>
39626cfc2SDmitri Tikhonov#include <sys/queue.h>
49626cfc2SDmitri Tikhonov#include <sys/types.h>
59626cfc2SDmitri Tikhonov
69626cfc2SDmitri Tikhonov#include "lsquic_types.h"
79626cfc2SDmitri Tikhonov#include "lsquic_int_types.h"
89626cfc2SDmitri Tikhonov#include "lsquic_packet_common.h"
99626cfc2SDmitri Tikhonov#include "lsquic_packet_in.h"
109626cfc2SDmitri Tikhonov#include "lsquic_parse_common.h"
119626cfc2SDmitri Tikhonov#include "lsquic_parse.h"
129626cfc2SDmitri Tikhonov
139626cfc2SDmitri Tikhonov
149626cfc2SDmitri Tikhonovint
159626cfc2SDmitri Tikhonovlsquic_parse_packet_in_begin (lsquic_packet_in_t *packet_in, size_t length,
169626cfc2SDmitri Tikhonov                            int is_server, struct packin_parse_state *state)
179626cfc2SDmitri Tikhonov{
189626cfc2SDmitri Tikhonov    if (length > 0)
199626cfc2SDmitri Tikhonov    {
209626cfc2SDmitri Tikhonov        switch (packet_in->pi_data[0] & 0x88)
219626cfc2SDmitri Tikhonov        {
229626cfc2SDmitri Tikhonov        case 0x88:
239626cfc2SDmitri Tikhonov        case 0x80:
249626cfc2SDmitri Tikhonov            return lsquic_iquic_parse_packet_in_long_begin(packet_in, length,
259626cfc2SDmitri Tikhonov                                                            is_server, state);
269626cfc2SDmitri Tikhonov        case 0x08:
279626cfc2SDmitri Tikhonov            return lsquic_gquic_parse_packet_in_begin(packet_in, length,
289626cfc2SDmitri Tikhonov                                                            is_server, state);
299626cfc2SDmitri Tikhonov        default:
309626cfc2SDmitri Tikhonov            return lsquic_iquic_parse_packet_in_short_begin(packet_in, length,
319626cfc2SDmitri Tikhonov                                                            is_server, state);
329626cfc2SDmitri Tikhonov        }
339626cfc2SDmitri Tikhonov    }
349626cfc2SDmitri Tikhonov    else
359626cfc2SDmitri Tikhonov        return -1;
369626cfc2SDmitri Tikhonov}
379626cfc2SDmitri Tikhonov
389626cfc2SDmitri Tikhonov
399626cfc2SDmitri Tikhonovint
409626cfc2SDmitri Tikhonovlsquic_iquic_parse_packet_in_begin (struct lsquic_packet_in *packet_in,
419626cfc2SDmitri Tikhonov            size_t length, int is_server, struct packin_parse_state *state)
429626cfc2SDmitri Tikhonov{
439626cfc2SDmitri Tikhonov    if (length > 0)
449626cfc2SDmitri Tikhonov    {
459626cfc2SDmitri Tikhonov        if (0 == (packet_in->pi_data[0] & 0x80))
469626cfc2SDmitri Tikhonov            return lsquic_iquic_parse_packet_in_short_begin(packet_in, length,
479626cfc2SDmitri Tikhonov                                                            is_server, state);
489626cfc2SDmitri Tikhonov        else
499626cfc2SDmitri Tikhonov            return lsquic_iquic_parse_packet_in_long_begin(packet_in, length,
509626cfc2SDmitri Tikhonov                                                            is_server, state);
519626cfc2SDmitri Tikhonov    }
529626cfc2SDmitri Tikhonov    else
539626cfc2SDmitri Tikhonov        return -1;
549626cfc2SDmitri Tikhonov}
559626cfc2SDmitri Tikhonov
569626cfc2SDmitri Tikhonov
57