X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=lib%2Fclientlib.c;fp=lib%2Fclientlib.c;h=0000000000000000000000000000000000000000;hb=b7a32e2d73e3ab1add8208d3e157f7269a31ef4d;hp=b0d0268ee70aedb1209b6c3c61dc5bd83ca5527f;hpb=ac902a8299ff4469b356836f431ead31c3377377;p=innduct.git diff --git a/lib/clientlib.c b/lib/clientlib.c deleted file mode 100644 index b0d0268..0000000 --- a/lib/clientlib.c +++ /dev/null @@ -1,157 +0,0 @@ -/* $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; - } -}