#include <kmime_mdn.h> using namespace KMime::MDN; #include <tqcstring.h> #include <tqstring.h> #include <tqvaluelist.h> #include <iostream> using std::cout; using std::cerr; #include <cstdlib> using std::exit; using std::endl; #define _GNU_SOURCE 1 #include <getopt.h> void usage( const char * msg=0 ) { if ( msg ) cerr << msg << endl; cerr << "usage: test_mdn <options>\n" "where options include the following:" << endl << "FIXME" << endl; exit( 1 ); } int main( int argc, char * argv[] ) { TQString finalRecipient; TQString originalRecipient; TQCString originalMessageId; ActionMode actionMode = ManualAction; SendingMode sendingMode = SentManually; DispositionType dispositionType = Displayed; TQValueList<DispositionModifier> dispositionModifiers; TQString special; while ( true ) { int option_index = 0; static const struct option long_options[] = { { "action-mode", 1, 0, 'a' }, { "disposition-type", 1, 0, 'd' }, { "final-recipient", 1, 0, 'f' }, { "original-message-id", 1, 0, 'i' }, { "disposition-modifiers", 1, 0, 'm' }, { "original-recipient", 1, 0, 'o' }, { "sending-mode", 1, 0, 's' }, { 0, 0, 0, 0 } }; int c = getopt_long( argc, argv, "a:d:f:i:m:o:s:", long_options, &option_index ); if ( c == -1 ) break; #define EQUALS(x) !tqstricmp( optarg, x ) switch ( c ) { case 'a': // --action-mode if ( EQUALS( "manual-action" ) ) actionMode = ManualAction; else if ( EQUALS( "automatic-action" ) ) actionMode = AutomaticAction; else usage( "unknown action mode!" ); break; case 'd': // --disposition-type if ( EQUALS( "displayed" ) ) dispositionType = Displayed; else if ( EQUALS( "deleted" ) ) dispositionType = Deleted; else if ( EQUALS( "dispatched" ) ) dispositionType = Dispatched; else if ( EQUALS( "processed" ) ) dispositionType = Processed; else if ( EQUALS( "denied" ) ) dispositionType = Denied; else if ( EQUALS( "failed" ) ) dispositionType = Failed; else usage( "unknown disposition type!" ); break; case 'f': // --final-recipient if ( optarg && *optarg ) finalRecipient = TQString::fromUtf8( optarg ); else usage( "--final-recipient is missing a value" ); break; case 'i': // --original-message-id if ( optarg && *optarg ) originalMessageId = optarg; else usage( "--original-message-id is missing a value" ); break; case 'm': // --disposition-modifier if ( EQUALS( "error" ) ) dispositionModifiers << Error; else if ( EQUALS( "warning" ) ) dispositionModifiers << Warning; else if ( EQUALS( "superseded" ) ) dispositionModifiers << Superseded; else if ( EQUALS( "expired" ) ) dispositionModifiers << Expired; else if ( EQUALS( "mailbox-terminated" ) ) dispositionModifiers << MailboxTerminated; else usage( "unknwon disposition modifier!" ); break; case 'o': // --original-recipient if ( optarg && *optarg ) originalRecipient = TQString::fromUtf8( optarg ); else usage( "--original-recipient is missing a value" ); break; case 's': // --sending-mode if ( EQUALS( "MDN-sent-manually" ) ) sendingMode = SentManually; else if ( EQUALS( "MDN-sent-automatically" ) ) sendingMode = SentAutomatically; else usage( "unknown sending mode" ); break; default: usage( "unknown option encountered!" ); } } if ( optind < argc ) special = TQString::fromUtf8( argv[optind++] ); if ( optind < argc ) usage( "too many arguments!" ); TQCString result = dispositionNotificationBodyContent( finalRecipient, originalRecipient.latin1(), originalMessageId, dispositionType, actionMode, sendingMode, dispositionModifiers, special ); cout << "Result:\n" << result.data(); return 0; }