home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 1057.ECHO.C < prev    next >
Text File  |  1989-03-02  |  3KB  |  160 lines

  1.  
  2. /*
  3.  *  ECHO.C - Example of a server for the W0RLI MailBox V10.xx
  4.  *
  5.  *  Copyright (C) 1989
  6.  *  H. N. Oredson
  7.  *  134 Ponderosa Drive
  8.  *  Santa Cruz, ca 95060
  9.  *
  10.  *  This code may be freely used and copied for non-commercial uses.
  11.  *
  12.  *  SP ECHO @ BBS will generate a return message containing
  13.  *  the text and headers from the original message.
  14.  *
  15.  *  The SERVER.MB text required to activate this server is:
  16.  *
  17.  *  s echo echo.exe echo.out H8 echo.in H8
  18.  *
  19.  *  This first exports any messages addressed to ECHO to the file ECHO.OUT.
  20.  *  Next it runs the ECHO server.
  21.  *  Finally it imports the messages created by the ECHO server.
  22.  *  See SERVER.DOC for further details.
  23.  *
  24.  */
  25.  
  26. #include <stdio.h>
  27. #include <ctype.h>
  28. #include <string.h>
  29.  
  30. /*
  31.  *  Some buffer space.
  32.  */
  33.  
  34. #define ln_buf 512
  35.  
  36. char buf[ln_buf];
  37.  
  38. /*
  39.  *  End-of-message mark.
  40.  */
  41.  
  42. char *mark    = "/EX\n";
  43.  
  44. /*
  45.  *  File the MailBox will create, and this server will read.
  46.  */
  47.  
  48. char *infile  = "echo.out";
  49.  
  50. /*
  51.  *  File this server will create, and the MailBox will read.
  52.  */
  53.  
  54. char *outfile = "echo.in";
  55.  
  56.  
  57.  
  58. main(argc, argv)
  59. int argc;
  60. char *argv[];
  61. {
  62.   FILE *in, *out;
  63.   char *st, *tail;
  64.  
  65. /*
  66.  *  Open the input file.
  67.  *  If not possible, exit with return code 1 to signal
  68.  *  the MailBox that the server failed.
  69.  */
  70.  
  71.   if ((in = fopen(infile, "r")) == NULL) exit(1);
  72.  
  73. /*
  74.  *  Open the output file.
  75.  *  If not possible, exit with return code 1 to signal
  76.  *  the MailBox that the server failed.
  77.  */
  78.  
  79.   if ((out = fopen(outfile, "w")) == NULL) exit(1);
  80.  
  81.   st = fgets(buf, ln_buf, in);
  82.   while (st != NULL)
  83.   {
  84.  
  85. /*
  86.  *  Read the rfc-822 header placed into the message by the MailBox.
  87.  *  The end of header is marked by a blank line.
  88.  *  Do not place this header into the output file.
  89.  *  Use the "To:" address as the new "From:" address,
  90.  *  and the "From:" address as the new "To:" address.
  91.  *  Preserve the "Subject:"
  92.  *  This process is the entire function of this server.
  93.  */
  94.  
  95.     while(*buf != '\n')
  96.     {
  97.  
  98. /*
  99.  *  Find end of keyword.
  100.  *  Terminate string at end of keyword.
  101.  */
  102.  
  103.       tail = strchr(buf, ' ');
  104.       *tail++ = '\0';
  105.  
  106. /*
  107.  *  Make the new rfc-822 header.
  108.  */
  109.  
  110.       if      (!strcmp(buf, "To:"))      fprintf(out, "From: %s", tail);
  111.       else if (!strcmp(buf, "From:"))    fprintf(out, "To: %s", tail);
  112.       else if (!strcmp(buf, "Subject:")) fprintf(out, "Subject: %s", tail);
  113.       st = fgets(buf, ln_buf, in);
  114.     }
  115.  
  116. /*
  117.  *  Now that the rfc-822 header has been read, and a new one created,
  118.  *  copy the text of the message from the input to the output.
  119.  */
  120.  
  121.     while ((st != NULL) && stricmp(buf, mark))
  122.     {
  123.       fputs(buf, out);
  124.       st = fgets(buf, ln_buf, in);
  125.     }
  126.  
  127. /*
  128.  *  Mark the end of this message.
  129.  *  Go on to the next message.
  130.  */
  131.  
  132.     fputs(mark, out);
  133.     if (st != NULL) st = fgets(buf, ln_buf, in);
  134.   }
  135.  
  136. /*
  137.  *  All the incoming messages have been processed,
  138.  *  and an outgoing message created for each one.
  139.  */
  140.  
  141.   fclose(in);
  142.   fclose(out);
  143.  
  144. /*
  145.  *  Delete the input file.
  146.  *  The MailBox appends messages to this file, this server must delete it.
  147.  */
  148.  
  149.   unlink(infile);
  150.  
  151. /*
  152.  *  Exit with return code 0 to signal the MailBox that
  153.  *  the server completed it's processing normally.
  154.  *  The MailBox will then read our output file,
  155.  *  and create messages from it.
  156.  */
  157.  
  158.   exit(0);
  159. }
  160.