test: Deallocate all memory in isds_DbOwnerInfo_duplicate tests
[libisds.git] / client / isdsclient.c
blobda3fbcf5ce7b5829fc7d3d283a63d753492d7494
1 #define _XOPEN_SOURCE 500
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <locale.h>
5 #include <time.h>
6 #include <string.h>
7 #include <isds.h>
8 #include "common.h"
11 int main(int argc, char **argv) {
12 struct isds_ctx *ctx = NULL;
13 isds_error err;
14 struct isds_DbOwnerInfo *db_owner_info = NULL;
15 char *recipient = NULL;
17 setlocale(LC_ALL, "");
19 err = isds_init();
20 if (err) {
21 printf("isds_init() failed: %s\n", isds_strerror(err));
22 exit(EXIT_FAILURE);
25 isds_set_logging(ILF_ALL & ~ILF_HTTP, ILL_ALL);
27 ctx = isds_ctx_create();
28 if (!ctx) {
29 printf("isds_ctx_create() failed");
32 err = isds_set_timeout(ctx, 10000);
33 if (err) {
34 printf("isds_set_timeout() failed: %s\n", isds_strerror(err));
37 err = isds_login(ctx, url, username(), password(), NULL, NULL);
38 if (err) {
39 printf("isds_login() failed: %s: %s\n", isds_strerror(err),
40 isds_long_message(ctx));
41 } else {
42 printf("Logged in :)\n");
45 err = isds_ping(ctx);
46 if (err) {
47 printf("isds_ping() failed: %s\n", isds_strerror(err));
48 } else {
49 printf("isds_ping() succeeded\n");
52 printf("Sending bogus request\n");
53 err = isds_bogus_request(ctx);
54 if (err) {
55 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err),
56 isds_long_message(ctx));
57 } else {
58 printf("isds_bogus_request() succeeded\n");
62 printf("Getting info about my box:\n");
63 err = isds_GetOwnerInfoFromLogin(ctx, &db_owner_info);
64 if (err) {
65 printf("isds_GetOwnerInfoFromLogin() failed: %s: %s\n",
66 isds_strerror(err), isds_long_message(ctx));
67 } else {
68 printf("isds_GetOwnerInfoFromLogin() succeeded\n");
70 print_DbOwnerInfo(db_owner_info);
75 /* Current server implementation (2009-11-17) does not allow to find
76 * myself. Previous version allowed it. */
77 struct isds_list *boxes = NULL, *item;
79 printf("Searching for my own box:\n");
80 err = isds_FindDataBox(ctx, db_owner_info, &boxes);
81 if (err == IE_SUCCESS || err == IE_2BIG) {
82 if (err == IE_2BIG)
83 printf("isds_FindDataBox() results truncated\n");
84 printf("isds_FindDataBox() succeeded:\n");
86 for(item = boxes; item; item = item->next) {
87 printf("List item:\n");
88 print_DbOwnerInfo(item->data);
90 } else {
91 printf("isds_FindDataBox() failed: %s: %s\n",
92 isds_strerror(err), isds_long_message(ctx));
95 isds_list_free(&boxes);
99 struct isds_list *boxes = NULL, *item;
100 struct isds_DbOwnerInfo *criteria = calloc(1, sizeof(*criteria));
101 if (!criteria) {
102 printf("Not enough memory for struct isds_DbOwnerInfo criteria\n");
103 exit(-1);
105 criteria->firmName = strdup("Obec");
106 if (!criteria->firmName) {
107 printf("Not enough memory for criteria->firmName\n");
108 exit(-1);
110 criteria->dbType = malloc(sizeof(*(criteria->dbType)));
111 if (!criteria->dbType) {
112 printf("Not enough memory for criteria->dbType\n");
113 exit(-1);
115 *(criteria->dbType) = DBTYPE_OVM;
117 printf("Searching box with firm name `%s':\n", criteria->firmName);
118 err = isds_FindDataBox(ctx, criteria, &boxes);
119 if (err == IE_SUCCESS || err == IE_2BIG) {
120 printf("isds_FindDataBox() succeeded:\n");
122 int n;
123 for(item = boxes, n = 1; item; item = item->next, n++) {
124 if (err != IE_2BIG) {
125 printf("List item #%d:\n", n);
126 print_DbOwnerInfo(item->data);
129 if (err == IE_2BIG)
130 printf("isds_FindDataBox() results truncated to %d boxes\n",
131 --n);
132 } else {
133 printf("isds_FindDataBox() failed: %s: %s\n",
134 isds_strerror(err), isds_long_message(ctx));
137 isds_list_free(&boxes);
138 isds_DbOwnerInfo_free(&criteria);
142 struct isds_list *boxes = NULL, *item;
143 struct isds_DbOwnerInfo criteria;
144 isds_DbType criteria_db_type = DBTYPE_OVM;
145 memset(&criteria, 0, sizeof(criteria));
146 criteria.dbType = &criteria_db_type;
147 criteria.dbID = "vqbab52";
149 printf("Searching for exact box by ID `%s' and type:\n", criteria.dbID);
150 err = isds_FindDataBox(ctx, &criteria, &boxes);
151 if (err == IE_SUCCESS || err == IE_2BIG) {
152 printf("isds_FindDataBox() succeeded:\n");
154 int n;
155 for(item = boxes, n = 1; item; item = item->next, n++) {
156 if (err != IE_2BIG) {
157 printf("List item #%d:\n", n);
158 print_DbOwnerInfo(item->data);
160 if (n == 1) recipient = strdup(
161 ((struct isds_DbOwnerInfo *)(item->data))->dbID);
163 if (err == IE_2BIG)
164 printf("isds_FindDataBox() results truncated to %d boxes\n",
165 --n);
166 } else {
167 printf("isds_FindDataBox() failed: %s: %s\n",
168 isds_strerror(err), isds_long_message(ctx));
171 isds_list_free(&boxes);
176 struct isds_list *boxes = NULL, *item;
177 struct isds_DbOwnerInfo criteria;
178 isds_DbType criteria_db_type = DBTYPE_OVM;
179 memset(&criteria, 0, sizeof(criteria));
180 criteria.firmName = "Místní";
181 criteria.dbType = &criteria_db_type;
183 printf("Searching box with firm name `%s':\n", criteria.firmName);
184 err = isds_FindDataBox(ctx, &criteria, &boxes);
185 if (err == IE_SUCCESS || err == IE_2BIG) {
186 printf("isds_FindDataBox() succeeded:\n");
188 int n;
189 for(item = boxes, n = 1; item; item = item->next, n++) {
190 if (err != IE_2BIG) {
191 printf("List item #%d:\n", n);
192 print_DbOwnerInfo(item->data);
194 if (n == 1) recipient = strdup(
195 ((struct isds_DbOwnerInfo *)(item->data))->dbID);
197 if (err == IE_2BIG)
198 printf("isds_FindDataBox() results truncated to %d boxes\n",
199 --n);
200 } else {
201 printf("isds_FindDataBox() failed: %s: %s\n",
202 isds_strerror(err), isds_long_message(ctx));
205 isds_list_free(&boxes);
209 if (db_owner_info) {
210 long int box_status = 0;
211 printf("Getting status of my box with ID `%s'\n", db_owner_info->dbID);
212 err = isds_CheckDataBox(ctx, db_owner_info->dbID, &box_status);
213 if (err)
214 printf("isds_CheckDataBox() failed: %s: %s\n",
215 isds_strerror(err), isds_long_message(ctx));
216 else {
217 printf("isds_CheckDataBox() succeeded: status = ");
218 print_DbState(box_status);
222 isds_DbOwnerInfo_free(&db_owner_info);
225 char *box_id = "7777777";
226 long int box_status = 0;
227 printf("Getting status of non existing box with ID `%s'\n", box_id);
228 err = isds_CheckDataBox(ctx, box_id, &box_status);
229 if (err)
230 printf("isds_CheckDataBox() failed: %s: %s\n",
231 isds_strerror(err), isds_long_message(ctx));
232 else {
233 printf("isds_CheckDataBox() succeeded: status = ");
234 print_DbState(box_status);
239 /* Send message */
241 struct isds_message message;
242 memset(&message, 0, sizeof(message));
244 struct isds_envelope envelope;
245 memset(&envelope, 0, sizeof(envelope));
246 message.envelope = &envelope;
247 envelope.dbIDRecipient = recipient;
248 long int dmSenderOrgUnitNum = 42;
249 envelope.dmSenderOrgUnitNum = &dmSenderOrgUnitNum;
250 envelope.dmAnnotation = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
251 /* "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
252 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
253 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
254 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
255 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
256 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
257 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
258 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
259 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
260 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
261 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
262 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
263 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
264 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
265 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
266 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
267 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
268 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
269 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"*/
270 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
272 struct isds_document minor_document;
273 memset(&minor_document, 0, sizeof(minor_document));
274 minor_document.data = "hello world?";
275 minor_document.data_length = strlen(minor_document.data);
276 minor_document.dmMimeType = "text/plain";
277 /* XXX: This should fail
278 minor_document.dmFileMetaType = FILEMETATYPE_MAIN; */
279 minor_document.dmFileMetaType = FILEMETATYPE_ENCLOSURE;
280 /* Server implementation demands dmFileDescr to be valid file name */
281 /*minor_document.dmFileDescr = "Standard text.txt";*/
282 minor_document.dmFileDescr = "minor_standard_text.txt";
283 minor_document.dmFileGuid = "2";
284 minor_document.dmUpFileGuid = "1";
286 struct isds_document main_document;
287 memset(&main_document, 0, sizeof(main_document));
288 main_document.data = "Hello World!";
289 main_document.data_length = strlen(main_document.data);
290 /* Server implementation sais text is not text file
291 * See <http://www.abclinuxu.cz/forum/show/284940> */
292 main_document.dmMimeType = "text/plain";
293 /* XXX: This should fail */
294 /*main_document.dmFileMetaType = FILEMETATYPE_ENCLOSURE;*/
295 main_document.dmFileMetaType = FILEMETATYPE_MAIN;
296 /* Server implementation demands dmFileDescr to be valid file name */
297 /*main_document.dmFileDescr = "Standard text.txt";*/
298 main_document.dmFileDescr = "standard_text.txt";
299 main_document.dmFileGuid = "1";
301 struct isds_list documents_main_item = {
302 .data = &main_document,
303 .next = NULL,
304 .destructor = NULL
306 struct isds_list documents_minor_item = {
307 .data = &minor_document,
308 .next = &documents_main_item,
309 .destructor = NULL
311 message.documents = &documents_minor_item;
314 printf("Sending message to box ID `%s'\n",
315 message.envelope->dbIDRecipient);
316 err = isds_send_message(ctx, &message);
317 if (err)
318 printf("isds_send_message() failed: %s: %s\n",
319 isds_strerror(err), isds_long_message(ctx));
320 else {
321 printf("isds_send_message() succeeded: assigned message ID = %s\n",
322 message.envelope->dmID);
325 free(message.envelope->dmID);
330 err = isds_logout(ctx);
331 if (err) {
332 printf("isds_logout() failed: %s\n", isds_strerror(err));
335 printf("Ping after logout should fail\n");
336 err = isds_ping(ctx);
337 if (err) {
338 printf("isds_ping() failed: %s\n", isds_strerror(err));
339 } else {
340 printf("isds_ping() succeeded\n");
343 printf("Sending bogus request after logout\n");
344 err = isds_bogus_request(ctx);
345 if (err) {
346 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err),
347 isds_long_message(ctx));
348 } else {
349 printf("isds_bogus_request() succeeded\n");
352 err = isds_ctx_free(&ctx);
353 if (err) {
354 printf("isds_ctx_free() failed: %s\n", isds_strerror(err));
358 err = isds_cleanup();
359 if (err) {
360 printf("isds_cleanup() failed: %s\n", isds_strerror(err));
363 exit (EXIT_SUCCESS);