beta 22 finished
This commit is contained in:
parent
caee7519fa
commit
d92067dc8e
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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([
|
||||||
|
|
|
||||||
75
doc/PROTOCOL
75
doc/PROTOCOL
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user