+++ /dev/null
-/* $Id: clientlib.c 6155 2003-01-19 19:58:25Z rra $
-**
-** Routines compatible with the NNTP "clientlib" routines.
-*/
-#include "config.h"
-#include "clibrary.h"
-
-#include "inn/innconf.h"
-#include "libinn.h"
-#include "nntp.h"
-
-
-FILE *ser_rd_fp = NULL;
-FILE *ser_wr_fp = NULL;
-char ser_line[NNTP_STRLEN + 2];
-
-
-/*
-** Get the name of the NNTP server. Ignore the filename; we use
-** our own configuration stuff. Return pointer to static data.
-*/
-char *
-getserverbyfile(char *file UNUSED)
-{
- static char buff[256];
-
- strlcpy(buff, innconf->server, sizeof(buff));
- return buff;
-}
-
-
-/*
-** Get a connection to the remote news server. Return server's reply
-** code or -1 on error.
-*/
-int
-server_init(char *host, int port)
-{
- char line2[NNTP_STRLEN];
-
- /* This interface may be used by clients that assume C News behavior and
- won't read inn.conf themselves. */
- if (innconf == NULL)
- if (!innconf_read(NULL))
- return -1;
-
- if (NNTPconnect(host, port, &ser_rd_fp, &ser_wr_fp, ser_line) < 0) {
- if (ser_line[0] == '\0')
- /* I/O problem. */
- return -1;
-
- /* Server rejected connection; return it's reply code. */
- return atoi(ser_line);
- }
-
- /* Send the INN command; if understood, use that reply. */
- put_server("mode reader");
- if (get_server(line2, (int)sizeof line2) < 0)
- return -1;
- if (atoi(line2) != NNTP_BAD_COMMAND_VAL)
- strlcpy(ser_line, line2, sizeof(ser_line));
-
- /* Connected; return server's reply code. */
- return atoi(ser_line);
-}
-
-
-#define CANTPOST \
- "NOTE: This machine does not have permission to post articles"
-#define CANTUSE \
- "This machine does not have permission to use the %s news server.\n"
-/*
-** Print a message based on the the server's initial response.
-** Return -1 if server wants us to go away.
-*/
-int
-handle_server_response(int response, char *host)
-{
- char *p;
-
- switch (response) {
- default:
- printf("Unknown response code %d from %s.\n", response, host);
- return -1;
- case NNTP_GOODBYE_VAL:
- if (atoi(ser_line) == response) {
- p = &ser_line[strlen(ser_line) - 1];
- if (*p == '\n' && *--p == '\r')
- *p = '\0';
- if (p > &ser_line[3]) {
- printf("News server %s unavailable: %s\n", host,
- &ser_line[4]);
- return -1;
- }
- }
- printf("News server %s unavailable, try later.\n", host);
- return -1;
- case NNTP_ACCESS_VAL:
- printf(CANTUSE, host);
- return -1;
- case NNTP_NOPOSTOK_VAL:
- printf("%s.\n", CANTPOST);
- /* FALLTHROUGH */
- case NNTP_POSTOK_VAL:
- break;
- }
- return 0;
-}
-
-
-/*
-** Send a line of text to the server.
-*/
-void
-put_server(const char *buff)
-{
- fprintf(ser_wr_fp, "%s\r\n", buff);
- fflush(ser_wr_fp);
-}
-
-
-/*
-** Get a line of text from the server, strip trailing \r\n.
-** Return -1 on error.
-*/
-int
-get_server(char *buff, int buffsize)
-{
- char *p;
-
- if (fgets(buff, buffsize, ser_rd_fp) == NULL)
- return -1;
- p = &buff[strlen(buff)];
- if (p >= &buff[2] && p[-2] == '\r' && p[-1] == '\n')
- p[-2] = '\0';
- return 0;
-}
-
-
-/*
-** Send QUIT and close the server.
-*/
-void
-close_server(void)
-{
- char buff[NNTP_STRLEN];
-
- if (ser_wr_fp != NULL && ser_rd_fp != NULL) {
- put_server("QUIT");
- fclose(ser_wr_fp);
- ser_wr_fp = NULL;
-
- get_server(buff, (int)sizeof buff);
- fclose(ser_rd_fp);
- ser_rd_fp = NULL;
- }
-}