Initial move to common config code directory
[tpg/opendispense2.git] / src / server / common.h
1 /*
2  * OpenDispense2
3  *
4  * This code is published under the terms of the Acess licence.
5  * See the file COPYING for details.
6  *
7  * common.h - Core Header
8  */
9 #ifndef _COMMON_H_
10 #define _COMMON_H_
11
12 #include <regex.h>
13 #include "../cokebank.h"
14
15 // === CONSTANTS ===
16 #define DEFAULT_CONFIG_FILE     "/etc/opendispense/main.cfg"
17 #define DEFAULT_ITEM_FILE       "/etc/opendispense/items.cfg"
18
19 // === HELPER MACROS ===
20
21 #define UNUSED(var)    unused__##var __attribute__((__unused__))
22
23 // === STRUCTURES ===
24 typedef struct sItem    tItem;
25 typedef struct sUser    tUser;
26 typedef struct sConfigItem      tConfigItem;
27 typedef struct sHandler tHandler;
28
29 struct sItem
30 {
31         char    *Name;  //!< Display Name
32          int    Price;  //!< Price
33          int    bHidden;        //!< Hidden item?
34          int    bDisabledi;     //!< Disabled Item
35         
36         tHandler        *Handler;       //!< Handler for the item
37         short   ID;     //!< Item ID
38 };
39
40 struct sUser
41 {
42          int    ID;             //!< User ID (LDAP ID)
43          int    Balance;        //!< Balance in cents
44          int    Bytes;  //!< Traffic Usage
45         char    Name[]; //!< Username
46 };
47
48 struct sConfigItem
49 {
50         char    *Name;
51         char    *Value;
52 };
53
54 struct sHandler
55 {
56         char    *Name;
57          int    (*Init)(int NConfig, tConfigItem *Config);
58         /**
59          * \brief Check if an item can be dispensed
60          * \return Boolean Failure
61          */
62          int    (*CanDispense)(int User, int ID);
63          int    (*DoDispense)(int User, int ID);
64 };
65
66 // === GLOBALS ===
67 extern tItem    *gaItems;
68 extern int      giNumItems;
69 extern tHandler *gaHandlers[];
70 extern int      giNumHandlers;
71 extern int      giDebugLevel;
72 extern int      gbNoCostMode;
73
74 // === FUNCTIONS ===
75 extern void     Items_UpdateFile(void);
76
77 // --- Helpers --
78 extern void     StartPeriodicThread(void);
79 extern void     AddPeriodicFunction(void (*Fcn)(void));
80 extern void     CompileRegex(regex_t *Regex, const char *Pattern, int Flags);
81 extern int      RunRegex(regex_t *regex, const char *string, int nMatches, regmatch_t *matches, const char *errorMessage);
82 extern int      InitSerial(const char *Path, int BaudRate);
83 extern char     *mkstr(const char *Format, ...);
84
85 // --- Dispense ---
86 extern int      DispenseItem(int ActualUser, int User, tItem *Item);
87 extern int      DispenseRefund(int ActualUser, int DestUser, tItem *Item, int OverridePrice);
88 extern int      DispenseGive(int ActualUser, int SrcUser, int DestUser, int Ammount, const char *ReasonGiven);
89 extern int      DispenseAdd(int ActualUser, int User, int Ammount, const char *ReasonGiven);
90 extern int      DispenseSet(int ActualUser, int User, int Balance, const char *ReasonGiven, int *OrigBalance);
91 extern int      DispenseDonate(int ActualUser, int User, int Ammount, const char *ReasonGiven);
92 extern int      DispenseUpdateItem(int User, tItem *Item, const char *NewName, int NewPrice);
93
94 // --- Logging ---
95 // to syslog
96 extern void     Log_Error(const char *Format, ...);
97 extern void     Log_Info(const char *Format, ...);
98 // To stdout
99 #define Debug_Notice(msg, v...) fprintf(stderr, "%08llun: "msg"\n", (unsigned long long)time(NULL) ,##v)
100 #define Debug_Debug(msg, v...)  fprintf(stderr, "%08llud: "msg"\n", (unsigned long long)time(NULL) ,##v)
101
102 #endif

UCC git Repository :: git.ucc.asn.au