1
2
3 """Trivial File Transfer Protocol."""
4 from __future__ import print_function
5 from __future__ import absolute_import
6
7 import struct
8
9 from . import dpkt
10
11
12 OP_RRQ = 1
13 OP_WRQ = 2
14 OP_DATA = 3
15 OP_ACK = 4
16 OP_ERR = 5
17
18
19 EUNDEF = 0
20 ENOTFOUND = 1
21 EACCESS = 2
22 ENOSPACE = 3
23 EBADOP = 4
24 EBADID = 5
25 EEXISTS = 6
26 ENOUSER = 7
27
28
29 -class TFTP(dpkt.Packet):
30 """Trivial File Transfer Protocol.
31
32 TODO: Longer class information....
33
34 Attributes:
35 __hdr__: Header fields of TFTP.
36 TODO.
37 """
38
39 __hdr__ = (('opcode', 'H', 1), )
40
55
57 return len(bytes(self))
58
69
70
72 s = b'\x00\x01\x72\x66\x63\x31\x33\x35\x30\x2e\x74\x78\x74\x00\x6f\x63\x74\x65\x74\x00'
73 t = TFTP(s)
74 assert t.filename == b'rfc1350.txt'
75 assert t.mode == b'octet'
76 assert bytes(t) == s
77
78
80 s = b'\x00\x03\x00\x01\x0a\x0a\x4e\x65\x74\x77\x6f\x72\x6b\x20\x57\x6f\x72\x6b\x69\x6e\x67\x20\x47\x72\x6f\x75\x70'
81 t = TFTP(s)
82 assert t.block == 1
83 assert t.data == b'\x0a\x0aNetwork Working Group'
84 assert bytes(t) == s
85
86
89
90
91 if __name__ == '__main__':
92 test_op_rrq()
93 test_op_data()
94 test_op_err()
95
96 print('Tests Successful...')
97