1/*	$FreeBSD$	*/
2
3/*
4 * Copyright (C) 2012 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 *
8 * $Id$
9 */
10#include "ipf.h"
11
12
13char *portname(pr, port)
14	int pr, port;
15{
16	static char buf[32];
17	struct protoent *p = NULL;
18	struct servent *sv = NULL;
19	struct servent *sv1 = NULL;
20
21	if ((opts & OPT_NORESOLVE) == 0) {
22		if (pr == -1) {
23			if ((sv = getservbyport(htons(port), "tcp"))) {
24				strncpy(buf, sv->s_name, sizeof(buf)-1);
25				buf[sizeof(buf)-1] = '\0';
26				sv1 = getservbyport(htons(port), "udp");
27				sv = strncasecmp(buf, sv->s_name, strlen(buf)) ?
28				     NULL : sv1;
29			}
30			if (sv)
31				return buf;
32		} else if ((pr != -2) && (p = getprotobynumber(pr))) {
33			if ((sv = getservbyport(htons(port), p->p_name))) {
34				strncpy(buf, sv->s_name, sizeof(buf)-1);
35				buf[sizeof(buf)-1] = '\0';
36				return buf;
37			}
38		}
39	}
40
41	(void) sprintf(buf, "%d", port);
42	return buf;
43}
44