[go: up one dir, main page]

Menu

[848368]: / include / common_def.h  Maximize  Restore  History

Download this file

160 lines (137 with data), 7.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*********************************************************************\
* Copyright (c) 1991 by Wen-King Su (wen-king@vlsi.cs.caltech.edu) *
* Copyright (c) 2003-2009 by Radim Kolar *
* *
* You may copy or modify this file in any manner you wish, provided *
* that this notice is always included, and that you hold the author *
* harmless for any loss or damage resulting from the installation or *
* use of this software. *
\*********************************************************************/
#ifndef FSP_COMMON_DEF_H_
#define FSP_COMMON_DEF_H_ 1
#include <stdio.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <signal.h>
#include <dirent.h>
/****************************************************************************
* UBUF is the structure of message exchanged between server and clients.
*
* The 'buf' part of the buffer is variable length up to max of 1024.
* The 'key' field is used by the server for sequence identification.
* The 'seq' field is used by the client for sequence identification.
*
* Client's message to server contain a key value that is the same as the
* key value of the previous message received from the server. Similarly,
* the server's message to client contains a seq value that is the same
* as the seq value of the previous message from the client.
*
* The buf field is logically partitioned into two parts by the len field.
* The len field indicate the size of the first part of the buffer starting
* at buf[0]. The rest of the buffer is the second field. In some cases
* both fields can contain information.
*
****************************************************************************/
#define UBUF_HSIZE 12 /* 12 bytes for the FSP header. */
#define UBUF_SPACE 1024 /* maximum standard payload. */
#define DEFAULT_SPACE 1492-20-8-12 /* Max packet size for standard */
/* 1492 pppOE mtu ethernet. */
/* 20 bytes is IP header */
/* 8 bytes is UDP header */
/* 12 bytes is FSP header */
#define UBUF_MAXSPACE 4380 /* maximum payload supported by */
/* server. 3 max packets for 1500 */
/* mtu ethernet. */
#define NBSIZE (UBUF_MAXSPACE+UBUF_SPACE)
typedef struct UBUF { unsigned char cmd; /* message code. */
unsigned char sum; /* message checksum. */
unsigned char bb_key[2]; /* message key. */
unsigned char bb_seq[2]; /* message sequence number. */
unsigned char bb_len[2]; /* number of bytes in buf 1. */
unsigned char bb_pos[4]; /* location in the file. */
char buf[UBUF_MAXSPACE];
} UBUF;
/* definition of cmds */
#define CC_VERSION 0x10 /* return server's version string. */
#define CC_INFO 0x11 /* return server's extended info block */
#define CC_ERR 0x40 /* error response from server. */
#define CC_GET_DIR 0x41 /* get a directory listing. */
#define CC_GET_FILE 0x42 /* get a file. */
#define CC_UP_LOAD 0x43 /* open a file for writing. */
#define CC_INSTALL 0x44 /* close a file opened for writing. */
#define CC_DEL_FILE 0x45 /* delete a file. */
#define CC_DEL_DIR 0x46 /* delete a directory. */
#define CC_GET_PRO 0x47 /* get directory protection. */
#define CC_SET_PRO 0x48 /* set directory protection. */
#define CC_MAKE_DIR 0x49 /* create a directory. */
#define CC_BYE 0x4A /* finish a session. */
#define CC_GRAB_FILE 0x4B /* atomic get+delete a file. */
#define CC_GRAB_DONE 0x4C /* atomic get+delete a file done. */
#define CC_STAT 0x4D /* get information about file. */
#define CC_RENAME 0x4E /* rename file or directory. */
#define CC_CH_PASSWD 0x4F /* change password */
#define CC_LIMIT 0x80 /* # > 0x7f for future cntrl blk ext. */
#define CC_TEST 0x81 /* reserved for testing */
/* definition of global bitfield for version information */
/* Global information is also going to be a bit vector */
#define VER_BYTES 1 /* currently only 8 bits or less of info */
#define VER_LOG 0x01 /* does the server do logging */
#define VER_READONLY 0x02 /* is the server in readonly mode */
#define VER_REVNAME 0x04 /* does the server refuse non reversables */
#define VER_PRIVMODE 0x08 /* Is the server being run 'private' mode */
#define VER_THRUPUT 0x10 /* does the server enforce thruput control*/
#define VER_XTRADATA 0x20 /* server accept packets with xtra data */
/* definition of directory bitfield for directory information */
/* directory information is just going to be a bitfield encoding
* of which protection bits are set/unset
*/
#define PRO_BYTES 1 /* currently only 8 bits or less of info */
#define DIR_OWNER 0x01 /* does caller own directory */
#define DIR_DEL 0x02 /* can files be deleted from this dir */
#define DIR_ADD 0x04 /* can files be added to this dir */
#define DIR_MKDIR 0x08 /* can new subdirectories be created */
#define DIR_GET 0x10 /* are files readable by non-owners? */
#define DIR_README 0x20 /* does this dir contain an readme file? */
#define DIR_LIST 0x40 /* public can list directory */
#define DIR_RENAME 0x80 /* can files be renamed in this dir */
/****************************************************************************
* RDIRENT is the structure of a directory entry contained in a .FSP_CONTENT
* file. Each entry contains a 4 bytes quantity 'time', a 4 bytes quantity
* 'size', and 1 byte of 'type'. Then followed by x number of bytes of
* 'name'. 'name' is null terminated. Then followed by enough number of
* padding to fill to an 4-byte boundary. At this point, if the next entry
* to follow will spread across 1k boundary, then two possible things will
* happen. 1) if the header fits between this entry and the 1k boundary,
* a complete header will be filled in with a 'type' set to RDTYPE_SKIP.
* And then enough bytes to padd to 1k boundary. 2) if the header does
* not fit, then simply pad to the 1k boundary. This will make sure that
* messages carrying directory information carry only complete directory
* entries and no fragmented entries. The last entry is type RDTYPE_END.
****************************************************************************/
#define RDHSIZE (2*4+1)
typedef struct RDIRENT { unsigned char bb_time[4];
unsigned char bb_size[4];
unsigned char type ;
char name[1] ; } RDIRENT;
#define RDTYPE_END 0x00
#define RDTYPE_FILE 0x01
#define RDTYPE_DIR 0x02
#define RDTYPE_SKIP 0x2A
#define NULLP ((char *) 0)
#define MIN_DELAY 1000L
#define DEFAULT_DELAY 1340L
#define DEFAULT_MAXDELAY 60000L
#define MAX_DELAY 300000L
#define DEFAULT_TIMEOUT 360
#endif /* FSP_COMMON_DEF_H_ */