6 char xml_root_header
[] = "\
7 <api service=\"%s\" version=\"%s\">\
10 char xml_root_entry
[] = "\
12 <link rel=\"%s\" href=\"http://%s/\%s\"/>\
15 char xml_root_footer
[] = "\
20 char xml_prov_header
[] = "\
24 char xml_prov_entry
[] = "\
26 <provider name=\"%s\">\n\
30 <username>%s</username>\n\
31 <password>%s</password>\n\
35 char xml_prov_footer
[] = "\
40 char xml_obj_header
[] = "\
44 char xml_obj_entry
[] = "\
47 <bucket>%s</bucket>\n\
52 char xml_obj_footer
[] = "\
58 tmpl_format_t xml_format
= {
59 .root_header
= xml_root_header
,
60 .root_entry
= xml_root_entry
,
61 .root_footer
= xml_root_footer
,
62 .prov_header
= xml_prov_header
,
63 .prov_entry
= xml_prov_entry
,
64 .prov_footer
= xml_prov_footer
,
65 .obj_header
= xml_obj_header
,
66 .obj_entry
= xml_obj_entry
,
67 .obj_footer
= xml_obj_footer
,
71 char json_root_header
[] = "\
73 \"service\": \"%s\",\n\
74 \"version\": \"%s\",\n\
78 char json_root_entry
[] = "\
82 \"link\": \"http://%s/%s\"\n\
86 char json_root_footer
[] = "\
92 char json_prov_header
[] = "\
96 char json_prov_entry
[] = "\
103 \"username\": \"%s\",\n\
104 \"password\": \"%s\"\n\
108 char json_prov_footer
[] = "\
113 char json_obj_header
[] = "\
117 char json_obj_entry
[] = "\
120 \"bucket\": \"%s\",\n\
125 char json_obj_footer
[] = "\
130 tmpl_format_t json_format
= {
131 .root_header
= json_root_header
,
132 .root_entry
= json_root_entry
,
133 .root_footer
= json_root_footer
,
134 .prov_header
= json_prov_header
,
135 .prov_entry
= json_prov_entry
,
136 .prov_footer
= json_prov_footer
,
137 .obj_header
= json_obj_header
,
138 .obj_entry
= json_obj_entry
,
139 .obj_footer
= json_obj_footer
,
144 tmpl_get_ctx (const char *type
)
148 tmp
= malloc(sizeof(*tmp
));
150 if (type
&& strstr(type
,"/json")) {
151 tmp
->format
= &json_format
;
154 tmp
->format
= &xml_format
;
162 tmpl_root_header (tmpl_ctx_t
*ctx
, char *name
, char *version
)
165 tmpl_format_t
*fmt
= ctx
->format
;
167 size
= snprintf(ctx
->raw_buf
,TMPL_BUF_SIZE
,fmt
->root_header
,
169 if (size
>= TMPL_BUF_SIZE
) {
172 ctx
->buf
= ctx
->raw_buf
;
178 tmpl_root_entry (tmpl_ctx_t
*ctx
, char *rel
, char *link
)
181 tmpl_format_t
*fmt
= ctx
->format
;
183 size
= snprintf(ctx
->raw_buf
,TMPL_BUF_SIZE
,fmt
->root_entry
,
184 rel
, ctx
->base
, link
);
185 if (size
>= TMPL_BUF_SIZE
) {
188 ctx
->buf
= ctx
->raw_buf
;
190 if (size
&& (ctx
->index
== 0)) {
191 ctx
->buf
+= fmt
->z_offset
;
192 size
-= fmt
->z_offset
;
200 tmpl_root_footer (tmpl_ctx_t
*ctx
)
202 ctx
->buf
= ctx
->format
->root_footer
;
203 return strlen(ctx
->buf
);
207 tmpl_prov_header (tmpl_ctx_t
*ctx
)
209 ctx
->buf
= ctx
->format
->prov_header
;
210 return strlen(ctx
->buf
);
214 tmpl_prov_entry (tmpl_ctx_t
*ctx
,
215 const char *name
, const char *type
,
216 const char *host
, int port
,
217 const char *user
, const char *pass
)
220 tmpl_format_t
*fmt
= ctx
->format
;
222 size
= snprintf(ctx
->raw_buf
,TMPL_BUF_SIZE
,fmt
->prov_entry
,
223 name
, type
, host
, port
, user
, pass
);
224 if (size
>= TMPL_BUF_SIZE
) {
227 ctx
->buf
= ctx
->raw_buf
;
229 if (size
&& (ctx
->index
== 0)) {
230 ctx
->buf
+= fmt
->z_offset
;
231 size
-= fmt
->z_offset
;
239 tmpl_prov_footer (tmpl_ctx_t
*ctx
)
241 ctx
->buf
= ctx
->format
->prov_footer
;
242 return strlen(ctx
->buf
);
246 tmpl_obj_header (tmpl_ctx_t
*ctx
)
248 ctx
->buf
= ctx
->format
->obj_header
;
249 return strlen(ctx
->buf
);
253 tmpl_obj_entry (tmpl_ctx_t
*ctx
, const char *bucket
, const char *key
)
256 tmpl_format_t
*fmt
= ctx
->format
;
258 size
= snprintf(ctx
->raw_buf
,TMPL_BUF_SIZE
,fmt
->obj_entry
,bucket
,key
);
259 if (size
>= TMPL_BUF_SIZE
) {
262 ctx
->buf
= ctx
->raw_buf
;
264 if (size
&& (ctx
->index
== 0)) {
265 ctx
->buf
+= fmt
->z_offset
;
266 size
-= fmt
->z_offset
;
274 tmpl_obj_footer (tmpl_ctx_t
*ctx
)
276 ctx
->buf
= ctx
->format
->obj_footer
;
277 return strlen(ctx
->buf
);