#ifndef _NNTP_H_ #define _NNTP_H_ /* * Copyright (c) 1996-2006 Ruslan R. Laishev (@RRL) */ /* Revision: * TSV - TSV@horse.rgti.spb.su" "Sergey V. Tikhonov" * TSV 15.07.97 - add MULTINET declaration * 23-MAR-2006 RRL Added Accept/Reject parameters into the configuration vector. */ #include typedef unsigned short ushort; typedef unsigned long ulong; typedef unsigned char uchar; #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "global.h" #include "md5.h" #ifdef __DECC #include #else #pragma builtins #endif #define INIT_SDESC(dsc, len, ptr) {(dsc).dsc$b_dtype = DSC$K_DTYPE_T;\ (dsc).dsc$b_class = DSC$K_CLASS_S; (dsc).dsc$w_length = (len);\ (dsc).dsc$a_pointer = (ptr);} #define SET_SDESC(dsc, len, ptr) {(dsc).dsc$w_length = (len);\ (dsc).dsc$a_pointer = (ptr);} #define INIT_DDESC(dsc, len, ptr) {(dsc).dsc$b_dtype = DSC$K_DTYPE_T;\ (dsc).dsc$b_class = DSC$K_CLASS_D;(dsc).dsc$w_length = (len);\ (dsc).dsc$a_pointer = (ptr);} #define ASCIC(a) a,sizeof(a)-1 /* * */ extern char *ID$IDcpy; extern char *ID$IDsrv; extern char *ID$IDver; /* * */ #define NNTP_TCPPORT 119 #define NNTP_EOL "\r\n" #define NNTP_EOM "\r\n.\r\n" #define NNTP_EOT ".\r\n" #define NNTP_OK ".\r\n" #define NNTPMAXWORKER 128 #define __NEW_STARLET 1 #include #include "nntpdef.h" #undef __NEW_STARLET #define FIELDSEP '|' typedef struct { struct dsc$descriptor _s_localhost, _s_localpath, _s_localtz, _s_localmgr, _s_smtprelay, _s_grpme_list, _s_mod_list, _s_modgrp_list, _s_suck_list, _s_feed_list, _s_clnt_list, _s_acpt_list, _s_rjct_list; ushort _w_localport, _w_msgpurgeday, _w_msgold; ushort _w_suck_tmo, _w_feed_tmo, _w_clnt_tmo; ushort _w_grpday; ushort _w_loglevel, _w_logtype; ushort _w_suck_delta, _w_feed_delta; } nntpconf_t; #ifndef nntp_conf nntpconf_t nntp_conf; #else external nntpconf_t nntp_conf; #endif struct FSArg { unsigned short _w_len; unsigned char *_a_arg; }; int nntp_cmd_exec (WCTX *); int nntp_getarticle (WCTX *,ushort,ushort *,ushort *); int nntp_help (WCTX *,ushort); int nntp_mode (WCTX *,ushort); int nntp_quit (WCTX *,ushort); int nntp_article (WCTX *,ushort); int nntp_head (WCTX *,ushort); int nntp_body (WCTX *,ushort); int nntp_post (WCTX *,ushort); int nntp_list (WCTX *,ushort); int nntp_listfmt (WCTX *,ushort); int nntp_ihave (WCTX *,ushort); int nntp_group (WCTX *,ushort); int nntp_newgroups (WCTX *,ushort); int nntp_slave (WCTX *,ushort); int nntp_stat (WCTX *,ushort); int nntp_xover (WCTX *,ushort); int nntp_last (WCTX *,ushort); int nntp_next (WCTX *,ushort); int nntp_newnews (WCTX *,ushort); int nntp_delete (WCTX *,ushort); int msg_to_db (WCTX *,ushort); int msg_hdr_valid (WCTX *,ushort *,ile2 *); int smtp_send (WCTX *,ile2 *,char *,ushort,char *,ushort,char *,ushort); int nntp_conf_get (void); void nntp_conf_out (void); void nntp_client (WCTX *,ushort); int nntp_suck (WCTX *,struct FSArg *); int nntp_feed (WCTX *,struct FSArg *); void MDString (char,char *,ushort,char *,ushort,char *); void MDbin2hex (char *,char *); time_t cvt_rfc_to_vms (char *,int); time_t cvt_nntp_to_vms (char *); void cvt_vms_to_nntp (time_t,char *,ushort *); char *cvt_vms_to_rfc (time_t,char *,char *); char *strnlwr (char *,int); int strstrip (char *,int,char *,int); char *strtok_val (char *,char *,char *,char *,int); int strelem (struct dsc$descriptor *,char,ushort,char **); int strmatch (char *,ushort,char *,ushort); void strinsert (char *,ushort,char *,ushort); #define min(x,y) ((x > y)?y:x) #define max(x,y) ((x < y)?y:x) /* * */ extern char *lvl_msg[]; char *nntp_log_time (char *,int); void NNTP_LOG (int ,const char *, ...); void NNTP_LOGT (WCTX *,int ,const char *, ...); /* * */ int net_read_line (void *,char *,ushort *,int *); int net_send_line (void *,char *,ushort); int net_read_mline (void *,char *,ushort *,int *); int net_send_mline (void *,char *,ushort); void net_close (void *); int net_connect_out (void *,char *,ushort,ushort); int net_connect_inc (void *,ushort,char *,ushort *,char *,ushort *); int net_send_cmd (void *,char *,ushort,char *,ushort *,ushort *,int *); /* * */ #define BIGNUM ((unsigned long) 0x7fffffff) int MsgDBopen (void); int MsgDBopen_stream (struct RAB *); int MsgDBfind_byId (struct RAB *,char *,ushort); int MsgDBdel_byId (struct RAB *,char *,ushort); int MsgDBget_byId (struct RAB *,char *,ushort, MSGREC *,ushort *); int MsgDBget_byNum (struct RAB *,GRPREC *,ulong, MSGREC *,ushort *); int MsgDBget_byRange (struct RAB *, GRPREC *,ulong,ulong,MSGREC *,ushort *, char *,ushort *); int MsgDBdel_byNum (struct RAB *,GRPREC *,ulong,MSGREC *); int GrpDBopen (void); int GrpDBopen_stream (struct RAB *); int GrpDBget (struct RAB *,GRPREC *,int,int,int); int GrpDBput (struct RAB *,GRPREC *); int GrpDBfree (struct RAB *); int DBclose_stream (struct RAB *); int DBclose (void); int DBopen (void); int DBins (struct RAB *, struct RAB *,GRPREC *,time_t,MSGREC *, ushort); int FeedSuckDBopen (void); int FeedSuckDBopen_stream (struct RAB *); int FeedSuckDBget (struct RAB *,FSREC *); int FeedSuckDBput (struct RAB *,FSREC *); int Feed_bymail (WCTX *,int,char *); int NNTP_InitBosses (void); void *NNTP_ClientBoss (void *); void *NNTP_SuckBoss (void *); void *NNTP_FeedBoss (void *); void NNTP_ExpireBoss (void); void *NNTP_WorkerInit (int,void *,char *,int,char *,int); void NNTP_WorkerKill (WCTX *); int pthread_sleep (int); int nntp_expire (WCTX *); int chk_IP_prot (char *,int,char *,int); int chk_IP_addr (char *,int,char *,int); int chk_IP_name (char *,int,char *,int); #endif /* _NNTP_H_ */