#include "Buffer.h"Go to the source code of this file.
Classes | |
| struct | buf_rcpc | 
Functions | |
| int | max_arq (int rtype) | 
| int | inc_xmit_count (buf_rcpc *br) | 
| buf_rcpc * | find_rcpc (Buffer *rcpcs, int seq_num) | 
| buf_rcpc * | place_rcpc (Buffer *rcpcs, int seq_num, byte *data, int num_bytes, int arq_type, int last_written, int *last_recd, int old_threshold) | 
      
  | 
  ||||||||||||
| 
 
 Definition at line 64 of file rcpc.c. References blevel(), bpeek(), and buf_rcpc::sequence_number. Referenced by place_rcpc(). 00069 {
00070   int i;
00071   buf_rcpc *rcpc;
00072  
00073   for (i=blevel(rcpcs)-1; i >= 0; i--) {
00074     rcpc = bpeek(rcpcs, i);
00075     if (seq_num == rcpc->sequence_number)
00076       return (rcpc);
00077   }
00078   return(NULL);
00079 }
  | 
  
      
  | 
  
| 
 
 Definition at line 55 of file rcpc.c. References buf_rcpc::xmit_count. 00059 {
00060   br->xmit_count = (br->xmit_count + 1);
00061     return (br->xmit_count) % 2;
00062 }
  | 
  
      
  | 
  
| 
 
 Definition at line 8 of file rcpc.c. References error(). Referenced by GetRcpcBits(). 00012 {
00013   int rval;
00014 
00015   switch (rtype) {
00016     case 24:
00017       rval = 3;
00018       break;
00019     case 23:
00020     case 22:
00021       rval = 2;
00022       break;
00023     case 21:
00024     case 20:
00025     case 19:
00026     case 18:
00027     case 17:
00028     case 16:
00029       rval = 1;
00030       break;
00031     case 15:
00032     case 14:
00033     case 13:
00034     case 12:
00035     case 11:
00036     case 10:
00037     case 9:
00038     case 8:
00039     case 7:
00040     case 6:
00041     case 5:
00042     case 4:
00043     case 3:
00044     case 2:
00045     case 1:
00046     case 0:
00047       rval = 0;
00048       break;
00049     default:
00050       error("max_arq","Invalid rtype input");
00051   }
00052 }
  | 
  
      
  | 
  ||||||||||||||||||||||||||||||||||||
| 
 
 Definition at line 81 of file rcpc.c. References between(), buf_rcpc::block, bpeek(), bwrite(), buf_rcpc::count, data, find_rcpc(), Buffer::full, buf_rcpc::length, minus(), num_bytes(), buf_rcpc::sequence_number, and buf_rcpc::xmit_count. 00094 {
00095   buf_rcpc *rcpc,new_rcpc;
00096   int i,old;
00097 
00098 
00099   old = minus(last_written,old_threshold);
00100   if (between(seq_num,old,last_written) || (seq_num == last_written)) {
00101     printf("place_rcpc() - Disregarding packet %d.  It's too old\n",seq_num);
00102     return(NULL);
00103   } 
00104   else {
00105     if ((between(seq_num,*last_recd,old)) || (seq_num == old)) { 
00106       /* it's a new entry */
00107       *last_recd = seq_num;
00108       /* cheat to find out if we're going to overwrite the last buffer entry
00109        * and if we are, be sure to free any allocated blocks
00110        */
00111       if (rcpcs->full) {
00112         rcpc=bpeek(rcpcs, 0);
00113         if (rcpc->block[0]!=NULL) free(rcpc->block[0]);
00114         if (rcpc->block[1]!=NULL) free(rcpc->block[1]);
00115         if (rcpc->block[2]!=NULL) free(rcpc->block[2]);
00116         if (rcpc->block[3]!=NULL) free(rcpc->block[3]);
00117       }
00118       new_rcpc.sequence_number=seq_num;
00119       new_rcpc.count=1;
00120       new_rcpc.xmit_count=1;
00121       new_rcpc.length=num_bytes;
00122       new_rcpc.block[0]=malloc(num_bytes);
00123       new_rcpc.block[1]=NULL;
00124       new_rcpc.block[2]=NULL;
00125       new_rcpc.block[3]=NULL;
00126       if (new_rcpc.block[0]==NULL) {
00127         fprintf(stderr, "place_rcpc: malloc() failure\n");
00128         return NULL;
00129       }
00130       for (i=0; i<num_bytes; i++) {
00131         new_rcpc.block[0][i]=data[i];
00132       }
00133       bwrite(rcpcs, &new_rcpc);
00134       return(find_rcpc(rcpcs,seq_num));
00135     }
00136     else { /* it's a retransmission */
00137       /* 
00138        */
00139         printf("Got retransmission of sequence number %d\n",seq_num);
00140         rcpc = find_rcpc(rcpcs,seq_num);
00141         if (rcpc->count == 4) {
00142           printf("place_rcpc()-ERROR tried to place block into full rcpc struct\n");
00143           return(NULL);
00144         }
00145         if (arq_type == 1) {
00146           for (i=0; i<num_bytes; i++) {
00147             rcpc->block[0][i]=data[i];
00148           }
00149         } else {
00150           rcpc->block[rcpc->count]=malloc(num_bytes);
00151           if (rcpc->block[rcpc->count]==NULL) {
00152             fprintf(stderr, "place_rcpc: malloc() failure\n");
00153             return(rcpc);
00154           }
00155           for (i=0; i<num_bytes; i++) {
00156             rcpc->block[rcpc->count][i]=data[i];
00157           }
00158           rcpc->count++;
00159         }
00160         /* rcpc->xmit_count++; */
00161         return(rcpc);
00162       }
00163     }
00164 /*  } */
00165 }
  | 
  
 1.3.9.1