# 2.11BSD#431 - /usr/src/new/nntp/server/ahbs.c

##### Functions

    ahbs              X

       1: #ifndef lint
       2: static char *sccsid = "@(#)ahbs.c	1.8	(Berkeley) 1/11/88";
       3: #endif
       4:
       5: #include "common.h"
       6:
       7: static char *verbage[] = {
       8:     "head and body follow",
       9:     "head follows",
      10:     "body follows",
      11:     "request text separately"
      12: };
      13:
      14: /*
      15:  * {ARTICLE,HEAD,BODY,STAT} <messageid>|articlenum
      16:  *
      17:  * Retrieve article, head, body, or stat, depending on the
      18:  * command we were invoked with.
      19:  */
      20:
      21: ahbs(argc, argv)
      22:     int     argc;
      23:     char        *argv[];
      24: {
      25:     char        artbuf[MAXPATHLEN], art_id[MAXBUFLEN];
      26:     register char   c;
      27:     int     method;
      28:     register FILE   *fp;        /* For Message-ID retrieval only */
      29:
      30:     if (argc > 2) {
      31:         printf("%d Usage: %s <message-id>|article_number.\r\n", argv[0],
      32:             ERR_CMDSYN);
      33:         (void) fflush(stdout);
      34:         return;
      35:     }
      36:
      37:     if ((c = *argv[0]) == 'a' || c == 'A')
      38:         method = ARTICLE;
      39:     else if ((c == 's' || c == 'S'))
      40:         method = STAT;
      41:     else
      42:         method = ((c == 'h' || c == 'H') ? HEAD : BODY);
      43:
      44:     if (argc == 2 && *argv[1] == '<') { /* Message ID */
      45:         fp = openartbyid(argv[1]);
      46:         if (fp == NULL) {
      47:             printf("%d No article by message-id %s, sorry.\r\n",
      48:                 ERR_NOART, argv[1]);
      49:             (void) fflush(stdout);
      50:             return;
      51:         }
      52:         if (check_ngperm(fp) == 0) {
      53:             printf("%d Can't give that to you, sorry.\r\n",
      54:                 ERR_ACCESS);
      55:             (void) fflush(stdout);
      56:             (void) fclose(fp);
      57:             return;
      58:         }
      59:         printf("%d 0 %s Article retrieved, %s.\r\n",
      60:             OK_ARTICLE + method, argv[1], verbage[method]);
      61:         spew(fp, method);
      62:         (void) fclose(fp);
      63: #ifdef LOG
      64:         if (nn_told)
      65:             nn_took++;
      66: #endif
      67:         return;
      68:     }
      69:
      70:     /* Else we're trying to read */
      71:
      72:     if (!canread) {
      73:         printf("%d You only have permission to transfer, sorry.\r\n",
      74:             ERR_ACCESS);
      75:         (void) fflush(stdout);
      76:         return;
      77:     }
      78:
      79:     if (!ingroup) {
      80:         printf("%d You are not currently in a newsgroup.\r\n",
      81:             ERR_NCING);
      82:         (void) fflush(stdout);
      83:         return;
      84:     }
      85:
      86:     if (argc == 1) {
      87:         if (art_ptr < 0 || art_ptr >= num_arts) {
      88:             printf("%d No article is currently selected.\r\n",
      89:                 ERR_NOCRNT);
      90:             (void) fflush(stdout);
      91:             return;
      92:         }
      93:         (void) sprintf(artbuf, "%d", art_array[art_ptr]);
      94:     } else
      95:         (void) strcpy(artbuf, argv[1]);
      96:
      97:     if (!valid_art(artbuf)) {
      98:         printf("%d Invalid article number: %s.\r\n",
      99:             ERR_NOARTIG, artbuf);
     100:         (void) fflush(stdout);
     101:         return;
     102:     }
     103:
     104:     while (open_valid_art(artbuf, art_id) == NULL) {
     105:         if (argc > 1) {
     106:             printf("%d Invalid article number: %s.\r\n",
     107:                 ERR_NOARTIG, artbuf);
     108:             (void) fflush(stdout);
     109:             return;
     110:         } else {
     111:             if (++art_ptr >= num_arts) {
     112:                 printf("%d Invalid article number.\r\n",
     113:                     ERR_NOARTIG);
     114:                 (void) fflush(stdout);
     115:                 return;
     116:             }
     117:             (void) sprintf(artbuf, "%d", art_array[art_ptr]);
     118:         }
     119:     }
     120:
     121:     printf("%d %s %s Article retrieved; %s.\r\n",
     122:         OK_ARTICLE + method, artbuf, art_id, verbage[method]);
     123:
     124:     spew(art_fp, method);
     125:
     126:     if (argc > 1)
     127:         art_ptr = findart(artbuf);
     128: }

#### Defined functions

ahbs defined in line 21; used 5 times

- in /usr/src/new/nntp/server/serve.c line 23, 31-34(3), 44

#### Defined variables

sccsid defined in line 2; never used
verbage defined in line 7; used 2 times

- in line 60, 122

Last modified: 1988-01-12 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1518 |