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. The output from print and printf statements will be placed
394 in. If the perl-code does not end with a ";" then its return value is also
397 Same goes for <<<perl-code>>> but without output catching.
399 This perl-code must not contain ">>" strings itself!
401 See example $FEXHOME/htdocs/dynamic.html
403 To chainload external perl-code do not use "require" but "do" statement.
404 Pay attention: do not place security relevant data inside << >> because it
405 will be delivered to the client if the URL ends with a "!" character, see
407 http://fex.rus.uni-stuttgart.de/index.html
408 http://fex.rus.uni-stuttgart.de/index.html!
410 If you want to hide your code, then you have to write a CGI script and
411 place it into the cgi-bin directory. Files there will never be delivered
412 by dop. You also can do "chmod o-r file.html" to prevent source code
415 *.html files may contain conditional blocks:
417 #if (perl-expression)
419 #elseif (perl-expression)
425 which will be evaluated at run-time (#else and #elseif are optional).
427 *.html files may contain:
429 which means: load FILE from current directory at this place in code.
431 dop also can display a directory listing if this directory contains a file
433 To restrict the listing to specific files, put a matching regular
434 expression into .htindex
435 Example: echo 'pdf$' > /home/fex/htdocs/doc/.htindex
437 dop can output gzipped files on-the-fly as a streaming document. For
438 example: you have /fex/home/htdocs/big.file but a client requests
439 http://YOURFEXSERVER/big.file.gz then a corresponding big.file.gz will be
442 dop can also output tar, tgz or zip archives on-the-fly as a streaming
443 document. Just create a symbolic link with files (or directories) you want
444 in this archive and enclose them with ":". The symlink name must end with
447 http://fex.rus.uni-stuttgart.de:8080/download/sex.tar
449 fex@fex:~/htdocs/download: ls -l sex*
450 lrwxrwxrwx 1 fex fex 7 2011-01-26 11:46 sexget -> sexsend
451 -rwxr-xr-x 1 fex fex 12110 2012-08-22 09:55 sexsend
452 lrwxrwxrwx 1 fex fex 22 2012-09-01 12:13 sex.stream -> :sexsend:sexget:sexxx:
453 lrwxrwxrwx 1 fex fex 7 2012-09-01 11:28 sexxx -> sexsend
455 It is also possible to create this stream file as a regular file. Then the
456 content must be the file names you want in the streaming archive.
458 Note: you may only use relative paths and without "../" elements.
460 Note: Files beginning with a . or ending with ~ will not be included in
463 cronjob fex_cleanup is run once a day and deletes expired uploads, removes
464 inactive accounts and does some other spool houskeeping. See: crontab -l
466 To detect inactive users you can put in fex.ph:
467 $account_expire = "365:notify";
469 This sends an email to $admin when an user is inactive for 365 days.
471 Or to delete inactive users you can put in fex.ph:
472 $account_expire = "365:delete";
474 This deletes user accounts automatically which have been inactive for 365
477 Of course you can use any number of days.
479 Inactive users will get an account reactivation request before.
481 The address book may contain the optional parameters autodelete and
482 keep. Address book example entry:
484 flupp framstag@flupp.org keep=99 autodelete=no
486 BUT: these address book parameters are only accepted when using the
487 fexsend or schwuppdiwupp client! They will be ignored when using a
490 Nevertheless you may add autodelete and keep parameters using a
491 webbrowser, but then they are valid for ALL addresses in the "Recipient"
494 The clients fexsend and schwuppdiwupp can MD5-encrypt the auth-ID together
495 with a session-ID. The session-ID itself is provided by the server after
496 an initial "GET SID" HTTP request. This is not possible through a proxy,
497 because most proxies do not support persistant tcp sessions.
499 See fex-client_2.pdf for the F*EX protocol specification.
501 To understand and trace the F*EX protocol you can use fexsend with the -v
504 Example (--> means send to server, <-- means receive from server):
506 framstag@fex:~: fexsend -v X.png framstag@flupp.org
507 ID data from /home/framstag/.fex/id: http://fex.rus.uni-stuttgart.de framstag@rus.uni-stuttgart.de XXXX
508 Server/User: http://fex.rus.uni-stuttgart.de/framstag@rus.uni-stuttgart.de
509 TCPCONNECT to fex.rus.uni-stuttgart.de
512 <-- HTTP/1.1 201 8p2Y2qa2
513 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
516 <-- Content-Length: 0
518 --> HEAD /fop/framstag@flupp.org/framstag@fex.rus.uni-stuttgart.de/X.png??ID=MD5H:226e896d0adab86892957aa8158b37ba HTTP/1.1
521 <-- Content-Length: 0
523 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
525 --> POST /fup HTTP/1.1
526 --> Host: fex.rus.uni-stuttgart.de
527 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
528 --> Content-Length: 149935162
529 --> Content-Type: multipart/form-data; boundary=JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
531 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
532 --> Content-Disposition: form-data; name="FROM"
534 --> framstag@fex.rus.uni-stuttgart.de
535 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
536 --> Content-Disposition: form-data; name="TO"
538 --> framstag@flupp.org
539 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
540 --> Content-Disposition: form-data; name="ID"
542 --> MD5H:226e896d0adab86892957aa8158b37ba
543 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
544 --> Content-Disposition: form-data; name="FILESIZE"
547 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
548 --> Content-Disposition: form-data; name="FILE"; filename="X.png"
549 --> Content-Type: application/octet-stream
550 --> Content-Length: 149934400
551 --> X-File-ID: 1283077463
554 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs--
555 <-- Location: http://fex.rus.uni-stuttgart.de/fop/CoVhikzk/X.png
556 <-- X-Recipient: framstag@flupp.org (autodelete=YES,keep=5)
559 Comment on the HEAD request above:
560 The client fexsend sends it to request whether the file has been sent
561 before and if it was successful or not. On the later case, the server
562 would reply how many bytes has already been received and the client then
563 can send only the missing part. Normally the answer to the HEAD request is
564 0 (see above), which means: nothing of this file has been received so far.
566 But this is only half of the truth :-)
567 I have omitted in the example above the requests CHECKRECIPIENT and
568 GET ADDRESS_BOOK, to keep it simple in the first run.
569 CHECKRECIPIENT is a HTTP POST request to check whether the recpient's
570 email address is valid to the server.
571 GET ADDRESS_BOOK is a HTTP GET request to check if the recipient with a
572 short address (= address without @) is an alias in the senders server
574 Please use "fexsend -v" by yourself to see the whole protocol dialoge.
576 Many HTTP proxies have a POST limit, which is often at 2 GB, but sometimes
577 lower. To overcome this limitation a F*EX client (like fexsend) may
578 include in the POST the HTTP MIME part "filesize" which indicates the full
579 file size. All incoming file POSTs with this file name will be appended
580 until the full file size is reached. Of course the client has to POST all
581 parts of this file, in the correct order, in asking the server how many
582 bytes has already been received. Example:
584 framstag@fex:/tmp: fexsend -vP wwwproxy.uni-stuttgart.de.de:8080:1024 2GB.tmp .
585 ID data from /home/framstag/.fex/id: http://fex.rus.uni-stuttgart.de:8080 framstag@rus.uni-stuttgart.de xxxxxx
586 Server/User: http://fex.rus.uni-stuttgart.de:8080/framstag@rus.uni-stuttgart.de
587 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
588 --> 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
592 <-- Content-Length: 0
593 <-- Proxy-Connection: Keep-Alive
594 <-- Connection: Keep-Alive
595 <-- Date: Tue, 08 Jun 2010 15:04:13 GMT
597 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
598 --> POST http://fex.rus.uni-stuttgart.de:8080/fup HTTP/1.1
599 --> Host: fex.rus.uni-stuttgart.de:8080
600 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
601 --> Content-Length: 1073677143
602 --> Content-Type: multipart/form-data; boundary=gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
604 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
605 --> Content-Disposition: form-data; name="FROM"
607 --> framstag@rus.uni-stuttgart.de
608 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
609 --> Content-Disposition: form-data; name="TO"
611 --> framstag@rus.uni-stuttgart.de
612 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
613 --> Content-Disposition: form-data; name="ID"
616 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
617 --> Content-Disposition: form-data; name="COMMENT"
620 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
621 --> Content-Disposition: form-data; name="FILESIZE"
624 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
625 --> Content-Disposition: form-data; name="FILE"; filename="2GB.tmp"
626 --> Content-Type: application/octet-stream
627 --> Content-Length: 1073676288
628 --> X-File-ID: 1275549886
631 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK--
632 2GB.tmp : 1023 MB in 73 s (14363 kB/s), chunk #1 : 1023 MB
633 <-- HTTP/1.1 206 Partial OK
634 <-- X-Message: Partial OK
637 <-- Cache-Control: no-cache
638 <-- Content-Type: text/html; charset=UTF-8
639 <-- Connection: close
640 <-- Date: Tue, 08 Jun 2010 15:05:29 GMT
642 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
643 --> 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
646 <-- X-Size: 2147483748
647 <-- X-File-ID: 1275549886
648 <-- Content-Length: 1073676288
649 <-- Proxy-Connection: Keep-Alive
650 <-- Connection: Keep-Alive
651 <-- Date: Tue, 08 Jun 2010 15:05:29 GMT
653 TCPCONNECT to wwwproxy.uni-stuttgart.de.de:8080
654 --> POST http://fex.rus.uni-stuttgart.de:8080/fup HTTP/1.1
655 --> Host: fex.rus.uni-stuttgart.de:8080
656 --> User-Agent: fexsend (Ubuntu 8.04.4 LTS)
657 --> Content-Length: 1073677254
658 --> Content-Type: multipart/form-data; boundary=LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
660 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
661 --> Content-Disposition: form-data; name="FROM"
663 --> framstag@rus.uni-stuttgart.de
664 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
665 --> Content-Disposition: form-data; name="TO"
667 --> framstag@rus.uni-stuttgart.de
668 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
669 --> Content-Disposition: form-data; name="ID"
672 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
673 --> Content-Disposition: form-data; name="COMMENT"
676 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
677 --> Content-Disposition: form-data; name="SEEK"
680 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
681 --> Content-Disposition: form-data; name="FILESIZE"
684 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
685 --> Content-Disposition: form-data; name="FILE"; filename="2GB.tmp"
686 --> Content-Type: application/octet-stream
687 --> Content-Length: 1073676288
688 --> X-File-ID: 1275549886
691 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw--
692 2GB.tmp : 0 MB in 1 s (128 kB/s), total 2048 MB
695 The default character set for F*EX is UTF-8, because most clients seem to
696 use it. The problem is, it is nowhere defined which character set HTTP
699 Important for programmers: The perl variables of the F*EX CGI's (fup, fop,
700 etc) have their UTF-8 flag turned off. This means, they contain UTF-8 data
701 in binary representation.
703 F*EX has support for many languanges. For every language a translated
704 version will be installed in $HOME/locale/
705 The switch is done at runtime via locale cookie (by fexsrv).
706 Some common functions from fex.pp must be present at any time for any
707 locale in any language, eg notification functions. Therfore there is
708 $HOME/lib/lf.pl (extracted functions from fex.pp).
710 I have additional authentication modules for RADIUS, LDAP, mailman and
711 POP. Please email me if you are interested.
713 framstag@rus.uni-stuttgart.de