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
|
#import <Cocoa/Cocoa.h>
#include <stdint.h>
enum TFTPOp {
tftpOpRRQ=1, tftpOpWRQ=2,
tftpOpDATA=3,
tftpOpACK=4,
tftpOpERROR=5,
tftpOpOACK=6
};
enum TFTPError {
tftpErrUndefined=0,
tftpErrNotFound=1,
tftpErrAccessViolation=2,
tftpErrDiskFull=3,
tftpErrIllegalOp=4,
tftpErrUnknownTID=5,
tftpErrFileExists=6,
tftpErrNoUser=7,
tftpErrOption=8
};
#pragma pack(push,1)
struct AnyTFTPPacket {
uint16_t op;
union {
struct {
char data[1];
} any;
struct {
char data[1];
} rq;
struct {
char data[1];
} rrq;
struct {
char data[1];
} wrq;
struct {
uint16_t block;
char data[1];
} data;
struct {
uint16_t block;
} ack;
struct {
uint16_t code;
char data[1];
} err;
struct {
char data[1];
} oack;
};
};
#pragma pack(pop)
@interface TFTPPacket : NSObject {
NSData *data;
struct AnyTFTPPacket *packet;
}
@property (readonly) enum TFTPOp op;
@property (readonly) NSString* rqFilename;
@property (readonly) NSString* rqType;
@property (readonly) NSDictionary* rqOptions;
@property (readonly) NSData *data;
@property (readonly) uint16_t block;
@property (readonly) NSData *rqData;
@property (readonly) uint16_t rqCode;
@property (readonly) NSString* rqMessage;
-(TFTPPacket*)initWithData:(NSData*)d;
+(TFTPPacket*)packetWithData:(NSData*)d;
+(TFTPPacket*)packetWithBytesNoCopy:(void*)b andLength:(size_t)l;
+(TFTPPacket*)packetErrorWithCode:(enum TFTPError)c andMessage:(NSString*)m;
+(TFTPPacket*)packetErrorWithErrno:(int)en andFallback:(NSString*)fb;
+(TFTPPacket*)packetOACKWithOptions:(NSDictionary*)o;
+(TFTPPacket*)packetDataWithBlock:(uint16_t)b andData:(NSData*)d;
+(TFTPPacket*)packetACKWithBlock:(uint16_t)b;
+(TFTPPacket*)packetRRQWithFile:(NSString*)f xferType:(NSString*)t andOptions:(NSDictionary*)o;
+(TFTPPacket*)packetWRQWithFile:(NSString*)f xferType:(NSString*)t andOptions:(NSDictionary*)o;
@end
|