erroneously checked in
[codemux.git] / applib.h
1 #ifndef _APPLIB_H_
2 #define _APPLIB_H_
3
4 #include <stdio.h>
5 #include <sys/time.h>
6 #include <sys/types.h>
7 #include <sys/socket.h>
8 #include <netinet/in.h>
9 #include <sys/mman.h>
10 #include <netdb.h>
11 #include <limits.h>
12 #include "appdef.h"
13
14 float DiffTimeVal(const struct timeval *start, const struct timeval *end);
15
16 int  CreatePrivateAcceptSocketEx(int portNum, 
17                                  int nonBlocking, int loopbackOnly);
18 int CreatePrivateAcceptSocket(int portNum, int nonBlocking);
19 int CreatePublicUDPSocket(int portNum);
20 int MakeLoopbackConnection(int portNum, int nonBlocking);
21 int MakeConnection(char *name, in_addr_t netAddr, 
22                    int portNum, int nonBlocking);
23
24 char *GetField(const unsigned char *start, int whichField);
25 char *GetWord(const unsigned char *start, int whichWord);
26 char *GetWordEx(const unsigned char *start, int whichWord, 
27                 char* dest, int max);
28 int WordCount(char *buf);
29 char *ZapSpacesAndZeros(char *src);
30
31 int Base36Digit(int a);
32 int Base36To10(int a);
33 int PopCount(int val);
34 int PopCountChar(int val);
35 int LogValChar(int val);
36
37 const char *StringOrNull(const char *s);
38 char *strchars(const char *string, const char *list);
39 char *strnchars(const char *string, int length, const char *list);
40
41 #if defined(OS_FREEBSD) || defined(OS_DARWIN)
42 #define HAS_STRNSTR
43 #endif
44
45 #ifndef HAS_STRNSTR
46 char *strnstr(const char * s1, int s1_len, const char * s2);
47 #endif
48
49 char * strncasestr(const char * s1, int s1_len, const char * s2);
50 int strncspn(const char* string, int length, const char* reject);
51 char *strnchr(const char *string, int length, const char needle);
52 char *StrdupLower(const char *orig);
53 void StrcpyLower(char *dest, const char *src);
54 void StrcpyLowerExcept(char *dest, int dest_max, const char* src, const char* except);
55 char *GetLowerNextLine(FILE *file);
56 char *GetNextLine(FILE *file);
57 char *GetNextLineNoCommStrip(FILE *file);
58 int DoesSuffixMatch(char *start, int len, char *suffix);
59 int DoesDotlessSuffixMatch(char *start, int len, char *suffix);
60
61 /* resolves a name using CoDNS */
62 #include "codns.h"
63 void HtoN_LocalQueryInfo(LocalQueryInfo *p);
64 void NtoH_LocalQueryResult(LocalQueryResult* p);
65 int CoDNSGetHostByNameSync(const char *name, struct in_addr *res);
66
67 #ifdef OS_LINUX
68 #include <alloca.h>
69 #endif
70
71 #include <string.h>
72
73 /*  allocate stack memory to copy "src" to "dest" in lower cases */
74 #define LOCAL_STR_DUP_LOWER(dest, src)    \
75   { dest = alloca(strlen(src) + 1);       \
76     StrcpyLower(dest, src);               \
77   }
78   
79 /*  allocate stack memory to copy "src" to "dest" */
80 #define LOCAL_STR_DUP(dest, src)         \
81   { dest = alloca(strlen(src) + 1);      \
82     strcpy(dest, src);                   \
83   }
84
85 /* release memory pointer after checking NULL */
86 #define FREE_PTR(x) if ((x) != NULL) { xfree(x);}
87
88 /* Bit vector implementation */
89 void SetBits(int* bits, int idx, int maxNum);
90 int GetBits(int* bits, int idx, int maxNum);
91 int GetNumBits(int* bitvecs, int maxNum);
92
93 /* extended logging */
94 typedef void* HANDLE;             
95
96 HANDLE CreateLogFHandle(const char* signature, int change_file_name_on_save);
97 int OpenLogF(HANDLE file);
98 int WriteLog(HANDLE file, const char* data, int size, int forceFlush);
99 void DailyReopenLogF(HANDLE file);
100 int HandleToFileNo(HANDLE file);
101
102 /* flush the buffer */
103 #define FlushLogF(h)  WriteLog(h, NULL, 0, TRUE)
104
105 /* maximum single log file size, defined in applib.c */
106 extern int maxSingleLogSize; 
107
108 #include "gettimeofdayex.h"
109
110 void FeedbackDelay(struct timeval *start, float minSec, float maxSec);
111
112 int NiceExitOpenLog(char *logName);
113 void NiceExitBack(int val, char *reason, char *file, int line) __attribute__ ((noreturn));
114 #define NiceExit(val, reason) NiceExitBack(val, reason, __FILE__, __LINE__)
115
116 char *ReadFile(const char *filename);
117 char *ReadFileEx(const char *filename, int *size);
118 char *MmapFile(const char *filename, int *size);
119
120 /* use 32-bit unsigned integer, higher bits are thrown away */
121 #define WORD_BITS 32
122 #define MASK 0xFFFFFFFF
123 /* bitwise left rotate operator */
124 #define _rotl(Val, Bits) ((((Val)<<(Bits)) | (((Val) & MASK)>>(32 - (Bits)))) & MASK)
125
126 unsigned int HashString(const char *name, unsigned int hash, 
127                         int endOnQuery, int skipLastIfDot);
128 unsigned int CalcAgentHash(const char* agent);
129 #endif
130