[news.software.anu-news] NEWS V5.9B diff/patch 10/11

gih900@csc.anu.oz (Geoff Huston) (11/25/89)

+-+-+-+ Beginning of part 10 +-+-+-+
X!         return(0);
X!         `125
X!     if (!(fpw = fopen(NEWSBATCH,"a"))) `123
X!         strcpy(msgbuf,"File handler error in NNTP Server.");
X!         return(0);
X!         `125
X!     fputs("#! rnews 1\n",fpw);
X!     while (fgets(line,BUFF_STRLEN,fpr)) fputs(line,fpw);
X!     fclose(fpr);
X!     fclose(fpw);
X!     strcpy(msgbuf,"Item successfully spooled.");
X!     return(1);
X  `125
X  `012
X  /*
X--- 1264,1291 -----
X `032
X    if (mode == POST) return(post_add_item(fn,msgbuf,stm));
X `032
X!   if (!(fpr = fopen(fn,"r"))) `123
X!     strcpy(msgbuf,"File handler error in NNTP Server.");
X!     return(0);
X!     `125
X!   sprintf(batch,NEWSBATCH,getpid());
X!   if (!stat(batch,&sbuffer)) `123
V!     if (sbuffer.st_size > NEWS_BATCH_SIZE) fpw = fopen(batch,"w","alq=30","
Xdeq=30");
X!     else
V!       if (!(fpw = fopen(batch,"a"))) fpw = fopen(batch,"w","alq=30","deq=30
X");
X!     `125
X!   else fpw = fopen(batch,"w","alq=30","deq=30");
X!   if (!fpw) `123
X!     strcpy(msgbuf,"File handler error in NNTP Server.");
X!     return(0);
X!     `125
X!   fprintf(fpw,"#! rnews %d\n", (ihave_size > 0 ? ihave_size : 1));
X!   while (fgets(line,BUFF_STRLEN,fpr)) fputs(line,fpw);
X!   fclose(fpr);
X!   fclose(fpw);
X!   strcpy(msgbuf,"Item successfully spooled.");
X!   while (!delete(fn));
X!   return(1);
X  `125
X  `012
X  /*
X**************
X*** 1817,1826
X   */
X `032
X  static
X! FILE *openartbyid(id, msg_status,stm)
X!     char    *id;
X!     int     *msg_status;
X!     int     stm;
X  `123
X      char    l_id[IDLEN + 4];
X      int     i;
X--- 1831,1840 -----
X   */
X `032
X  static
X! FILE *openartbyid(id,msg_status,stm)
X!   char *id;
X!   int *msg_status;
X!   int stm;
X  `123
X    char l_id[IDLEN + 4];
X    int i;
X**************
X*** 1822,1829
X      int     *msg_status;
X      int     stm;
X  `123
X!     char    l_id[IDLEN + 4];
X!     int     i;
X `032
X      *msg_status = M430;
X      for (i = 0; i < (IDLEN + 4); ++i) l_id[i] = '\0';
X--- 1836,1843 -----
X    int *msg_status;
X    int stm;
X  `123
X!   char l_id[IDLEN + 4];
X!   int i;
X `032
X    ihave_size = 0;
X    *msg_status = M430;
X**************
X*** 1825,1833
X      char    l_id[IDLEN + 4];
X      int     i;
X `032
X!     *msg_status = M430;
X!     for (i = 0; i < (IDLEN + 4); ++i) l_id[i] = '\0';
X!     strncpy(l_id,id,IDLEN);
X `032
X      grprab.rab$l_kbf = &(newsitm.itm_grp);
X      grprab.rab$b_ksz = 4;
X--- 1839,1848 -----
X    char l_id[IDLEN + 4];
X    int i;
X `032
X!   ihave_size = 0;
X!   *msg_status = M430;
X!   for (i = 0; i < (IDLEN + 4); ++i) l_id[i] = '\0';
X!   strncpy(l_id,id,IDLEN);
X `032
X    grprab.rab$l_kbf = &(newsitm.itm_grp);
X    grprab.rab$b_ksz = 4;
X**************
X*** 1829,1839
X      for (i = 0; i < (IDLEN + 4); ++i) l_id[i] = '\0';
X      strncpy(l_id,id,IDLEN);
X `032
X!     grprab.rab$l_kbf = &(newsitm.itm_grp);
X!     grprab.rab$b_ksz = 4;
X!     grprab.rab$b_krf = 1;
X!     grprab.rab$l_rop = RAB$M_RRL `124 RAB$M_NLK;
X!     grprab.rab$b_rac = RAB$C_KEY;
X `032
X      itmrab.rab$l_kbf = l_id;
X      itmrab.rab$b_ksz = IDLEN + 4;
X--- 1844,1854 -----
X    for (i = 0; i < (IDLEN + 4); ++i) l_id[i] = '\0';
X    strncpy(l_id,id,IDLEN);
X `032
X!   grprab.rab$l_kbf = &(newsitm.itm_grp);
X!   grprab.rab$b_ksz = 4;
X!   grprab.rab$b_krf = 1;
X!   grprab.rab$l_rop = RAB$M_RRL `124 RAB$M_NLK;
X!   grprab.rab$b_rac = RAB$C_KEY;
X `032
X    itmrab.rab$l_kbf = l_id;
X    itmrab.rab$b_ksz = IDLEN + 4;
X**************
X*** 1835,1855
X      grprab.rab$l_rop = RAB$M_RRL `124 RAB$M_NLK;
X      grprab.rab$b_rac = RAB$C_KEY;
X `032
X!     itmrab.rab$l_kbf = l_id;
X!     itmrab.rab$b_ksz = IDLEN + 4;
X!     itmrab.rab$b_krf = 1;
X!     itmrab.rab$l_rop = RAB$M_KGE `124 RAB$M_RRL `124 RAB$M_NLK;
X!     itmrab.rab$b_rac = RAB$C_KEY;
X!     if (!(sys$get(&itmrab) & 1) `124`124 strcmp(l_id,newsitm.itm_id)
X!          `124`124 !(sys$get(&grprab) & 1))
X!         return(0);
X!     itmrab.rab$b_rac = RAB$C_SEQ;
X!     while (!check_ngperm(newsgrp.grp_name,stm))
X!         if (!(sys$get(&itmrab) & 1) `124`124 strcmp(l_id,newsitm.itm_id)
X!              `124`124 !(sys$get(&grprab) & 1))
X!             return((*msg_status = M502),0);
V!     sprintf(itm_fname,Itm_template,util_dir(newsgrp.grp_name),newsitm.itm_n
Xum);
X!     return(fopen(itm_fname,"r"));
X  `125
X  `012
X  /*
X--- 1850,1872 -----
X    grprab.rab$l_rop = RAB$M_RRL `124 RAB$M_NLK;
X    grprab.rab$b_rac = RAB$C_KEY;
X `032
X!   itmrab.rab$l_kbf = l_id;
X!   itmrab.rab$b_ksz = IDLEN + 4;
X!   itmrab.rab$b_krf = 1;
X!   itmrab.rab$l_rop = RAB$M_KGE `124 RAB$M_RRL `124 RAB$M_NLK;
X!   itmrab.rab$b_rac = RAB$C_KEY;
X!   if (   !(sys$get(&itmrab) & 1)
X!       `124`124 strcmp(l_id,newsitm.itm_id)
X!       `124`124 !(sys$get(&grprab) & 1))
X!     return(0);
X!   itmrab.rab$b_rac = RAB$C_SEQ;
X!   while (!check_ngperm(newsgrp.grp_name,stm))
X!     if (   !(sys$get(&itmrab) & 1)
X!         `124`124 strcmp(l_id,newsitm.itm_id)
X!         `124`124 !(sys$get(&grprab) & 1))
X!       return((*msg_status = M502),0);
V!   sprintf(itm_fname,Itm_template,util_dir(newsgrp.grp_name),newsitm.itm_num
X);
X!   return(fopen(itm_fname,"r"));
X  `125
X  `012
X  /*
X**************
X*** 2162,2168
X    read_net(ibuf,512,stm);
X    while (strcmp(ibuf,".\n")) `123
X      if (!fpl) fpl = open_file(stm);
X!     if ((!strcmp(ibuf,"..\n")) && (fpl)) fputs(ibuf + 1,fpl);
X      else if (fpl) fputs(ibuf,fpl);
X      read_net(ibuf,512,stm);
X      `125
X--- 2179,2188 -----
X    read_net(ibuf,512,stm);
X    while (strcmp(ibuf,".\n")) `123
X      if (!fpl) fpl = open_file(stm);
X!     if ((!strcmp(ibuf,"..\n")) && (fpl)) `123
X!       --ihave_size;
X!       fputs(ibuf + 1,fpl);
X!       `125
X      else if (fpl) fputs(ibuf,fpl);
X      ihave_size += strlen(ibuf);
X      read_net(ibuf,512,stm);
X**************
X*** 2164,2169
X      if (!fpl) fpl = open_file(stm);
X      if ((!strcmp(ibuf,"..\n")) && (fpl)) fputs(ibuf + 1,fpl);
X      else if (fpl) fputs(ibuf,fpl);
X      read_net(ibuf,512,stm);
X      `125
X    if (fpl) `123
X--- 2184,2190 -----
X        fputs(ibuf + 1,fpl);
X        `125
X      else if (fpl) fputs(ibuf,fpl);
X+     ihave_size += strlen(ibuf);
X      read_net(ibuf,512,stm);
X      `125
X    if (fpl) `123
$ GOSUB UNPACK_FILE

$ FILE_IS = "NNTP_TCPCMU.DIFF"
$ CHECKSUM_IS = 1950253089
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X*** [.news_v59_src]nntp_tcpcmu.c
X--- [.news_src]nntp_tcpcmu.c
X**************
X*** 64,70
X  #include <stdio.h>
X  #endif
X `032
X! #define DEBUG       1
X  #define TIMEOUT     600         /* read wait timeout  - 10 minutes */
X  #define X_BUF_SIZE  1024        /* size of line assembly read buffer */
X `032
X--- 64,70 -----
X  #include <stdio.h>
X  #endif
X `032
X! #define DEBUG       0
X  #define TIMEOUT     600         /* read wait timeout  - 10 minutes */
X  #define X_BUF_SIZE  1024        /* size of line assembly read buffer */
X `032
X**************
X*** 71,77
X                                  /* check status bits */
X  #define cks(s)      if (!((c$status = (s)) & 1)) lib$signal(c$status)
X `032
V! #define nntp_getchar() (!nntp_size ? nntp_fillbuf() : (--nntp_size, *nntp_p
Xtr++))
X `032
X  static unsigned short f;               /* tcp i/o channel */
X `032
X--- 71,77 -----
X                                  /* check status bits */
X  #define cks(s)      if (!((c$status = (s)) & 1)) lib$signal(c$status)
X `032
V! #define nntp_getchar() (!nntp_input_size ? nntp_fillbuf() : (--nntp_input_s
Xize, *nntp_input_ptr++))
X `032
X  static unsigned short f;               /* tcp i/o channel */
X `032
X**************
X*** 79,87
X `032
X  static unsigned short iosb[4];    /* i/o status blocks */
X  static unsigned short *i_o_sts = iosb;
X! static char nntp_buffer[X_BUF_SIZE];
X! static char *nntp_ptr = nntp_buffer;
X! static int nntp_size = 0;
X `032
X  int (*next_function)();
X `032
X--- 79,87 -----
X `032
X  static unsigned short iosb[4];    /* i/o status blocks */
X  static unsigned short *i_o_sts = iosb;
X! static char nntp_input_buffer[X_BUF_SIZE];
X! static char *nntp_input_ptr = nntp_input_buffer;
X! static int nntp_input_size = 0;
X `032
X  #define POK_OUTPUT_BUFFER
X  #ifdef POK_OUTPUT_BUFFER
X**************
X*** 83,89
X  static char *nntp_ptr = nntp_buffer;
X  static int nntp_size = 0;
X `032
X! int (*next_function)();
X `032
X  #if DEBUG
X  FILE *flog;
X--- 83,94 -----
X  static char *nntp_input_ptr = nntp_input_buffer;
X  static int nntp_input_size = 0;
X `032
X! #define POK_OUTPUT_BUFFER
X! #ifdef POK_OUTPUT_BUFFER
X! static char nntp_output_buffer[X_BUF_SIZE];`009/* NNTP output buffer */
X! static char *nntp_output_ptr = nntp_output_buffer;
X! static int nntp_output_size = X_BUF_SIZE;
X! #endif
X `032
X  int (*next_function)();
X `032
X**************
X*** 85,90
X `032
X  int (*next_function)();
X `032
X  #if DEBUG
X  FILE *flog;
X  #define LOGFILE "NEWS_MANAGER:NNTP.LOG"
X--- 90,97 -----
X  static int nntp_output_size = X_BUF_SIZE;
X  #endif
X `032
X+ int (*next_function)();
X+`032
X  #if DEBUG
X  FILE *flog;
X  #define LOGFILE "NEWS_MANAGER:NNTP.LOG"
X**************
X*** 119,125
X      fprintf(flog,"server unit inited\n");
X      fclose(flog);
X  #endif
X!     while (next_function) (*next_function)(1);
X      server_shut();
X      close_net();
X  #if DEBUG
X--- 126,138 -----
X      fprintf(flog,"server unit inited\n");
X      fclose(flog);
X  #endif
X!     while (next_function) `123
X!`032
X! #ifdef POK_OUTPUT_BUFFER
X!       write_out();
X! #endif
X!       (*next_function)(1);
X!       `125
X      server_shut();
X      close_net();
X  #if DEBUG
X**************
X*** 143,148
X      sys$cancel(f);
X      log_to_file(1);
X      write_net("400 service discontinued - read timeout\r\n");
X      cks(sys$qiow(0,f,IO$_DELETE,iosb,0,0,0,0,0,0,0,0));
X      cks(*i_o_sts);
X      sys$dassgn(f);
X--- 156,166 -----
X      sys$cancel(f);
X      log_to_file(1);
X      write_net("400 service discontinued - read timeout\r\n");
X+`032
X+ #ifdef POK_OUTPUT_BUFFER
X+     write_out();
X+ #endif
X+`032
X      cks(sys$qiow(0,f,IO$_DELETE,iosb,0,0,0,0,0,0,0,0));
X      cks(*i_o_sts);
X      sys$dassgn(f);
X**************
X*** 153,159
X  `123
X      signal(SIGALRM,cancel_net);
X      alarm(TIMEOUT);
V!     cks(sys$qiow(0,f,IO$_READVBLK,iosb,0,0,nntp_buffer, sizeof(nntp_buffer)
X,0,0,0,0));
X      alarm(0);
X      if (!iosb[1]) return(cancel_net(),-1);
X      nntp_ptr = nntp_buffer;
X--- 171,178 -----
X  `123
X      signal(SIGALRM,cancel_net);
X      alarm(TIMEOUT);
X!     cks(sys$qiow(0,f,IO$_READVBLK,iosb,0,0,nntp_input_buffer,
X!                  sizeof(nntp_input_buffer),0,0,0,0));
X      alarm(0);
X      if (!iosb[1]) return(cancel_net(),-1);
X      nntp_input_ptr = nntp_input_buffer;
X**************
X*** 156,164
V      cks(sys$qiow(0,f,IO$_READVBLK,iosb,0,0,nntp_buffer, sizeof(nntp_buffer)
X,0,0,0,0));
X      alarm(0);
X      if (!iosb[1]) return(cancel_net(),-1);
X!     nntp_ptr = nntp_buffer;
X!     nntp_size = iosb[1]-1;
X!     return(*nntp_ptr++);
X  `125
X `032
X  /*
X--- 175,183 -----
X                   sizeof(nntp_input_buffer),0,0,0,0));
X      alarm(0);
X      if (!iosb[1]) return(cancel_net(),-1);
X!     nntp_input_ptr = nntp_input_buffer;
X!     nntp_input_size = iosb[1]-1;
X!     return(*nntp_input_ptr++);
X  `125
X `032
X  /*
X**************
X*** 198,203
X   *  write to the client process - catch i/o errors and abort
X   */
X `032
X  write_net(s,unit)
X      char *s;
X      int unit;
X--- 217,225 -----
X   *  write to the client process - catch i/o errors and abort
X   */
X `032
X+ #ifdef POK_OUTPUT_BUFFER
X+ /*  this asumes that nobody ever writes more than X_BUF_SIZE bytes */
X+`032
X  write_net(s,unit)
X    char *s;
X    int unit;
X**************
X*** 199,206
X   */
X `032
X  write_net(s,unit)
X!     char *s;
X!     int unit;
X  `123
X  #if DEBUG
X      fprintf(stderr,"Write_net:%s\n",s);
X--- 221,228 -----
X  /*  this asumes that nobody ever writes more than X_BUF_SIZE bytes */
X `032
X  write_net(s,unit)
X!   char *s;
X!   int unit;
X  `123
X    register int size = strlen(s);
X `032
X**************
X*** 202,207
X      char *s;
X      int unit;
X  `123
X  #if DEBUG
X      fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X--- 224,231 -----
X    char *s;
X    int unit;
X  `123
X+   register int size = strlen(s);
X+`032
X  #if DEBUG
X    fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X**************
X*** 203,209
X      int unit;
X  `123
X  #if DEBUG
X!     fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X      cks(sys$qiow(0,f,IO$_WRITEVBLK,iosb,0,0,s,strlen(s),0,1,0,0));
X      cks(*i_o_sts);
X--- 227,233 -----
X    register int size = strlen(s);
X `032
X  #if DEBUG
X!   fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X `032
V    if (nntp_output_size < size) write_out(); /* no space in buffer - flush *
X/
X**************
X*** 205,213
X  #if DEBUG
X      fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X-     cks(sys$qiow(0,f,IO$_WRITEVBLK,iosb,0,0,s,strlen(s),0,1,0,0));
X-     cks(*i_o_sts);
X- `125
X `032
X  next_call(unit,func,type)
X      int unit;
X--- 229,234 -----
X  #if DEBUG
X    fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X `032
V    if (nntp_output_size < size) write_out(); /* no space in buffer - flush *
X/
X    strncpy(nntp_output_ptr,s,size);
X**************
X*** 209,214
X      cks(*i_o_sts);
X  `125
X `032
X  next_call(unit,func,type)
X      int unit;
X      int (*func)();
X--- 230,266 -----
X    fprintf(stderr,"Write_net:%s\n",s);
X  #endif
X `032
V+   if (nntp_output_size < size) write_out(); /* no space in buffer - flush *
X/
X+   strncpy(nntp_output_ptr,s,size);
X+   nntp_output_ptr += size;
X+   nntp_output_size -= size;
X+ `125
X+`032
X+ write_out()
X+ `123
V+   if (nntp_output_ptr != nntp_output_buffer) `123  /* something in the buff
Xer */
X+     cks(sys$qiow(0,f,IO$_WRITEVBLK,iosb,0,0,nntp_output_buffer,
X+                  nntp_output_ptr - nntp_output_buffer,0,1,0,0));
X+     cks(*i_o_sts);
X+     nntp_output_ptr = nntp_output_buffer;
X+     nntp_output_size = X_BUF_SIZE;
X+     `125
X+ `125
X+ #else
X+`032
X+ write_net(s,unit)
X+   char *s;
X+   int unit;
X+ `123
X+ #if DEBUG
X+   fprintf(stderr,"Write_net:%s\n",s);
X+ #endif
X+`032
X+   cks(sys$qiow(0,f,IO$_WRITEVBLK,iosb,0,0,s,strlen(s),0,1,0,0));
X+   cks(*i_o_sts);
X+ `125
X+ #endif
X+`032
X  next_call(unit,func,type)
X      int unit;
X      int (*func)();
X**************
X*** 245,251
X  close_net()
X  `123
X  #if DEBUG
X!     fprintf(stderr,"Close_net\n");
X  #endif
X      sys$cancel(f);
X      log_to_file(1);
X--- 297,303 -----
X  close_net()
X  `123
X  #if DEBUG
X!   fprintf(stderr,"Close_net\n");
X  #endif
X `032
X  #ifdef POK_OUTPUT_BUFFER`032
X**************
X*** 247,257
X  #if DEBUG
X      fprintf(stderr,"Close_net\n");
X  #endif
X!     sys$cancel(f);
X!     log_to_file(1);
X!     cks(sys$qiow(0,f,IO$_DELETE,iosb,0,0,0,0,0,0,0,0));
X!     cks(*i_o_sts);
X!     sys$dassgn(f);
X  `125
X  `012
X  /*
X--- 299,314 -----
X  #if DEBUG
-+-+-+-+-+ End of part 10 +-+-+-+-+-