diff options
-rw-r--r-- | tools/envelope.dat | bin | 0 -> 29 bytes | |||
-rw-r--r-- | tools/pipette.c | 78 | ||||
-rwxr-xr-x | tools/test-qq | 12 |
3 files changed, 89 insertions, 1 deletions
diff --git a/tools/envelope.dat b/tools/envelope.dat Binary files differnew file mode 100644 index 0000000..f103b22 --- /dev/null +++ b/tools/envelope.dat diff --git a/tools/pipette.c b/tools/pipette.c index 1eda2d0..c76b9e5 100644 --- a/tools/pipette.c +++ b/tools/pipette.c @@ -26,6 +26,7 @@ using namespace std; #include <vector> #include <sstream> #include <map> +#include <string.h> /* for strlen() */ #include <sys/types.h> /* for fstat */ #include <sys/stat.h> /* .. */ @@ -438,11 +439,84 @@ void play() { dumpstat(tube[rEnd]); dumpstat(tube[wEnd]); sleep(1.5); + int plus = dup(tube[wEnd]); close(tube[rEnd]); dumpstat(tube[rEnd]); dumpstat(tube[wEnd]); + dumpstat(plus); } +void test_read(){ +// test with: +// cat envelope.dat | 1<&0 ./pipette + char buf[1024]; + list<string> rslt; + int didsome(0); + for (;;){ // loop over all read buffers + int nr = read(1, buf, sizeof(buf)); + if (nr == 0) break; + if (nr < 0) { + cerr << "read failed " << strError() << endl; + exit(1); + } + for (;;){ // loop over all strings + for (int ii = 0; ii < nr; ii++) { + char ch = buf[ii]; + if (ch == 0) { + if (!didsome) goto done; + didsome = 0; + continue; + } + if (!didsome) { + rslt.push_back(""); + } + rslt.back() += ch; + didsome++; + } + } + } +done:;;;; + for (list<string>::const_iterator ptr = rslt.begin(); + ptr != rslt.end(); ptr++) { + cerr << *ptr << endl; + } +} + +#if 0 +void old_test_read(){ +// test with: +// echo asfd | 1<&0 ./pipette +// cat pipette.c | 1<&0 ./pipette + char buf[1024]; + for (;;){ + int nr = read(1, buf, sizeof(buf)); + if (nr == 0) break; + if (nr < 0) { + cerr << "read failed " << strError() << endl; + exit(1); + } +// unit 1 fails: bad file descriptor: +// int nw = write(1, buf, nr); + for (int ii = 0; ii < nr; ii++) { + char* foo; + char out[2] = {0, 0}; + char ch = buf[ii]; + if (ch) { + foo = out; + *foo = ch; + } else { + foo = "␀\n"; + } + int nw = write(2, foo, strlen(foo)); + if (nw < 0) { + cerr << "write failed " << strError() << endl; + exit(1); + } + } + } +} +#endif + int main(int argc, char** argv) { { progname = *argv; @@ -452,7 +526,9 @@ int main(int argc, char** argv) { progid = binder.str(); } - play(); +// play(); + test_read(); + cerr << "<BuhBye>" << endl; exit(0); #define foo(name, num) codemap[num] = #name ; diff --git a/tools/test-qq b/tools/test-qq new file mode 100755 index 0000000..b747bc8 --- /dev/null +++ b/tools/test-qq @@ -0,0 +1,12 @@ +#! /bin/bash + +host=0 +port=1288 + +flags_not_used=" -u21165 -g21164 " + +PATH=/var/qmail/bin:$PATH # so we can find qmail-smtpd and friends + +QMAILQUEUE=/usr/src/netqmail-1.06/tools/pipette \ + /usr/local/bin/tcpserver -R -x/etc/tcpserver/smtp.cdb \ + $host $port qmail-smtpd |