Annotation of 43BSD/contrib/nntp/server/ahbs.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char    *sccsid = "@(#)ahbs.c   1.2     (Berkeley) 3/5/86";
                      3: #endif
                      4: 
                      5: #include "common.h"
                      6: 
                      7: 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[MAX_STRLEN], art_id[MAX_STRLEN];
                     26:        char            c;
                     27:        int             method;
                     28:        register FILE   *fp;            /* For Message-ID retrieval only */
                     29: 
                     30:        if (argc > 2) {
                     31:                printf("%d %s requires 0 or 1 argument.\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:                printf("%d 0 %s Article retrieved, %s.\r\n",
                     53:                        OK_ARTICLE + method, argv[1], verbage[method]);
                     54:                spew(fp, method);
                     55:                (void) fclose(fp);
                     56:                return;
                     57:        }
                     58: 
                     59:        /* Else we're trying to read */
                     60: 
                     61:        if (!canread) {
                     62:                printf("%d You only have permission to transfer, sorry.\r\n",
                     63:                        ERR_ACCESS);
                     64:                (void) fflush(stdout);
                     65:                return;
                     66:        }
                     67: 
                     68:        if (!ingroup) {
                     69:                printf("%d You are not currently in a newsgroup.\r\n",
                     70:                        ERR_NCING);
                     71:                (void) fflush(stdout);
                     72:                return;
                     73:        }
                     74: 
                     75:        if (argc == 1) {
                     76:                if (art_ptr < 0 || art_ptr >= num_arts) {
                     77:                        printf("%d No article is currently selected.\r\n",
                     78:                                ERR_NOCRNT);
                     79:                        (void) fflush(stdout);
                     80:                        return;
                     81:                }
                     82:                (void) sprintf(artbuf, "%d", art_array[art_ptr]);
                     83:        } else
                     84:                (void) strcpy(artbuf, argv[1]);
                     85: 
                     86:        if (!valid_art(artbuf)) {
                     87:                printf("%d Invalid article number: %s.\r\n",
                     88:                        ERR_NOARTIG, artbuf);
                     89:                (void) fflush(stdout);
                     90:                return;
                     91:        }
                     92: 
                     93:        while (open_valid_art(artbuf, art_id) == NULL) {
                     94:                if (argc > 1) {
                     95:                        printf("%d Invalid article number: %s.\r\n",
                     96:                                ERR_NOARTIG, artbuf);
                     97:                        (void) fflush(stdout);
                     98:                        return;
                     99:                } else {
                    100:                        if (++art_ptr >= num_arts) {
                    101:                                printf("%d Invalid article number.\r\n",
                    102:                                        ERR_NOARTIG);
                    103:                                (void) fflush(stdout);
                    104:                                return;
                    105:                        }
                    106:                        (void) sprintf(artbuf, "%d", art_array[art_ptr]);
                    107:                }
                    108:        }
                    109: 
                    110:        printf("%d %s %s Article retrieved; %s.\r\n",
                    111:                OK_ARTICLE + method, artbuf, art_id, verbage[method]);
                    112: 
                    113:        spew(art_fp, method);
                    114: 
                    115:        if (argc > 1)
                    116:                art_ptr = findart(artbuf);
                    117: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.