1 #define _XOPEN_SOURCE 500
11 int main(int argc
, char **argv
) {
12 struct isds_ctx
*ctx
= NULL
;
14 struct isds_DbOwnerInfo
*db_owner_info
= NULL
;
15 char *recipient
= NULL
;
17 setlocale(LC_ALL
, "");
21 printf("isds_init() failed: %s\n", isds_strerror(err
));
24 isds_set_logging(ILF_ALL
& ~ILF_HTTP
, ILL_ALL
);
26 ctx
= isds_ctx_create();
28 printf("isds_ctx_create() failed");
31 err
= isds_set_timeout(ctx
, 10000);
33 printf("isds_set_timeout() failed: %s\n", isds_strerror(err
));
36 /* err = isds_set_tls(ctx, ITLS_VERIFY_SERVER, 0);
38 printf("isds_set_tls(ITLS_VERIFY_SERVER) failed: %s\n",
42 err = isds_set_tls(ctx, ITLS_CA_FILE, "/etc/ssl/certs/ca-certificates.crt");
44 printf("isds_set_tls(ITLS_CA_FILE) failed: %s\n",
48 err
= isds_login(ctx
, url
, username
, password
, NULL
, NULL
);
50 printf("isds_login() failed: %s: %s\n", isds_strerror(err
),
51 isds_long_message(ctx
));
53 printf("Logged in :)\n");
58 printf("isds_ping() failed: %s\n", isds_strerror(err
));
60 printf("isds_ping() succeeded\n");
63 printf("Sending bogus request\n");
64 err
= isds_bogus_request(ctx
);
66 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err
),
67 isds_long_message(ctx
));
69 printf("isds_bogus_request() succeeded\n");
73 printf("Getting info about my box:\n");
74 err
= isds_GetOwnerInfoFromLogin(ctx
, &db_owner_info
);
76 printf("isds_GetOwnerInfoFromLogin() failed: %s: %s\n",
77 isds_strerror(err
), isds_long_message(ctx
));
79 printf("isds_GetOwnerInfoFromLogin() succeeded\n");
81 print_DbOwnerInfo(db_owner_info
);
86 /* Current server implementation (2009-11-17) does not allow to find
87 * myself. Previous version allowed it. */
88 struct isds_list
*boxes
= NULL
, *item
;
90 printf("Searching for my own box:\n");
91 err
= isds_FindDataBox(ctx
, db_owner_info
, &boxes
);
92 if (err
== IE_SUCCESS
|| err
== IE_2BIG
) {
94 printf("isds_FindDataBox() results truncated\n");
95 printf("isds_FindDataBox() succeeded:\n");
97 for(item
= boxes
; item
; item
= item
->next
) {
98 printf("List item:\n");
99 print_DbOwnerInfo(item
->data
);
102 printf("isds_FindDataBox() failed: %s: %s\n",
103 isds_strerror(err
), isds_long_message(ctx
));
106 isds_list_free(&boxes
);
110 struct isds_list
*boxes
= NULL
, *item
;
111 struct isds_DbOwnerInfo
*criteria
= calloc(1, sizeof(*criteria
));
113 printf("Not enough memory for struct isds_DbOwnerInfo criteria\n");
116 criteria
->firmName
= strdup("Obec");
117 if (!criteria
->firmName
) {
118 printf("Not enough memory for criteria->firmName\n");
121 criteria
->dbType
= malloc(sizeof(*(criteria
->dbType
)));
122 if (!criteria
->dbType
) {
123 printf("Not enough memory for criteria->dbType\n");
126 *(criteria
->dbType
) = DBTYPE_OVM
;
128 printf("Searching box with firm name `%s':\n", criteria
->firmName
);
129 err
= isds_FindDataBox(ctx
, criteria
, &boxes
);
130 if (err
== IE_SUCCESS
|| err
== IE_2BIG
) {
131 printf("isds_FindDataBox() succeeded:\n");
134 for(item
= boxes
, n
= 1; item
; item
= item
->next
, n
++) {
135 if (err
!= IE_2BIG
) {
136 printf("List item #%d:\n", n
);
137 print_DbOwnerInfo(item
->data
);
141 printf("isds_FindDataBox() results truncated to %d boxes\n",
144 printf("isds_FindDataBox() failed: %s: %s\n",
145 isds_strerror(err
), isds_long_message(ctx
));
148 isds_list_free(&boxes
);
149 isds_DbOwnerInfo_free(&criteria
);
153 struct isds_list
*boxes
= NULL
, *item
;
154 struct isds_DbOwnerInfo criteria
;
155 isds_DbType criteria_db_type
= DBTYPE_OVM
;
156 memset(&criteria
, 0, sizeof(criteria
));
157 criteria
.dbType
= &criteria_db_type
;
158 criteria
.dbID
= "vqbab52";
160 printf("Searching for exact box by ID `%s' and type:\n", criteria
.dbID
);
161 err
= isds_FindDataBox(ctx
, &criteria
, &boxes
);
162 if (err
== IE_SUCCESS
|| err
== IE_2BIG
) {
163 printf("isds_FindDataBox() succeeded:\n");
166 for(item
= boxes
, n
= 1; item
; item
= item
->next
, n
++) {
167 if (err
!= IE_2BIG
) {
168 printf("List item #%d:\n", n
);
169 print_DbOwnerInfo(item
->data
);
171 if (n
== 1) recipient
= strdup(
172 ((struct isds_DbOwnerInfo
*)(item
->data
))->dbID
);
175 printf("isds_FindDataBox() results truncated to %d boxes\n",
178 printf("isds_FindDataBox() failed: %s: %s\n",
179 isds_strerror(err
), isds_long_message(ctx
));
182 isds_list_free(&boxes
);
187 struct isds_list
*boxes
= NULL
, *item
;
188 struct isds_DbOwnerInfo criteria
;
189 isds_DbType criteria_db_type
= DBTYPE_OVM
;
190 memset(&criteria
, 0, sizeof(criteria
));
191 criteria
.firmName
= "Místní";
192 criteria
.dbType
= &criteria_db_type
;
194 printf("Searching box with firm name `%s':\n", criteria
.firmName
);
195 err
= isds_FindDataBox(ctx
, &criteria
, &boxes
);
196 if (err
== IE_SUCCESS
|| err
== IE_2BIG
) {
197 printf("isds_FindDataBox() succeeded:\n");
200 for(item
= boxes
, n
= 1; item
; item
= item
->next
, n
++) {
201 if (err
!= IE_2BIG
) {
202 printf("List item #%d:\n", n
);
203 print_DbOwnerInfo(item
->data
);
205 if (n
== 1) recipient
= strdup(
206 ((struct isds_DbOwnerInfo
*)(item
->data
))->dbID
);
209 printf("isds_FindDataBox() results truncated to %d boxes\n",
212 printf("isds_FindDataBox() failed: %s: %s\n",
213 isds_strerror(err
), isds_long_message(ctx
));
216 isds_list_free(&boxes
);
221 long int box_status
= 0;
222 printf("Getting status of my box with ID `%s'\n", db_owner_info
->dbID
);
223 err
= isds_CheckDataBox(ctx
, db_owner_info
->dbID
, &box_status
);
225 printf("isds_CheckDataBox() failed: %s: %s\n",
226 isds_strerror(err
), isds_long_message(ctx
));
228 printf("isds_CheckDataBox() succeeded: status = ");
229 print_DbState(box_status
);
233 isds_DbOwnerInfo_free(&db_owner_info
);
236 char *box_id
= "7777777";
237 long int box_status
= 0;
238 printf("Getting status of non existing box with ID `%s'\n", box_id
);
239 err
= isds_CheckDataBox(ctx
, box_id
, &box_status
);
241 printf("isds_CheckDataBox() failed: %s: %s\n",
242 isds_strerror(err
), isds_long_message(ctx
));
244 printf("isds_CheckDataBox() succeeded: status = ");
245 print_DbState(box_status
);
252 struct isds_message message
;
253 memset(&message
, 0, sizeof(message
));
255 struct isds_envelope envelope
;
256 memset(&envelope
, 0, sizeof(envelope
));
257 message
.envelope
= &envelope
;
258 envelope
.dbIDRecipient
= recipient
;
259 long int dmSenderOrgUnitNum
= 42;
260 envelope
.dmSenderOrgUnitNum
= &dmSenderOrgUnitNum
;
261 envelope
.dmAnnotation
= "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
262 /* "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
263 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
264 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
265 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
266 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
267 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
268 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
269 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
270 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
271 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
272 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
273 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
274 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
275 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
276 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
277 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
278 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
279 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
280 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"*/
281 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
283 struct isds_document minor_document
;
284 memset(&minor_document
, 0, sizeof(minor_document
));
285 minor_document
.data
= "hello world?";
286 minor_document
.data_length
= strlen(minor_document
.data
);
287 minor_document
.dmMimeType
= "text/plain";
288 /* XXX: This should fail
289 minor_document.dmFileMetaType = FILEMETATYPE_MAIN; */
290 minor_document
.dmFileMetaType
= FILEMETATYPE_ENCLOSURE
;
291 /* Server implementation demands dmFileDescr to be valid file name */
292 /*minor_document.dmFileDescr = "Standard text.txt";*/
293 minor_document
.dmFileDescr
= "minor_standard_text.txt";
294 minor_document
.dmFileGuid
= "2";
295 minor_document
.dmUpFileGuid
= "1";
297 struct isds_document main_document
;
298 memset(&main_document
, 0, sizeof(main_document
));
299 main_document
.data
= "Hello World!";
300 main_document
.data_length
= strlen(main_document
.data
);
301 /* Server implementation sais text is not text file
302 * See <http://www.abclinuxu.cz/forum/show/284940> */
303 main_document
.dmMimeType
= "text/plain";
304 /* XXX: This should fail */
305 /*main_document.dmFileMetaType = FILEMETATYPE_ENCLOSURE;*/
306 main_document
.dmFileMetaType
= FILEMETATYPE_MAIN
;
307 /* Server implementation demands dmFileDescr to be valid file name */
308 /*main_document.dmFileDescr = "Standard text.txt";*/
309 main_document
.dmFileDescr
= "standard_text.txt";
310 main_document
.dmFileGuid
= "1";
312 struct isds_list documents_main_item
= {
313 .data
= &main_document
,
317 struct isds_list documents_minor_item
= {
318 .data
= &minor_document
,
319 .next
= &documents_main_item
,
322 message
.documents
= &documents_minor_item
;
325 printf("Sending message to box ID `%s'\n",
326 message
.envelope
->dbIDRecipient
);
327 err
= isds_send_message(ctx
, &message
);
329 printf("isds_send_message() failed: %s: %s\n",
330 isds_strerror(err
), isds_long_message(ctx
));
332 printf("isds_send_message() succeeded: assigned message ID = %s\n",
333 message
.envelope
->dmID
);
336 free(message
.envelope
->dmID
);
340 /* Get list of sent messages */
342 struct tm from_time_tm
= {
343 .tm_year
= 2000 - 1900,
351 time_t from_time_t
= mktime(&from_time_tm
);
352 struct timeval from_time
= {
353 .tv_sec
= from_time_t
,
356 unsigned long int number
= 0;
357 struct isds_list
*messages
= NULL
, *item
;
359 /* TODO: Try different criteria */
360 printf("Getting list of sent messages\n");
361 err
= isds_get_list_of_sent_messages(ctx
, &from_time
, NULL
, NULL
,
362 MESSAGESTATE_ANY
, 0, &number
, &messages
);
364 printf("isds_isds_get_list_of_sent_messages() failed: %s: %s\n",
365 isds_strerror(err
), isds_long_message(ctx
));
367 printf("isds_isds_get_list_of_sent_messages() succeeded: "
368 "number of messages = %lu:\n", number
);
369 for(item
= messages
; item
; item
= item
->next
) {
370 printf("List item:\n");
371 print_message(item
->data
);
375 isds_list_free(&messages
);
379 err
= isds_logout(ctx
);
381 printf("isds_logout() failed: %s\n", isds_strerror(err
));
384 printf("Ping after logout should fail\n");
385 err
= isds_ping(ctx
);
387 printf("isds_ping() failed: %s\n", isds_strerror(err
));
389 printf("isds_ping() succeeded\n");
392 printf("Sending bogus request after logout\n");
393 err
= isds_bogus_request(ctx
);
395 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err
),
396 isds_long_message(ctx
));
398 printf("isds_bogus_request() succeeded\n");
401 err
= isds_ctx_free(&ctx
);
403 printf("isds_ctx_free() failed: %s\n", isds_strerror(err
));
407 err
= isds_cleanup();
409 printf("isds_cleanup() failed: %s\n", isds_strerror(err
));