]> arthur.barton.de Git - netdata.git/blob - src/web_buffer.h
58dd9c094363a6569f021abec7f61842f4af242a
[netdata.git] / src / web_buffer.h
1 #include <stdarg.h>
2 #include <time.h>
3 #include "storage_number.h"
4
5 #ifndef NETDATA_WEB_BUFFER_H
6 #define NETDATA_WEB_BUFFER_H 1
7
8 #define WEB_DATA_LENGTH_INCREASE_STEP 16384
9
10 typedef struct web_buffer {
11         size_t size;            // allocation size of buffer
12         size_t len;             // current data length in buffer
13         char *buffer;   // the buffer
14         uint8_t contenttype;
15         uint8_t options;
16         time_t date;    // the date this content has been generated
17 } BUFFER;
18
19 // options
20 #define WB_CONTENT_CACHEABLE                    1
21 #define WB_CONTENT_NO_CACHEABLE                 2
22
23 // content-types
24 #define CT_APPLICATION_JSON                             1
25 #define CT_TEXT_PLAIN                                   2
26 #define CT_TEXT_HTML                                    3
27 #define CT_APPLICATION_X_JAVASCRIPT             4
28 #define CT_TEXT_CSS                                             5
29 #define CT_TEXT_XML                                             6
30 #define CT_APPLICATION_XML                              7
31 #define CT_TEXT_XSL                                             8
32 #define CT_APPLICATION_OCTET_STREAM             9
33 #define CT_APPLICATION_X_FONT_TRUETYPE  10
34 #define CT_APPLICATION_X_FONT_OPENTYPE  11
35 #define CT_APPLICATION_FONT_WOFF                12
36 #define CT_APPLICATION_FONT_WOFF2               13
37 #define CT_APPLICATION_VND_MS_FONTOBJ   14
38 #define CT_IMAGE_SVG_XML                                15
39 #define CT_IMAGE_PNG                                    16
40 #define CT_IMAGE_JPG                                    17
41 #define CT_IMAGE_GIF                                    18
42 #define CT_IMAGE_XICON                                  19
43 #define CT_IMAGE_ICNS                                   20
44 #define CT_IMAGE_BMP                                    21
45
46 #define buffer_strlen(wb) ((wb)->len)
47 extern const char *buffer_tostring(BUFFER *wb);
48
49 #define buffer_need_bytes(buffer, needed_free_size) do { if(unlikely((buffer)->size - (buffer)->len < (size_t)(needed_free_size))) buffer_increase((buffer), (size_t)(needed_free_size)); } while(0)
50
51 #define buffer_flush(wb) wb->buffer[wb->len = 0] = '\0'
52 extern void buffer_reset(BUFFER *wb);
53
54 extern void buffer_strcat(BUFFER *wb, const char *txt);
55 extern void buffer_rrd_value(BUFFER *wb, calculated_number value);
56
57 extern void buffer_date(BUFFER *wb, int year, int month, int day, int hours, int minutes, int seconds);
58 extern void buffer_jsdate(BUFFER *wb, int year, int month, int day, int hours, int minutes, int seconds);
59
60 extern BUFFER *buffer_create(long size);
61 extern void buffer_free(BUFFER *b);
62 extern void buffer_increase(BUFFER *b, size_t free_size_required);
63
64 extern void buffer_snprintf(BUFFER *wb, size_t len, const char *fmt, ...);
65 extern void buffer_vsprintf(BUFFER *wb, const char *fmt, va_list args);
66 extern void buffer_sprintf(BUFFER *wb, const char *fmt, ...);
67
68 extern void buffer_char_replace(BUFFER *wb, char from, char to);
69
70 #endif /* NETDATA_WEB_BUFFER_H */