|  | /* | 
|  | * Copyright (C) 2000-2004 by Darren Reed. | 
|  | * | 
|  | * See the IPFILTER.LICENCE file for details on licencing. | 
|  | * | 
|  | * $Id$ | 
|  | */ | 
|  |  | 
|  | #include "ipf.h" | 
|  |  | 
|  | extern	char	flagset[]; | 
|  | extern	u_char	flags[]; | 
|  |  | 
|  |  | 
|  | u_char tcp_flags(flgs, mask, linenum) | 
|  | char *flgs; | 
|  | u_char *mask; | 
|  | int    linenum; | 
|  | { | 
|  | u_char tcpf = 0, tcpfm = 0; | 
|  | char *s; | 
|  |  | 
|  | s = strchr(flgs, '/'); | 
|  | if (s) | 
|  | *s++ = '\0'; | 
|  |  | 
|  | if (*flgs == '0') { | 
|  | tcpf = strtol(flgs, NULL, 0); | 
|  | } else { | 
|  | tcpf = tcpflags(flgs); | 
|  | } | 
|  |  | 
|  | if (s != NULL) { | 
|  | if (*s == '0') | 
|  | tcpfm = strtol(s, NULL, 0); | 
|  | else | 
|  | tcpfm = tcpflags(s); | 
|  | } | 
|  |  | 
|  | if (!tcpfm) { | 
|  | if (tcpf == TH_SYN) | 
|  | tcpfm = 0xff & ~(TH_ECN|TH_CWR); | 
|  | else | 
|  | tcpfm = 0xff & ~(TH_ECN); | 
|  | } | 
|  | *mask = tcpfm; | 
|  | return tcpf; | 
|  | } |