1145519Sdarrenr/*	$FreeBSD$	*/
2145510Sdarrenr
3170268Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5255332Scy *
6255332Scy * See the IPFILTER.LICENCE file for details on licencing.
7255332Scy *
8255332Scy * $Id$
9255332Scy */
10170268Sdarrenr
11145510Sdarrenr#include <ctype.h>
12145510Sdarrenr#include "ipf.h"
13145510Sdarrenr
14145510Sdarrenrint getportproto(name, proto)
15255332Scy	char *name;
16255332Scy	int proto;
17145510Sdarrenr{
18145510Sdarrenr	struct servent *s;
19145510Sdarrenr	struct protoent *p;
20145510Sdarrenr
21145510Sdarrenr	if (ISDIGIT(*name)) {
22145510Sdarrenr		int number;
23145510Sdarrenr		char *s;
24145510Sdarrenr
25145510Sdarrenr		for (s = name; *s != '\0'; s++)
26145510Sdarrenr			if (!ISDIGIT(*s))
27145510Sdarrenr				return -1;
28145510Sdarrenr
29145510Sdarrenr		number = atoi(name);
30145510Sdarrenr		if (number < 0 || number > 65535)
31145510Sdarrenr			return -1;
32145510Sdarrenr		return htons(number);
33145510Sdarrenr	}
34145510Sdarrenr
35145510Sdarrenr	p = getprotobynumber(proto);
36145510Sdarrenr	s = getservbyname(name, p ? p->p_name : NULL);
37145510Sdarrenr	if (s != NULL)
38145510Sdarrenr		return s->s_port;
39145510Sdarrenr	return -1;
40145510Sdarrenr}
41