📄 clientlib.c
字号:
/* $Revision: 1.6 $**** Routines compatible with the NNTP "clientlib" routines.*/#include <stdio.h>#include <sys/types.h>#include "configdata.h"#include "nntp.h"#include "paths.h"#include "libinn.h"#include "clibrary.h"#include "myserver.h"FILE *ser_rd_fp = NULL;FILE *ser_wr_fp = NULL;char ser_line[NNTP_STRLEN];/*** Get the name of the NNTP server. Ignore the filename; we use** our own configuration stuff. Return pointer to static data.*//* ARGSUSED0 */char *getserverbyfile(file) char *file;{ static char buff[256]; char *p; if ((p = GetConfigValue(_CONF_SERVER)) == NULL) return NULL; (void)strcpy(buff, p); return buff;}/*** Get a connection to the remote news server. Return server's reply** code or -1 on error.*/intserver_init(host) char *host;{ char line2[NNTP_STRLEN]; if (NNTPconnect(host, &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) (void)strcpy(ser_line, line2); /* 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.*/inthandle_server_response(response, host) int response; char *host;{ char *p; switch (response) { default: (void)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]) { (void)printf("News server %s unavailable: %s\n", host, &ser_line[4]); return -1; } } (void)printf("News server %s unavailable, try later.\n", host); return -1; case NNTP_ACCESS_VAL: (void)printf(CANTUSE, host); return -1; case NNTP_NOPOSTOK_VAL: (void)printf("%s.\n", CANTPOST); /* FALLTHROUGH */ case NNTP_POSTOK_VAL: break; } return 0;}/*** Send a line of text to the server.*/voidput_server(buff) char *buff;{ (void)fprintf(ser_wr_fp, "%s\r\n", buff); (void)fflush(ser_wr_fp);}/*** Get a line of text from the server, strip trailing \r\n.** Return -1 on error.*/intget_server(buff, buffsize) register char *buff; int buffsize;{ register 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.*/voidclose_server(){ char buff[NNTP_STRLEN]; if (ser_wr_fp != NULL && ser_rd_fp != NULL) { put_server("QUIT"); (void)fclose(ser_wr_fp); ser_wr_fp = NULL; (void)get_server(buff, (int)sizeof buff); (void)fclose(ser_rd_fp); ser_rd_fp = NULL; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -