12490Sjkh/*	$FreeBSD$	*/
22490Sjkh
32490Sjkh/*
42490Sjkh * Copyright (C) 2012 by Darren Reed.
52490Sjkh *
62490Sjkh * See the IPFILTER.LICENCE file for details on licencing.
72490Sjkh *
82490Sjkh * $Id$
92490Sjkh */
102490Sjkh
112490Sjkh#include <ctype.h>
12216239Suqs#include "ipf.h"
132490Sjkh
142490Sjkhint getportproto(name, proto)
152490Sjkh	char *name;
162490Sjkh	int proto;
172490Sjkh{
182490Sjkh	struct servent *s;
192490Sjkh	struct protoent *p;
202490Sjkh
212490Sjkh	if (ISDIGIT(*name)) {
222490Sjkh		int number;
232490Sjkh		char *s;
242490Sjkh
252490Sjkh		for (s = name; *s != '\0'; s++)
262490Sjkh			if (!ISDIGIT(*s))
272490Sjkh				return -1;
282490Sjkh
2950472Speter		number = atoi(name);
302490Sjkh		if (number < 0 || number > 65535)
31210089Semaste			return -1;
32201613Sedwin		return htons(number);
33208732Suqs	}
34201613Sedwin
35201613Sedwin	p = getprotobynumber(proto);
36201613Sedwin	s = getservbyname(name, p ? p->p_name : NULL);
37201613Sedwin	if (s != NULL)
38237216Seadler		return s->s_port;
39210089Semaste	return -1;
40201613Sedwin}
41201613Sedwin