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

##### Functions

    print_header      X
    xhdr              X
    xhdr_greenkluydge X

       1: #ifndef lint
       2: static char *sccsid = "@(#)xhdr.c	1.6	(Berkeley) 2/25/88";
       3: #endif
       4:
       5: #include "common.h"
       6:
       7: #ifdef XHDR
       8:
       9: /*
      10:  * XHDR header [<messageid>|articlerange]
      11:  *
      12:  * header is a case-insensitive header field, minus any colons.
      13:  *
      14:  * articlerange is one of:
      15:  *	an article number
      16:  *	an article number followed by a dash to indicate all following
      17:  *	an article number followed by a dash followed by another
      18:  *		article number.
      19:  * e.g.,
      20:  * XHDR subject			retrieve subject of current article
      21:  * XHDR subject 5589-6325	retrieve subject of arts 5589 to 6325
      22:  * XHDR subject 5589-		retrieve subject of arts 5589 and up
      23:  * XHDR subject 5589		retrieve subject of art 5589 only
      24:  * XHDR subject <123@ucbvax>	retrieve subject of art <123@ucbvax>
      25:  *
      26:  * This command is an extention, and not included in RFC 977.
      27:  */
      28:
      29: xhdr(argc, argv)
      30:     int     argc;
      31:     char        *argv[];
      32: {
      33:     char        buf[MAXPATHLEN];
      34:     register int    artptr;
      35:     register int    artnum;
      36:     register int    low, high;
      37:     register FILE   *fp;
      38:     register char   *cp;
      39:
      40:     if (argc < 2 || argc > 3) {
      41:         printf("%d Usage: XHDR headerfield [artrange|<message-id>]\r\n",
      42:             ERR_CMDSYN);
      43:         (void) fflush(stdout);
      44:         return;
      45:     }
      46:
      47:     if (!canread) {
      48:         printf("%d You only have permission to transfer, sorry.\r\n",
      49:             ERR_ACCESS);
      50:         (void) fflush(stdout);
      51:         return;
      52:     }
      53:
      54:     /* Handle message-id requests */
      55:
      56:     if (argc == 3 && *argv[2] == '<') { /* Message ID */
      57:         fp = openartbyid(argv[2]);
      58:         if (fp == NULL) {
      59:             printf("%d No article by message-id %s, sorry.\r\n",
      60:                 ERR_NOART, argv[2]);
      61:             (void) fflush(stdout);
      62:             return;
      63:         }
      64:         printf("%d 0 %s header of article %s.\r\n",
      65:             OK_HEAD, argv[1], argv[2]);
      66:         print_header(fp, argv[1], argv[2]);
      67:         (void) fclose(fp);
      68:
      69:         putchar('.');
      70:         putchar('\r');
      71:         putchar('\n');
      72:         (void) fflush(stdout);
      73:         return;
      74:     }
      75:
      76:     /*
      77: 	 * It must be a range of articles, which means that we need
      78: 	 * to be in a newsgroup already.
      79: 	 */
      80:
      81:     if (!ingroup) {
      82:         printf("%d You are not currently in a newsgroup.\r\n",
      83:             ERR_NCING);
      84:         (void) fflush(stdout);
      85:         return;
      86:     }
      87:
      88:     artptr = 0;
      89:
      90:     if (argc == 2) {
      91:         if (art_ptr < 0 || art_ptr >= num_arts) {
      92:             printf("%d No article is currently selected.\r\n",
      93:                 ERR_NOCRNT);
      94:             (void) fflush(stdout);
      95:             return;
      96:         }
      97:         high = low = art_array[art_ptr];
      98:         artptr = art_ptr;
      99:     } else {
     100:         cp = index(argv[2], '-');
     101:         if (cp == NULL)
     102:             low = high = atoi(argv[2]);
     103:         else {
     104:             *cp = '\0';
     105:             low = atoi(argv[2]);
     106:             cp++;
     107:             high = atoi(cp);
     108:             if (high < low)
     109:                 high = art_array[num_arts-1];
     110:         }
     111:     }
     112:
     113:     printf("%d %s fields follow\r\n", OK_HEAD, argv[1]);
     114:
     115:     for (;; artptr++) {
     116:         if ((artnum = art_array[artptr]) < low)
     117:             continue;
     118:         if (artnum > high)
     119:             break;
     120:
     121:         (void) sprintf(buf, "%d", artnum);
     122:         fp = fopen(buf, "r");
     123:         if (fp == NULL)
     124:             continue;
     125:         print_header(fp, argv[1], buf);
     126:         (void) fclose(fp);
     127:     }
     128:
     129:     putchar('.');
     130:     putchar('\r');
     131:     putchar('\n');
     132:     (void) fflush(stdout);
     133: }
     134:
     135:
     136: print_header(fp, header, artname)
     137:     register FILE   *fp;
     138:     register char   *header;
     139:     register char   *artname;
     140: {
     141:     char        line[NNTP_STRLEN];
     142:     register char   *cp, *cp1;
     143:
     144:     while (fgets(line, sizeof (line), fp) != NULL) {
     145:         if (*line == '\n' || *line == '\0') {
     146:             printf("%s (none)\r\n", artname);
     147:             return;
     148:         }
     149:         if (cp = index(line, ':')) {
     150:             *cp = '\0';
     151:             if (!strcasecmp(header, line)) {
     152:                 if (cp1 = index(cp + 2, '\n'))
     153:                     *cp1 = '\0';
     154:                 printf("%s %s\r\n", artname, cp + 2);
     155:                 return;
     156:             }
     157:         }
     158:     }
     159: }
     160:
     161: #else not XHDR
     162:
     163: /* Kludge to get around Greenhills C compiler */
     164:
     165: xhdr_greenkluydge()
     166: {
     167: }
     168:
     169: #endif not XHDR

#### Defined functions

print_header defined in line 136; used 2 times

- in line 66, 125

xhdr defined in line 29; used 2 times

- in /usr/src/new/nntp/server/serve.c line 25, 46

xhdr_greenkluydge defined in line 165; never used

#### Defined variables

sccsid defined in line 2; never used

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