#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 }
|