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