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 instead of http!
126 After download the file will be deleted after a grace time of 1 minute.
127 This grace time allows a recipient to get the file again if he had
128 problems in saving it.
130 With the fexsend client the sender can change this behavior:
132 option -D means "delay autodelete": do not delete the the file directly
133 after download, but with the nightly fex_cleanup cronjob. More downloads
134 are possible only from the same client (identified by cookie or ip
137 option -K means "keep file": do not delete the file after download, but
138 only after expiration date (normally 5 days). More downloads are possible
139 only from the same client (identified by cookie or ip address).
142 If you fex a file to yourself (sender = recipient), then the resulting
143 download link is valid for any client and can be downloaded everywhere
144 and more than once (until expiration date).
146 If you want "delay autodelete" to be the default behaviour for all users
147 and each transfer then set
148 $autodelete = 'DELAY'; # or 'NO' for no autodelete
149 in FEXHOME/lib/fex.ph
151 In addition, you can add to the "Recipient(s)" field of the fup CGI:
152 ":autodelete=delay" or ":autodelete=no" or ":keep=x" (where x is the number
154 Recipient(s): framstag@rus.uni-stuttgart.de:keep=10
156 These options are also possible in the server address book (see CGI fuc).
158 If you need more security, then set in fex.ph:
160 $force_https = 'yes';
162 With $fop_auth upload is restricted to registered users and download
163 requires (HTTP) authorization. The credentials are the F*EX user email
165 See extra documentation SSL for using https.
167 If you want to have encrypted emails, then you need a GPG public key for
168 the user fex. Create it with "gpg --gen-key" (use fex@YOURFEXSERVER as the
169 user or the $bcc address from fex.ph if you have set it, see below). Next,
170 the user has to upload his public key via webinterface "user config &
171 operation control" and "Manage e-mail encryption".
173 "Public upload" is a feature similar to anonymous ftp: the sender does not
174 to be registered, but may send only to predefined recipients via
175 http://YOURFEXSERVER/pup
177 The administrator has to define via configuration variable
178 @public_recipients the email addresses for which anyone can upload files
179 without registration (auth-ID is not necessary). For example:
181 @public_recipients = qw(fexmaster@YOURDOMAIN bunny@OTHERDOMAIN);
183 With "anonymous upload" one can use F*EX without registration or
184 authentication. The administrator has to define via configuration variable
185 @anonymous_upload for which IP addresses this feature is available.
187 The administrator can globally forbid certain recipient address via fex.ph
188 configuration (example):
190 @forbidden_recipients = qw(nobody@* *@microsoft.com);
192 The administrator can also forbid a user to fex to any recipient address,
193 but the allowed ones with: fac -r USER
196 By standard installation the base directory FEXHOME is the same as the
197 login HOME of user fex, but you can move it if you want. FEXHOME is
198 determined by the full path of fexsrv as configured in
199 /etc/xinetd.d/fex . Change this when you move FEXHOME!
201 You can also add (name based) virtual hosts with fac.
203 Do not give write permission to any other user to any file in FEXHOME or
209 spool/ spool directory and user data
210 htdocs/ directory for generic download files
211 bin/ directory for programs
212 cgi-bin/ directory for CGI programs
213 lib/ directory for library and config files
214 doc/ additional documentation
215 locale/ alternative language installation
220 cleanup.log log of daily cleanup cronjob
221 dkey.log log of download keys
222 dop.log log of HTTP document output
223 error.log log of errors
224 fexsrv.log log of all HTTP requests
225 fop.log log of file downloads
226 fup.log log of file uploads
227 fur.log log of user self registrations
228 sex.log log of stream exchanges
229 $user/@ regular user auth-ID
230 $user/@SUBUSER subuser addresses and IDs
231 $user/@ALLOWED_RECIPIENTS recipients restrictions for this user
232 $user/@ALLOWED_RHOSTS recipient's hosts restrictions
233 $user/@UPLOAD_HOSTS upload hosts restrictions
234 $user/@DOWNLOAD_HOSTS download hosts restrictions
235 $user/@ADDRESS_BOOK users recipient address book
236 $user/@GROUP directory of F*EX user groups
237 $user/@OKEY directory with one time upload keys
238 $user/@QUOTA sender and recipient quotas
239 $user/@AUTODELETE autodelete default
240 $user/@KEEP keep default
241 $user/@LOCALE locale default
242 $user/@CAPTIVE user must not change his settings
243 $user/@FEXYOURSELF user can only fex to himself via
245 $to/$from/$file/upload file data in upload progress
246 $to/$from/$file/filename original file name
247 $to/$from/$file/size original file size
248 $to/$from/$file/useragent HTTP header User-Agent
249 $to/$from/$file/uurl upload URL
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 and its output will be placed in. Same goes for <<<perl-code>>>
394 but without output catching.
395 See example FEXHOME/htdocs/dynamic.html
396 This perl-code must not contain '>>' strings itself!
397 Pay attention: do not place security relevant data inside << >> because it
398 will be delivered to the client if the URL ends with '!'! See example:
399 http://fex.rus.uni-stuttgart.de/index.html
400 http://fex.rus.uni-stuttgart.de/index.html!
402 If you want to hide your code, then you have to write a CGI script and
403 place it into the cgi-bin directory. Files there will never be delivered
404 by dop. You also can do "chmod o-r file.html" to prevent source code
407 *.html files may contain conditional blocks:
409 #if (perl-expression)
411 #elseif (perl-expression)
417 which will be evaluated at run-time (#else and #elseif are optional).
419 *.html files may contain:
421 which means: load FILE from current directory at this place in code.
423 dop also can display a directory listing if this directory contains a file
425 To restrict the listing to specific files, put a matching regular
426 expression into .htindex
427 Example: echo 'pdf$' > /home/fex/htdocs/doc/.htindex
429 dop can output gzipped files on-the-fly as a streaming document. For
430 example: you have /fex/home/htdocs/big.file but a client requests
431 http://YOURFEXSERVER/big.file.gz then a corresponding big.file.gz will be
434 dop can also output tar, tgz or zip archives on-the-fly as a streaming
435 document. Just create a symbolic link with files (or directories) you want
436 in this archive and enclose them with ":". The symlink name must end with
439 http://fex.rus.uni-stuttgart.de:8080/download/sex.tar
441 fex@fex:~/htdocs/download: ls -l sex*
442 lrwxrwxrwx 1 fex fex 7 2011-01-26 11:46 sexget -> sexsend
443 -rwxr-xr-x 1 fex fex 12110 2012-08-22 09:55 sexsend
444 lrwxrwxrwx 1 fex fex 22 2012-09-01 12:13 sex.stream -> :sexsend:sexget:sexxx:
445 lrwxrwxrwx 1 fex fex 7 2012-09-01 11:28 sexxx -> sexsend
447 It is also possible to create this stream file as a regular file. Then the
448 content must be the file names you want in the streaming archive.
450 Note: you may only use relative paths and without "../" elements.
452 Note: Files beginning with a . or ending with ~ will not be included in
455 cronjob fex_cleanup is run once a day and deletes expired uploads, removes
456 inactive accounts and does some other spool houskeeping. See: crontab -l
458 To detect inactive users you can put in fex.ph:
459 $account_expire = "365:notify";
461 This sends an email to $admin when an user is inactive for 365 days.
463 Or to delete inactive users you can put in fex.ph:
464 $account_expire = "365:delete";
466 This deletes user accounts automatically which have been inactive for 365
469 Of course you can use any number of days.
471 Inactive users will get an account reactivation request before.
473 The address book may contain the optional parameters autodelete and
474 keep. Address book example entry:
476 flupp framstag@flupp.org keep=99 autodelete=no
478 BUT: these address book parameters are only accepted when using the
479 fexsend or schwuppdiwupp client! They will be ignored when using a
482 Nevertheless you may add autodelete and keep parameters using a
483 webbrowser, but then they are valid for ALL addresses in the "Recipient"
486 The clients fexsend and schwuppdiwupp can MD5-encrypt the auth-ID together
487 with a session-ID. The session-ID itself is provided by the server after
488 an initial "GET SID" HTTP request. This is not possible through a proxy,
489 because most proxies do not support persistant tcp sessions.
491 See fex-client_2.pdf for the F*EX protocol specification.
493 To understand and trace the F*EX protocol you can use fexsend with the -v
496 Example (--> means send to server, <-- means receive from server):
498 framstag@fex:~: fexsend -v X.png framstag@flupp.org
499 ID data from /home/framstag/.fex/id: http://fex.rus.uni-stuttgart.de framstag@rus.uni-stuttgart.de XXXX
500 Server/User: http://fex.rus.uni-stuttgart.de/framstag@rus.uni-stuttgart.de
501 TCPCONNECT to fex.rus.uni-stuttgart.de
504 <-- HTTP/1.1 201 8p2Y2qa2
505 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
508 <-- Content-Length: 0
510 --> HEAD /fop/framstag@flupp.org/framstag@fex.rus.uni-stuttgart.de/X.png??ID=MD5H:226e896d0adab86892957aa8158b37ba HTTP/1.1
513 <-- Content-Length: 0
515 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
517 --> POST /fup HTTP/1.1
518 --> Host: fex.rus.uni-stuttgart.de
519 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
520 --> Content-Length: 149935162
521 --> Content-Type: multipart/form-data; boundary=JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
523 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
524 --> Content-Disposition: form-data; name="FROM"
526 --> framstag@fex.rus.uni-stuttgart.de
527 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
528 --> Content-Disposition: form-data; name="TO"
530 --> framstag@flupp.org
531 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
532 --> Content-Disposition: form-data; name="ID"
534 --> MD5H:226e896d0adab86892957aa8158b37ba
535 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
536 --> Content-Disposition: form-data; name="FILESIZE"
539 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
540 --> Content-Disposition: form-data; name="FILE"; filename="X.png"
541 --> Content-Type: application/octet-stream
542 --> Content-Length: 149934400
543 --> X-File-ID: 1283077463
546 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs--
547 <-- Location: http://fex.rus.uni-stuttgart.de/fop/CoVhikzk/X.png
548 <-- X-Recipient: framstag@flupp.org (autodelete=YES,keep=5)
551 Comment on the HEAD request above:
552 The client fexsend sends it to request whether the file has been sent
553 before and if it was successful or not. On the later case, the server
554 would reply how many bytes has already been received and the client then
555 can send only the missing part. Normally the answer to the HEAD request is
556 0 (see above), which means: nothing of this file has been received so far.
558 But this is only half of the truth :-)
559 I have omitted in the example above the requests CHECKRECIPIENT and
560 GET ADDRESS_BOOK, to keep it simple in the first run.
561 CHECKRECIPIENT is a HTTP POST request to check whether the recpient's
562 email address is valid to the server.
563 GET ADDRESS_BOOK is a HTTP GET request to check if the recipient with a
564 short address (= address without @) is an alias in the senders server
566 Please use "fexsend -v" by yourself to see the whole protocol dialoge.
568 Many HTTP proxies have a POST limit, which is often at 2 GB, but sometimes
569 lower. To overcome this limitation a F*EX client (like fexsend) may
570 include in the POST the HTTP MIME part "filesize" which indicates the full
571 file size. All incoming file POSTs with this file name will be appended
572 until the full file size is reached. Of course the client has to POST all
573 parts of this file, in the correct order, in asking the server how many
574 bytes has already been received. Example:
576 framstag@fex:/tmp: fexsend -vP wwwproxy.uni-stuttgart.de.de:8080:1024 2GB.tmp .
577 ID data from /home/framstag/.fex/id: http://fex.rus.uni-stuttgart.de:8080 framstag@rus.uni-stuttgart.de xxxxxx
578 Server/User: http://fex.rus.uni-stuttgart.de:8080/framstag@rus.uni-stuttgart.de
579 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
580 --> 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
584 <-- Content-Length: 0
585 <-- Proxy-Connection: Keep-Alive
586 <-- Connection: Keep-Alive
587 <-- Date: Tue, 08 Jun 2010 15:04:13 GMT
589 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
590 --> POST http://fex.rus.uni-stuttgart.de:8080/fup HTTP/1.1
591 --> Host: fex.rus.uni-stuttgart.de:8080
592 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
593 --> Content-Length: 1073677143
594 --> Content-Type: multipart/form-data; boundary=gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
596 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
597 --> Content-Disposition: form-data; name="FROM"
599 --> framstag@rus.uni-stuttgart.de
600 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
601 --> Content-Disposition: form-data; name="TO"
603 --> framstag@rus.uni-stuttgart.de
604 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
605 --> Content-Disposition: form-data; name="ID"
608 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
609 --> Content-Disposition: form-data; name="COMMENT"
612 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
613 --> Content-Disposition: form-data; name="FILESIZE"
616 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
617 --> Content-Disposition: form-data; name="FILE"; filename="2GB.tmp"
618 --> Content-Type: application/octet-stream
619 --> Content-Length: 1073676288
620 --> X-File-ID: 1275549886
623 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK--
624 2GB.tmp : 1023 MB in 73 s (14363 kB/s), chunk #1 : 1023 MB
625 <-- HTTP/1.1 206 Partial OK
626 <-- X-Message: Partial OK
629 <-- Cache-Control: no-cache
630 <-- Content-Type: text/html; charset=UTF-8
631 <-- Connection: close
632 <-- Date: Tue, 08 Jun 2010 15:05:29 GMT
634 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
635 --> 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
638 <-- X-Size: 2147483748
639 <-- X-File-ID: 1275549886
640 <-- Content-Length: 1073676288
641 <-- Proxy-Connection: Keep-Alive
642 <-- Connection: Keep-Alive
643 <-- Date: Tue, 08 Jun 2010 15:05:29 GMT
645 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
646 --> POST http://fex.rus.uni-stuttgart.de:8080/fup HTTP/1.1
647 --> Host: fex.rus.uni-stuttgart.de:8080
648 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
649 --> Content-Length: 1073677254
650 --> Content-Type: multipart/form-data; boundary=LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
652 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
653 --> Content-Disposition: form-data; name="FROM"
655 --> framstag@rus.uni-stuttgart.de
656 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
657 --> Content-Disposition: form-data; name="TO"
659 --> framstag@rus.uni-stuttgart.de
660 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
661 --> Content-Disposition: form-data; name="ID"
664 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
665 --> Content-Disposition: form-data; name="COMMENT"
668 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
669 --> Content-Disposition: form-data; name="SEEK"
672 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
673 --> Content-Disposition: form-data; name="FILESIZE"
676 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
677 --> Content-Disposition: form-data; name="FILE"; filename="2GB.tmp"
678 --> Content-Type: application/octet-stream
679 --> Content-Length: 1073676288
680 --> X-File-ID: 1275549886
683 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw--
684 2GB.tmp : 0 MB in 1 s (128 kB/s), total 2048 MB
687 The default character set for F*EX is UTF-8, because most clients seem to
688 use it. The problem is, it is nowhere defined which character set HTTP
691 Important for programmers: The perl variables of the F*EX CGI's (fup, fop,
692 etc) have their UTF-8 flag turned off. This means, they contain UTF-8 data
693 in binary representation.
695 F*EX has support for many languanges. For every language a translated
696 version will be installed in $HOME/locale/
697 The switch is done at runtime via locale cookie (by fexsrv).
698 Some common functions from fex.pp must be present at any time for any
699 locale in any language, eg notification functions. Therfore there is
700 $HOME/lib/lf.pl (extracted functions from fex.pp).
702 I have additional authentication modules for RADIUS, LDAP, mailman and
703 POP. Please email me if you are interested.
705 framstag@rus.uni-stuttgart.de