]> git.treefish.org Git - fex.git/blob - doc/concept
Original release 20150729
[fex.git] / doc / concept
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.
3
4 The sender uploads the file to the F*EX-server and the recipient automatically
5 gets a notification email with a download-URL.
6
7 Main features of F*EX
8
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
40
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
43 download). 
44
45
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
51
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
55 Example: 
56
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);
59
60 You can also use wildcard "*" in a domain, for example:
61
62         @local_domains = qw(uni-stuttgart.de *.uni-stuttgart.de);
63
64 Then all subdomains are allowed.
65
66
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:
73
74 @local_rdomains = qw(YOURDOMAIN *.YOURDOMAIN OTHERDOMAIN);
75
76
77 F*EX full users can create one time upload URLs with
78 http://YOURFEXSERVER/fuc 
79
80 With such a URL a foreign user can send this F*EX full user a single file.
81
82 F*EX full users can theirselves register "subusers" with
83 http://YOURFEXSERVER/fuc 
84
85 Subusers can only fex to their full-user, not to any others, and they
86 cannot create other subusers.
87
88
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.
91
92
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)
95
96
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. 
99
100 The (confusing) naming scheme is historically based :-)
101
102
103 The recipient (normally) does not need any registration. He authenticates
104 himself with his unique download-URL which he gets in the notification
105 email.
106
107
108 You do not need to build F*EX URLs manually, they are generated by the
109 F*EX programs. 
110
111
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.
119
120 A SKEY is made of md5_hex("$mainuser:$subuser:$subuserid")
121 A GKEY is made of md5_hex("$mainuser:$groupname:$groupuser:$groupuserid")
122
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! 
125
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. 
129
130 With the fexsend client the sender can change this behavior:
131
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
135 address). 
136
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).
140
141
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).
145
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
150
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
153 of days). Example:
154 Recipient(s): framstag@rus.uni-stuttgart.de:keep=10
155
156 These options are also possible in the server address book (see CGI fuc).
157
158 If you need more security, then set in fex.ph:
159 $fop_auth = 'yes';
160 $force_https = 'yes';
161
162 With $fop_auth upload is restricted to registered users and download
163 requires (HTTP) authorization. The credentials are the F*EX user email
164 and auth-ID.
165 See extra documentation SSL for using https.
166
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".
172
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
176
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:
180
181 @public_recipients = qw(fexmaster@YOURDOMAIN bunny@OTHERDOMAIN);
182
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.
186
187 The administrator can globally forbid certain recipient address via fex.ph
188 configuration (example):
189
190 @forbidden_recipients = qw(nobody@* *@microsoft.com);
191
192 The administrator can also forbid a user to fex to any recipient address,
193 but the allowed ones with: fac -r USER
194
195
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!
200
201 You can also add (name based) virtual hosts with fac.
202
203 Do not give write permission to any other user to any file in FEXHOME or
204 below!
205
206
207 FEXHOME contains:
208
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
216         
217
218 Files in spool:
219
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 
244                                         web interface
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
263
264 As you see, the first directory sometimes means sender and sometimes means
265 recipient! It depends on the case of usage (up/download).
266
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.
270
271
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.
275
276 You can customize the upload CGI fup by editing FEXHOME/lib/fup.pl
277
278 Additional directories in spool:
279
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
288
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.
293
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
297 notification email. 
298
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.
304
305 If you need to trace a F*EX request, then set 
306         $debug = 1;
307 in fex.ph and look in ~/spool/.debug/ for the correspondening files.
308
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:
312
313         $bcc = 'other@address';
314
315 The sender also get a Bcc if he put the string "!bcc!" in the comment
316 field.
317
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.
323
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. 
327
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.
330
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). 
335
336
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 :-)
343
344
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
348 space on the client.
349
350 Example for a streaming archive upload:
351
352   fexsend -a music+video.tar *mp3 *avi webmaster@flupp.org
353
354 Example for a streaming data upload:
355
356   fpg fex /var/log/* | fexsend -s logs fexmaster@flupp.org
357
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.
360
361 For streaming receiving you can use "fexget -s-" or "wget -O-".
362
363
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
367 have priority.
368
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 "~"
375
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.
379
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)
384
385 dop is not a regular CGI program (like fup or fop), but a sub-program of
386 fexsrv. 
387
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
391
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!
399
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
403 delivery.
404
405 *.html files may contain conditional blocks:
406
407 #if (perl-expression)
408    HTML...
409 #elseif (perl-expression)
410    HTML...
411 #else
412    HTML...
413 #endif
414
415 which will be evaluated at run-time (#else and #elseif are optional).
416
417 *.html files may contain:
418 #include "FILE"
419 which means: load FILE from current directory at this place in code.
420
421 dop also can display a directory listing if this directory contains a file
422 named .htindex
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
426
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
430 delivered.
431
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
435 ".stream". Example:
436
437 http://fex.rus.uni-stuttgart.de:8080/download/sex.tar
438
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
444
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.
447
448 Note: you may only use relative paths and without "../" elements.
449
450 Note: Files beginning with a . or ending with ~ will not be included in
451 the download stream.
452
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
455
456 To detect inactive users you can put in fex.ph:
457 $account_expire = "365:notify";
458
459 This sends an email to $admin when an user is inactive for 365 days.
460
461 Or to delete inactive users you can put in fex.ph:
462 $account_expire = "365:delete";
463
464 This deletes user accounts automatically which have been inactive for 365
465 days. 
466
467 Of course you can use any number of days.
468
469 Inactive users will get an account reactivation request before.
470
471 The address book may contain the optional parameters autodelete and
472 keep. Address book example entry:
473
474 flupp framstag@flupp.org keep=99 autodelete=no
475
476 BUT: these address book parameters are only accepted when using the
477 fexsend or schwuppdiwupp client! They will be ignored when using a
478 webbrowser!
479
480 Nevertheless you may add autodelete and keep parameters using a
481 webbrowser, but then they are valid for ALL addresses in the "Recipient"
482 field!
483
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.
488
489 See fex-client_2.pdf for the F*EX protocol specification.
490
491 To understand and trace the F*EX protocol you can use fexsend with the -v
492 option. 
493
494 Example (--> means send to server, <-- means receive from server):
495
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
500 --> GET SID HTTP/1.1
501 -->
502 <-- HTTP/1.1 201 8p2Y2qa2
503 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
504 <-- X-SID: 8p2Y2qa2
505 <-- X-Timeout: 30
506 <-- Content-Length: 0
507 <-- 
508 --> HEAD /fop/framstag@flupp.org/framstag@fex.rus.uni-stuttgart.de/X.png??ID=MD5H:226e896d0adab86892957aa8158b37ba HTTP/1.1
509 -->
510 <-- HTTP/1.1 200 OK
511 <-- Content-Length: 0
512 <-- X-Size: 0
513 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
514 <-- 
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
520 --> 
521 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
522 --> Content-Disposition: form-data; name="FROM"
523 --> 
524 --> framstag@fex.rus.uni-stuttgart.de
525 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
526 --> Content-Disposition: form-data; name="TO"
527 --> 
528 --> framstag@flupp.org
529 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
530 --> Content-Disposition: form-data; name="ID"
531 --> 
532 --> MD5H:226e896d0adab86892957aa8158b37ba
533 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
534 --> Content-Disposition: form-data; name="FILESIZE"
535 --> 
536 --> 149934400
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
542 --> 
543 --> (file content)
544 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs--
545 <-- Location: http://fex.rus.uni-stuttgart.de/fop/CoVhikzk/X.png
546 <-- X-Recipient: framstag@flupp.org (autodelete=YES,keep=5)
547 <-- 
548
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.
555
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
563 address book. 
564 Please use "fexsend -v" by yourself to see the whole protocol dialoge.
565
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:
573
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
579 -->
580 <-- HTTP/1.1 200 OK
581 <-- X-Size: 0
582 <-- Content-Length: 0
583 <-- Proxy-Connection: Keep-Alive
584 <-- Connection: Keep-Alive
585 <-- Date: Tue, 08 Jun 2010 15:04:13 GMT
586 <--
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
593 -->
594 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
595 --> Content-Disposition: form-data; name="FROM"
596 -->
597 --> framstag@rus.uni-stuttgart.de
598 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
599 --> Content-Disposition: form-data; name="TO"
600 -->
601 --> framstag@rus.uni-stuttgart.de
602 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
603 --> Content-Disposition: form-data; name="ID"
604 -->
605 --> xxxxxx
606 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
607 --> Content-Disposition: form-data; name="COMMENT"
608 -->
609 --> NOMAIL
610 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
611 --> Content-Disposition: form-data; name="FILESIZE"
612 -->
613 --> 2147483748
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
619 -->
620 --> (file content)
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
625 <-- Server: fexsrv
626 <-- Expires: 0
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
631 <--
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
634 -->
635 <-- HTTP/1.1 200 OK
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
642 <--
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
649 -->
650 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
651 --> Content-Disposition: form-data; name="FROM"
652 -->
653 --> framstag@rus.uni-stuttgart.de
654 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
655 --> Content-Disposition: form-data; name="TO"
656 -->
657 --> framstag@rus.uni-stuttgart.de
658 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
659 --> Content-Disposition: form-data; name="ID"
660 -->
661 --> xxxxxx
662 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
663 --> Content-Disposition: form-data; name="COMMENT"
664 -->
665 --> NOMAIL
666 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
667 --> Content-Disposition: form-data; name="SEEK"
668 -->
669 --> 1073676288
670 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
671 --> Content-Disposition: form-data; name="FILESIZE"
672 -->
673 --> 2147483748
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
679 -->
680 --> (file content)
681 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw--
682 2GB.tmp : 0 MB in 1 s (128 kB/s), total 2048 MB
683
684
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
687 uses itself.
688
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.
692
693 F*EX has support for many languanges. For every language a translated
694 version will be installed in $HOME/locale/
695 The switch is done at runtime via locale cookie (by fexsrv).
696 Some common functions from fex.pp must be present at any time for any
697 locale in any language, eg notification functions. Therfore there is
698 $HOME/lib/lf.pl (extracted functions from fex.pp).
699
700 I have additional authentication modules for RADIUS, LDAP, mailman and
701 POP. Please email me if you are interested.
702
703 framstag@rus.uni-stuttgart.de