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
));
25 isds_set_logging(ILF_ALL
& ~ILF_HTTP
, ILL_ALL
);
27 ctx
= isds_ctx_create();
29 printf("isds_ctx_create() failed");
32 err
= isds_set_timeout(ctx
, 10000);
34 printf("isds_set_timeout() failed: %s\n", isds_strerror(err
));
37 /* err = isds_set_tls(ctx, ITLS_VERIFY_SERVER, 0);
39 printf("isds_set_tls(ITLS_VERIFY_SERVER) failed: %s\n",
43 err = isds_set_tls(ctx, ITLS_CA_FILE, "/etc/ssl/certs/ca-certificates.crt");
45 printf("isds_set_tls(ITLS_CA_FILE) failed: %s\n",
49 err
= isds_login(ctx
, url
, username
, password
, NULL
);
51 printf("isds_login() failed: %s: %s\n", isds_strerror(err
),
52 isds_long_message(ctx
));
54 printf("Logged in :)\n");
59 printf("isds_ping() failed: %s\n", isds_strerror(err
));
61 printf("isds_ping() succeeded\n");
64 printf("Sending bogus request\n");
65 err
= isds_bogus_request(ctx
);
67 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err
),
68 isds_long_message(ctx
));
70 printf("isds_bogus_request() succeeded\n");
74 printf("Getting info about my box:\n");
75 err
= isds_GetOwnerInfoFromLogin(ctx
, &db_owner_info
);
77 printf("isds_GetOwnerInfoFromLogin() failed: %s: %s\n",
78 isds_strerror(err
), isds_long_message(ctx
));
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
) {
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
);
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
));
114 printf("Not enough memory for struct isds_DbOwnerInfo criteria\n");
117 criteria
->firmName
= strdup("Obec");
118 if (!criteria
->firmName
) {
119 printf("Not enough memory for criteria->firmName\n");
122 criteria
->dbType
= malloc(sizeof(*(criteria
->dbType
)));
123 if (!criteria
->dbType
) {
124 printf("Not enough memory for criteria->dbType\n");
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");
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
);
142 printf("isds_FindDataBox() results truncated to %d boxes\n",
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");
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
);
176 printf("isds_FindDataBox() results truncated to %d boxes\n",
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");
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
);
210 printf("isds_FindDataBox() results truncated to %d boxes\n",
213 printf("isds_FindDataBox() failed: %s: %s\n",
214 isds_strerror(err
), isds_long_message(ctx
));
217 isds_list_free(&boxes
);
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
);
226 printf("isds_CheckDataBox() failed: %s: %s\n",
227 isds_strerror(err
), isds_long_message(ctx
));
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
);
242 printf("isds_CheckDataBox() failed: %s: %s\n",
243 isds_strerror(err
), isds_long_message(ctx
));
245 printf("isds_CheckDataBox() succeeded: status = ");
246 print_DbState(box_status
);
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
,
318 struct isds_list documents_minor_item
= {
319 .data
= &minor_document
,
320 .next
= &documents_main_item
,
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
);
330 printf("isds_send_message() failed: %s: %s\n",
331 isds_strerror(err
), isds_long_message(ctx
));
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
);
344 printf("isds_logout() failed: %s\n", isds_strerror(err
));
347 printf("Ping after logout should fail\n");
348 err
= isds_ping(ctx
);
350 printf("isds_ping() failed: %s\n", isds_strerror(err
));
352 printf("isds_ping() succeeded\n");
355 printf("Sending bogus request after logout\n");
356 err
= isds_bogus_request(ctx
);
358 printf("isds_bogus_request() failed: %s: %s\n", isds_strerror(err
),
359 isds_long_message(ctx
));
361 printf("isds_bogus_request() succeeded\n");
364 err
= isds_ctx_free(&ctx
);
366 printf("isds_ctx_free() failed: %s\n", isds_strerror(err
));
370 err
= isds_cleanup();
372 printf("isds_cleanup() failed: %s\n", isds_strerror(err
));