]> git.treefish.org Git - fex.git/blob - doc/concept
fde990246e95755f6588e603401afad80be72658
[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 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!
401
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
405 delivery.
406
407 *.html files may contain conditional blocks:
408
409 #if (perl-expression)
410    HTML...
411 #elseif (perl-expression)
412    HTML...
413 #else
414    HTML...
415 #endif
416
417 which will be evaluated at run-time (#else and #elseif are optional).
418
419 *.html files may contain:
420 #include "FILE"
421 which means: load FILE from current directory at this place in code.
422
423 dop also can display a directory listing if this directory contains a file
424 named .htindex
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
428
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
432 delivered.
433
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
437 ".stream". Example:
438
439 http://fex.rus.uni-stuttgart.de:8080/download/sex.tar
440
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
446
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.
449
450 Note: you may only use relative paths and without "../" elements.
451
452 Note: Files beginning with a . or ending with ~ will not be included in
453 the download stream.
454
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
457
458 To detect inactive users you can put in fex.ph:
459 $account_expire = "365:notify";
460
461 This sends an email to $admin when an user is inactive for 365 days.
462
463 Or to delete inactive users you can put in fex.ph:
464 $account_expire = "365:delete";
465
466 This deletes user accounts automatically which have been inactive for 365
467 days.
468
469 Of course you can use any number of days.
470
471 Inactive users will get an account reactivation request before.
472
473 The address book may contain the optional parameters autodelete and
474 keep. Address book example entry:
475
476 flupp framstag@flupp.org keep=99 autodelete=no
477
478 BUT: these address book parameters are only accepted when using the
479 fexsend or schwuppdiwupp client! They will be ignored when using a
480 webbrowser!
481
482 Nevertheless you may add autodelete and keep parameters using a
483 webbrowser, but then they are valid for ALL addresses in the "Recipient"
484 field!
485
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.
490
491 See fex-client_2.pdf for the F*EX protocol specification.
492
493 To understand and trace the F*EX protocol you can use fexsend with the -v
494 option.
495
496 Example (--> means send to server, <-- means receive from server):
497
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
502 --> GET SID HTTP/1.1
503 -->
504 <-- HTTP/1.1 201 8p2Y2qa2
505 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
506 <-- X-SID: 8p2Y2qa2
507 <-- X-Timeout: 30
508 <-- Content-Length: 0
509 <--
510 --> HEAD /fop/framstag@flupp.org/framstag@fex.rus.uni-stuttgart.de/X.png??ID=MD5H:226e896d0adab86892957aa8158b37ba HTTP/1.1
511 -->
512 <-- HTTP/1.1 200 OK
513 <-- Content-Length: 0
514 <-- X-Size: 0
515 <-- X-Features: SID,CHECKRECIPIENT,GROUPS,QUOTA,FILEID,MULTIPOST,XKEY
516 <--
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
522 -->
523 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
524 --> Content-Disposition: form-data; name="FROM"
525 -->
526 --> framstag@fex.rus.uni-stuttgart.de
527 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
528 --> Content-Disposition: form-data; name="TO"
529 -->
530 --> framstag@flupp.org
531 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
532 --> Content-Disposition: form-data; name="ID"
533 -->
534 --> MD5H:226e896d0adab86892957aa8158b37ba
535 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs
536 --> Content-Disposition: form-data; name="FILESIZE"
537 -->
538 --> 149934400
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
544 -->
545 --> (file content)
546 --> --JhUOtQ3sgV5ZcHJzrTny523nBFqgUNvSAOUHoRMTdZfGpAjs--
547 <-- Location: http://fex.rus.uni-stuttgart.de/fop/CoVhikzk/X.png
548 <-- X-Recipient: framstag@flupp.org (autodelete=YES,keep=5)
549 <--
550
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.
557
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
565 address book.
566 Please use "fexsend -v" by yourself to see the whole protocol dialoge.
567
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:
575
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
581 -->
582 <-- HTTP/1.1 200 OK
583 <-- X-Size: 0
584 <-- Content-Length: 0
585 <-- Proxy-Connection: Keep-Alive
586 <-- Connection: Keep-Alive
587 <-- Date: Tue, 08 Jun 2010 15:04:13 GMT
588 <--
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
595 -->
596 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
597 --> Content-Disposition: form-data; name="FROM"
598 -->
599 --> framstag@rus.uni-stuttgart.de
600 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
601 --> Content-Disposition: form-data; name="TO"
602 -->
603 --> framstag@rus.uni-stuttgart.de
604 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
605 --> Content-Disposition: form-data; name="ID"
606 -->
607 --> xxxxxx
608 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
609 --> Content-Disposition: form-data; name="COMMENT"
610 -->
611 --> NOMAIL
612 --> --gqhqeU7FCHMl4ohxJ5knK1y9rF75xYTvabPvZTeWnAhaoDsK
613 --> Content-Disposition: form-data; name="FILESIZE"
614 -->
615 --> 2147483748
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
621 -->
622 --> (file content)
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
627 <-- Server: fexsrv
628 <-- Expires: 0
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
633 <--
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
636 -->
637 <-- HTTP/1.1 200 OK
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
644 <--
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
651 -->
652 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
653 --> Content-Disposition: form-data; name="FROM"
654 -->
655 --> framstag@rus.uni-stuttgart.de
656 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
657 --> Content-Disposition: form-data; name="TO"
658 -->
659 --> framstag@rus.uni-stuttgart.de
660 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
661 --> Content-Disposition: form-data; name="ID"
662 -->
663 --> xxxxxx
664 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
665 --> Content-Disposition: form-data; name="COMMENT"
666 -->
667 --> NOMAIL
668 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
669 --> Content-Disposition: form-data; name="SEEK"
670 -->
671 --> 1073676288
672 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw
673 --> Content-Disposition: form-data; name="FILESIZE"
674 -->
675 --> 2147483748
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
681 -->
682 --> (file content)
683 --> --LofreCkx1GmgWNCHZ9exBQoQhiEF7pXSaPp2KUQVPlnarPAw--
684 2GB.tmp : 0 MB in 1 s (128 kB/s), total 2048 MB
685
686
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
689 uses itself.
690
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.
694
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).
701
702 I have additional authentication modules for RADIUS, LDAP, mailman and
703 POP. Please email me if you are interested.
704
705 framstag@rus.uni-stuttgart.de