22#include <seclabel_api.h>
25#include "ms_example.h"
28 struct X400msMessage *mp,
29 struct X400Bodypart **bp,
34 struct X400msMessage *mp,
35 struct X400Message **x400_mp,
39static int do_xmsg_content_as_bp(
40 struct X400Message *x400_mp
43static int do_xrep_content_as_bp(
44 struct X400Message *x400_mp
47static int do_xrep_headers(
48 struct X400Message *x400_mp
51static int do_xmsg_headers(
52 struct X400Message *x400_mp
55static int do_redirection_hist (
56 struct X400Recipient *rp
61 struct X400Message *x400_mp,
66 struct X400Recipient *rp;
70 for (recip_num = 1; ; recip_num++ ) {
72 char buf[INIT_BUFFER_SIZE];
73 int buflen =
sizeof buf;
79 printf(
"no recips of type %x\n", type);
82 printf(
"no more recips of type %x\n", type);
87 fprintf(stderr,
"X400MsgGetRecip (%d) failed %s\n",
91 printf(
"got recip number %d of type %s (%x)\n", recip_num,
109 fprintf(stderr,
"X400MsgGetStrParam (%d) failed %s\n",
112 printf(
"Originator OR Address'%.*s'\n", (
int)ret_len, buf);
118 fprintf(stderr,
"X400MsgGetStrParam (%d) failed %s\n",
121 printf(
"Originator OR Address'%.*s'\n", (
int)ret_len, buf);
126#define USE_REDIRECTION_HISTORY 1
127#ifdef USE_REDIRECTION_HISTORY
129 status = do_redirection_hist(rp);
133 printf(
"There is no Redirection History\n");
135 printf(
"Found some Redirection History\n");
137 printf(
"error getting Redirection History\n");
138 fprintf (stderr,
"Error fetching Redirection History: %s\n",
149 struct X400msMessage *mp
152#define INIT_BUFFER_SIZE 10000
153#define INIT_BUFFER2_SIZE 256
162 struct X400Message *x400_mp;
163 struct X400Bodypart *bp;
166 printf (
"Getting Body Parts\n");
170 fprintf (stderr,
"Error in X400msMsgGetIntParam attachments %s\n",
174 printf (
"Number of attachments is %d\n", num_atts);
176 buf = (
char *) malloc(INIT_BUFFER_SIZE);
178 fprintf(stderr,
"can't alloc %d bytes\n", INIT_BUFFER_SIZE);
181 buflen = INIT_BUFFER_SIZE;
183 for (i = 0; i <= num_atts ; i++) {
184 printf (
"\n----- Get attachment ----- %d\n", i);
188 fprintf(stderr,
"realloc %ld bytes\n", (
long)ret_len);
189 newbuf = (
char *) realloc(buf, ret_len + 1);
190 if (newbuf == NULL) {
191 fprintf(stderr,
"can't alloc %d bytes\n", INIT_BUFFER_SIZE);
198 mp, i, &type, buf, buflen, &ret_len);
203 printf(
"got complex bodypart\n");
204 status = get_bp(mp, &bp, i);
212 printf(
"got forwarded message bodypart\n");
213 status = get_msgbp(mp, &x400_mp, i);
221 printf(
"got FTBP, text or binary attachment\n");
233 printf(
"First 1000 bytes of Binary Data for %s BP is:",
235 for (j = 0; j < ret_len && j < 1000; j++)
236 printf(
"%x ", buf[j]);
240 printf(
"IA5 BP is:\n%.*s", (
int)ret_len, buf);
243 printf(
"Printable Data for BP is:\n%.*s", (
int)ret_len, buf);
248 printf(
"attachment %d not found\n", i);
252 fprintf (stderr,
"Error in X400msMsgGetAttachment %s\n",
262 struct X400msMessage *mp,
263 struct X400Bodypart **bpp,
273 char buf2[INIT_BUFFER2_SIZE];
274 int buf2len =
sizeof buf2;
277#define INIT_BUFFER_SIZE 10000
278 printf (
"Get Bodypart %d\n", att_num);
283 fprintf(stderr,
"X400msMsgGetBodypart %d failed %s\n", att_num,
287 printf(
"got Bodypart %d, type = %d\n", att_num, type);
292 fprintf(stderr,
"X400msMsgGetBodypart failed %s\n",
296 printf(
"got Bodypart %d, type = %s\n", att_num,
307 buf = (
char *) malloc(INIT_BUFFER_SIZE);
309 fprintf(stderr,
"can't alloc %d bytes\n", INIT_BUFFER_SIZE);
312 buflen = INIT_BUFFER_SIZE;
318 fprintf(stderr,
"realloc %ld bytes\n", (
long)ret_len);
319 newbuf = (
char *) realloc(buf, ret_len + 1);
320 if (newbuf == NULL) {
322 fprintf(stderr,
"can't alloc %d bytes\n", INIT_BUFFER_SIZE);
332 fprintf(stderr,
"X400msMsgGetBodypart failed %s\n",
336 printf(
"got %ld bytes of Bodypart data\n", (
long)ret_len);
344 fprintf(stderr,
"X400BodypartGetStrParam (%d) failed %s\n",
347 printf(
"FTBP Content Description '%.*s'\n",
354 fprintf(stderr,
"X400BodypartGetStrParam (%d) failed %s\n",
357 printf(
"FTBP Filename '%.*s'\n",
364 fprintf(stderr,
"X400BodypartGetStrParam (%d) failed %s\n",
367 printf(
"FTBP Content Description '%.*s'\n",
374 fprintf(stderr,
"X400BodypartGetStrParam (%d) failed %s\n",
377 printf(
"FTBP Modification Date '%.*s'\n",
383 printf(
"First 1000 bytes of Binary Data for %s BP is:",
385 for (j = 0; j < ret_len && j < 1000; j++)
386 printf(
"%x ", buf[j]);
390 printf(
"IA5 BP is:\n%s", buf);
393 printf(
"Printable Data for BP is:\n%.*s", (
int)ret_len, buf);
405 struct X400msMessage *mp,
406 struct X400Message **x400_mpp,
410 struct X400Message *x400_mp;
412 char buf[INIT_BUFFER_SIZE];
413 int buflen =
sizeof buf;
418 fprintf(stderr,
"X400MsgGetMessageBody (%d) failed %s\n",
422 printf(
"Got Message BP from BP %d\n", bp_num);
428 fprintf(stderr,
"X400MsgGetStrParam (%d) failed %s\n",
432 printf(
"Message BP from BP is '%.*s'\n", (
int)ret_len, buf);
433 if (strncmp(buf,
"message", ret_len) == 0 ) {
434 status = do_xmsg_headers(x400_mp);
437 status = do_xmsg_content_as_bp(x400_mp);
441 else if (strncmp(buf,
"report", ret_len) == 0 ) {
442 status = do_xrep_headers(x400_mp);
445 status = do_xrep_content_as_bp(x400_mp);
449 else if (strncmp(buf,
"probe", ret_len) == 0 ) {
450 status = do_xmsg_headers(x400_mp);
455 fprintf(stderr,
"got unknown object: %s\n", buf);
463static int do_xmsg_content_as_bp(
464 struct X400Message *x400_mp
466 __attribute__((unused))
470 printf(
"do_xmsg_content_as_bp NYI\n");
475static int do_xrep_headers(
476 struct X400Message *x400_mp
478 __attribute__((unused))
482 printf(
"do_xrep_headers NYI\n");
487static int do_xrep_content_as_bp(
488 struct X400Message *x400_mp
490 __attribute__((unused))
494 printf(
"do_xrep_content_as_bp NYI\n");
498static int do_xmsg_headers(
499 struct X400Message *x400_mp
503 char buf[INIT_BUFFER_SIZE];
504 int buflen =
sizeof buf;
508 printf(
"do_xmsg_headers\n");
512 fprintf(stderr,
"X400MsgGetStrParam (%d) failed %s\n",
516 printf(
"IPM Identifier from Message BP '%.*s'\n", (
int)ret_len, buf);
521 fprintf(stderr,
"X400MsgGetStrParam (%d) failed %s\n",
525 printf(
"Subject from Message BP '%.*s'\n", (
int)ret_len, buf);
529 fprintf(stderr,
"X400MsgGetStrParam (%d) failed %s\n",
533 printf(
"Number of attachments in Message BP %d'\n", num_atts);
553static int do_redirection_hist (
554 struct X400Recipient *rp
557 char redirection_time [BUFSIZ];
558 char or_address [BUFSIZ];
566 struct X400RediHist *hist = NULL;
575 redirection_time, BUFSIZ,&length);
582 redirection_time[length] =
'\0';
583 printf (
"Redirection time: %i %s\n",n,redirection_time);
585 fprintf (stderr,
"Error in do_redirection_hist: %s\n",
590 or_address, BUFSIZ , &length);
592 or_address[length] =
'\0';
593 printf (
"Redirection OR address %i :%s\n",n,or_address);
595 fprintf (stderr,
"Error in do_redirection_hist: %s\n",
600 dn, BUFSIZ , &length);
603 printf (
"Redirection DN %i :%s\n",n,dn);
605 fprintf (stderr,
"Error in do_redirection_hist: %s\n",
613 fprintf (stderr,
"Error in do_redirection_hist: %s\n",
619 printf(
"No Redirection histories found in message\n");
621 printf(
"%d Redirection histories found in message\n", n - 1);
628char * get_x400_pty_str_from_4406(
int s4406_pty) {
630 case 0 :
return "deferred";
631 case 1 :
return "routine";
632 case 2 :
return "priority";
633 case 3 :
return "immediate";
634 case 4 :
return "flash";
635 case 5 :
return "override";
636 default:
return "priority";
641int get_x400_pty_qual_from_4406(
int s4406_pty) {
658int get_x400_pty_from_4406(
int s4406_pty) {
678 struct X400msMessage *mp
681#define XML_BUFSIZE 1024
682#define STRING_BUFSIZE 1024
684 const char* xml_filename =
"seclabel.xml";
685 char xml_content[XML_BUFSIZE];
686 char str_content[STRING_BUFSIZE];
687 int str_len = STRING_BUFSIZE;
692 fd = fopen(xml_filename,
"r");
694 fprintf(stderr,
"Failed to open %s : %s\n",
695 xml_filename,strerror(errno));
699#pragma GCC diagnostic push
700#pragma GCC diagnostic ignored "-Wunused-result"
701 fread(&xml_content,XML_BUFSIZE,1,fd);
702#pragma GCC diagnostic pop
706 status = SecLabelInit(
"Example program");
707 if (status != SECLABEL_E_NOERROR) {
708 fprintf(stderr,
"SecLabelInit returned error %d\n", status);
713 status = SecLabelParse(xml_content,
718 if (status != SECLABEL_E_NOERROR) {
719 fprintf(stderr,
"SecLabelParse returned error %d\n", status);
725 str_content,str_len);
727 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
int X400MsgGetIntParam(struct X400Message *mp, int paramtype, int *valuep)
Return a integer-valued parameter from the message object.
int X400MsgGetRecip(struct X400Message *mp, int recip_type, int number, struct X400Recipient **rpp)
Get recipient object from message.
int X400RediHistGetIntParam(struct X400RediHist *info, int paramtype, int *valuep)
Get int parameter from Redirection History object.
int X400BodypartGetStrParam(struct X400Bodypart *bp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the body part object.
int X400RediHistGet(struct X400Recipient *recip, int entry, struct X400RediHist **hist)
Get the Redirection History object from a recipient.
int X400RecipGetStrParam(struct X400Recipient *rp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the recipient object.
int X400MsgGetStrParam(struct X400Message *mp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the message object.
int X400BodypartGetIntParam(struct X400Bodypart *bp, int paramtype, int *valp)
Return a integer-valued parameter from the body part object.
const char * X400RediReason(int redirection_reason)
Return a human readable string based on a redirection reason.
int X400RediHistGetStrParam(struct X400RediHist *hist, int paramtype, char *value, size_t length, size_t *lengthp)
Get string-valued parameter from the X400RediHist object.
int X400msMsgAddStrParam(struct X400msMessage *mp, int paramtype, const char *value, size_t length)
Add string-valued parameter to the message.
int X400msMsgGetMessageBody(struct X400msMessage *mp, int number, struct X400Message **mpp)
Return a pointer to a message part object.
int X400msMsgGetAttachment(struct X400msMessage *mp, int number, int *typep, char *buffer, size_t buflen, size_t *lengthp)
Return the data of an attachment (=bodypart) from the message object.
const char * X400msError(int error)
Obtain a string describing the meaning of the given error code.
int X400msMsgGetBodypart(struct X400msMessage *mp, int number, int *typep, struct X400Bodypart **bpp)
Return a pointer to a body part object.
int X400msMsgGetIntParam(struct X400msMessage *mp, int paramtype, int *valp)
Return a integer-valued parameter from the message object.
#define X400_S_DIRECTORY_NAME
#define X400_S_OR_ADDRESS
#define X400_S_FTBP_FILENAME
#define X400_S_FTBP_MODIFICATION_DATE
#define X400_S_FTBP_CREATION_DATE
#define X400_S_FTBP_CONTENT_DESCRIPTION
#define X400_S_IPM_IDENTIFIER
#define X400_T_GENERAL_TEXT
#define X400_N_NUM_ATTACHMENTS
#define X400_N_REDIRECTION_REASON
#define X400_S_REDIRECTION_TIME
#define X400_S_OBJECTTYPE
#define X400_S_SECURITY_LABEL
#define X400_E_MISSING_ATTR
#define X400_E_COMPLEX_BODY
#define X400_E_MESSAGE_BODY
#define X400_RECIP_PRIMARY
#define X400_RECIP_INTENDED
#define X400_RECIP_ENVELOPE
#define X400_RECIP_REPORT
X400 MA/MS (P3/P7) Interface.