libdali  1.6
 All Classes Files Functions Variables Typedefs Macros Pages
libdali.h
Go to the documentation of this file.
1 /***********************************************************************/
23 #ifndef LIBDALI_H
24 #define LIBDALI_H 1
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 #include "portable.h"
31 
32 #define LIBDALI_VERSION "1.6"
33 #define LIBDALI_RELEASE "2013.210"
35 #define MAXPACKETSIZE 16384
36 #define MAXREGEXSIZE 16384
37 #define MAX_LOG_MSG_LENGTH 200
39 #define LIBDALI_POSITION_EARLIEST -2
40 #define LIBDALI_POSITION_LATEST -3
43 #define MAXSTREAMID 60
44 
45 /* Return values for dl_collect() and dl_collect_nb() */
46 #define DLERROR -1
47 #define DLENDED 0
48 #define DLPACKET 1
49 #define DLNOPACKET 2
53 #define DLTMODULUS 1000000
54 
58 #define DLTERROR -2145916800000000LL
59 
61 #define DL_EPOCH2DLTIME(X) X * (dltime_t) DLTMODULUS
62 
63 #define DL_DLTIME2EPOCH(X) X / DLTMODULUS
64 
67 typedef int64_t dltime_t;
68 
70 typedef struct DLLog_s
71 {
72  void (*log_print)();
73  const char *logprefix;
74  void (*diag_print)();
75  const char *errprefix;
76  int verbosity;
77 } DLLog;
78 
80 typedef struct DLCP_s
81 {
82  char addr[100];
83  char clientid[200];
84  int keepalive;
85  int iotimeout;
87  /* Connection parameters maintained internally */
88  int link;
89  float serverproto;
90  int32_t maxpktsize;
91  int8_t writeperm;
92  int64_t pktid;
93  dltime_t pkttime;
94  int8_t keepalive_trig;
95  dltime_t keepalive_time;
96  int8_t terminate;
97  int8_t streaming;
100 } DLCP;
101 
103 typedef struct DLPacket_s
104 {
106  int64_t pktid;
107  dltime_t pkttime;
108  dltime_t datastart;
109  dltime_t dataend;
110  int32_t datasize;
111 } DLPacket;
112 
113 
114 /* connection.c */
115 extern DLCP * dl_newdlcp (char *address, char *progname);
116 extern void dl_freedlcp (DLCP *dlconn);
117 extern int dl_exchangeIDs (DLCP *dlconn, int parseresp);
118 extern int64_t dl_position (DLCP *dlconn, int64_t pktid, dltime_t pkttime);
119 extern int64_t dl_position_after (DLCP *dlconn, dltime_t datatime);
120 extern int64_t dl_match (DLCP *dlconn, char *matchpattern);
121 extern int64_t dl_reject (DLCP *dlconn, char *rejectpattern);
122 extern int64_t dl_write (DLCP *dlconn, void *packet, int packetlen, char *streamid,
123  dltime_t datastart, dltime_t dataend, int ack);
124 extern int dl_read (DLCP *dlconn, int64_t pktid, DLPacket *packet,
125  void *packetdata, size_t maxdatasize);
126 extern int dl_getinfo (DLCP *dlconn, const char *infotype, char *infomatch,
127  char **infodata, size_t maxinfosize);
128 extern int dl_collect (DLCP *dlconn, DLPacket *packet, void *packetdata,
129  size_t maxdatasize, int8_t endflag);
130 extern int dl_collect_nb (DLCP *dlconn, DLPacket *packet, void *packetdata,
131  size_t maxdatasize, int8_t endflag);
132 extern int dl_handlereply (DLCP *dlconn, void *buffer, int buflen, int64_t *value);
133 extern void dl_terminate (DLCP *dlconn);
134 
135 /* config.c */
136 extern char *dl_read_streamlist (DLCP *dlconn, const char *streamfile);
137 
138 /* network.c */
139 extern int dl_connect (DLCP *dlconn);
140 extern void dl_disconnect (DLCP *dlconn);
141 extern int dl_senddata (DLCP *dlconn, void *buffer, size_t sendlen);
142 extern int dl_sendpacket (DLCP *dlconn, void *headerbuf, size_t headerlen,
143  void *databuf, size_t datalen,
144  void *respbuf, int resplen);
145 extern int dl_recvdata (DLCP *dlconn, void *buffer, size_t readlen, uint8_t blockflag);
146 extern int dl_recvheader (DLCP *dlconn, void *buffer, size_t buflen, uint8_t blockflag);
147 
148 /* timeutils.c */
149 extern int dl_doy2md (int year, int jday, int *month, int *mday);
150 extern int dl_md2doy (int year, int month, int mday, int *jday);
151 extern char *dl_dltime2isotimestr (dltime_t dltime, char *isotimestr, int8_t subseconds);
152 extern char *dl_dltime2mdtimestr (dltime_t dltime, char *mdtimestr, int8_t subseconds);
153 extern char *dl_dltime2seedtimestr (dltime_t dltime, char *seedtimestr, int8_t subseconds);
154 extern dltime_t dl_time2dltime (int year, int day, int hour, int min, int sec, int usec);
155 extern dltime_t dl_seedtimestr2dltime (char *seedtimestr);
156 extern dltime_t dl_timestr2dltime (char *timestr);
157 
158 /* genutils.c */
159 extern int dl_splitstreamid (char *streamid, char *w, char *x, char *y, char *z, char *type);
160 extern int dl_bigendianhost (void);
161 extern double dl_dabs (double value);
162 extern int dl_readline (int fd, char *buffer, int buflen);
163 
164 /* logging.c */
165 extern int dl_log (int level, int verb, ...);
166 extern int dl_log_r (const DLCP *dlconn, int level, int verb, ...);
167 extern int dl_log_rl (DLLog *log, int level, int verb, ...);
168 extern void dl_loginit (int verbosity,
169  void (*log_print)(char*), const char *logprefix,
170  void (*diag_print)(char*), const char *errprefix);
171 extern void dl_loginit_r (DLCP *dlconn, int verbosity,
172  void (*log_print)(char*), const char *logprefix,
173  void (*diag_print)(char*), const char *errprefix);
174 extern DLLog *dl_loginit_rl (DLLog *log, int verbosity,
175  void (*log_print)(char*), const char *logprefix,
176  void (*diag_print)(char*), const char *errprefix);
177 
178 /* statefile.c */
179 extern int dl_recoverstate (DLCP *dlconn, const char *statefile);
180 extern int dl_savestate (DLCP *dlconn, const char *statefile);
181 
182 /* strutils.c */
183 
184 /* For a linked list of strings, as filled by strparse() */
185 typedef struct DLstrlist_s {
186  char *element;
187  struct DLstrlist_s *next;
188 } DLstrlist;
189 
190 extern int dl_strparse (const char *string, const char *delim, DLstrlist **list);
191 extern int dl_strncpclean (char *dest, const char *source, int length);
192 extern int dl_addtostring (char **string, char *add, char *delim, int maxlen);
193 
194 
195 #ifdef __cplusplus
196 }
197 #endif
198 
199 #endif /* LIBDALI_H */