Coda Distributed File System
sftp.h
Go to the documentation of this file.
1/* BLURB lgpl
2
3 Coda File System
4 Release 8
5
6 Copyright (c) 1987-2025 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU Library General Public Licence Version 2, as
11shown in the file LICENSE. The technical and financial contributors to
12Coda are listed in the file CREDITS.
13
14 Additional copyrights
15
16#*/
17
18/*
19 IBM COPYRIGHT NOTICE
20
21 Copyright (C) 1986
22 International Business Machines Corporation
23 All Rights Reserved
24
25This file contains some code identical to or derived from the 1986
26version of the Andrew File System ("AFS"), which is owned by the IBM
27Corporation. This code is provided "AS IS" and IBM does not warrant
28that it is free of infringement of any intellectual rights of any
29third party. IBM disclaims liability of any kind for any damages
30whatsoever resulting directly or indirectly from use of this software
31or of any derivative work. Carnegie Mellon University has obtained
32permission to modify, distribute and sublicense this code, which is
33based on Version 2 of AFS and does not contain the features and
34enhancements that are part of Version 3 of AFS. Version 3 of AFS is
35commercially available and supported by Transarc Corporation,
36Pittsburgh, PA.
37
38*/
39
40#ifndef _SFTP
41#define _SFTP
42
43#include <unistd.h>
44#include <stdlib.h>
45/*
46 Features:
47 1. Windowing with bit masks to avoid unnecessary retransmissions
48 2. Adaptive choice of transmission parameters (not yet implemented)
49 3. Piggybacking of small files with request/response
50*/
51
52#define SFTPVERSION 3
53/* Changed from 1 on 7 Jan 1988 by Satya (ThisRPCCall check added) */
54/* Changed from 2 on 27 Feb 1997 by bnoble */
55
56/* (header+body) of largest sftp packet (2 IP fragments on Ether) */
57#define SFTP_MAXPACKETSIZE 2900
58#define SFTP_MAXBODYSIZE (SFTP_MAXPACKETSIZE - sizeof(struct RPC2_PacketHeader))
59
60#define SFTP_DEFPACKETSIZE (1024 + sizeof(struct RPC2_PacketHeader))
61#define SFTP_DEFWINDOWSIZE 32
62#define SFTP_DEFSENDAHEAD 8
63
64/* as above (1 IP fragment on SLIP) */
65#define SFTP_MINPACKETSIZE 240
66#define SFTP_MINBODYSIZE (SFTP_MINPACKETSIZE - sizeof(struct RPC2_PacketHeader))
67#define SFTP_MINWINDOWSIZE 2
68#define SFTP_MINSENDAHEAD 1
69
70#define SFTP_DebugLevel RPC2_DebugLevel
71
72/* Packet Format:
73 =============
74
75Smart FTP is NOT built on top of RPC, but it does use RPC format packets for
76convenience
77
78The interpretation of header fields is similar to that in RPC:
79
80 ProtoVersion Set to SFTPVERSION; must match value at destination
81 RemoteHandle RPC Handle, at the packet destination, of the connection
82 on whose behalf this file transfer is being performed
83 LocalHandle RPC Handle, at the packet source, of the connection
84 on whose behalf this file transfer is being performed
85 Flags RPC2_RETRY and RPC2_ENCRYPTED have the usual meanings.
86 SFTP_ACKME is also indicated here on data packets.
87
88 <<< Fields below here encrypted on secure connections>>>
89 BodyLength Number of bytes in packet body
90 SeqNumber SFTP Sequence number with the following properties:
91 1. Data packets (Opcode SFTP_DATA) and control
92 packets (all other opcodes) form different sequences.
93 Each starts at 1 and monotonically increases by 1.
94 2. Every data packet is eventually acknowledged, but control
95 packets need not always be acknowledged.
96 3. The client end and server ends each have their own,
97 independent sequences.
98 4. There are thus 4 sequences in a connection:
99 Client to Server, Data
100 Client to Server, Control
101 Server to Client, Data
102 Server to Client, Control
103 5. The flow of packets is effectively viewed as a series of file
104 transfers from client to server and vice versa, with control
105 packets being merely annotations. The boundary between file
106 transfers is demarcated by a single data packet with the
107 MOREDATA flag off. The use of a separate, non-sparse
108 sequence numbers for data is what allows the use of bitmasks.
109
110 Opcode SFTP Op code
111 SEFlags Flags meaningful to SFTP
112 SEDataOffSet #defined to GotEmAll;
113 Makes sense only with opcode SFTP_ACK
114 Highest seq number up to and including which all
115 preceding data packets have been seen. Says nothing
116 about control packets.
117 SubsysId Set to SMARTFTP always
118 ReturnCode #defined to BitMask0 (only sensible with SFTP_ACK)
119 BitMask0..BitMask1 together form a bit string.
120 1 bits indicate received packets with seq numbers
121 greater than GotEmAll; Read left to right, bits
122 correspond to GotEmAll+1, GotEmAll+2 .... Leftmost
123 bit must be 0, by definition of GotEmAll
124 Lamport #defined to BitMask1 (only sensible with SFTP_ACK)
125 Uniquefier #defined to ThisCall (RPC call sequence number at
126 sending side of the RPC pertaining to this side
127 effect)
128 TimeStamp
129 BindTime #defined to TimeEcho
130 Body Contains actual BodyLength bytes of file data;
131 Used with SFTP_DATA and SFTP_START (for
132 conveying SFTP address)
133*/
134
135/* Renaming of RPC packet header fields */
136#define GotEmAll SEDataOffset
137#define BitMask0 ReturnCode
138#define BitMask1 Lamport
139#define TimeEcho BindTime
140#define ThisRPCCall Uniquefier
141
142/* Values of Flags field in header */
143#define SFTP_ACKME 0x80000000
144/* on data packets: acknowledge this packet.
145 Located in Flags rather than SEFlags so that retransmits
146 can turn off this bit without decryption and re-encryption */
147
148/* Values of SEFlags field in header */
149#define SFTP_MOREDATA 0x1 /* on data packets, indicates more data to come */
150#define SFTP_PIGGY \
151 0x2 /* on RPC packets: piggybacked info present on this packet */
152#define SFTP_ALLOVER \
153 0x4 /* on RPC reply packets: indicates server got all data packets */
154#define SFTP_TRIGGER \
155 0x8 /* on ack packets: distinguishes a server "triggered" ack from a real
156 one. Necessary only for compatibility, triggers now send null
157 timestamp echos */
158#define SFTP_FIRST \
159 0x10 /* on data packets, indicates first of group sent by source */
160#define SFTP_COUNTED \
161 0x20 /* on data packets: arrived or acked before last round */
163/* SFTP Opcodes */
164#define SFTP_START \
165 1 /* Control: start sending data (flow is from RPC client to server)*/
166#define SFTP_ACK 2 /* Control: acknowledgement you had requested */
167#define SFTP_DATA \
168 3 /* Data: next chunk; MOREDATA flag indicates whether EOF has been seen */
169#define SFTP_NAK 4 /* Control: got a bogus packet from you */
170#define SFTP_RESET 5 /* Control: reset transmission parameters */
171#define SFTP_BUSY 6 /* Control: momentarily busy; reset your timeout counter */
172
173/* Per-connection information: accessible via RPC2_GetSEPointer() and
174 * RPC2_SetSEPointer() */
175#define SFTPMAGIC 4902057
176#define MAXOPACKETS 64 /* Maximum no of outstanding packets; multiple of 32 */
177#define BITMASKWIDTH (MAXOPACKETS / 32) /* No of elements in integer array */
178
179struct SFTP_Parms { /* sent in SFTP_START packets, and piggy-backed on very
180 first RPC call on a connection */
188
189struct SFTP_MCParms /* Multicast parameters */
190{
193
197 SFCLIENT,
201
202struct SFTP_Entry /* per-connection data structure */
204 long Magic; /* SFTPMAGIC */
205 enum SFState WhoAmI;
206 RPC2_Handle LocalHandle; /* which RPC2 conn on this side do I
207 correspond to? */
208 RPC2_PeerInfo PInfo; /* all the RPC info about the other side */
209 struct timeval LastWord; /* Last time we received something on this SE */
210 struct HEntry *HostInfo; /* Connection-independent host info. set by
211 ExaminePacket on client side (if
212 !GotParms), and sftp_ExtractParmsFromPacket
213 on server side */
214 uint32_t ThisRPCCall; /* Client-side RPC sequence number of the call
215 in progress. Used to reject outdated SFTP
216 packets that may be floating around after
217 the next RPC has begun. Set on client side
218 in SFTP_MakeRPC1() and on server side on
219 SFTP_GetRequest() */
220 uint32_t GotParms; /* FALSE initially; TRUE after I have
221 discovered my peer's parms */
222 uint32_t SentParms; /* FALSE initially; TRUE after I have sent my
223 parms to peer */
224 SE_Descriptor *SDesc; /* set by SFTP_MakeRPC1 on client side, by
225 SFTP_InitSE and SFTP_CheckSE on server side */
226 long openfd; /* file descriptor: valid during actual transfer */
227 off_t fd_offset; /* For FILEBYFD transfers, we save the offset
228 within the file after each read/write */
229 struct SL_Entry *Sleeper; /* SL_Entry of LWP sleeping on this connection,
230 or NULL */
231 struct rpc2_LinkEntry *RecvQueue; /* queue of received packet buffers */
233 uint32_t PacketSize; /* Amount of data in each packet */
234 uint32_t WindowSize; /* Max Number of outstanding packets without
235 acknowledgement <= MAXOPACKETS */
236 uint32_t SendAhead; /* How many more packets to send after
237 demanding an ack. Equal to read-ahead */
238 uint32_t AckPoint; /* After how many send ahead packets should an
239 ack be demanded? */
240 uint32_t DupThreshold; /* How many duplicate data packets can I see
241 before sending Ack spontaneously? */
242 uint32_t RetryCount; /* How many times to retry Ack request */
243 uint32_t ReadAheadCount; /* How many packets have been read by read
244 strategy routine */
245 uint32_t CtrlSeqNumber; /* Seq number of last control packet sent out */
246 uint32_t Retransmitting; /* FALSE initially; TRUE prevents RTT update */
247 uint32_t TimeEcho; /* Timestamp to send on next packet (valid
248 when not retransmitting) */
249 struct timeval LastSS; /* time SendStrategy was last invoked by an
250 Ack on this connection */
251 SE_Descriptor *PiggySDesc; /* malloc()ed copy of SDesc; held on until
252 SendResponse, if piggybacking might take
253 place */
254
255 /* Transmission Parameters:
256
257 INVARIANTs (when XferState = XferInProgress):
258 ==========
259 1. SendLastContig <= SendWorriedLimit <= SendAckLimit <= SendMostRecent
260 2. (SendMostRecent - SendLastContig) <= WindowSize
261 3. (SendMostRecent - SendAckLimit) <= SendAhead
262 4. RecvLastContig <= RecvMostRecent
263 5. (RecvMostRecent - RecvLastContig) <= WindowSize
264
265 INVARIANTs (when XferState = {XferNotStarted,XferAborted,XferCompleted}):
266 =========
267 1. SendLastContig (at source) = SendMostRecent (at source)
268 2. RecvLastContig (at sink) = RecvMostRecent (at sink)
269 3. SendLastContig (at source) = RecvLastContig (at sink)
270 */
271 enum
273 XferNotStarted = 0,
275 XferCompleted = 2
276 } XferState;
278 /* Next block is multicast specific */
279 uint32_t RepliedSinceLastSS; /* TRUE iff {ACK,NAK,START} received since last
280 invocation of SendStrategy */
281 uint32_t McastersStarted; /* number of individual conns participating */
282 uint32_t McastersFinished; /* number of participating conns which have
283 finished */
285#define SendFirst FirstSeqNo
286 /* Value of SendLastContig (+1) when Multicast MRPC call is initiated */
287#define RecvFirst FirstSeqNo
288 /* Value of RecvMostRecent (+1) when Multicast MRPC call is initiated */
289
290 uint32_t HitEOF; /* source side: EOF has been seen by read strategy routine
291 sink side: last packet for this transfer has been received */
292 uint32_t SendLastContig; /* Seq no. of packet before (and including) which NO
293 state is maintained. This is the most recent
294 packet such that it and all earlier packets
295 are known by me to have been received by
296 the other side */
297 uint32_t SendMostRecent; /* SendMostRecent is the latest data packet we have
298 sent out */
299
300 /* Bit pattern of packets in the range SendLastContig+1..SendMostRecent
301 that have successfully been sent by me AND are known by me to have
302 been received by other side */
304
305 uint32_t SendAckLimit; /* Highest data packet for which an ack has been
306 requested. */
307 uint32_t SendWorriedLimit; /* Highest data packet about which we are
308 worried. */
309 uint32_t RecvLastContig; /* Most recent data packet up to which I no longer
310 maintain state */
311 uint32_t RecvMostRecent; /* Highest numbered data packet seen so far */
312 uint32_t DupsSinceAck; /* Duplicates seen since the last ack I sent */
313 uint32_t RecvSinceAck; /* Packets received since the last ack I sent */
314
315 uint32_t RequestTime; /* arrival time of packet, to correct RTT
316 estimates for processing time */
318 /* Packets in RecvLastContig+1..RecvMostRecent that I have received */
320
322 /* Packets being currently dealt with. There can be at most MAXOPACKETS
323 * outstanding, in the range LastContig+1..LastContig+WindowSize. The
324 * index of the i'th packet is given by (i % MAXOPACKETS).
325 *
326 * Some of these pointers, may be NULL for the following reasons:
327 * Receiving side: The packets have not been received, or have
328 * been received and written to disk already.
329 * Sending side: The packets have been sent, and an ACK for them has been
330 * received.
331 */
332 struct security_association *sa;
333};
334
335extern long SFTP_DebugLevel;
336
338 int confirm);
339void sftp_Timer(void);
341
342#define IsSource(sfe) \
343 ((sfe->WhoAmI == SFCLIENT && sfe->SDesc && \
344 sfe->SDesc->Value.SmartFTPD.TransmissionDirection == CLIENTTOSERVER) || \
345 (sfe->WhoAmI == SFSERVER && sfe->SDesc && \
346 sfe->SDesc->Value.SmartFTPD.TransmissionDirection == SERVERTOCLIENT))
347
348#define IsSink(sfe) \
349 ((sfe->WhoAmI == SFCLIENT && sfe->SDesc && \
350 sfe->SDesc->Value.SmartFTPD.TransmissionDirection == SERVERTOCLIENT) || \
351 (sfe->WhoAmI == SFSERVER && sfe->SDesc && \
352 sfe->SDesc->Value.SmartFTPD.TransmissionDirection == CLIENTTOSERVER))
353
354/* Operations on integer array bitmask; leftmost position is 1, rightmost is
355 32*BITMASKWIDTH Choice of 1 rather than 0 is deliberate:
356 {Send,Recv}LastContig+1 corresponds to leftmost bit */
357#define WORDOFFSET(pos) (((pos) - 1) >> 5) /* avoid / operator */
358#define BITOFFSET(pos) ((((pos) - 1) & 31) + 1) /* avoid % operator */
359#define PM(pos) (1L << (32 - (BITOFFSET(pos))))
360#define SETBIT(mask, pos) ((mask)[WORDOFFSET(pos)] |= PM(pos))
361#define TESTBIT(mask, pos) ((mask)[WORDOFFSET(pos)] & PM(pos))
362#define CLEARBIT(mask, pos) ((mask)[WORDOFFSET(pos)] &= (~PM(pos)))
364/* Packet buffer position */
365#define PBUFF(x) ((x) & (MAXOPACKETS - 1)) /* effectively modulo operator */
366
367/* The transmission parameters below are initial values; actual ones are
368 * per-connection */
369extern long SFTP_PacketSize;
370extern long SFTP_WindowSize;
371extern long SFTP_EnforceQuota; /* Nonzero to activate ByteQuota in
372 SE_Descriptors */
373extern long SFTP_SendAhead;
374extern long SFTP_AckPoint;
375extern long SFTP_DupThreshold;
376extern long SFTP_DoPiggy; /* FALSE to suppress piggybacking */
377
378/* SE routines invoked by base RPC2 code */
380long SFTP_Bind1(RPC2_Handle ConnHandle, RPC2_CountedBS *ClientIdent);
381long SFTP_Bind2(RPC2_Handle ConnHandle, RPC2_Unsigned BindTime);
382long SFTP_Unbind(RPC2_Handle ConnHandle);
383long SFTP_NewConn(RPC2_Handle ConnHandle, RPC2_CountedBS *ClientIdent);
385 RPC2_PacketBuffer **RequestPtr);
392long SFTP_InitMulticast();
393long SFTP_DeleteMgrp();
394long SFTP_GetRequest(RPC2_Handle ConnHandle, RPC2_PacketBuffer *Request);
396long SFTP_CheckSE(RPC2_Handle ConnHandle, SE_Descriptor *SDesc, long Flags);
401long SFTP_GetTime(RPC2_Handle ConnHandle, struct timeval *Time);
402long SFTP_GetHostInfo(RPC2_Handle ConnHandle, struct HEntry **hPtr);
403
404/* Internal SFTP routines */
405int sftp_InitIO(struct SFTP_Entry *sEntry);
406int sftp_DataArrived(RPC2_PacketBuffer *pBuff, struct SFTP_Entry *sEntry);
407int sftp_WriteStrategy(struct SFTP_Entry *sEntry);
408int sftp_AckArrived(RPC2_PacketBuffer *pBuff, struct SFTP_Entry *sEntry);
409int sftp_SendStrategy(struct SFTP_Entry *sEntry);
410int sftp_ReadStrategy(struct SFTP_Entry *sEntry);
411int sftp_SendStart(struct SFTP_Entry *sEntry);
412int sftp_StartArrived(RPC2_PacketBuffer *pBuff, struct SFTP_Entry *sEntry);
413int sftp_SendTrigger(struct SFTP_Entry *sEntry);
414void sftp_InitPacket(RPC2_PacketBuffer *pb, struct SFTP_Entry *sfe,
415 long bodylen);
416void sftp_InitTrace(void);
417int sftp_vfwritefile(struct SFTP_Entry *se, char *buf, int nbytes);
418void sftp_vfclose(struct SFTP_Entry *se);
419int sftp_piggybackfileread(struct SFTP_Entry *se, char *buf);
420off_t sftp_piggybackfilesize(struct SFTP_Entry *se);
421void sftp_TraceBogus(long filenum, long linenum);
422void sftp_TraceStatus(struct SFTP_Entry *sEntry, int filenum, int linenum);
423void sftp_DumpTrace(char *fName);
424void sftp_Progress(SE_Descriptor *sdesc, off_t BytesTransferred);
425
426void sftp_UpdateRTT(RPC2_PacketBuffer *pb, struct SFTP_Entry *sEntry,
427 unsigned long inbytes, unsigned long outbytes);
428
429struct SFTP_Entry *sftp_AllocSEntry(void);
430void sftp_FreeSEntry(struct SFTP_Entry *se);
431void sftp_AllocPiggySDesc(struct SFTP_Entry *se, off_t len,
432 enum WhichWay direction);
433void sftp_FreePiggySDesc(struct SFTP_Entry *se);
434int sftp_AppendParmsToPacket(struct SFTP_Entry *sEntry,
435 RPC2_PacketBuffer **whichP);
436int sftp_ExtractParmsFromPacket(struct SFTP_Entry *sEntry,
437 RPC2_PacketBuffer *whichP);
438off_t sftp_AppendFileToPacket(struct SFTP_Entry *sEntry,
439 RPC2_PacketBuffer **whichP);
440off_t sftp_ExtractFileFromPacket(struct SFTP_Entry *sEntry,
441 RPC2_PacketBuffer *whichP);
442int sftp_AddPiggy(RPC2_PacketBuffer **whichP, char *dPtr, off_t dSize,
443 unsigned int maxSize);
444void sftp_SetError(struct SFTP_Entry *s, enum SFState e);
451
452extern long sftp_PacketsInUse;
453extern long SFTP_MaxPackets;
454
455/* SFTP's version of RPC2_AllocBuffer and RPC2_FreeBuffer */
456
457#define SFTP_AllocBuffer(x, y) (sftp_PacketsInUse++, RPC2_AllocBuffer(x, y))
458
459#define SFTP_FreeBuffer(x) (sftp_PacketsInUse--, RPC2_FreeBuffer(x))
461/* For encryption and decryption */
462#define sftp_Encrypt(pb, sfe) \
463 rpc2_Encrypt((char *)&pb->Header.BodyLength, \
464 (char *)&pb->Header.BodyLength, \
465 pb->Prefix.LengthOfPacket - 4 * sizeof(RPC2_Integer), \
466 sfe->PInfo.SessionKey, sfe->PInfo.EncryptionType)
467
468#define sftp_Decrypt(pb, sfe) \
469 rpc2_Decrypt((char *)&pb->Header.BodyLength, \
470 (char *)&pb->Header.BodyLength, \
471 pb->Prefix.LengthOfPacket - 4 * sizeof(RPC2_Integer), \
472 sfe->PInfo.SessionKey, sfe->PInfo.EncryptionType)
473#endif /* _SFTP */
475/* Predicate to test if file is in vm */
476#define MEMFILE(s) (s->Value.SmartFTPD.Tag == FILEINVM)
477#define BYFDFILE(s) (s->Value.SmartFTPD.Tag == FILEBYFD)
478
479/* test if we can send an TimeEcho response */
480#ifdef VERY_FAST_SERVERS
481#define VALID_TIMEECHO(se) \
482 (!(se)->Retransmitting && (se)->TimeEcho != 0 && (se)->RequestTime != 0)
483#else
484#define VALID_TIMEECHO(se) (!(se)->Retransmitting && (se)->TimeEcho != 0)
485#endif
int int32_t
Definition: coda.h:104
unsigned int uint32_t
Definition: coda.h:105
uint32_t RPC2_Unsigned
Definition: rpc2.h:300
RPC2_Integer RPC2_Handle
Definition: rpc2.h:345
WhichWay
Definition: se.h:76
FILE * outFile
Definition: sftp1.c:1202
SE_Descriptor * SDesc
Definition: sftp6.c:103
RPC2_PacketBuffer * Reply
Definition: sftp6.c:104
int sftp_DataArrived(RPC2_PacketBuffer *pBuff, struct SFTP_Entry *sEntry)
Definition: sftp3.c:264
long sftp_datar
Definition: sftp.h:445
void sftp_InitTrace(void)
Definition: sftp4.c:236
#define SFTP_DebugLevel
Definition: sftp.h:70
void SFTP_Activate(SFTP_Initializer *initPtr)
Definition: sftp1.c:134
long sftp_triggers
Definition: sftp.h:446
long SFTP_GetHostInfo(RPC2_Handle ConnHandle, struct HEntry **hPtr)
long sftp_bogus
Definition: sftp.h:447
int sftp_ReadStrategy(struct SFTP_Entry *sEntry)
Definition: sftp3.c:1042
long SFTP_MultiRPC2()
SFState
Definition: sftp.h:193
@ SFSERVER
Definition: sftp.h:194
@ ERROR
Definition: sftp.h:196
@ DISKERROR
Definition: sftp.h:197
@ SFCLIENT
Definition: sftp.h:195
void sftp_FreeSEntry(struct SFTP_Entry *se)
Definition: sftp1.c:1126
long SFTP_Bind1(RPC2_Handle ConnHandle, RPC2_CountedBS *ClientIdent)
long SFTP_DeleteMgrp()
long sftp_windowfulls
Definition: sftp.h:446
long SFTP_Unbind(RPC2_Handle ConnHandle)
long SFTP_AckPoint
Definition: sftp3.c:73
long SFTP_Bind2(RPC2_Handle ConnHandle, RPC2_Unsigned BindTime)
long sftp_didpiggy
Definition: sftp.h:447
struct SFTP_Entry * sftp_AllocSEntry(void)
Definition: sftp1.c:1103
int sftp_AckArrived(RPC2_PacketBuffer *pBuff, struct SFTP_Entry *sEntry)
Definition: sftp3.c:558
long sftp_starts
Definition: sftp.h:446
#define BITMASKWIDTH
Definition: sftp.h:175
void sftp_FreePiggySDesc(struct SFTP_Entry *se)
Definition: sftp1.c:1181
int sftp_SendStrategy(struct SFTP_Entry *sEntry)
Definition: sftp3.c:678
int sftp_AppendParmsToPacket(struct SFTP_Entry *sEntry, RPC2_PacketBuffer **whichP)
Definition: sftp1.c:1004
long sftp_ackr
Definition: sftp.h:445
int sftp_piggybackfileread(struct SFTP_Entry *se, char *buf)
Definition: sftp3.c:1377
long sftp_ackslost
Definition: sftp.h:447
long SFTP_MakeRPC1(RPC2_Handle ConnHandle, SE_Descriptor *SDesc, RPC2_PacketBuffer **RequestPtr)
long sftp_rttupdates
Definition: sftp.h:448
long sftp_starved
Definition: sftp.h:447
int sftp_AddPiggy(RPC2_PacketBuffer **whichP, char *dPtr, off_t dSize, unsigned int maxSize)
Definition: sftp1.c:906
long SFTP_SendResponse(RPC2_Handle ConnHandle, RPC2_PacketBuffer **Reply)
void sftp_UpdateRTT(RPC2_PacketBuffer *pb, struct SFTP_Entry *sEntry, unsigned long inbytes, unsigned long outbytes)
Definition: sftp3.c:207
long SFTP_NewConn(RPC2_Handle ConnHandle, RPC2_CountedBS *ClientIdent)
long SFTP_DoPiggy
Definition: sftp3.c:74
long SFTP_GetTime(RPC2_Handle ConnHandle, struct timeval *Time)
void SFTP_SetDefaults(SFTP_Initializer *initPtr)
Definition: sftp1.c:116
off_t sftp_ExtractFileFromPacket(struct SFTP_Entry *sEntry, RPC2_PacketBuffer *whichP)
Definition: sftp1.c:984
long SFTP_AddToMgrp()
long SFTP_GetRequest(RPC2_Handle ConnHandle, RPC2_PacketBuffer *Request)
Definition: sftp1.c:376
int sftp_SendTrigger(struct SFTP_Entry *sEntry)
Definition: sftp3.c:1266
long SFTP_EnforceQuota
Definition: sftp3.c:71
void sftp_TraceBogus(long filenum, long linenum)
Definition: sftp4.c:126
#define MAXOPACKETS
Definition: sftp.h:174
long SFTP_MaxPackets
Definition: sftp3.c:76
int sftp_MorePackets(void)
long SFTP_DupThreshold
Definition: sftp3.c:75
void sftp_Timer(void)
long SFTP_PrintSED(SE_Descriptor *SDesc, FILE *outFile)
long sftp_duplicates
Definition: sftp.h:447
long sftp_PacketsInUse
Definition: sftp3.c:79
int sftp_XmitPacket(struct SFTP_Entry *sentry, RPC2_PacketBuffer *pb, int confirm)
Definition: sftp4.c:77
long sftp_acks
Definition: sftp.h:445
int sftp_ExtractParmsFromPacket(struct SFTP_Entry *sEntry, RPC2_PacketBuffer *whichP)
Definition: sftp1.c:1041
long sftp_timeouts
Definition: sftp.h:446
long SFTP_InitMulticast()
long SFTP_CheckSE(RPC2_Handle ConnHandle, SE_Descriptor *SDesc, long Flags)
Definition: sftp1.c:432
int sftp_InitIO(struct SFTP_Entry *sEntry)
Definition: sftp3.c:116
long SFTP_Init()
Definition: sftp1.c:104
off_t sftp_piggybackfilesize(struct SFTP_Entry *se)
Definition: sftp3.c:1354
void sftp_Progress(SE_Descriptor *sdesc, off_t BytesTransferred)
Definition: sftp3.c:1544
int sftp_vfwritefile(struct SFTP_Entry *se, char *buf, int nbytes)
Definition: sftp3.c:1404
void sftp_TraceStatus(struct SFTP_Entry *sEntry, int filenum, int linenum)
Definition: sftp4.c:98
long SFTP_InitSE(RPC2_Handle ConnHandle, SE_Descriptor *SDesc)
Definition: sftp1.c:407
void sftp_ExaminePacket(RPC2_PacketBuffer *pb)
Definition: sftp2.c:73
long sftp_retries
Definition: sftp.h:446
int sftp_SendStart(struct SFTP_Entry *sEntry)
Definition: sftp3.c:1160
void sftp_InitPacket(RPC2_PacketBuffer *pb, struct SFTP_Entry *sfe, long bodylen)
Definition: sftp3.c:1288
long SFTP_PacketSize
Definition: sftp3.c:69
long SFTP_SendAhead
Definition: sftp3.c:72
void sftp_AllocPiggySDesc(struct SFTP_Entry *se, off_t len, enum WhichWay direction)
Definition: sftp1.c:1151
long SFTP_MultiRPC1()
long SFTP_MakeRPC2(RPC2_Handle ConnHandle, SE_Descriptor *SDesc, RPC2_PacketBuffer *Reply)
long sftp_busy
Definition: sftp.h:445
off_t sftp_AppendFileToPacket(struct SFTP_Entry *sEntry, RPC2_PacketBuffer **whichP)
Definition: sftp1.c:938
void sftp_vfclose(struct SFTP_Entry *se)
Definition: sftp3.c:1433
long SFTP_CreateMgrp()
long sftp_datas
Definition: sftp3.c:81
int sftp_StartArrived(RPC2_PacketBuffer *pBuff, struct SFTP_Entry *sEntry)
Definition: sftp3.c:1215
int sftp_WriteStrategy(struct SFTP_Entry *sEntry)
Definition: sftp3.c:431
void sftp_DumpTrace(char *fName)
Definition: sftp4.c:216
long SFTP_WindowSize
Definition: sftp3.c:70
void sftp_SetError(struct SFTP_Entry *s, enum SFState e)
Definition: sftp1.c:1193
Definition: rpc2.private.h:322
Definition: rpc2.h:316
Definition: rpc2.h:406
Definition: rpc2.h:385
Definition: rpc2.h:358
Definition: se.h:148
Definition: se.h:163
Definition: sftp.h:201
uint32_t SendAhead
Definition: sftp.h:234
long Magic
Definition: sftp.h:202
struct security_association * sa
Definition: sftp.h:330
uint32_t RecvMostRecent
Definition: sftp.h:309
uint32_t McastersStarted
Definition: sftp.h:279
uint32_t SendWorriedLimit
Definition: sftp.h:305
struct HEntry * HostInfo
Definition: sftp.h:208
@ XferCompleted
Definition: sftp.h:273
@ XferNotStarted
Definition: sftp.h:271
@ XferInProgress
Definition: sftp.h:272
enum SFState WhoAmI
Definition: sftp.h:203
uint32_t RecvLastContig
Definition: sftp.h:307
unsigned int RecvTheseBits[BITMASKWIDTH]
Definition: sftp.h:317
uint32_t HitEOF
Definition: sftp.h:288
uint32_t GotParms
Definition: sftp.h:218
uint32_t RecvSinceAck
Definition: sftp.h:311
enum SFTP_Entry::@45 XferState
RPC2_PeerInfo PInfo
Definition: sftp.h:206
RPC2_PacketBuffer * ThesePackets[MAXOPACKETS]
Definition: sftp.h:319
uint32_t SendLastContig
Definition: sftp.h:290
struct timeval LastSS
Definition: sftp.h:247
uint32_t SendMostRecent
Definition: sftp.h:295
uint32_t RequestTime
Definition: sftp.h:313
uint32_t SendAckLimit
Definition: sftp.h:303
SE_Descriptor * SDesc
Definition: sftp.h:222
uint32_t ThisRPCCall
Definition: sftp.h:212
uint32_t ReadAheadCount
Definition: sftp.h:241
unsigned int SendTheseBits[BITMASKWIDTH]
Definition: sftp.h:301
off_t fd_offset
Definition: sftp.h:225
uint32_t PacketSize
Definition: sftp.h:231
struct rpc2_LinkEntry * RecvQueue
Definition: sftp.h:229
struct SL_Entry * Sleeper
Definition: sftp.h:227
uint32_t RepliedSinceLastSS
Definition: sftp.h:277
uint32_t RetryCount
Definition: sftp.h:240
uint32_t AckPoint
Definition: sftp.h:236
uint32_t DupThreshold
Definition: sftp.h:238
uint32_t McastersFinished
Definition: sftp.h:280
uint32_t Retransmitting
Definition: sftp.h:244
uint32_t CtrlSeqNumber
Definition: sftp.h:243
SE_Descriptor * PiggySDesc
Definition: sftp.h:249
long openfd
Definition: sftp.h:224
long RecvQueueLen
Definition: sftp.h:230
uint32_t FirstSeqNo
Definition: sftp.h:282
uint32_t DupsSinceAck
Definition: sftp.h:310
struct timeval LastWord
Definition: sftp.h:207
uint32_t TimeEcho
Definition: sftp.h:245
RPC2_Handle LocalHandle
Definition: sftp.h:204
uint32_t WindowSize
Definition: sftp.h:232
uint32_t SentParms
Definition: sftp.h:220
Definition: sftp.h:188
uint32_t PeerSendLastContig
Definition: sftp.h:189
Definition: sftp.h:177
int32_t WindowSize
Definition: sftp.h:180
int32_t AckPoint
Definition: sftp.h:182
int32_t SendAhead
Definition: sftp.h:181
int32_t DupThreshold
Definition: sftp.h:184
RPC2_PortIdent Port
Definition: sftp.h:179
int32_t PacketSize
Definition: sftp.h:183
Definition: rpc2.private.h:288
Definition: rpc2.h:397
Definition: secure.h:100