beta 22 finished

This commit is contained in:
hsn 2004-12-20 17:09:06 +00:00
parent caee7519fa
commit d92067dc8e
5 changed files with 64 additions and 48 deletions

View File

@ -1,4 +1,4 @@
Version 2.8.1b22 - 17 Dec 2004 Version 2.8.1b22 - 20 Dec 2004
fixed sf bug 1060594: fspd: owner can't rename files fixed sf bug 1060594: fspd: owner can't rename files
fixed sf bug 1060558: fpro 'l' sets 'm' flag instead (dairiki) fixed sf bug 1060558: fpro 'l' sets 'm' flag instead (dairiki)
fixed sf bug 1060558: fpro 'l' flag was not correctly saved fixed sf bug 1060558: fpro 'l' flag was not correctly saved
@ -53,6 +53,7 @@ Version 2.8.1b22 - 17 Dec 2004
fspd.conf: logging of stat and rename added to comments. fspd.conf: logging of stat and rename added to comments.
FILES: file somewhat updated FILES: file somewhat updated
sgml fsp faq released as version 0.1, first public version sgml fsp faq released as version 0.1, first public version
new locking semop code compiles on Linux systems also.
Version 2.8.1b21 - 1 Nov 2004 Version 2.8.1b21 - 1 Nov 2004
check for errors while copying files in fspd. check for errors while copying files in fspd.

View File

@ -29,7 +29,8 @@ static void make_key_string( unsigned long server_addr,
char *p; char *p;
strcpy(key_string,KEY_PREFIX); strcpy(key_string,KEY_PREFIX);
for(p = key_string; *p; p++); for(p = key_string; *p; p++)
;
v1 = server_addr; v1 = server_addr;
v2 = server_port; v2 = server_port;
@ -289,7 +290,17 @@ void client_destroy_key(void)
#include <sys/shm.h> #include <sys/shm.h>
#include <sys/sem.h> #include <sys/sem.h>
int key_persists = 0; #ifdef _SEM_SEMUN_UNDEFINED
union semun
{
int val;
struct semid_ds *buf;
unsigned short int *array;
struct seminfo *__buf;
};
#endif
int key_persists = 1;
static unsigned short *share_key; static unsigned short *share_key;
static int lock_shm; static int lock_shm;
static int lock_sem; static int lock_sem;
@ -378,12 +389,6 @@ void client_init_key (unsigned long server_addr,
perror("semop"); perror("semop");
exit(1); exit(1);
} }
/*
fd=semctl(lock_sem,0,GETVAL);
printf("sem value: %d\n",fd);
fd=semctl(lock_sem,0,GETNCNT);
printf("sem ncnt: %d\n",fd);
*/
} }
void client_destroy_key(void) void client_destroy_key(void)

View File

@ -122,7 +122,12 @@ AC_CHECK_TYPE(nlink_t, ,AC_DEFINE(nlink_t, int,[declare nlink_t as int if not fo
AC_CHECK_TYPE(rlim_t, ,AC_DEFINE(rlim_t, [unsigned int],[declare rlim_t as unsigned int if not found in <sys/resource.h>]),[#include <sys/resource.h>]) AC_CHECK_TYPE(rlim_t, ,AC_DEFINE(rlim_t, [unsigned int],[declare rlim_t as unsigned int if not found in <sys/resource.h>]),[#include <sys/resource.h>])
AC_TYPE_SIGNAL AC_TYPE_SIGNAL
AC_FUNC_CLOSEDIR_VOID AC_FUNC_CLOSEDIR_VOID
AC_CHECK_FUNCS(random strdup bcopy flock lockf getrlimit fork setsid semop nanosleep) AC_CHECK_FUNCS(random strdup bcopy flock lockf getrlimit fork setsid semop)
AC_CHECK_TYPE(union semun, ,AC_DEFINE(_SEM_SEMUN_UNDEFINED,1,[Define if you do not have semun in sys/sem.h]),
[#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
])
AC_CACHE_CHECK(for working shmget ,fsp_cv_func_shmget, AC_CACHE_CHECK(for working shmget ,fsp_cv_func_shmget,
[LOCKPATH="conftestlock" [LOCKPATH="conftestlock"
AC_TRY_RUN([ AC_TRY_RUN([

View File

@ -1,23 +1,24 @@
FILE SERVICE PROTOCOL VERSION 2 FILE SERVICE PROTOCOL VERSION 2
FSP v2 OFFICIAL PROTOCOL DEFINITION
FSP v2
Document version 0.16 Document version 0.16
Last updated 15 Dec 2004 Last updated 15 Dec 2004
Also known as Also known as
File Slurping Protocol, File Slurping Protocol,
Flaky Stream Protocol, Flaky Stream Protocol,
FTP's Sexier Partner, FTP's Sexier Partner,
File Sharing Protocol or File Sharing Protocol or
Fucking Slow Protocol. Fucking Slow Protocol.
`FSP is what anonymous FTP *should* be' `FSP is what anonymous FTP *should* be'
This document was created by Radim Kolar, because there is no RFC for This document was created by Radim Kolar, because there is no RFC for
FSP. It was planed, but never comes out. See FSP Project Home page FSP. It was planed, but never comes out. See FSP Project Home page
http://fsp.sourceforge.net/ for up-to-date version of this document. http://fsp.sourceforge.net/ for up-to-date version of this document.
Also contact Radim Kolar with questions and if you need to help with Also contact Radim Kolar with questions and if you need help with an
an implementation of this protocol in productivity environment. implementation of this protocol in productivity environment.
This document is not copyrighted and is placed into public domain. This document is not copyrighted and is placed into public domain.
@ -43,11 +44,11 @@ Transport
FSP uses UDP datagrams as standard transport medium for operation in FSP uses UDP datagrams as standard transport medium for operation in
Internet Networks. Internet Networks.
FSP protocol uses checksum and payload size, so it do not require FSP datagram header has checksum and payload size recorded. Because
any underlying transport protocol and can be used as very simple of this FSP do not require any underlying transport protocol on
raw-protocol (for example for sending data over serial line). This layer 2 and can be used as very simple raw-protocol (for example for
makes it very popular in embedded devices area, because it is sending data over serial line). This makes it very popular in
extremely easy to implement. embedded devices area, because it is extremely easy to implement.
FSP packets can have an optional extra data area. For supporting FSP packets can have an optional extra data area. For supporting
packets with this, underlying transport must make size of received packets with this, underlying transport must make size of received
@ -65,10 +66,11 @@ Transport
checksums of received packets of that kind and process these extra checksums of received packets of that kind and process these extra
bytes. bytes.
Minimum UDP packet size (not including size of UDP, IP and link Minimum FSP packet size (not including size of UDP, IP and link
layer headers) is 12 bytes (FSP v2 header only), maximum standard layer headers) is 12 bytes (FSP v2 header only), maximum standard
UDP packet size is 1024+12 bytes. Server can accept longer packets, FSP packet size is 12 bytes of FSP v2 header and 1024 bytes of
but must send longer packets only when requested by client. All payload. Server can optionaly accept longer packets, but must not
send longer packets to client unless specially requested. All
servers and clients must support receiving 1024+12 bytes long servers and clients must support receiving 1024+12 bytes long
packets. packets.
@ -116,7 +118,7 @@ checksum use zero in place of MESSAGE_CHECKSUM header field.
Method of computing checksums is different in each direction. For Method of computing checksums is different in each direction. For
packets traveling from server to client initial checksum value is packets traveling from server to client initial checksum value is
zero, otherwise it is size of (HEADER + DATA + XTRA DATA). zero, otherwise initial value is packet size (HEADER + DATA + XTRA DATA).
Checksums in server->client direction are computed as follows: Checksums in server->client direction are computed as follows:
@ -130,7 +132,7 @@ protocols, which are using at least CRC16 checksum types. FSP server
fed by random data can resist for hours without falsely accepting fed by random data can resist for hours without falsely accepting
random data as valid FSP packet. This demonstration shows, that these random data as valid FSP packet. This demonstration shows, that these
checksums when very easy to compute, are sufficient for guarding checksums when very easy to compute, are sufficient for guarding
against line noise. against random line noise.
Note: Note:
IP/UDP packet has its own crc16 checksum, but FSP protocol checksum is IP/UDP packet has its own crc16 checksum, but FSP protocol checksum is
@ -148,12 +150,13 @@ Server will accept resent message from client with old KEY after 3
seconds. Client MUST wait at least 1 second before resending a seconds. Client MUST wait at least 1 second before resending a
message. It is recommended to use initial delay of 1.34 second and message. It is recommended to use initial delay of 1.34 second and
after each unsuccessful resend multiply delay time by 1.5. Maximum after each unsuccessful resend multiply delay time by 1.5. Maximum
delay time is 300 seconds. delay time is 300 seconds. Recommended maximum delay between resends
is 60 seconds.
2. Session 2. Session
Server will accept message with bad key after 60 seconds. Clients Server will accept message with bad key after 60 seconds. Clients
should sent CC_BYE at end of their session, CC_BYE terminates a should sent CC_BYE at end of their session because CC_BYE terminates a
session. After session is terminated, sever will accept any next key. session. After session is terminated, sever will accept any next key.
SEQUENCE SEQUENCE
@ -165,7 +168,8 @@ packets (increase sequence number on message resend).
DATA_LENGTH DATA_LENGTH
Size of DATA field in packet. Packet can also contain XTRA DATA field but Size of DATA field in packet. Packet can also contain XTRA DATA field but
size of this field is not included in header and must be computed from size of this field is not included in header and must be computed from
received packet size. received packet size or from knowledge of FSP v2 packets formats (some
packets carries length of extra data in position field).
FILE POSITION FILE POSITION
When transferring files, this field shows current position of requested When transferring files, this field shows current position of requested
@ -182,6 +186,8 @@ FSP File servers MUST supports following commands:
- file status CC_STAT - file status CC_STAT
- information about directory flags CC_GET_PRO - information about directory flags CC_GET_PRO
- terminate session CC_BYE - terminate session CC_BYE
If server supports packets with payload size over 1024 bytes, supporting
CC_VERSION is recommended.
CC_VERSION 0x10 - Get server version string and setup CC_VERSION 0x10 - Get server version string and setup
@ -248,15 +254,15 @@ FSP File servers MUST supports following commands:
data: directory listing (format follows) data: directory listing (format follows)
xtra data: not used xtra data: not used
Directory listing is transfered in similar way as file transfer. Directory Directory listing is transfered in similar way as file transfer.
listing is divided into blocks of equal size, only exception is last block Directory listing is divided into blocks of equal size, only exception
which can be shorter. Default and maximum size of directory listing block is is last block which can be shorter. Default size of directory listing
1024 bytes. Size of directory block can be changed by server using extra block is 1024 bytes. Server can use prefered block size sent by client
data information sent by client. and split directory listing into blocks with size prefered by client.
Directory blocks can't be split across message boundary and client Directory blocks can't be split across message boundary and client
can't do seeking to any arbitrary offset, which can broke dirblock can't do seeking to any arbitrary offset, which can broke dirblock
into 2 messages. In short: Every message can contain only one into 2 messages. In short: Every message must contain only one
unsplited directory block. unsplited directory block.
RDIRENT is the structure of a directory entry contained in a directory listing. RDIRENT is the structure of a directory entry contained in a directory listing.
@ -279,7 +285,7 @@ directory block boundary, then two possible things will happen:
This will make sure that messages carrying directory information carry only This will make sure that messages carrying directory information carry only
complete directory entries and no fragmented entries. complete directory entries and no fragmented entries.
The last entry is type RDTYPE_END. The last entry has type RDTYPE_END.
struct RDIRENT { struct RDIRENT {
struct HEADER { struct HEADER {
@ -394,10 +400,9 @@ RDIRENT.HEADER types:
Compatibility Compatibility
Versions older than 2.8.1b6 do not uses bits 6 and 7. This Versions older than 2.8.1b6 do not uses bits 6 and 7. This
causes that directory can be listable even it do not have causes that directory can be listable even if do not have
6th bit set. 6th bit set.
CC_SET_PRO 0x48 - set directory protection CC_SET_PRO 0x48 - set directory protection
request request

View File

@ -36,7 +36,7 @@
#define KEY_PREFIX "/tmp/.FSPL" #define KEY_PREFIX "/tmp/.FSPL"
/* find the best locking method, defines one of USE_SHAREMEM_AND_LOCKF, /* find the best locking method, defines one of USE_SHAREMEM_AND_LOCKF,
* USE_FLOCK,USE_LOCKF,NOLOCKING 1 */ * USE_FLOCK,USE_LOCKF,NOLOCKING */
#if defined(HAVE_SHMEM) && defined(HAVE_SEMOP) #if defined(HAVE_SHMEM) && defined(HAVE_SEMOP)
#define USE_SHAREMEM_AND_SEMOP 1 #define USE_SHAREMEM_AND_SEMOP 1
#else #else
@ -49,7 +49,7 @@
#ifdef HAVE_FLOCK #ifdef HAVE_FLOCK
#define USE_FLOCK 1 #define USE_FLOCK 1
#else #else
#define NOLOCKING #define NOLOCKING 1
#endif #endif
#endif #endif
#endif #endif