1 /* 2 * Argus Software 3 * Copyright (c) 2000-2016 QoSient, LLC 4 * All rights reserved. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2, or (at your option) 9 * any later version. 10 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 * 20 */ 21 22 /* 23 * $Id: //depot/argus/clients/include/argus_output.h#6 $ 24 * $DateTime: 2016/06/01 15:17:28 $ 25 * $Change: 3148 $ 26 */ 27 28 29 #ifndef ArgusRadium_h 30 #define ArgusRadium_h 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #define ARGUS_MONITORPORT 561 37 #define ARGUS_MAXLISTEN 32 38 39 #include <unistd.h> 40 #include <stdlib.h> 41 #include <limits.h> 42 43 #include <stdio.h> 44 #include <errno.h> 45 #include <string.h> 46 #include <strings.h> 47 48 #include <sys/types.h> 49 #include <sys/stat.h> 50 #include <sys/socket.h> 51 52 #include <sys/wait.h> 53 54 #if defined(__NetBSD__) 55 #include <sys/sched.h> 56 #else 57 #include <sched.h> 58 #endif 59 60 #include <fcntl.h> 61 #include <signal.h> 62 #include <ctype.h> 63 64 #include <argus_util.h> 65 #include <argus_client.h> 66 #include <argus_main.h> 67 68 #include <argus_filter.h> 69 70 #ifdef ARGUS_SASL 71 #include <sasl/sasl.h> 72 #endif 73 74 #define ARGUS_READINGPREHDR 1 75 #define ARGUS_READINGHDR 2 76 #define ARGUS_READINGBLOCK 4 77 78 #define ARGUS_WAS_FUNCTIONAL 0x10 79 #define ARGUS_SOCKET_COMPLETE 0x20 80 #define ARGUS_MAXRECORD 0x10000 81 82 #define ARGUS_CLIENT_STARTUP_TIMEOUT 5 83 84 struct ArgusSocketStruct { 85 struct ArgusListStruct *ArgusOutputList; 86 int fd, status, cnt, expectedSize, errornum; 87 int ArgusLastRecord, ArgusReadState; 88 struct timeval lastwrite; 89 unsigned char buf[ARGUS_MAXRECORD], *ptr; 90 struct ArgusRecordStruct *rec; 91 int length, writen; 92 struct sockaddr sock; 93 struct stat statbuf; 94 char *filename; 95 void *obj; 96 }; 97 98 99 struct ArgusClientData { 100 struct ArgusQueueHeader qhdr; 101 int fd, pid, ArgusClientStart; 102 int ArgusFilterInitialized; 103 struct timeval startime, lasttime; 104 struct ArgusSocketStruct *sock; 105 struct nff_program ArgusNFFcode; 106 char *filename, *hostname, *filter; 107 int format; 108 109 #if defined(HAVE_GETADDRINFO) 110 struct addrinfo *host; 111 #endif 112 113 #ifdef ARGUS_SASL 114 sasl_conn_t *sasl_conn; 115 struct { 116 char *ipremoteport; 117 char *iplocalport; 118 sasl_ssf_t ssf; 119 char *authid; 120 } saslprops; 121 #endif 122 }; 123 124 struct ArgusOutputStruct { 125 int status, format; 126 127 #if defined(ARGUS_THREADS) 128 pthread_t thread; 129 pthread_mutex_t lock; 130 #endif 131 132 struct ArgusSourceStruct *ArgusSrc; 133 struct ArgusParserStruct *ArgusParser; 134 struct ArgusListStruct *ArgusWfileList; 135 struct ArgusListStruct *ArgusInputList; 136 struct ArgusListStruct *ArgusOutputList; 137 struct ArgusQueueStruct *ArgusClients; 138 struct ArgusRecord *ArgusInitMar; 139 140 long long ArgusTotalRecords, ArgusLastRecords; 141 int ArgusWriteStdOut, ArgusOutputSequence; 142 int ArgusPortNum, nflag; 143 int ArgusLfd[ARGUS_MAXLISTEN]; 144 int ArgusListens; 145 146 char *ArgusBindAddr; 147 148 struct timeval ArgusGlobalTime; 149 struct timeval ArgusStartTime; 150 struct timeval ArgusReportTime; 151 struct timeval ArgusNextUpdate; 152 struct timeval ArgusLastMarUpdateTime; 153 struct timeval ArgusMarReportInterval; 154 unsigned int ArgusLocalNet, ArgusNetMask; 155 }; 156 157 158 159 #if defined(ArgusOutput) 160 161 struct ArgusOutputStruct *ArgusOutputTask = NULL; 162 163 void *ArgusOutputProcess(void *); 164 165 void ArgusUsr1Sig (int); 166 void ArgusUsr2Sig (int); 167 void ArgusChildExit (int); 168 169 void ArgusClientError(void); 170 void ArgusInitClientProcess(struct ArgusClientData *, struct ArgusWfileStruct *); 171 172 #else 173 174 175 176 #define ARGUS_MAXPROCESS 0x10000 177 178 extern void clearArgusWfile(struct ArgusParserStruct *); 179 180 int ArgusTcpWrapper (int, struct sockaddr *, char *); 181 182 int RadiumParseResourceFile (struct ArgusParserStruct *, char *); 183 int ArgusEstablishListen (struct ArgusParserStruct *, int, char *); 184 185 struct ArgusRecord *ArgusGenerateInitialMar (struct ArgusOutputStruct *); 186 struct ArgusRecordStruct *ArgusGenerateInitialMarRecord (struct ArgusOutputStruct *); 187 struct ArgusRecordStruct *ArgusGenerateStatusMarRecord (struct ArgusOutputStruct *, unsigned char); 188 189 void setArgusMarReportInterval (struct ArgusParserStruct *, char *); 190 struct timeval *getArgusMarReportInterval(struct ArgusParserStruct *); 191 void setArgusPortNum (struct ArgusParserStruct *, int, char *); 192 int getArgusPortNum(struct ArgusParserStruct *); 193 void setArgusOflag(struct ArgusParserStruct *, unsigned int); 194 unsigned int getArgusIDType(struct ArgusParserStruct *); 195 void setArgusBindAddr (struct ArgusParserStruct *, char *); 196 void setArgusID(struct ArgusParserStruct *, void *, unsigned int); 197 unsigned int getArgusID(struct ArgusParserStruct *); 198 void clearRadiumConfiguration (void); 199 200 struct ArgusRecordStruct *ArgusCopyRecordStruct (struct ArgusRecordStruct *); 201 202 void *ArgusOutputProcess(void *); 203 void ArgusInitOutput (struct ArgusOutputStruct *); 204 struct ArgusOutputStruct *ArgusNewOutput (struct ArgusParserStruct *); 205 void ArgusDeleteOutput (struct ArgusParserStruct *, struct ArgusOutputStruct *); 206 struct ArgusSocketStruct *ArgusNewSocket (int); 207 void ArgusDeleteSocket (struct ArgusOutputStruct *, struct ArgusClientData *); 208 void ArgusCloseOutput(struct ArgusOutputStruct *); 209 210 int ArgusWriteSocket (struct ArgusOutputStruct *, struct ArgusClientData *, struct ArgusRecordStruct *); 211 int ArgusWriteOutSocket (struct ArgusOutputStruct *, struct ArgusClientData *); 212 213 extern void ArgusLoadList(struct ArgusListStruct *, struct ArgusListStruct *); 214 extern void ArgusCloseInput(struct ArgusParserStruct *parser, struct ArgusInput *); 215 216 extern struct ArgusOutputStruct *ArgusOutputTask; 217 218 extern void ArgusCloseSocket (int); 219 extern void ArgusCloseClients (void); 220 221 extern void ArgusUsr1Sig (int); 222 extern void ArgusUsr2Sig (int); 223 224 extern void ArgusClientError(void); 225 extern void ArgusInitClientProcess(struct ArgusClientData *, struct ArgusWfileStruct *); 226 227 #endif 228 #ifdef __cplusplus 229 } 230 #endif 231 #endif /* #ifndef ArgusRadium_h */ 232 233