MCPcopy Create free account
hub / github.com/MariaDB/server / parse_v1_header

Function parse_v1_header

sql/proxy_protocol.cc:37–92  ·  view source on GitHub ↗

Parse proxy protocol version 1 header (text) */

Source from the content-addressed store, hash-verified

35 Parse proxy protocol version 1 header (text)
36*/
37static int parse_v1_header(char *hdr, size_t len, proxy_peer_info *peer_info)
38{
39 char address_family[MAX_PROXY_HEADER_LEN + 1];
40 char client_address[MAX_PROXY_HEADER_LEN + 1];
41 char server_address[MAX_PROXY_HEADER_LEN + 1];
42 int client_port;
43 int server_port;
44
45 int ret = sscanf(hdr, "PROXY %s %s %s %d %d",
46 address_family, client_address, server_address,
47 &client_port, &server_port);
48
49 if (ret != 5)
50 {
51 if (ret >= 1 && !strcmp(address_family, "UNKNOWN"))
52 {
53 peer_info->is_local_command= true;
54 return 0;
55 }
56 return -1;
57 }
58
59 if (client_port < 0 || client_port > 0xffff
60 || server_port < 0 || server_port > 0xffff)
61 return -1;
62
63 if (!strcmp(address_family, "UNKNOWN"))
64 {
65 peer_info->is_local_command= true;
66 return 0;
67 }
68 else if (!strcmp(address_family, "TCP4"))
69 {
70 /* Initialize IPv4 peer address.*/
71 peer_info->peer_addr.ss_family= AF_INET;
72 if (!inet_pton(AF_INET, client_address,
73 &((struct sockaddr_in *)(&peer_info->peer_addr))->sin_addr))
74 return -1;
75 }
76 else if (!strcmp(address_family, "TCP6"))
77 {
78 /* Initialize IPv6 peer address.*/
79 peer_info->peer_addr.ss_family= AF_INET6;
80 if (!inet_pton(AF_INET6, client_address,
81 &((struct sockaddr_in6 *)(&peer_info->peer_addr))->sin6_addr))
82 return -1;
83 }
84 peer_info->port= client_port;
85 /* Check if server address is legal.*/
86 char addr_bin[16];
87 if (!inet_pton(peer_info->peer_addr.ss_family,
88 server_address, addr_bin))
89 return -1;
90
91 return 0;
92}
93
94

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected