[complement-svn] SF.net SVN: complement: [1844] trunk/complement/explore/app
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2008-04-09 10:22:45
|
Revision: 1844 http://complement.svn.sourceforge.net/complement/?rev=1844&view=rev Author: complement Date: 2008-04-09 03:22:41 -0700 (Wed, 09 Apr 2008) Log Message: ----------- import old staff from K Sky, SMTP-related issues Added Paths: ----------- trunk/complement/explore/app/SMTP-tools/ trunk/complement/explore/app/SMTP-tools/DoSclient/ trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile.inc trunk/complement/explore/app/SMTP-tools/DoSclient/doscl.cc trunk/complement/explore/app/SMTP-tools/scgen/ trunk/complement/explore/app/SMTP-tools/scgen/Makefile trunk/complement/explore/app/SMTP-tools/scgen/Makefile.inc trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/ trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile.inc trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/dropconn.cc trunk/complement/explore/app/SMTP-tools/scgen/scgen.cc trunk/complement/explore/app/SMTP-tools/scgen/stategraph.cc trunk/complement/explore/app/SMTP-tools/scgen/stategraph.h trunk/complement/explore/app/SMTP-tools/scgen/ut/ trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile.inc trunk/complement/explore/app/SMTP-tools/scgen/ut/unit_test.cc trunk/complement/explore/app/SMTP-tools/smtp-ut/ trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-addr-2 trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-body-1 trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-domain-1 trunk/complement/explore/app/SMTP-tools/smtp-ut/dot-line trunk/complement/explore/app/SMTP-tools/smtp-ut/good-addr trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-1 trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-2 trunk/complement/explore/app/SMTP-tools/smtp-ut/null-char trunk/complement/explore/app/SMTP-tools/smtp-ut/scr.sed trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/ trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile.inc trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/smtp-batch.cc trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch.py trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-ut-aux.py trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-ut.py trunk/complement/explore/app/SMTP-tools/smtp-ut/test-1 trunk/complement/explore/app/SMTP-tools/smtp-ut/test-2 trunk/complement/explore/app/SMTP-tools/smtp-ut/test-3 trunk/complement/explore/app/SMTP-tools/smtp-ut/test-4 trunk/complement/explore/app/SMTP-tools/smtp-ut/test-5 trunk/complement/explore/app/SMTP-tools/smtp-ut/test-drop-conn trunk/complement/explore/app/SMTP-tools/smtp-ut/test-graph-1 trunk/complement/explore/app/SMTP-tools/smtp-ut/test-tecol trunk/complement/explore/app/SMTP-tools/smtp-ut/test-twice trunk/complement/explore/app/SMTP-tools/smtp-ut/timeoutsocket.py trunk/complement/explore/app/SMTP-tools/tecol/ trunk/complement/explore/app/SMTP-tools/tecol/ConnectionProcessor.cc trunk/complement/explore/app/SMTP-tools/tecol/ConnectionProcessor.h trunk/complement/explore/app/SMTP-tools/tecol/Makefile trunk/complement/explore/app/SMTP-tools/tecol/Makefile.inc trunk/complement/explore/app/SMTP-tools/tecol/dump/ trunk/complement/explore/app/SMTP-tools/tecol/dump/Makefile trunk/complement/explore/app/SMTP-tools/tecol/dump/Makefile.inc trunk/complement/explore/app/SMTP-tools/tecol/dump/dump.cc trunk/complement/explore/app/SMTP-tools/tecol/tecol.cc trunk/complement/explore/app/SMTP-tools/tecol/ut/ trunk/complement/explore/app/SMTP-tools/tecol/ut/Makefile trunk/complement/explore/app/SMTP-tools/tecol/ut/Makefile.inc trunk/complement/explore/app/SMTP-tools/tecol/ut/client.cc trunk/complement/explore/app/SMTP-tools/tecol/ut/client.h trunk/complement/explore/app/SMTP-tools/tecol/ut/message.cc trunk/complement/explore/app/SMTP-tools/tecol/ut/message.h trunk/complement/explore/app/SMTP-tools/tecol/ut/unit_test.cc trunk/complement/explore/app/SMTP-tools/test_mta/ trunk/complement/explore/app/SMTP-tools/test_mta/ConnectionProcessor.cc trunk/complement/explore/app/SMTP-tools/test_mta/ConnectionProcessor.h trunk/complement/explore/app/SMTP-tools/test_mta/Makefile trunk/complement/explore/app/SMTP-tools/test_mta/Makefile.inc trunk/complement/explore/app/SMTP-tools/test_mta/tmta.cc Added: trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile =================================================================== --- trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile (rev 0) +++ trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,28 @@ +# -*- Makefile -*- Time-stamp: <03/10/07 18:28:29 ptr> +# $Id: Makefile,v 1.2 2004/06/16 14:29:20 ptr Exp $ + +SRCROOT := ../../../../extern/complement +# SRCROOT := /export/home/ptr/island/workshop/explore +COMPILER_NAME := gcc + +include Makefile.inc +include ${SRCROOT}/Makefiles/top.mak + + +DEFS += -D_NO_TEST +INCLUDES += -I$(SRCROOT)/include -I$(STLPORT_INCLUDE_DIR) -I$(BOOST_INCLUDE_DIR) + +release-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR} +stldbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_STLDBG} +dbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_DBG} + +ifeq ($(OSNAME),sunos) +release-shared : LDLIBS = -lstlport_gcc -lrt +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lrt +dbg-shared : LDLIBS = -lstlport_gcc -lrt +else +release-shared : LDLIBS = -lstlport_gcc -lxmt_gcc -lsockios_gcc -lmisc_gcc +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lxmt_gcc_stl-g -lsockios_gcc_stl-g -lmisc_gcc_stl-g +dbg-shared : LDLIBS = -lstlport_gcc -lxmt_gcc-g -lsockios_gcc-g -lmisc_gcc-g +endif + Added: trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile.inc =================================================================== --- trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile.inc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/DoSclient/Makefile.inc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,5 @@ +# -*- makefile -*- Time-stamp: <03/10/07 15:14:22 ptr> +# $Id: Makefile.inc,v 1.1 2003/10/08 08:26:16 ptr Exp $ + +PRGNAME = doscl +SRC_CC = doscl.cc Added: trunk/complement/explore/app/SMTP-tools/DoSclient/doscl.cc =================================================================== --- trunk/complement/explore/app/SMTP-tools/DoSclient/doscl.cc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/DoSclient/doscl.cc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,144 @@ +// -*- C++ -*- Time-stamp: <04/01/21 18:04:57 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: doscl.cc,v 1.2 2004/06/16 14:29:20 ptr Exp $" +# else +#ident "@(#)$Id: doscl.cc,v 1.2 2004/06/16 14:29:20 ptr Exp $" +# endif +#endif + +#include <iostream> +#include <string> +#include <sstream> +#include <sockios/sockstream> +#include <mt/xmt.h> +#include <misc/args.h> + +using namespace std; +using namespace __impl; + +int command_whole_timeout_test( iostream& s, const string& hello_host, int delay ) +{ + string rline; + string err_line; + + getline( s, rline ); + + cout << rline << endl; + + timespec t; + t.tv_sec = delay; + t.tv_nsec = 0; + + Thread::delay( &t ); + + s << "EHLO " << hello_host << "\r" << endl; + getline( s, rline ); + + if ( s.good() ) { + // cerr << "Connection even here seems ok" << endl; + cout << rline << endl; + } + getline( s, err_line ); + if ( s.good() ) { + return -1; // connection still ok, timeout not happens + } + + return 0; +} + +int cumulative_command_timeout_test( iostream& s, const string& hello_host, int delay ) +{ + string rline; + string err_line; + + getline( s, rline ); + + cout << rline << endl; + + timespec t; + t.tv_sec = delay; + t.tv_nsec = 0; + + stringstream sstr; + sstr << "EHLO " << hello_host << "\r" << endl; + string greeting( sstr.str() ); + + for ( string::iterator i = greeting.begin(); i != greeting.end(); ++i ) { + Thread::delay( &t ); + s << *i; + s.flush(); + (cout << *i).flush(); + } + + getline( s, rline ); + + if ( s.good() ) { + cout << rline << endl; + } + getline( s, err_line ); + if ( s.good() ) { + return -1; // connection still ok, timeout not happens + } + + // cout << rline << endl; + return 0; +} + +int main( int argc, char * const *argv ) +{ + try { + Argv arg; + arg.copyright( "Copyright (C) K sky Lab, 2003" ); + arg.brief( "test for SMTP GW project" ); + arg.option( "-h", false, "print this help message" ); + arg.option( "-s", string( "" ), "host with SMTP GW server" ); + arg.option( "-p", int(25), "port that listen SMTP GW server" ); + arg.option( "-hello", string( "peak.avp.ru" ), "argument of EHLO/HELO command" ); + arg.option( "-delay", int( 305 ), "delay (timeout) for test" ); + arg.option( "-test", int( 0 ), "test number (0 or 1)" ); + try { + arg.parse( argc, argv ); + } + catch ( std::invalid_argument& err ) { + cerr << err.what() << endl; + arg.print_help( cerr ); + throw 1; + } + bool turn; + if ( arg.assign( "-h", turn ) ) { + arg.print_help( cerr ); + throw 0; + } + + string t_host; + int t_port; + arg.assign( "-s", t_host ); + arg.assign( "-p", t_port ); + + string hello_host; + arg.assign( "-hello", hello_host ); + + int delay; + int test_no; + arg.assign( "-delay", delay ); + arg.assign( "-test", test_no ); + + string rline; + + sockstream s( t_host.data(), t_port ); + if ( test_no == 0 ) { + return command_whole_timeout_test( s, hello_host, delay ); + } else if ( test_no == 1 ) { + return cumulative_command_timeout_test( s, hello_host, delay ); + } + + return -1; + } + catch( int ret ) { + return ret; + } + + return 0; +} Added: trunk/complement/explore/app/SMTP-tools/scgen/Makefile =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/Makefile (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/Makefile 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,28 @@ +# -*- Makefile -*- Time-stamp: <03/09/08 14:55:56 ptr> +# $Id: Makefile,v 1.1 2003/09/11 10:33:15 ptr Exp $ + +SRCROOT := ../../../../extern/complement +COMPILER_NAME := gcc + +ALL_TAGS := dbg-shared + +include Makefile.inc +include ${SRCROOT}/Makefiles/top.mak + + +INCLUDES += -I$(SRCROOT)/include -I$(STLPORT_INCLUDE_DIR) -I$(BOOST_INCLUDE_DIR) + +release-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR} +stldbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_STLDBG} +dbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_DBG} + +ifeq ($(OSNAME),sunos) +release-shared : LDLIBS = -lstlport_gcc -lrt +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lrt +dbg-shared : LDLIBS = -lstlport_gcc -lrt +else +release-shared : LDLIBS = -lstlport_gcc +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug +dbg-shared : LDLIBS = -lstlport_gcc +endif + Added: trunk/complement/explore/app/SMTP-tools/scgen/Makefile.inc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/Makefile.inc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/Makefile.inc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,5 @@ +# -*- makefile -*- Time-stamp: <03/09/09 12:51:17 ptr> +# $Id: Makefile.inc,v 1.1 2003/09/11 10:33:15 ptr Exp $ + +PRGNAME = scgen +SRC_CC = scgen.cc stategraph.cc Added: trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,28 @@ +# -*- Makefile -*- Time-stamp: <03/09/08 14:55:56 ptr> +# $Id: Makefile,v 1.1 2003/10/07 10:50:16 ptr Exp $ + +SRCROOT := ../../../../../extern/complement +COMPILER_NAME := gcc + +ALL_TAGS := dbg-shared + +include Makefile.inc +include ${SRCROOT}/Makefiles/top.mak + + +INCLUDES += -I$(SRCROOT)/include -I$(STLPORT_INCLUDE_DIR) -I$(BOOST_INCLUDE_DIR) -I.. + +release-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR} +stldbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_STLDBG} +dbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_DBG} + +ifeq ($(OSNAME),sunos) +release-shared : LDLIBS = -lstlport_gcc -lrt +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lrt +dbg-shared : LDLIBS = -lstlport_gcc -lrt +else +release-shared : LDLIBS = -lstlport_gcc +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug +dbg-shared : LDLIBS = -lstlport_gcc +endif + Added: trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile.inc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile.inc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/Makefile.inc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,5 @@ +# -*- makefile -*- Time-stamp: <03/09/09 12:51:17 ptr> +# $Id: Makefile.inc,v 1.1 2003/10/07 10:50:16 ptr Exp $ + +PRGNAME = dropconn +SRC_CC = dropconn.cc ../stategraph.cc Added: trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/dropconn.cc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/dropconn.cc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/scgen-dropconn/dropconn.cc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,129 @@ +// -*- C++ -*- Time-stamp: <03/10/06 18:09:23 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: dropconn.cc,v 1.1 2003/10/07 10:50:16 ptr Exp $" +# else +#ident "@(#)$Id: dropconn.cc,v 1.1 2003/10/07 10:50:16 ptr Exp $" +# endif +#endif + +#include <iostream> +#include "stategraph.h" + +enum vertex { + NotConnected, + Connected, + Greeting, + Mail, + Recipient, + Data, + EndOfData, + NVertices +}; + +enum edge { + _connect_, + _disconnect_, + _QUIT_, + _RSET_, + _EXPN_, + _HELP_, + _VRFY_, + _NOOP_, + _MAIL_, + _HELO_, + _EHLO_, + _RCPT_, + _DATA_, + _EOD_, // end of data + _nothing_, + _NCommands_ +}; + + +int main( int, char * const * ) +{ + StateGraph g( NVertices, std::cout ); + + g.edge( NotConnected, Connected, 5, _connect_ ); + // g.edge( Connected, NotConnected, 10, _QUIT_ ); + // g.edge( Connected, Connected, 1, _RSET_ ); + // g.edge( Connected, Connected, 1, _EXPN_ ); + // g.edge( Connected, Connected, 1, _HELP_ ); + // g.edge( Connected, Connected, 1, _NOOP_ ); + // g.edge( Connected, Connected, 1, _VRFY_ ); + g.edge( Connected, Greeting, 2, _HELO_ ); + g.edge( Connected, Greeting, 1, _EHLO_ ); + // g.edge( Greeting, Greeting, 1, _EHLO_ ); + // g.edge( Greeting, Greeting, 1, _RSET_ ); + // g.edge( Greeting, Greeting, 1, _VRFY_ ); + // g.edge( Greeting, Greeting, 1, _EXPN_ ); + // g.edge( Greeting, Greeting, 1, _HELP_ ); + // g.edge( Greeting, Greeting, 1, _NOOP_ ); + g.edge( Greeting, NotConnected, 10, _QUIT_ ); + g.edge( Greeting, Mail, 1, _MAIL_ ); + g.edge( Greeting, NotConnected, 1, _disconnect_ ); + // g.edge( Mail, Mail, 1, _NOOP_ ); + // g.edge( Mail, Mail, 1, _HELP_ ); + // g.edge( Mail, Greeting, 3, _EHLO_ ); + // g.edge( Mail, Greeting, 3, _RSET_ ); + // g.edge( Mail, NotConnected, 10, _QUIT_ ); + g.edge( Mail, NotConnected, 1, _disconnect_ ); + g.edge( Mail, Recipient, 1, _RCPT_ ); + // g.edge( Recipient, Greeting, 3, _RSET_ ); + // g.edge( Recipient, Greeting, 3, _EHLO_ ); + // g.edge( Recipient, NotConnected, 10, _QUIT_ ); + g.edge( Recipient, NotConnected, 1, _disconnect_ ); + // g.edge( Recipient, Recipient, 1, _NOOP_ ); + // g.edge( Recipient, Recipient, 1, _HELP_ ); + g.edge( Recipient, Data, 1, _DATA_ ); + g.edge( Recipient, NotConnected, 1, _disconnect_ ); + g.edge( Data, EndOfData, 1, _EOD_ ); + g.edge( EndOfData, Greeting, 1, _nothing_ ); + g.edge( EndOfData, NotConnected, 1, _disconnect_ ); + + + std::string host( "$1 $2" ); + std::string hello( "$3" ); + std::string msg_to( "<$5>" ); + std::string msg_from( "<$4>" ); + + g[_connect_] << "# --------------\n" + << "connect " << host << "\n" + << "expected 220\n"; + g[_disconnect_] << "disconnect\n"; + g[_QUIT_] << "QUIT\n" + << "expected 221\n" + << "disconnect\n" + << "# --------------\n"; + g[_RSET_] << "RSET\n" + << "expected 250\n"; + g[_EXPN_] << "EXPN so...@ho...\n" + << "expected\n"; + g[_HELP_] << "HELP\n" + << "expected 250\n"; + g[_VRFY_] << "VRFY so...@ho...\n" + << "expected\n"; + g[_NOOP_] << "NOOP\n" + << "expected 250\n"; + g[_MAIL_] << "MAIL FROM:" << msg_from << "\n" + << "expected 250\n"; + g[_HELO_] << "HELO " << hello << "\n" + << "expected 250\n"; + g[_EHLO_] << "EHLO " << hello << "\n" + << "expected 250\n"; + g[_RCPT_] << "RCPT TO:" << msg_to << "\n" + << "expected 250\n"; + g[_DATA_] << "DATA\n" + << "expected 354\n" + << ">>>A\n" + << "Subject: KL smtp relay test\n\nSample mess\n"; + g[_EOD_] // << "\r\n.\r\n" + << "<<<A\n" + << "expected 250\n"; + + g.girdle( NotConnected ); + + return 0; +} Added: trunk/complement/explore/app/SMTP-tools/scgen/scgen.cc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/scgen.cc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/scgen.cc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,125 @@ +// -*- C++ -*- Time-stamp: <03/10/06 18:10:41 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: scgen.cc,v 1.3 2003/10/06 15:33:52 ptr Exp $" +# else +#ident "@(#)$Id: scgen.cc,v 1.3 2003/10/06 15:33:52 ptr Exp $" +# endif +#endif + +#include <iostream> +#include "stategraph.h" + +using namespace std; + +enum vertex { + NotConnected, + Connected, + Greeting, + Mail, + Recipient, + Data, + EndOfData, + NVertices +}; + +enum edge { + _connect_, + _disconnect_, + _QUIT_, + _RSET_, + _EXPN_, + _HELP_, + _VRFY_, + _NOOP_, + _MAIL_, + _HELO_, + _EHLO_, + _RCPT_, + _DATA_, + _EOD_, // end of data + _nothing_, + _NCommands_ +}; + + +int main( int, char * const * ) +{ + StateGraph g( NVertices, cout ); + + g.edge( NotConnected, Connected, 5, _connect_ ); + g.edge( Connected, NotConnected, 10, _QUIT_ ); + g.edge( Connected, Connected, 1, _RSET_ ); + g.edge( Connected, Connected, 1, _EXPN_ ); + g.edge( Connected, Connected, 1, _HELP_ ); + g.edge( Connected, Connected, 1, _NOOP_ ); + g.edge( Connected, Connected, 1, _VRFY_ ); + g.edge( Connected, Greeting, 2, _HELO_ ); + g.edge( Connected, Greeting, 1, _EHLO_ ); + g.edge( Greeting, Greeting, 1, _EHLO_ ); + g.edge( Greeting, Greeting, 1, _RSET_ ); + g.edge( Greeting, Greeting, 1, _VRFY_ ); + g.edge( Greeting, Greeting, 1, _EXPN_ ); + g.edge( Greeting, Greeting, 1, _HELP_ ); + g.edge( Greeting, Greeting, 1, _NOOP_ ); + g.edge( Greeting, NotConnected, 10, _QUIT_ ); + g.edge( Greeting, Mail, 1, _MAIL_ ); + g.edge( Mail, Mail, 1, _NOOP_ ); + g.edge( Mail, Mail, 1, _HELP_ ); + g.edge( Mail, Greeting, 3, _EHLO_ ); + g.edge( Mail, Greeting, 3, _RSET_ ); + g.edge( Mail, NotConnected, 10, _QUIT_ ); + g.edge( Mail, Recipient, 1, _RCPT_ ); + g.edge( Recipient, Greeting, 3, _RSET_ ); + g.edge( Recipient, Greeting, 3, _EHLO_ ); + g.edge( Recipient, NotConnected, 10, _QUIT_ ); + g.edge( Recipient, Recipient, 1, _NOOP_ ); + g.edge( Recipient, Recipient, 1, _HELP_ ); + g.edge( Recipient, Data, 1, _DATA_ ); + g.edge( Data, EndOfData, 1, _EOD_ ); + g.edge( EndOfData, Greeting, 1, _nothing_ ); + + string host( "$1 $2" ); + string hello( "$3" ); + string msg_to( "<$5>" ); + string msg_from( "<$4>" ); + + g[_connect_] << "# --------------\n" + << "connect " << host << "\n" + << "expected 220\n"; + g[_disconnect_] << "disconnect\n"; + g[_QUIT_] << "QUIT\n" + << "expected 221\n" + << "disconnect\n" + << "# --------------\n"; + g[_RSET_] << "RSET\n" + << "expected 250\n"; + g[_EXPN_] << "EXPN so...@ho...\n" + << "expected\n"; + g[_HELP_] << "HELP\n" + << "expected 250\n"; + g[_VRFY_] << "VRFY so...@ho...\n" + << "expected\n"; + g[_NOOP_] << "NOOP\n" + << "expected 250\n"; + g[_MAIL_] << "MAIL FROM:" << msg_from << "\n" + << "expected 250\n"; + g[_HELO_] << "HELO " << hello << "\n" + << "expected 250\n"; + g[_EHLO_] << "EHLO " << hello << "\n" + << "expected 250\n"; + g[_RCPT_] << "RCPT TO:" << msg_to << "\n" + << "expected 250\n"; + g[_DATA_] << "DATA\n" + << "expected 354\n" + << ">>>A\n" + << "Subject: KL smtp relay test\n\nSample mess\n"; + g[_EOD_] // << "\r\n.\r\n" + << "<<<A\n" + << "expected 250\n"; + + g.girdle( NotConnected ); + + return 0; +} Added: trunk/complement/explore/app/SMTP-tools/scgen/stategraph.cc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/stategraph.cc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/stategraph.cc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,123 @@ +// -*- C++ -*- Time-stamp: <03/09/29 15:22:19 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: stategraph.cc,v 1.2 2003/10/06 07:56:07 ptr Exp $" +# else +#ident "@(#)$Id: stategraph.cc,v 1.2 2003/10/06 07:56:07 ptr Exp $" +# endif +#endif + +#include "stategraph.h" + +using namespace boost; +using namespace std; + +StateGraph::StateGraph( int nv, std::ostream& _out ) : + g( nv ), + out( _out ) +{ + weight = get( edge_weight, g ); + color = get( edge_color, g ); + operation = get( edge_operation, g ); +} + +void StateGraph::edge( int v_from, int v_to, int weight, int operation ) +{ + // the '0' parameter in Color(... is definition of initial color '0' for edge + add_edge( v_from, v_to, EdgeProperty(weight,Color(0,operation)), g ); +} + +StateGraph::vertex_t StateGraph::walk_from( StateGraph::vertex_t v ) +{ + out_edge_iterator_t ei; + out_edge_iterator_t eend; + + for ( tie(ei,eend) = out_edges(v,g); ei != eend; ++ei ) { + if ( color[*ei] == 0 ) { + color[*ei] = 1; + + out << (*this)[operation[*ei]].str(); + return target(*ei, g); + } + } + + return vertex_t(-1); +} + +StateGraph::vertex_t StateGraph::vertex_with_white_edge() +{ + vertex_iterator_t vi; + vertex_iterator_t vie; + for ( tie(vi,vie) = vertices(g); vi != vie; ++vi ) { + out_edge_iterator_t ei; + out_edge_iterator_t eend; + + for ( tie(ei,eend) = out_edges(*vi,g); ei != eend; ++ei ) { + if ( color[*ei] == 0 ) { + return *vi; + } + } + } + + return vertex_t(-1); +} + +int StateGraph::least_cost_edge_aux( const vertex_t& x, const vertex_t& u ) +{ + out_edge_iterator_t ei; + out_edge_iterator_t eend; + out_edge_iterator_t least_cost; + + tie(ei,eend) = out_edges(x,g); + least_cost = eend; + for ( ; ei != eend; ++ei ) { + if ( target(*ei, g) == u ) { + if ( (least_cost == eend) || (weight[*least_cost] > weight[*ei]) ) { + least_cost = ei; + } + } + } + return operation[*least_cost]; +} + +void StateGraph::shortest_path( StateGraph::vertex_t v, StateGraph::vertex_t u ) +{ + vector<vertex_t> p(num_vertices(g)); + vector<int> ops; + + dijkstra_shortest_paths( g, v, predecessor_map(&p[0]) ); + + vertex_t x = p[u]; + while ( x != v ) { + ops.push_back( least_cost_edge_aux(x,u) ); + u = x; + x = p[u]; + } + ops.push_back( least_cost_edge_aux(x,u) ); // last step + + for ( vector<int>::reverse_iterator i = ops.rbegin(); i != ops.rend(); ++i ) { + out << (*this)[*i].str(); + } +} + +void StateGraph::girdle( int start ) +{ + vertex_t v = walk_from( start ); + vertex_t u = v; + + do { + while ( v != vertex_t(-1) ) { + u = v; + v = walk_from( u ); + } + v = vertex_with_white_edge(); + if ( v == vertex_t(-1) ) { + break; + } + shortest_path( u, v ); + } while ( true ); + if ( u != start ) { + shortest_path( u, start ); + } +} Added: trunk/complement/explore/app/SMTP-tools/scgen/stategraph.h =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/stategraph.h (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/stategraph.h 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,82 @@ +// -*- C++ -*- Time-stamp: <03/09/29 15:21:11 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: stategraph.h,v 1.2 2003/10/06 07:56:07 ptr Exp $" +# else +#ident "@(#)$Id: stategraph.h,v 1.2 2003/10/06 07:56:07 ptr Exp $" +# endif +#endif + +#include <iostream> +#include <sstream> +#include <map> +#include <boost/graph/adjacency_list.hpp> +#include <boost/graph/dijkstra_shortest_paths.hpp> + +//using namespace boost; +//using namespace std; + +enum edge_operation_t { edge_operation }; + +namespace boost { + BOOST_INSTALL_PROPERTY( edge, operation ); +} // namespace boost + + +//typedef property<edge_operation_t,int> Operation; +//typedef property<edge_color_t,int,Operation> Color; + + +class StateGraph +{ + private: + typedef boost::property<edge_operation_t,int> Operation; + typedef boost::property<boost::edge_color_t,int,Operation> Color; + typedef boost::property<boost::edge_weight_t,int,Color> EdgeProperty; + + typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, boost::no_property, EdgeProperty > graph_t; + typedef boost::graph_traits<graph_t>::out_edge_iterator out_edge_iterator_t; + typedef boost::graph_traits<graph_t>::vertex_iterator vertex_iterator_t; + + typedef boost::graph_traits<graph_t>::vertex_descriptor vertex_t; + + typedef boost::property_map<graph_t,boost::edge_color_t>::type edge_color_map_t; + typedef boost::property_map<graph_t,boost::edge_weight_t>::type edge_weight_map_t; + typedef boost::property_map<graph_t,edge_operation_t>::type edge_operation_map_t; + + typedef std::vector<vertex_t> predecessor_map_t; + + public: + StateGraph( int, std::ostream& ); + + void edge( int v_from, int v_to, int weight, int operation ); + std::stringstream& operator [] ( int key ) + { + std::stringstream *_s = _cmd[key]; + if ( _s == 0 ) { + _s = new std::stringstream(); + _cmd[key] = _s; + } + return *_s; + } + + void girdle( int start ); + + private: + + graph_t g; + edge_weight_map_t weight; + edge_color_map_t color; + edge_operation_map_t operation; + + void shortest_path( vertex_t, vertex_t ); + vertex_t walk_from( vertex_t v ); + vertex_t vertex_with_white_edge(); + int least_cost_edge_aux( const vertex_t&, const vertex_t& ); + + std::map<int,std::stringstream *> _cmd; + + std::ostream& out; +}; + Added: trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,28 @@ +# -*- Makefile -*- Time-stamp: <03/09/09 12:54:58 ptr> +# $Id: Makefile,v 1.1 2003/09/11 10:34:11 ptr Exp $ + +SRCROOT := ../../../../../extern/complement +COMPILER_NAME := gcc + +ALL_TAGS := dbg-shared + +include Makefile.inc +include ${SRCROOT}/Makefiles/top.mak + + +INCLUDES += -I$(SRCROOT)/include -I$(STLPORT_INCLUDE_DIR) -I$(BOOST_INCLUDE_DIR) -I.. + +release-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR} +stldbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_STLDBG} +dbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_DBG} + +ifeq ($(OSNAME),sunos) +release-shared : LDLIBS = -lstlport_gcc -lrt +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lrt +dbg-shared : LDLIBS = -lstlport_gcc -lrt +else +release-shared : LDLIBS = -lstlport_gcc -lboost_test_utf_gcc +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lboost_test_utf_gcc_stl-g +dbg-shared : LDLIBS = -lstlport_gcc -lboost_test_utf_gcc-g +endif + Added: trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile.inc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile.inc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/ut/Makefile.inc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,5 @@ +# -*- makefile -*- Time-stamp: <03/09/09 12:51:52 ptr> +# $Id: Makefile.inc,v 1.1 2003/09/11 10:34:11 ptr Exp $ + +PRGNAME = ut +SRC_CC = unit_test.cc ../stategraph.cc Added: trunk/complement/explore/app/SMTP-tools/scgen/ut/unit_test.cc =================================================================== --- trunk/complement/explore/app/SMTP-tools/scgen/ut/unit_test.cc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/scgen/ut/unit_test.cc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,88 @@ +// -*- C++ -*- Time-stamp: <03/09/29 15:21:38 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: unit_test.cc,v 1.2 2003/10/06 07:56:08 ptr Exp $" +# else +#ident "@(#)$Id: unit_test.cc,v 1.2 2003/10/06 07:56:08 ptr Exp $" +# endif +#endif + +#include <boost/test/unit_test.hpp> + +using namespace boost::unit_test_framework; +using namespace std; + +#include <iostream> +#include <sstream> + +#include "stategraph.h" + + +enum vertex { + NotConnected, + Connected, + Greeting, + NVertices +}; + +enum edge { + _connect_, + _disconnect_, + _QUIT_, + _HELO_, + _NCommands_ +}; + +void girdle_test_1() +{ + stringstream s; + + StateGraph g( NVertices, s ); + + g.edge( NotConnected, Connected, 5, _connect_ ); + g.edge( Connected, Greeting, 1, _HELO_ ); + g.edge( Greeting, NotConnected, 5, _QUIT_ ); + + g[_connect_] << "1."; + g[_disconnect_] << "2."; + g[_QUIT_] << "3."; + g[_HELO_] << "4."; + + g.girdle( NotConnected ); + + BOOST_REQUIRE( s.str() == "1.4.3." ); +} + +void girdle_test_2() +{ + stringstream s; + + StateGraph g( NVertices, s ); + + g.edge( NotConnected, Connected, 5, _connect_ ); + g.edge( Connected, Greeting, 1, _HELO_ ); + g.edge( Greeting, NotConnected, 5, _QUIT_ ); + g.edge( Greeting, NotConnected, 10, _disconnect_ ); + g.edge( Connected, NotConnected, 10, _disconnect_ ); + + g[_connect_] << "1."; + g[_disconnect_] << "2."; + g[_QUIT_] << "3."; + g[_HELO_] << "4."; + + g.girdle( NotConnected ); + + BOOST_REQUIRE( s.str() == "1.4.3.1.2.1.4.2." ); + // cout << s.str() << endl; +} + +test_suite *init_unit_test_suite( int argc, char **argv ) +{ + test_suite *ts = BOOST_TEST_SUITE( "StateGraph test" ); + + ts->add( BOOST_TEST_CASE( &girdle_test_1 ) ); + ts->add( BOOST_TEST_CASE( &girdle_test_2 ) ); + + return ts; +} Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-addr-2 =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-addr-2 (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-addr-2 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,10 @@ +# comment +connect $1 $2 +expected 220 +EHLO $3 +expected 250 +MAIL FROM:<x@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com> +expected 500 +QUIT +expected 221 +disconnect Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-body-1 =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-body-1 (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-body-1 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,23 @@ +# bad-body-1 +connect $1 $2 +expected 220 +EHLO $3 +expected 250 +MAIL FROM:<$4> +expected 250 +RCPT TO:<$5> +expected 250 +send $6 $7 +DATA +expected 354 +>>>A +Subject: KL smtp relay test + +Expected 1 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +<<<A +expected 500 +wait +QUIT +expected 221 +disconnect Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-domain-1 =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-domain-1 (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/bad-domain-1 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,8 @@ +# comment +connect $1 $2 +expected 220 +EHLO badhost +expected 250 +QUIT +expected 221 +disconnect Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/dot-line =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/dot-line (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/dot-line 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,28 @@ +# comment +connect $1 $2 +expected 220 +EHLO $3 +expected 250 +MAIL FROM:<$4> +expected 250 +RCPT TO:<$4> +expected 250 +#send $5 $6 +DATA +expected 354 +>>>A +Subject: KL smtp relay test + +Expected 1 and 2 should be here: 1, 2. More chars. +. +You must see this line. + +. + +And this line too! +<<<A +expected 250 +#wait +QUIT +expected 221 +disconnect Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/good-addr =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/good-addr (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/good-addr 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,23 @@ +# good-addr test +connect $1 $2 +expected 220 +EHLO $3 +expected 250 +MAIL FROM:<$4> +expected 250 +RCPT TO:<$5> +expected 250 +send $6 $7 +DATA +expected 354 +>>>A +Subject: KL smtp relay test + +Expected 1 +<<<A +expected 250 +wait +QUIT +expected 221 +disconnect +# end of good-addr test Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-1 =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-1 (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-1 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,8 @@ +# comment +connect localhost 10025 +expected 220 +EHLO peak.avp.ru +expected 250 +QUIT +expected 221 +disconnect Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-2 =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-2 (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/good-domain-2 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,8 @@ +# comment +connect localhost 10025 +expected 220 +EHLO 127.0.0.1 +expected 250 +QUIT +expected 221 +disconnect Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/null-char =================================================================== (Binary files differ) Property changes on: trunk/complement/explore/app/SMTP-tools/smtp-ut/null-char ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/scr.sed =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/scr.sed (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/scr.sed 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,24 @@ +# This is sed script to generate MTA test script from output of command like +# find /opt/mcollection/1/Disinfected/ -type f -print + +i \ +# ----- begin\ +connect $1 $2\ +expected 220\ +EHLO $3\ +expected 250\ +MAIL FROM:<$4>\ +expected 250\ +RCPT TO:<$5>\ +expected 250\ +send $6 $7\ +DATA\ +expected 354 +s/\(.*\)/include "\1"/ +a \ +expected 250\ +wait\ +QUIT\ +expected 221\ +disconnect\ +# ----- end Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,28 @@ +# -*- Makefile -*- Time-stamp: <04/05/06 14:30:08 ptr> +# $Id: Makefile,v 1.1 2004/06/16 14:24:07 ptr Exp $ + +#SRCROOT := ../../../../extern/complement +SRCROOT := ../../../../../../island/workshop/explore +COMPILER_NAME := gcc + +include Makefile.inc +include ${SRCROOT}/Makefiles/top.mak + + +DEFS += -D_NO_TEST +INCLUDES += -I$(SRCROOT)/include -I$(STLPORT_INCLUDE_DIR) -I$(BOOST_INCLUDE_DIR) + +release-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR} -Wl,-rpath=${STLPORT_LIB_DIR} +stldbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_STLDBG} -Wl,-rpath=${STLPORT_LIB_DIR} +dbg-shared: LDSEARCH = -L${STLPORT_LIB_DIR} -L${CoMT_LIB_DIR_DBG} -Wl,-rpath=${STLPORT_LIB_DIR} + +ifeq ($(OSNAME),sunos) +release-shared : LDLIBS = -lstlport_gcc -lrt +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lrt +dbg-shared : LDLIBS = -lstlport_gcc_debug -lrt +else +release-shared : LDLIBS = -lstlport_gcc -lxmt_gcc -lsockios_gcc -lmisc_gcc -lboost_regex_gcc +stldbg-shared : LDLIBS = -lstlport_gcc_stldebug -lxmt_gcc_stl-g -lsockios_gcc_stl-g -lmisc_gcc_stl-g -lboost_regex_gcc_stl-g +dbg-shared : LDLIBS = -lstlport_gcc_debug -lxmt_gcc-g -lsockios_gcc-g -lmisc_gcc-g -lboost_regex_gcc-g +endif + Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile.inc =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile.inc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/Makefile.inc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,5 @@ +# -*- makefile -*- Time-stamp: <03/09/15 18:23:15 ptr> +# $Id: Makefile.inc,v 1.1 2004/06/16 14:24:07 ptr Exp $ + +PRGNAME = smtp-batch +SRC_CC = smtp-batch.cc Added: trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/smtp-batch.cc =================================================================== --- trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/smtp-batch.cc (rev 0) +++ trunk/complement/explore/app/SMTP-tools/smtp-ut/smtp-batch/smtp-batch.cc 2008-04-09 10:22:41 UTC (rev 1844) @@ -0,0 +1,574 @@ +// -*- C++ -*- Time-stamp: <04/06/16 12:51:35 ptr> + +#ifdef __unix +# ifdef __HP_aCC +#pragma VERSIONID "@(#)$Id: smtp-batch.cc,v 1.1 2004/06/16 14:24:07 ptr Exp $" +# else +#ident "@(#)$Id: smtp-batch.cc,v 1.1 2004/06/16 14:24:07 ptr Exp $" +# endif +#endif + + +#include <mt/xmt.h> +#include <mt/time.h> +#include <sockios/sockstream> +#include <misc/args.h> + +#include <iostream> +#include <iomanip> +#include <fstream> +#include <map> + +#include <boost/regex.hpp> + +using namespace std; +using namespace boost; + +struct conn +{ + conn() + { + tm[0].tv_sec = tm[1].tv_sec = tm[2].tv_sec = 0; + tm[0].tv_nsec = tm[1].tv_nsec = tm[2].tv_nsec = 0; + } + + conn( const conn& _c ) + { tm[0] = _c.tm[0]; tm[1] = _c.tm[1]; tm[2] = _c.tm[2]; } + + timespec tm[3]; // time of send, time of response, elapsed interval (from tecol server) +}; + +typedef std::pair<std::string,conn> map_type; +typedef std::map<std::string,conn> container_type; +static container_type m; +static container_type finished; + +enum command_type { + UNKNOWN = 0, + HELO, + EHLO, + VRFY, + EXPN, + NOOP, + RSET, + QUIT, + DATA, + HELP, + MAIL, + RCPT, + _connect_, + _disconnect_, + _wait_, + _include_, + _send_, + _expected_, + _delay_, + LAST_CMD +}; + +map<command_type,string> CMD; +sockstream tecol; +__impl::Condition tecol_ready; + +void init_map() +{ + CMD[UNKNOWN] = ""; + CMD[HELO] = "HELO"; + CMD[EHLO] = "EHLO"; + CMD[VRFY] = "VRFY"; + CMD[EXPN] = "EXPN"; + CMD[NOOP] = "NOOP"; + CMD[RSET] = "RSET"; + CMD[QUIT] = "QUIT"; + CMD[DATA] = "DATA"; + CMD[HELP] = "HELP"; + CMD[MAIL] = "MAIL"; + CMD[RCPT] = "RCPT"; + CMD[_connect_] = "connect"; + CMD[_disconnect_] = "disconnect"; + CMD[_wait_] = "wait"; + CMD[_include_] = "include"; + CMD[_send_] = "send"; + CMD[_expected_] = "expected"; + CMD[_delay_] = "delay"; +} + +class RAWclient +{ + public: + RAWclient() + { } + + ~RAWclient() + { + s.close(); + sess << "== " << calendar_time( time(0) ) << endl; + } + + void open( const string& host, int port, const string& log ) + { + if ( !sess.is_open() ) { + sess.open( log.c_str() ); + sess << "== " << calendar_time( time(0) ) << ' ' + << "this prg name and args" << endl; + } + s.open( host.c_str(), port ); + // _hostname = host; + // _port = port; + sess << "=+ " << calendar_time( time(0) ) + << ' ' << host << ':' << port << endl; + } + + void close() + { + s.close(); + sess << "=- " << calendar_time( time(0) ) << endl; + // sess.close(); + } + + // bool is_open() const + // { return s.is_open(); } + + // const string& hostname() const + // { return _hostname; } + + // int port() const + // { return _port; } + + void command( const string& str ) + { + s << str << "\r\n"; + s.flush(); + sess << "<- " << str << "\r\n"; + } + + int response( string& text ) + { + string line; + text.clear(); + getline( s, line ); + sess << "-> " << line; + while ( line.length() > 3 && line[3] == '-' ) { + text += line.substr( 4 ); + getline( s, line ); + sess << "\n-> " << line; + } + text += line; + stringstream str( line ); + int ret; + str >> ret; + getline( str, text ); + sess << endl; + return ret; + } + + string rawline() + { + string line; + getline( s, line ); + sess << "-> " << line << endl; + + return line; + } + + void write_silent( const string& str ) + { + s << str; + s.flush(); + } + + template <class InputIter> + void write_silent( InputIter b, InputIter e ) + { + ostream_iterator<char> o( s ); + copy( b, e, o ); + s.flush(); + } + + void write( const string& str ) + { + s << str; + /* + if ( str is "^\r\n" ) { + sess << "<- \n"; + skip NL + } + */ + sess << "<- " << str; + s.flush(); + } + + void mark_in_log( const string& str ) + { + sess << "!! " << str; + } + + void import_in_log( const string& str ) + { + sess << "<= " << str << '\n'; + } + + private: + sockstream s; + ofstream sess; + + // string _hostname; + // int _port; +}; + +command_type cmd_token( const string& cmd ) +{ + if ( cmd == "HELO" ) { + return HELO; + } else if ( cmd == "EHLO" ) { + return EHLO; + } else if ( cmd == "VRFY" ) { + return VRFY; + } else if ( cmd == "EXPN" ) { + return EXPN; + } else if ( cmd == "NOOP" ) { + return NOOP; + } else if ( cmd == "RSET" ) { + return RSET; + } else if ( cmd == "QUIT" ) { + return QUIT; + } else if ( cmd == "DATA" ) { + return DATA; + } else if ( cmd == "HELP" ) { + return HELP; + } else if ( cmd == "MAIL" ) { + return MAIL; + } else if ( cmd == "RCPT" ) { + return RCPT; + } else if ( cmd == "connect" ) { + return _connect_; + } else if ( cmd == "disconnect" ) { + return _disconnect_; + } else if ( cmd == "wait" ) { + return _wait_; + } else if ( cmd == "include" ) { + return _include_; + } else if ( cmd == "send" ) { + return _send_; + } else if ( cmd == "expected" ) { + return _expected_; + } else if ( cmd == "delay" ) { + return _delay_; + } + + return UNKNOWN; +} + +void interpret( istream& is, const Argv& arg ) +{ + string s; + ostringstream re; // ( "(\'.*?\')|(\".*?\")" ); + // re.seekp( 5, ios_base::beg ); + // cout << re.tellp() << endl; + re << "(\'.*?\')|(\".*?\")"; + for ( int j = 0; j < arg.size(); ++j ) { + re << "|(\\$" << (j+1) << ")"; + } + // cout << re.str().size() << endl; + // cout << re.str() << endl; + regex REcomment( "(\'.*?\')|(\".*?\")|(#.*)" ); + regex REqoutes( re.str() ); + // regex REname( "([[:space:]]+)((\'(.*?)\')|(\"(.*?)\")|(([[:alnum:]]|(\\\\.))+))" ); + regex REname( "(\'(.*?)\')|(\"(.*?)\")|(([[:word:]\\\\.\\$/,%~+-=])+)" ); + regex REescape( "(\\\\(.))" ); + + re.str( "" ); + re.clear(); + re << "(?1$&)(?2$&)"; + + for ( int j = 0; j < arg.size(); ++j ) { + // "()" used here to separate ?N from replacement string, + // that may contain digits. + re << "(?" << (j+3) << "()" << arg[j] << ")"; + } + // cout << re.str().size() << endl; + // cout << re.str() << endl; + string fmt = re.str(); + + bool verbatim_mode = false; + string verbatim_code; + int ln = 0; + + RAWclient client; + bool send_flag = false; + string id; + + init_map(); + + command_type last_command = UNKNOWN; + + char buf[64]; + gethostname( buf, 64 ); + string my_host_name = buf; + + string lfname; + arg.assign( "-l", lfname ); + + bool nodelay; + arg.assign( "-nodelay", nodelay ); + + while ( is.good() ) { + getline( is, s ); + if ( !is.fail() ) { + ++ln; + s = regex_replace( s, REqoutes, fmt, boost::match_default | boost::format_all ); + cout << ln << ": " << s << endl; + if ( !verbatim_mode ) { + // strip comments + string sr = regex_replace( s, REcomment, "(?1$&)(?2$&)(?3)", boost::match_default | boost::format_all ); + string::size_type p; + if ( (p = sr.find( ">>>" )) != string::npos ) { // start verbatim + verbatim_mode = true; + verbatim_code = sr.substr( p + 3 ); + if ( last_command == DATA && send_flag ) { + string tmp( "X-smtpgw-test: " ); + tmp += id; + tmp += " action=recv\n"; + client.write( tmp ); + send_flag = false; + } + continue; + } + istringstream ss( sr ); + string cmd; + ss >> cmd; + if ( cmd.size() > 0 ) { + command_type command = cmd_token( cmd ); + string host; + int port; + int expected; + string rest; + switch ( command ) { + case _connect_: + ss >> host >> port; + // cout << "connect " << host << ":" << port << endl; + client.open( host, port, lfname ); + break; + case HELO: + case EHLO: + case VRFY: + case EXPN: + getline( ss, rest ); + client.command( CMD[command] + rest ); + last_command = command; + // cout << CMD[command] << rest << endl; + break; + case NOOP: + case RSET: + case QUIT: + case DATA: + client.command( CMD[command] ); + // cout << CMD[command] << endl; + last_command = command; + break; + case HELP: + getline( ss, rest ); + client.command( CMD[command] + rest ); + // cout << CMD[command] << rest << endl; + break; + case MAIL: + case RCPT: + getline( ss, rest ); + client.command( CMD[command] + rest ); + last_command = command; + // cout << CMD[command] << rest << endl; + break; + case _disconnect_: + client.close(); + // cout << CMD[command] << endl; + break; + case _expected_: + ss >> expected; + getline( ss, rest ); + { + string txt; + int resp = client.response( txt ); + if ( resp != expected ) { + stringstream msg; + msg << "Unexpected return code after command " + << CMD[last_command] << ": " + << resp << " (expected " << expected << ")" << endl; + client.mark_in_log( msg.str() ); + cerr << msg.str(); + } + // cout << CMD[command] << rest << endl; + } + break; + case _send_: + ss >> host >> port; + // cout << "send " << host << ":" << port <... [truncated message content] |