1 #define _XOPEN_SOURCE 500
4 /*#include <locale.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
) {
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");
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
) {
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
);
61 if (!hash
->value
) printf("<NULL>");
63 for (int i
= 0; i
< hash
->length
; i
++) {
64 if (i
> 0) printf(":");
65 printf("%02x", ((uint8_t *)(hash
->value
))[i
]);
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 = ");
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");
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
);
109 printf("\tfirmName = %s\n", info
->firmName
);
111 printf("\tbirthInfo = ");
112 if (!info
->birthInfo
) printf("NULL\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
);
126 printf("\taddress = ");
127 if (!info
->address
) printf("NULL\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
);
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
);
161 void print_timeval(const struct timeval
*time
) {
170 if (!localtime_r(&(time
->tv_sec
), &broken
)) goto error
;
171 if (!strftime(buffer
, sizeof(buffer
)/sizeof(char), "%c", &broken
))
173 printf("%s, %ld us\n", buffer
, time
->tv_usec
);
177 printf("<Error while formating>\n>");
182 void print_event_type(const isds_event_type
*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
;
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");
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
);
234 void print_envelope(const struct isds_envelope
*envelope
) {
235 printf("\tenvelope = ");
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");
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
);
327 void print_document(const struct isds_document
*document
) {
328 printf("\t\tdocument = ");
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
);
357 void print_documents(const struct isds_list
*documents
) {
358 const struct isds_list
*item
;
360 printf("\tdocuments = ");
368 for (item
= documents
; item
; item
= item
->next
) {
369 print_document((struct isds_document
*) (item
->data
));
376 void print_message(const struct isds_message
*message
) {
377 printf("message = ");
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
);