Line data Source code
1 : /* Copyright (c) 2001 Matej Pfajfar. 2 : * Copyright (c) 2001-2004, Roger Dingledine. 3 : * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. 4 : * Copyright (c) 2007-2021, The Tor Project, Inc. */ 5 : /* See LICENSE for licensing information */ 6 : 7 : /** 8 : * @file proto_control0.c 9 : * @brief Code to detect the obsolete v0 control protocol. 10 : **/ 11 : 12 : #include "core/or/or.h" 13 : #include "lib/buf/buffers.h" 14 : #include "core/proto/proto_control0.h" 15 : 16 : /** Return 1 iff buf looks more like it has an (obsolete) v0 controller 17 : * command on it than any valid v1 controller command. */ 18 : int 19 4 : peek_buf_has_control0_command(buf_t *buf) 20 : { 21 4 : if (buf_datalen(buf) >= 4) { 22 2 : char header[4]; 23 2 : uint16_t cmd; 24 2 : buf_peek(buf, header, sizeof(header)); 25 2 : cmd = ntohs(get_uint16(header+2)); 26 2 : if (cmd <= 0x14) 27 1 : return 1; /* This is definitely not a v1 control command. */ 28 : } 29 : return 0; 30 : }