1 /*---------------------------------------------------------------
2 * Copyright (c) 1999,2000,2001,2002,2003
3 * The Board of Trustees of the University of Illinois
4 * All Rights Reserved.
5 *---------------------------------------------------------------
6 * Permission is hereby granted, free of charge, to any person
7 * obtaining a copy of this software (Iperf) and associated
8 * documentation files (the "Software"), to deal in the Software
9 * without restriction, including without limitation the
10 * rights to use, copy, modify, merge, publish, distribute,
11 * sublicense, and/or sell copies of the Software, and to permit
12 * persons to whom the Software is furnished to do
13 * so, subject to the following conditions:
14 *
15 *
16 * Redistributions of source code must retain the above
17 * copyright notice, this list of conditions and
18 * the following disclaimers.
19 *
20 *
21 * Redistributions in binary form must reproduce the above
22 * copyright notice, this list of conditions and the following
23 * disclaimers in the documentation and/or other materials
24 * provided with the distribution.
25 *
26 *
27 * Neither the names of the University of Illinois, NCSA,
28 * nor the names of its contributors may be used to endorse
29 * or promote products derived from this Software without
30 * specific prior written permission.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
34 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35 * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTIBUTORS OR COPYRIGHT
36 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
37 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
38 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE
39 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40 * ________________________________________________________________
41 * National Laboratory for Applied Network Research
42 * National Center for Supercomputing Applications
43 * University of Illinois at Urbana-Champaign
44 * http://www.ncsa.uiuc.edu
45 * ________________________________________________________________
46 * Extractor.cpp
47 * by Ajay Tirumala (tirumala@ncsa.uiuc.edu)
48 * -------------------------------------------------------------------
49 * Extract data from a file, used to measure the transfer rates
50 * for various stream formats.
51 *
52 * E.g. Use a gzipped file to measure the transfer rates for
53 * compressed data
54 * Use an MPEG file to measure the transfer rates of
55 * Multimedia data formats
56 * Use a plain BMP file to measure the transfer rates of
57 * Uncompressed data
58 *
59 * This is beneficial especially in measuring bandwidth across WAN
60 * links where data compression takes place before data transmission
61 * -------------------------------------------------------------------
62 */
63
64 #include "Extractor.h"
65
66
67 /**
68 * Constructor
69 * @arg fileName Name of the file
70 * @arg size Block size for reading
71 * Open the file and set the block size
72 */
Extractor_Initialize(char * fileName,int inSize,struct thread_Settings * mSettings)73 void Extractor_Initialize ( char *fileName, int inSize, struct thread_Settings *mSettings ) {
74
75 if ( (mSettings->Extractor_file = fopen (fileName, "rb")) == NULL ) {
76 fprintf( stderr, "Unable to open the file stream\n");
77 fprintf( stderr, "Will use the default data stream\n");
78 return;
79 }
80 mSettings->Extractor_size = inSize;
81 }
82
83
84 /**
85 * Constructor
86 * @arg fp File Pointer
87 * @arg size Block size for reading
88 * Set the block size,file pointer
89 */
Extractor_InitializeFile(FILE * fp,int inSize,struct thread_Settings * mSettings)90 void Extractor_InitializeFile ( FILE *fp, int inSize, struct thread_Settings *mSettings ) {
91 mSettings->Extractor_file = fp;
92 mSettings->Extractor_size = inSize;
93 }
94
95
96 /**
97 * Destructor - Close the file
98 */
Extractor_Destroy(struct thread_Settings * mSettings)99 void Extractor_Destroy ( struct thread_Settings *mSettings ) {
100 if ( mSettings->Extractor_file != NULL )
101 fclose( mSettings->Extractor_file );
102 }
103
104
105 /*
106 * Fetches the next data block from
107 * the file
108 * @arg block Pointer to the data read
109 * @return Number of bytes read
110 */
Extractor_getNextDataBlock(char * data,struct thread_Settings * mSettings)111 int Extractor_getNextDataBlock ( char *data, struct thread_Settings *mSettings ) {
112 if ( Extractor_canRead( mSettings ) ) {
113 return(fread( data, 1, mSettings->Extractor_size,
114 mSettings->Extractor_file ));
115 }
116 return 0;
117 }
118
119 /**
120 * Function which determines whether
121 * the file stream is still readable
122 * @return boolean true, if readable; false, if not
123 */
Extractor_canRead(struct thread_Settings * mSettings)124 int Extractor_canRead ( struct thread_Settings *mSettings ) {
125 return(( mSettings->Extractor_file != NULL )
126 && !(feof( mSettings->Extractor_file )));
127 }
128
129 /**
130 * This is used to reduce the read size
131 * Used in UDP transfer to accomodate the
132 * the header (timestamp)
133 * @arg delta Size to reduce
134 */
Extractor_reduceReadSize(int delta,struct thread_Settings * mSettings)135 void Extractor_reduceReadSize ( int delta, struct thread_Settings *mSettings ) {
136 mSettings->Extractor_size -= delta;
137 }
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189