Event type EVENT_DELIVERED_BY_FICTION renamed to EVENT_ACCEPTED_BY_FICTION
[libisds.git] / client / common.c
blob3e7cefc6d8faff47ff875df76d58fdfabe3f6911
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 <stdint.h>
8 #include <isds.h>
10 char url[] = "https://www.czebox.cz/DS/";
11 char username[] = "jrfh7i";
12 char password[] = "Ab123456";
15 void print_DbState(const long int state) {
16 switch(state) {
17 case DBSTATE_ACCESSIBLE: printf("ACCESSIBLE\n"); break;
18 case DBSTATE_TEMP_UNACCESSIBLE: printf("TEMP_UNACCESSIBLE\n"); break;
19 case DBSTATE_NOT_YET_ACCESSIBLE: printf("NOT_YET_ACCESSIBLE\n"); break;
20 case DBSTATE_PERM_UNACCESSIBLE: printf("PERM_UNACCESSIBLE\n"); break;
21 case DBSTATE_REMOVED: printf("REMOVED\n"); break;
22 default: printf("<unknown state %ld>\n", state);
26 void print_DbType(const long int *type) {
27 if (!type) printf("NULL\n");
28 else
29 switch(*type) {
30 case DBTYPE_FO: printf("FO\n"); break;
31 case DBTYPE_PFO: printf("PFO\n"); break;
32 case DBTYPE_PFO_ADVOK: printf("PFO_ADVOK\n"); break;
33 case DBTYPE_PFO_DANPOR: printf("PFO_DAPOR\n"); break;
34 case DBTYPE_PFO_INSSPR: printf("PFO_INSSPR\n"); break;
35 case DBTYPE_PO: printf("PO\n"); break;
36 case DBTYPE_PO_ZAK: printf("PO_ZAK\n"); break;
37 case DBTYPE_PO_REQ: printf("PO_REQ\n"); break;
38 case DBTYPE_OVM: printf("OVM\n"); break;
39 case DBTYPE_OVM_NOTAR: printf("OVM_NOTAR\n"); break;
40 case DBTYPE_OVM_EXEKUT: printf("OVM_EXEKUT\n"); break;
41 case DBTYPE_OVM_REQ: printf("OVM_REQ\n"); break;
42 default: printf("<unknown type %ld>\n", *type);
46 void print_hash(const struct isds_hash *hash) {
47 if (!hash) {
48 printf("NULL\n");
49 return;
52 switch(hash->algorithm) {
53 case HASH_ALGORITHM_MD5: printf("MD5 "); break;
54 case HASH_ALGORITHM_SHA_1: printf("SHA-1 "); break;
55 case HASH_ALGORITHM_SHA_256: printf("SHA-256 "); break;
56 case HASH_ALGORITHM_SHA_512: printf("SHA-512 "); break;
57 default: printf("<Unknown hash algorithm %zd> ", hash->algorithm);
58 break;
61 if (!hash->value) printf("<NULL>");
62 else
63 for (int i = 0; i < hash->length; i++) {
64 if (i > 0) printf(":");
65 printf("%02x", ((uint8_t *)(hash->value))[i]);
68 printf("\n");
72 void print_bool(const _Bool *boolean) {
73 printf("%s\n", (!boolean) ? "NULL" : ((*boolean)? "true" : "false") );
77 void print_longint(const long int *number) {
78 if (!number) printf("NULL\n");
79 else printf("%ld\n", *number);
83 void print_DbOwnerInfo(const struct isds_DbOwnerInfo *info) {
84 printf("dbOwnerInfo = ");
86 if (!info) {
87 printf("NULL\n");
88 return;
91 printf("{\n");
92 printf("\tdbID = %s\n", info->dbID);
94 printf("\tdbType = ");
95 print_DbType((long int *) (info->dbType));
96 printf("\tic = %s\n", info->ic);
98 printf("\tpersonName = ");
99 if (!info->personName) printf("NULL\n");
100 else {
101 printf("{\n");
102 printf("\t\tpnFirstName = %s\n", info->personName->pnFirstName);
103 printf("\t\tpnMiddleName = %s\n", info->personName->pnMiddleName);
104 printf("\t\tpnLastName = %s\n", info->personName->pnLastName);
105 printf("\t\tpnLastNameAtBirth = %s\n", info->personName->pnLastNameAtBirth);
106 printf("\t}\n");
109 printf("\tfirmName = %s\n", info->firmName);
111 printf("\tbirthInfo = ");
112 if (!info->birthInfo) printf("NULL\n");
113 else {
114 printf("{\n");
116 printf("\t\tbiDate = ");
117 if (!info->birthInfo->biDate) printf("NULL\n");
118 else printf("%s\n", asctime(info->birthInfo->biDate));
120 printf("\t\tbiCity = %s\n", info->birthInfo->biCity);
121 printf("\t\tbiCounty = %s\n", info->birthInfo->biCounty);
122 printf("\t\tbiState = %s\n", info->birthInfo->biState);
123 printf("\t}\n");
126 printf("\taddress = ");
127 if (!info->address) printf("NULL\n");
128 else {
129 printf("{\n");
130 printf("\t\tadCity = %s\n", info->address->adCity);
131 printf("\t\tadStreet = %s\n", info->address->adStreet);
132 printf("\t\tadNumberInStreet = %s\n", info->address->adNumberInStreet);
133 printf("\t\tadNumberInMunicipality = %s\n",
134 info->address->adNumberInMunicipality);
135 printf("\t\tadZipCode = %s\n", info->address->adZipCode);
136 printf("\t\tadState = %s\n", info->address->adState);
137 printf("\t}\n");
140 printf("\tnationality = %s\n", info->nationality);
141 printf("\temail = %s\n", info->email);
142 printf("\ttelNumber = %s\n", info->telNumber);
143 printf("\tidentifier = %s\n", info->identifier);
144 printf("\tregistryCode = %s\n", info->registryCode);
146 printf("\tdbState = ");
147 if (!info->dbState) printf("NULL\n");
148 else print_DbState(*(info->dbState));
150 printf("\tdbEffectiveOVM = ");
151 print_bool(info->dbEffectiveOVM);
153 printf("\tdbOpenAddressing = ");
154 print_bool(info->dbOpenAddressing);
156 printf("}\n");
161 void print_timeval(const struct timeval *time) {
162 struct tm broken;
163 char buffer[128];
165 if (!time) {
166 printf("NULL\n");
167 return;
170 if (!localtime_r(&(time->tv_sec), &broken)) goto error;
171 if (!strftime(buffer, sizeof(buffer)/sizeof(char), "%c", &broken))
172 goto error;
173 printf("%s, %ld us\n", buffer, time->tv_usec);
174 return;
176 error:
177 printf("<Error while formating>\n>");
178 return;
182 void print_event_type(const isds_event_type *type) {
183 if (!type) {
184 printf("NULL");
185 return;
187 switch (*type) {
188 case EVENT_UKNOWN: printf("UNKNOWN\n"); break;
189 case EVENT_ACCEPTED_BY_RECIPIENT:
190 printf("ACCEPTED_BY_RECIPIENT\n"); break;
191 case EVENT_ACCEPTED_BY_FICTION:
192 printf("DELIVERED_BY_FICTION\n"); break;
193 case EVENT_UNDELIVERABLE:
194 printf("UNDELIVERABLE\n"); break;
195 default: printf("<unknown type %zd>\n", *type);
200 void print_events(const struct isds_list *events) {
201 const struct isds_list *item;
202 const struct isds_event *event;
204 if (!events) {
205 printf("NULL\n");
206 return;
209 printf("{\n");
211 for (item = events; item; item = item->next) {
212 event = (struct isds_event *) item->data;
213 printf("\t\t\tevent = ");
214 if (!event) printf("NULL");
215 else {
216 printf("{\n");
218 printf("\t\t\t\ttype = ");
219 print_event_type(event->type);
221 printf("\t\t\t\tdescription = %s\n", event->description);
223 printf("\t\t\t\ttime = ");
224 print_timeval(event->time);
226 printf("\t\t\t}\n");
230 printf("\t\t}\n");
234 void print_envelope(const struct isds_envelope *envelope) {
235 printf("\tenvelope = ");
237 if (!envelope) {
238 printf("NULL\n");
239 return;
241 printf("{\n");
243 printf("\t\tdmID = %s\n", envelope->dmID);
244 printf("\t\tdbIDSender = %s\n", envelope->dbIDSender);
245 printf("\t\tdmSender = %s\n", envelope->dmSender);
246 printf("\t\tdmSenderAddress = %s\n", envelope->dmSenderAddress);
247 printf("\t\tdmSenderType = ");
248 print_DbType(envelope->dmSenderType);
249 printf("\t\tdmRecipient = %s\n", envelope->dmRecipient);
250 printf("\t\tdmRecipientAddress = %s\n", envelope->dmRecipientAddress);
251 printf("\t\tdmAmbiguousRecipient = ");
252 print_bool(envelope->dmAmbiguousRecipient);
254 printf("\t\tdmSenderOrgUnit = %s\n", envelope->dmSenderOrgUnit);
255 printf("\t\tdmSenderOrgUnitNum = ");
256 print_longint(envelope->dmSenderOrgUnitNum);
257 printf("\t\tdbIDRecipient = %s\n", envelope->dbIDRecipient);
258 printf("\t\tdmRecipientOrgUnit = %s\n", envelope->dmRecipientOrgUnit);
259 printf("\t\tdmRecipientOrgUnitNum = ");
260 print_longint(envelope->dmRecipientOrgUnitNum);
261 printf("\t\tdmToHands = %s\n", envelope->dmToHands);
262 printf("\t\tdmAnnotation = %s\n", envelope->dmAnnotation);
263 printf("\t\tdmRecipientRefNumber = %s\n", envelope->dmRecipientRefNumber);
264 printf("\t\tdmSenderRefNumber = %s\n", envelope->dmSenderRefNumber);
265 printf("\t\tdmRecipientIdent = %s\n", envelope->dmRecipientIdent);
266 printf("\t\tdmSenderIdent = %s\n", envelope->dmSenderIdent);
268 printf("\t\tdmLegalTitleLaw = ");
269 print_longint(envelope->dmLegalTitleLaw);
270 printf("\t\tdmLegalTitleYear = ");
271 print_longint(envelope->dmLegalTitleYear);
272 printf("\t\tdmLegalTitleSect = %s\n", envelope->dmLegalTitleSect);
273 printf("\t\tdmLegalTitlePar = %s\n", envelope->dmLegalTitlePar);
274 printf("\t\tdmLegalTitlePoint = %s\n", envelope->dmLegalTitlePoint);
276 printf("\t\tdmPersonalDelivery = ");
277 print_bool(envelope->dmPersonalDelivery);
278 printf("\t\tdmAllowSubstDelivery = ");
279 print_bool(envelope->dmAllowSubstDelivery);
280 printf("\t\tdmOVM = ");
281 print_bool(envelope->dmOVM);
283 printf("\t\tdmOrdinal = ");
284 if (!envelope->dmOrdinal) printf("NULL\n");
285 else printf("%lu\n", *(envelope->dmOrdinal));
287 printf("\t\tdmMessageStatus = ");
288 if (!envelope->dmMessageStatus) printf("NULL\n");
289 else
290 switch(*(envelope->dmMessageStatus)) {
291 case MESSAGESTATE_SENT: printf("SENT\n"); break;
292 case MESSAGESTATE_STAMPED: printf("STAMPED\n"); break;
293 case MESSAGESTATE_INFECTED: printf("INFECTED\n"); break;
294 case MESSAGESTATE_DELIVERED: printf("DELIVERED\n"); break;
295 case MESSAGESTATE_SUBSTITUTED: printf("SUBSTITUTED\n"); break;
296 case MESSAGESTATE_RECIEVED: printf("RECIEVED\n"); break;
297 case MESSAGESTATE_READ: printf("READ\n"); break;
298 case MESSAGESTATE_UNDELIVERABLE: printf("UNDELIVERABLE\n"); break;
299 case MESSAGESTATE_REMOVED: printf("REMOVED\n"); break;
300 default: printf("<unknown type %d>\n",
301 *(envelope->dmMessageStatus));
304 printf("\t\tdmAttachmentSize = ");
305 if (!envelope->dmAttachmentSize) printf("NULL\n");
306 else printf("%lu kB\n", *(envelope->dmAttachmentSize));
308 printf("\t\tdmDeliveryTime = ");
309 print_timeval(envelope->dmDeliveryTime);
311 printf("\t\tdmAcceptanceTime = ");
312 print_timeval(envelope->dmAcceptanceTime);
314 printf("\t\thash = ");
315 print_hash(envelope->hash);
317 printf("\t\ttimestamp = %p\n", envelope->timestamp);
318 printf("\t\ttimestamp_length = %zu\n", envelope->timestamp_length);
320 printf("\t\tevents = ");
321 print_events(envelope->events);
323 printf("\t}\n");
327 void print_document(const struct isds_document *document) {
328 printf("\t\tdocument = ");
330 if (!document) {
331 printf("NULL\n");
332 return;
334 printf("\{\n");
336 printf("\t\t\tdata = %p\n", document->data);
337 printf("\t\t\tdata_length = %zu\n", document->data_length);
338 printf("\t\t\tdmMimeType = %s\n", document->dmMimeType);
340 printf("\t\t\tdmFileMetaType = ");
341 switch(document->dmFileMetaType) {
342 case FILEMETATYPE_MAIN: printf("MAIN\n"); break;
343 case FILEMETATYPE_ENCLOSURE: printf("ENCLOSURE\n"); break;
344 case FILEMETATYPE_SIGNATURE: printf("SIGNATURE\n"); break;
345 case FILEMETATYPE_META: printf("META\n"); break;
346 default: printf("<unknown type %d>\n", document->dmFileMetaType);
349 printf("\t\t\tdmFileGuid = %s\n", document->dmFileGuid);
350 printf("\t\t\tdmUpFileGuid = %s\n", document->dmUpFileGuid);
351 printf("\t\t\tdmFileDescr = %s\n", document->dmFileDescr);
352 printf("\t\t\tdmFormat = %s\n", document->dmFormat);
353 printf("\t\t}\n");
357 void print_documents(const struct isds_list *documents) {
358 const struct isds_list *item;
360 printf("\tdocuments = ");
362 if (!documents) {
363 printf("NULL\n");
364 return;
366 printf("{\n");
368 for (item = documents; item; item = item->next) {
369 print_document((struct isds_document *) (item->data));
372 printf("\t}\n");
376 void print_message(const struct isds_message *message) {
377 printf("message = ");
379 if (!message) {
380 printf("NULL\n");
381 return;
384 printf("{\n");
386 printf("\traw = %p\n", message->raw);
387 printf("\traw_length = %zu\n", message->raw_length);
388 print_envelope(message->envelope);
389 print_documents(message->documents);
391 printf("}\n");