]> sjero.net Git - iperf/blob - src/Extractor.c
DCCP support for iperf
[iperf] / src / Extractor.c
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  */
73 void Extractor_Initialize ( char *fileName, int inSize, 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  */
90 void Extractor_InitializeFile ( FILE *fp, int inSize, thread_Settings *mSettings ) {
91     mSettings->Extractor_file = fp;
92     mSettings->Extractor_size =  inSize;
93 }
94
95
96 /**
97  * Destructor - Close the file
98  */
99 void Extractor_Destroy ( 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  */
111 int Extractor_getNextDataBlock ( char *data, 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  */
124 int Extractor_canRead ( 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 datagram transfer to accommodate the
132  * the header (timestamp)
133  * @arg delta         Size to reduce
134  */
135 void Extractor_reduceReadSize ( int delta, 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