test: guess_raw_type: plain signed incoming message
[libisds.git] / client / isdsclient.c
blobb008b4bfbec0587941ba10abfb98938b68d6318c
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_set_tls(ctx, ITLS_VERIFY_SERVER, 0);
38 if (err) {
39 printf("isds_set_tls(ITLS_VERIFY_SERVER) failed: %s\n",
40 isds_strerror(err));
43 err = isds_set_tls(ctx, ITLS_CA_FILE, "/etc/ssl/certs/ca-certificates.crt");
44 if (err) {
45 printf("isds_set_tls(ITLS_CA_FILE) failed: %s\n",
46 isds_strerror(err));
47 }*/
49 err = isds_login(ctx, url, username, password, NULL);
50 if (err) {
51 printf("isds_login() failed: %s: %s\n", isds_strerror(err),
52 isds_long_message(ctx));
53 } else {
54 printf("Logged in :)\n");
57 err = isds_ping(ctx);
58 if (err) {
59 printf("isds_ping() failed: %s\n", isds_strerror(err));
60 } else {
61 printf("isds_ping() succeeded\n");
64 printf("Sending bogus request\n");
65 err = isds_bogus_request(ctx);
66 if (err) {
67 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err),
68 isds_long_message(ctx));
69 } else {
70 printf("isds_bogus_request() succeeded\n");
74 printf("Getting info about my box:\n");
75 err = isds_GetOwnerInfoFromLogin(ctx, &db_owner_info);
76 if (err) {
77 printf("isds_GetOwnerInfoFromLogin() failed: %s: %s\n",
78 isds_strerror(err), isds_long_message(ctx));
79 } else {
80 printf("isds_GetOwnerInfoFromLogin() succeeded\n");
82 print_DbOwnerInfo(db_owner_info);
87 /* Current server implementation (2009-11-17) does not allow to find
88 * myself. Previous version allowed it. */
89 struct isds_list *boxes = NULL, *item;
91 printf("Searching for my own box:\n");
92 err = isds_FindDataBox(ctx, db_owner_info, &boxes);
93 if (err == IE_SUCCESS || err == IE_2BIG) {
94 if (err == IE_2BIG)
95 printf("isds_FindDataBox() results truncated\n");
96 printf("isds_FindDataBox() succeeded:\n");
98 for(item = boxes; item; item = item->next) {
99 printf("List item:\n");
100 print_DbOwnerInfo(item->data);
102 } else {
103 printf("isds_FindDataBox() failed: %s: %s\n",
104 isds_strerror(err), isds_long_message(ctx));
107 isds_list_free(&boxes);
111 struct isds_list *boxes = NULL, *item;
112 struct isds_DbOwnerInfo *criteria = calloc(1, sizeof(*criteria));
113 if (!criteria) {
114 printf("Not enough memory for struct isds_DbOwnerInfo criteria\n");
115 exit(-1);
117 criteria->firmName = strdup("Obec");
118 if (!criteria->firmName) {
119 printf("Not enough memory for criteria->firmName\n");
120 exit(-1);
122 criteria->dbType = malloc(sizeof(*(criteria->dbType)));
123 if (!criteria->dbType) {
124 printf("Not enough memory for criteria->dbType\n");
125 exit(-1);
127 *(criteria->dbType) = DBTYPE_OVM;
129 printf("Searching box with firm name `%s':\n", criteria->firmName);
130 err = isds_FindDataBox(ctx, criteria, &boxes);
131 if (err == IE_SUCCESS || err == IE_2BIG) {
132 printf("isds_FindDataBox() succeeded:\n");
134 int n;
135 for(item = boxes, n = 1; item; item = item->next, n++) {
136 if (err != IE_2BIG) {
137 printf("List item #%d:\n", n);
138 print_DbOwnerInfo(item->data);
141 if (err == IE_2BIG)
142 printf("isds_FindDataBox() results truncated to %d boxes\n",
143 --n);
144 } else {
145 printf("isds_FindDataBox() failed: %s: %s\n",
146 isds_strerror(err), isds_long_message(ctx));
149 isds_list_free(&boxes);
150 isds_DbOwnerInfo_free(&criteria);
154 struct isds_list *boxes = NULL, *item;
155 struct isds_DbOwnerInfo criteria;
156 isds_DbType criteria_db_type = DBTYPE_OVM;
157 memset(&criteria, 0, sizeof(criteria));
158 criteria.dbType = &criteria_db_type;
159 criteria.dbID = "vqbab52";
161 printf("Searching for exact box by ID `%s' and type:\n", criteria.dbID);
162 err = isds_FindDataBox(ctx, &criteria, &boxes);
163 if (err == IE_SUCCESS || err == IE_2BIG) {
164 printf("isds_FindDataBox() succeeded:\n");
166 int n;
167 for(item = boxes, n = 1; item; item = item->next, n++) {
168 if (err != IE_2BIG) {
169 printf("List item #%d:\n", n);
170 print_DbOwnerInfo(item->data);
172 if (n == 1) recipient = strdup(
173 ((struct isds_DbOwnerInfo *)(item->data))->dbID);
175 if (err == IE_2BIG)
176 printf("isds_FindDataBox() results truncated to %d boxes\n",
177 --n);
178 } else {
179 printf("isds_FindDataBox() failed: %s: %s\n",
180 isds_strerror(err), isds_long_message(ctx));
183 isds_list_free(&boxes);
188 struct isds_list *boxes = NULL, *item;
189 struct isds_DbOwnerInfo criteria;
190 isds_DbType criteria_db_type = DBTYPE_OVM;
191 memset(&criteria, 0, sizeof(criteria));
192 criteria.firmName = "Místní";
193 criteria.dbType = &criteria_db_type;
195 printf("Searching box with firm name `%s':\n", criteria.firmName);
196 err = isds_FindDataBox(ctx, &criteria, &boxes);
197 if (err == IE_SUCCESS || err == IE_2BIG) {
198 printf("isds_FindDataBox() succeeded:\n");
200 int n;
201 for(item = boxes, n = 1; item; item = item->next, n++) {
202 if (err != IE_2BIG) {
203 printf("List item #%d:\n", n);
204 print_DbOwnerInfo(item->data);
206 if (n == 1) recipient = strdup(
207 ((struct isds_DbOwnerInfo *)(item->data))->dbID);
209 if (err == IE_2BIG)
210 printf("isds_FindDataBox() results truncated to %d boxes\n",
211 --n);
212 } else {
213 printf("isds_FindDataBox() failed: %s: %s\n",
214 isds_strerror(err), isds_long_message(ctx));
217 isds_list_free(&boxes);
221 if (db_owner_info) {
222 long int box_status = 0;
223 printf("Getting status of my box with ID `%s'\n", db_owner_info->dbID);
224 err = isds_CheckDataBox(ctx, db_owner_info->dbID, &box_status);
225 if (err)
226 printf("isds_CheckDataBox() failed: %s: %s\n",
227 isds_strerror(err), isds_long_message(ctx));
228 else {
229 printf("isds_CheckDataBox() succeeded: status = ");
230 print_DbState(box_status);
234 isds_DbOwnerInfo_free(&db_owner_info);
237 char *box_id = "7777777";
238 long int box_status = 0;
239 printf("Getting status of non existing box with ID `%s'\n", box_id);
240 err = isds_CheckDataBox(ctx, box_id, &box_status);
241 if (err)
242 printf("isds_CheckDataBox() failed: %s: %s\n",
243 isds_strerror(err), isds_long_message(ctx));
244 else {
245 printf("isds_CheckDataBox() succeeded: status = ");
246 print_DbState(box_status);
251 /* Send message */
253 struct isds_message message;
254 memset(&message, 0, sizeof(message));
256 struct isds_envelope envelope;
257 memset(&envelope, 0, sizeof(envelope));
258 message.envelope = &envelope;
259 envelope.dbIDRecipient = recipient;
260 long int dmSenderOrgUnitNum = 42;
261 envelope.dmSenderOrgUnitNum = &dmSenderOrgUnitNum;
262 envelope.dmAnnotation = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
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"*/
282 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
284 struct isds_document minor_document;
285 memset(&minor_document, 0, sizeof(minor_document));
286 minor_document.data = "hello world?";
287 minor_document.data_length = strlen(minor_document.data);
288 minor_document.dmMimeType = "text/plain";
289 /* XXX: This should fail
290 minor_document.dmFileMetaType = FILEMETATYPE_MAIN; */
291 minor_document.dmFileMetaType = FILEMETATYPE_ENCLOSURE;
292 /* Server implementation demands dmFileDescr to be valid file name */
293 /*minor_document.dmFileDescr = "Standard text.txt";*/
294 minor_document.dmFileDescr = "minor_standard_text.txt";
295 minor_document.dmFileGuid = "2";
296 minor_document.dmUpFileGuid = "1";
298 struct isds_document main_document;
299 memset(&main_document, 0, sizeof(main_document));
300 main_document.data = "Hello World!";
301 main_document.data_length = strlen(main_document.data);
302 /* Server implementation sais text is not text file
303 * See <http://www.abclinuxu.cz/forum/show/284940> */
304 main_document.dmMimeType = "text/plain";
305 /* XXX: This should fail */
306 /*main_document.dmFileMetaType = FILEMETATYPE_ENCLOSURE;*/
307 main_document.dmFileMetaType = FILEMETATYPE_MAIN;
308 /* Server implementation demands dmFileDescr to be valid file name */
309 /*main_document.dmFileDescr = "Standard text.txt";*/
310 main_document.dmFileDescr = "standard_text.txt";
311 main_document.dmFileGuid = "1";
313 struct isds_list documents_main_item = {
314 .data = &main_document,
315 .next = NULL,
316 .destructor = NULL
318 struct isds_list documents_minor_item = {
319 .data = &minor_document,
320 .next = &documents_main_item,
321 .destructor = NULL
323 message.documents = &documents_minor_item;
326 printf("Sending message to box ID `%s'\n",
327 message.envelope->dbIDRecipient);
328 err = isds_send_message(ctx, &message);
329 if (err)
330 printf("isds_send_message() failed: %s: %s\n",
331 isds_strerror(err), isds_long_message(ctx));
332 else {
333 printf("isds_send_message() succeeded: assigned message ID = %s\n",
334 message.envelope->dmID);
337 free(message.envelope->dmID);
342 err = isds_logout(ctx);
343 if (err) {
344 printf("isds_logout() failed: %s\n", isds_strerror(err));
347 printf("Ping after logout should fail\n");
348 err = isds_ping(ctx);
349 if (err) {
350 printf("isds_ping() failed: %s\n", isds_strerror(err));
351 } else {
352 printf("isds_ping() succeeded\n");
355 printf("Sending bogus request after logout\n");
356 err = isds_bogus_request(ctx);
357 if (err) {
358 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err),
359 isds_long_message(ctx));
360 } else {
361 printf("isds_bogus_request() succeeded\n");
364 err = isds_ctx_free(&ctx);
365 if (err) {
366 printf("isds_ctx_free() failed: %s\n", isds_strerror(err));
370 err = isds_cleanup();
371 if (err) {
372 printf("isds_cleanup() failed: %s\n", isds_strerror(err));
375 exit (EXIT_SUCCESS);