1 F*EX (Frams' Fast File EXchange) is a service to send big (large, huge, giant,
2 ...) files from a user A to a user B, anywhere on the internet.
4 The sender uploads the file to the F*EX-server and the recipient automatically
5 gets a notification email with a download-URL.
9 * file transfer of virtually unlimited file size
10 * recipient and sender only need an email program and a web browser - of any
11 kind, they do not have to install any software
12 * RESEND and REGET for resuming after link failures at last sent byte
13 * auto-notification of recipient
14 * auto-deletion after download
15 * auto-deletion after expiration date (default: 5 days)
16 * full-users can create one time upload URLs for foreign users
17 * full-users can create subusers, who can send only to this full-user
18 * full-users can create groups, an analogy to mailing lists, but for files
19 * self registration possible for internal and external users
20 * maintenance-free: no admin interaction necessary
21 * sending to multiple recipients needs storage on the server only once
22 * quotas for sending and receiving
23 * F*EX is a HTTP web-service and needs no firewall-tunnels
24 * support for (personal or public) streams, too (SEX : Stream EXchange)
25 * for real UNIX users, there are the shell programs fexsend and fexget to
26 avoid annoying web browser usage and for full scripting support
27 * adminstration by CLI or Web
28 * about 10 times faster than apache
29 * authentification modules for LDAP, RADIUS, POP, mailman
30 * server based user address books
31 * (reverse) proxy support
32 * "public upload" similar to "anonymous ftp" possible
33 * "anonymous upload" without registration for enabled IP addresses possible
34 * localization for many languages
35 * authentification by local user database, RADIUS, LDAP, mailman or POP
36 * user and admin can throttle bandwith usage
37 * admin can restrict access based on email or IP addresses
38 * server available for UNIX and Windows hosts
39 * protocol and source-code free available
41 The end user normally uses F*EX with his web browser and the URLs
42 http://YOURFEXSERVER/fup (file upload) and http://YOURFEXSERVER/fop (file
46 F*EX is not an anonymous service (exception: "public upload" and
47 "anonymous upload", see later).
48 The admin must register the user with his email address and auth-ID
49 string (low security password). This task can be done either with the CLI
50 program "fac" (F*EX admin control) or http://YOURFEXSERVER/fac
52 Alternativly the users can register theirselves with http://YOURFEXSERVER/fur
53 (F*EX user registration), if the admin allows them to do so. This is done by
54 setting the variables @local_domains and @local_hosts in FEXHOME/lib/fex.ph
57 @local_hosts = qw(127.0.0.1 10.10.100.0-10.10.255.255);
58 @local_domains = qw(rus.uni-stuttgart.de flupp.org);
60 You can also use wildcard "*" in a domain, for example:
62 @local_domains = qw(uni-stuttgart.de *.uni-stuttgart.de);
64 Then all subdomains are allowed.
67 In addition the administrator can allow external users to fex (only) to
68 internal users. The F*EX functioning scheme is close related to email
69 where any external user can send email to an internal user. This is also
70 possible with F*EX. These users are then called "restricted users". The
71 administrator has to define via configuration variable @local_rdomains
72 the local recipient domains. For example:
74 @local_rdomains = qw(YOURDOMAIN *.YOURDOMAIN OTHERDOMAIN);
77 F*EX full users can create one time upload URLs with
78 http://YOURFEXSERVER/fuc
80 With such a URL a foreign user can send this F*EX full user a single file.
82 F*EX full users can theirselves register "subusers" with
83 http://YOURFEXSERVER/fuc
85 Subusers can only fex to their full-user, not to any others, and they
86 cannot create other subusers.
89 F*EX full users also can create groups, an analogy to mailing lists, but
90 for files: every member of a group can send files to the group address.
93 The administrator can set with fac the CAPTIVE flag for a full user. Then
94 he cannot change anymore his default settings (KEEP, AUTODELETE, etc)
97 The F*EX user is the same as the "sender" in the fup CGI and the "from"
98 parameter in the F*EX URL.
100 The (confusing) naming scheme is historically based :-)
103 The recipient (normally) does not need any registration. He authenticates
104 himself with his unique download-URL which he gets in the notification
108 You do not need to build F*EX URLs manually, they are generated by the
112 A F*EX session is based on unique URL parameters or POST variables (FROM,
113 TO, ID, etc). For security reasons the URL parameters FROM and ID become a
114 MD5-hashed access key link (AKEY for regular users, SKEY for subusers,
115 GKEY for groupusers), generated by the CGIs, to prevent that a third
116 person could easily read these parameters from the user webbrowser URL
117 address field. AKEY and SKEY are used as optional cookies, too, for
118 extending the session life.
120 A SKEY is made of md5_hex("$mainuser:$subuser:$subuserid")
121 A GKEY is made of md5_hex("$mainuser:$groupname:$groupuser:$groupuserid")
123 Note: the AKEY, SKEY and GKEY always can be stolen by a network sniffer!
124 If you need true security, then you have to use https (SSL) instead of
127 After download the file will be deleted after a grace time of 1 minute.
128 This grace time allows a recipient to get the file again if he had
129 problems in saving it.
131 With the fexsend client the sender can change this behavior:
133 option -D means "delay autodelete": do not delete the the file directly
134 after download, but with the nightly fex_cleanup cronjob. More downloads
135 are possible only from the same client (identified by cookie or ip
138 option -K means "keep file": do not delete the file after download, but
139 only after expiration date (normally 5 days). More downloads are possible
140 only from the same client (identified by cookie or ip address).
143 If you fex a file to yourself (sender = recipient), then the resulting
144 download link is valid for any client and can be downloaded everywhere
145 and more than once (until expiration date).
147 If you want "delay autodelete" to be the default behaviour for all users
148 and each transfer then set
149 $autodelete = 'DELAY'; # or 'NO' for no autodelete
150 in FEXHOME/lib/fex.ph
152 In addition, you can add to the "Recipient(s)" field of the fup CGI:
153 ":autodelete=delay" or ":autodelete=no" or ":keep=x" (where x is the number
155 Recipient(s): framstag@rus.uni-stuttgart.de:keep=10
157 These options are also possible in the server address book (see CGI fuc).
159 If you need more security, then set in fex.ph:
161 $force_https = 'yes';
163 With $fop_auth upload is restricted to registered users and download
164 requires (HTTP) authorization. The credentials are the F*EX user email
166 See extra documentation SSL for using https.
168 If you want to have encrypted emails, then you need a GPG public key for
169 the user fex. Create it with "gpg --gen-key" (use fex@YOURFEXSERVER as the
170 user or the $bcc address from fex.ph if you have set it, see below). Next,
171 the user has to upload his public key via webinterface "user config &
172 operation control" and "Manage e-mail encryption".
174 "Public upload" is a feature similar to anonymous ftp: the sender does not
175 to be registered, but may send only to predefined recipients via
176 http://YOURFEXSERVER/pup
178 The administrator has to define via configuration variable
179 @public_recipients the email addresses for which anyone can upload files
180 without registration (auth-ID is not necessary). For example:
182 @public_recipients = qw(fexmaster@YOURDOMAIN bunny@OTHERDOMAIN);
184 With "anonymous upload" one can use F*EX without registration or
185 authentication. The administrator has to define via configuration variable
186 @anonymous_upload for which IP addresses this feature is available.
188 The administrator can globally forbid certain recipient address via fex.ph
189 configuration (example):
191 @forbidden_recipients = qw(nobody@* *@microsoft.com);
193 The administrator can also forbid a user to fex to any recipient address,
194 but the allowed ones with: fac -r USER
197 By standard installation the base directory FEXHOME is the same as the
198 login HOME of user fex, but you can move it if you want. FEXHOME is
199 determined by the full path of fexsrv as configured in
200 /etc/xinetd.d/fex . Change this when you move FEXHOME!
202 You can also add (name based) virtual hosts with fac.
204 Do not give write permission to any other user to any file in FEXHOME or
210 spool/ spool directory and user data
211 htdocs/ directory for generic download files
212 bin/ directory for programs
213 cgi-bin/ directory for CGI programs
214 lib/ directory for library and config files
215 doc/ additional documentation
216 locale/ alternative language installation
221 cleanup.log log of daily cleanup cronjob
222 dkey.log log of download keys
223 dop.log log of HTTP document output
224 error.log log of errors
225 fexsrv.log log of all HTTP requests
226 fop.log log of file downloads
227 fup.log log of file uploads
228 fur.log log of user self registrations
229 sex.log log of stream exchanges
230 $user/@ regular user auth-ID
231 $user/@SUBUSER subuser addresses and IDs
232 $user/@ALLOWED_RECIPIENTS recipients restrictions for this user
233 $user/@ALLOWED_RHOSTS recipient's hosts restrictions
234 $user/@UPLOAD_HOSTS upload hosts restrictions
235 $user/@DOWNLOAD_HOSTS download hosts restrictions
236 $user/@ADDRESS_BOOK users recipient address book
237 $user/@GROUP directory of F*EX user groups
238 $user/@OKEY directory with one time upload keys
239 $user/@QUOTA sender and recipient quotas
240 $user/@AUTODELETE autodelete default
241 $user/@KEEP keep default
242 $user/@LOCALE locale default
243 $user/@CAPTIVE user must not change his settings
244 $user/@FEXYOURSELF user can only fex to himself via
246 $to/$from/$file/upload file data in upload progress
247 $to/$from/$file/filename original file name
248 $to/$from/$file/size original file size
249 $to/$from/$file/useragent HTTP header User-Agent
250 $to/$from/$file/data file data after complete upload
251 $to/$from/$file/keep keep time (autoexpire) in days
252 $to/$from/$file/autodelete autodelete option: YES NO or DELAY
253 $to/$from/$file/comment comment in notification email
254 $to/$from/$file/id file ID (optional)
255 $to/$from/$file/ip sender ip address
256 $to/$from/$file/notify reminder notify flag
257 $to/$from/$file/error error message if file has gone
258 $to/$from/$file/download log of successful downloads
259 $to/$from/$file/restrictions IP based download restrictions
260 (see $user/@ALLOWED_RHOSTS)
261 $to/$from/$file/dkey download key
262 $to/$from/$file/locale locale
264 As you see, the first directory sometimes means sender and sometimes means
265 recipient! It depends on the case of usage (up/download).
267 BEWARE: for the special senders fexmail and anonymous $to and $from are
268 swapped (by fup and fop)! This is to prevent overcrowding of the toplevel
269 spool directory with _fexmail_$RANDOM and _anonymous_$RANDOM recipients.
272 A registered full F*EX user is identified by the file $spooldir/$from/@
273 Only if this file contains his auth-ID this user is able to send files to
274 others. Otherwise he is just an unpriviledged recipient.
276 You can customize the upload CGI fup by editing FEXHOME/lib/fup.pl
278 Additional directories in spool:
280 .dkeys/ download keys lookup directory
281 .ukeys/ upload keys lookup directory
282 .akeys/ authentication keys lookup directory
283 .skeys/ subuser keys lookup directory
284 .gkeys/ groupuser keys lookup directory
285 .xkeys/ extra download keys lookup directory
286 .debug/ directory for debug output (optional)
287 .reg/ temporary data for user selfregistration
289 The upload keys (UKEY) are necessary to synchronize the file upload by
290 HTTP POST with the javascript upload status bar which is an asynchronous
291 HTTP GET. The GET process needs to know the corresponding POST process.
292 This is done via UKEY, a unique upload identifier.
294 The download key (DKEY) is a unique identifier for - guess what -
295 downloading. It also prevents an attacker to get the file, because only
296 the recipient knows the DKEY as part of the download URL from the
299 XKEY is an optional extra download key to have a short download URL in
300 shape http://YOURFEXSERVER//XKEY
301 The XKEY always starts with // and is provided as a COMMENT by the client.
302 Example: fexsend schwuppdiwupp.jpg //
303 The user has to realize that such URLs have very low security.
305 If you need to trace a F*EX request, then set
307 in fex.ph and look in ~/spool/.debug/ for the correspondening files.
309 The user fex also gets a Bcc of all sent notification emails. This is a
310 help for debugging purposes. If you want these Bcc mails to another
311 address then set in fex.ph:
313 $bcc = 'other@address';
315 The sender also get a Bcc if he put the string "!bcc!" in the comment
318 If you have users within another domain with its own MTA and those users
319 want to fex each other, then their MTA probably will reject the
320 notification email. To prevent this problem you can set in fex.ph
321 @remote_domains = qw(other_domain1 other_domain2 ...);
322 In this case "From: $admin" will be used in the notification emails.
324 F*EX comes with its own web server: fexsrv
325 Standard web servers like apache have been proven problematic, either in
326 speed or because of a 2-GB-limit.
328 It is not possible to use the F*EX CGIs with an alternative web server,
329 because the F*EX CGIs need special fexsrv features.
331 xinetd starts fexsrv for every new connection, which then executes the
332 CGIs fup (file upload), fop (file output), fuc (fex user control), foc
333 (fex operation control), fac (fex admin control), fur (fex user
334 registration) and sex (stream exchange).
337 SEX has the opposite authorization model of FEX: The sender does not
338 need any registration. He can send a stream to any registered SEX user,
339 who must identify himself with his auth-ID. This is because a stream does
340 not cost resources when it is not bound to a recipient. It will block
341 otherwise. The client programs for sexing are sexsend and sexget. You can
342 call them also fuckyou and fuckme :-)
345 With the F*EX client fexsend you can have a streaming file transfer with
346 spooling: on client side there is no temporary buffer file (archive), but
347 the data is sent directly to the F*EX server. This saves time and disk
350 Example for a streaming archive upload:
352 fexsend -a music+video.tar *mp3 *avi webmaster@flupp.org
354 Example for a streaming data upload:
356 fpg fex /var/log/* | fexsend -s logs fexmaster@flupp.org
358 The data streaming is implemented via a HTTP extension: the header
359 Content-Length is given -1 which means: unknown length, read until EOF.
361 For streaming receiving you can use "fexget -s-" or "wget -O-".
364 fexsrv also can do generic document output (via dop) like a normal web
365 server. For this, your files must be under FEXHOME/htdocs and they must
366 not have the same name as the CGIs under FEXHOME/cgi-bin, because the CGIs
369 For security reasons, documents to be delivered by dop:
370 - the file must be readable by group or world
371 - the file must be in FEXHOME/htdocs or a directory specified by @doc_dirs
372 - the filename must not start with a "."
373 - the filename must not contain a "@"
374 - the filename must not end with "~"
376 To enable HTTP basic authentication, write your access token to a file
377 named .htauth which will protect all files in this directory. An user will
378 be prompted for this password by his web browser.
380 To restrict the access to specific client IP addresses, put these IPs into
381 a file named .htaccessfrom which will protect all files below this
382 directory. You can name single IPs, also as IP ranges (example:
383 129.69.0.0-129.69.255.255)
385 dop is not a regular CGI program (like fup or fop), but a sub-program of
388 *.html files may contain $VARIABLES$ which will be substituted with the
389 value of the corresponding environment variable. See example
390 $SERVER_ADMIN$ in FEXHOME/htdocs/index.html
392 *.html files may contain <<perl-code>> (even multiline) which will be
393 evaluated. See example FEXHOME/htdocs/dynamic.html
394 This perl-code must not contain '>>' strings itself!
395 Pay attention: do not place security relevant data inside << >> because it
396 will be delivered to the client if the URL ends with '!'! See example:
397 http://fex.rus.uni-stuttgart.de/index.html
398 http://fex.rus.uni-stuttgart.de/index.html!
400 If you want to hide your code, then you have to write a CGI script and
401 place it into the cgi-bin directory. Files there will never be delivered
402 by dop. You also can do "chmod o-r file.html" to prevent source code
405 *.html files may contain conditional blocks:
407 #if (perl-expression)
409 #elseif (perl-expression)
415 which will be evaluated at run-time (#else and #elseif are optional).
417 *.html files may contain:
419 which means: load FILE from current directory at this place in code.
421 dop also can display a directory listing if this directory contains a file
423 To restrict the listing to specific files, put a matching regular
424 expression into .htindex
425 Example: echo 'pdf$' > /home/fex/htdocs/doc/.htindex
427 dop can output gzipped files on-the-fly as a streaming document. For
428 example: you have /fex/home/htdocs/big.file but a client requests
429 http://YOURFEXSERVER/big.file.gz then a corresponding big.file.gz will be
432 dop can also output tar, tgz or zip archives on-the-fly as a streaming
433 document. Just create a symbolic link with files (or directories) you want
434 in this archive and enclose them with ":". The symlink name must end with
437 http://fex.rus.uni-stuttgart.de:8080/download/sex.tar
439 fex@fex:~/htdocs/download: ls -l sex*
440 lrwxrwxrwx 1 fex fex 7 2011-01-26 11:46 sexget -> sexsend
441 -rwxr-xr-x 1 fex fex 12110 2012-08-22 09:55 sexsend
442 lrwxrwxrwx 1 fex fex 22 2012-09-01 12:13 sex.stream -> :sexsend:sexget:sexxx:
443 lrwxrwxrwx 1 fex fex 7 2012-09-01 11:28 sexxx -> sexsend
445 It is also possible to create this stream file as a regular file. Then the
446 content must be the file names you want in the streaming archive.
448 Note: you may only use relative paths and without "../" elements.
450 Note: Files beginning with a . or ending with ~ will not be included in
453 cronjob fex_cleanup is run once a day and deletes expired uploads, removes
454 inactive accounts and does some other spool houskeeping. See: crontab -l
456 To detect inactive users you can put in fex.ph:
457 $account_expire = "365:notify";
459 This sends an email to $admin when an user is inactive for 365 days.
461 Or to delete inactive users you can put in fex.ph:
462 $account_expire = "365:delete";
464 This deletes user accounts automatically which have been inactive for 365
467 Of course you can use any number of days.
469 Inactive users will get an account reactivation request before.
471 The address book may contain the optional parameters autodelete and
472 keep. Address book example entry:
474 flupp framstag@flupp.org keep=99 autodelete=no
476 BUT: these address book parameters are only accepted when using the
477 fexsend or schwuppdiwupp client! They will be ignored when using a
480 Nevertheless you may add autodelete and keep parameters using a
481 webbrowser, but then they are valid for ALL addresses in the "Recipient"
484 The clients fexsend and schwuppdiwupp can MD5-encrypt the auth-ID together
485 with a session-ID. The session-ID itself is provided by the server after
486 an initial "GET SID" HTTP request. This is not possible through a proxy,
487 because most proxies do not support persistant tcp sessions.
489 See fex-client_2.pdf for the F*EX protocol specification.
491 To understand and trace the F*EX protocol you can use fexsend with the -v
494 Example (--> means send to server, <-- means receive from server):
496 framstag@fex:~: fexsend -v X.png framstag@flupp.org
497 ID data from /home/framstag/.fex/id: http://fex.rus.uni-stuttgart.de framstag@rus.uni-stuttgart.de XXXX
498 Server/User: http://fex.rus.uni-stuttgart.de/framstag@rus.uni-stuttgart.de
499 TCPCONNECT to fex.rus.uni-stuttgart.de
502 <-- HTTP/1.1 201 8p2Y2qa2
503 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
506 <-- Content-Length: 0
508 --> HEAD /fop/framstag@flupp.org/framstag@fex.rus.uni-stuttgart.de/X.png??ID=MD5H:226e896d0adab86892957aa8158b37ba HTTP/1.1
511 <-- Content-Length: 0
513 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
515 --> POST /fup HTTP/1.1
516 --> Host: fex.rus.uni-stuttgart.de
517 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
518 --> Content-Length: 149935162
519 --> Content-Type: multipart/form-data; boundary=JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
521 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
522 --> Content-Disposition: form-data; name="FROM"
524 --> framstag@fex.rus.uni-stuttgart.de
525 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
526 --> Content-Disposition: form-data; name="TO"
528 --> framstag@flupp.org
529 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
530 --> Content-Disposition: form-data; name="ID"
532 --> MD5H:226e896d0adab86892957aa8158b37ba
533 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
534 --> Content-Disposition: form-data; name="FILESIZE"
537 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
538 --> Content-Disposition: form-data; name="FILE"; filename="X.png"
539 --> Content-Type: application/octet-stream
540 --> Content-Length: 149934400
541 --> X-File-ID: 1283077463
544 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs--
545 <-- Location: http://fex.rus.uni-stuttgart.de/fop/CoVhikzk/X.png
546 <-- X-Recipient: framstag@flupp.org (autodelete=YES,keep=5)
549 Comment on the HEAD request above:
550 The client fexsend sends it to request whether the file has been sent
551 before and if it was successful or not. On the later case, the server
552 would reply how many bytes has already been received and the client then
553 can send only the missing part. Normally the answer to the HEAD request is
554 0 (see above), which means: nothing of this file has been received so far.
556 But this is only half of the truth :-)
557 I have omitted in the example above the requests CHECKRECIPIENT and
558 GET ADDRESS_BOOK, to keep it simple in the first run.
559 CHECKRECIPIENT is a HTTP POST request to check whether the recpient's
560 email address is valid to the server.
561 GET ADDRESS_BOOK is a HTTP GET request to check if the recipient with a
562 short address (= address without @) is an alias in the senders server
564 Please use "fexsend -v" by yourself to see the whole protocol dialoge.
566 Many HTTP proxies have a POST limit, which is often at 2 GB, but sometimes
567 lower. To overcome this limitation a F*EX client (like fexsend) may
568 include in the POST the HTTP MIME part "filesize" which indicates the full
569 file size. All incoming file POSTs with this file name will be appended
570 until the full file size is reached. Of course the client has to POST all
571 parts of this file, in the correct order, in asking the server how many
572 bytes has already been received. Example:
574 framstag@fex:/tmp: fexsend -vP wwwproxy.uni-stuttgart.de.de:8080:1024 2GB.tmp .
575 ID data from /home/framstag/.fex/id: http://fex.rus.uni-stuttgart.de:8080 framstag@rus.uni-stuttgart.de xxxxxx
576 Server/User: http://fex.rus.uni-stuttgart.de:8080/framstag@rus.uni-stuttgart.de
577 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
578 --> HEAD http://fex.rus.uni-stuttgart.de:8080/fop/framstag@rus.uni-stuttgart.de/framstag@rus.uni-stuttgart.de/2GB.tmp??&ID=xxxxxx HTTP/1.1
582 <-- Content-Length: 0
583 <-- Proxy-Connection: Keep-Alive
584 <-- Connection: Keep-Alive
585 <-- Date: Tue, 08 Jun 2010 15:04:13 GMT
587 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
588 --> POST http://fex.rus.uni-stuttgart.de:8080/fup HTTP/1.1
589 --> Host: fex.rus.uni-stuttgart.de:8080
590 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
591 --> Content-Length: 1073677143
592 --> Content-Type: multipart/form-data; boundary=gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
594 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
595 --> Content-Disposition: form-data; name="FROM"
597 --> framstag@rus.uni-stuttgart.de
598 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
599 --> Content-Disposition: form-data; name="TO"
601 --> framstag@rus.uni-stuttgart.de
602 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
603 --> Content-Disposition: form-data; name="ID"
606 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
607 --> Content-Disposition: form-data; name="COMMENT"
610 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
611 --> Content-Disposition: form-data; name="FILESIZE"
614 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
615 --> Content-Disposition: form-data; name="FILE"; filename="2GB.tmp"
616 --> Content-Type: application/octet-stream
617 --> Content-Length: 1073676288
618 --> X-File-ID: 1275549886
621 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK--
622 2GB.tmp : 1023 MB in 73 s (14363 kB/s), chunk #1 : 1023 MB
623 <-- HTTP/1.1 206 Partial OK
624 <-- X-Message: Partial OK
627 <-- Cache-Control: no-cache
628 <-- Content-Type: text/html; charset=UTF-8
629 <-- Connection: close
630 <-- Date: Tue, 08 Jun 2010 15:05:29 GMT
632 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
633 --> HEAD http://fex.rus.uni-stuttgart.de:8080/fop/framstag@rus.uni-stuttgart.de/framstag@rus.uni-stuttgart.de/2GB.tmp??&ID=xxxxxx HTTP/1.1
636 <-- X-Size: 2147483748
637 <-- X-File-ID: 1275549886
638 <-- Content-Length: 1073676288
639 <-- Proxy-Connection: Keep-Alive
640 <-- Connection: Keep-Alive
641 <-- Date: Tue, 08 Jun 2010 15:05:29 GMT
643 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
644 --> POST http://fex.rus.uni-stuttgart.de:8080/fup HTTP/1.1
645 --> Host: fex.rus.uni-stuttgart.de:8080
646 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
647 --> Content-Length: 1073677254
648 --> Content-Type: multipart/form-data; boundary=LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
650 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
651 --> Content-Disposition: form-data; name="FROM"
653 --> framstag@rus.uni-stuttgart.de
654 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
655 --> Content-Disposition: form-data; name="TO"
657 --> framstag@rus.uni-stuttgart.de
658 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
659 --> Content-Disposition: form-data; name="ID"
662 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
663 --> Content-Disposition: form-data; name="COMMENT"
666 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
667 --> Content-Disposition: form-data; name="SEEK"
670 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
671 --> Content-Disposition: form-data; name="FILESIZE"
674 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
675 --> Content-Disposition: form-data; name="FILE"; filename="2GB.tmp"
676 --> Content-Type: application/octet-stream
677 --> Content-Length: 1073676288
678 --> X-File-ID: 1275549886
681 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw--
682 2GB.tmp : 0 MB in 1 s (128 kB/s), total 2048 MB
685 The default character set for F*EX is UTF-8, because most clients seem to
686 use it. The problem is, it is nowhere defined which character set HTTP
689 Important for programmers: The perl variables of the F*EX CGI's (fup, fop,
690 etc) have their UTF-8 flag turned off. This means, they contain UTF-8 data
691 in binary representation.
694 I have additional authentication modules for RADIUS, LDAP, mailman and
695 POP. Please email me if you are interested.
697 framstag@rus.uni-stuttgart.de