-rw-r--r-- | src/eyetil.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/src/eyetil.h b/src/eyetil.h index 8af18a4..22e07f1 100644 --- a/src/eyetil.h +++ b/src/eyetil.h | |||
@@ -1,138 +1,136 @@ | |||
1 | #ifndef __EYETIL_H | 1 | #ifndef __EYETIL_H |
2 | #define __EYETIL_H | 2 | #define __EYETIL_H |
3 | 3 | ||
4 | #include <vector> | 4 | #include <vector> |
5 | #include <string> | 5 | #include <string> |
6 | #include <fstream> | 6 | #include <fstream> |
7 | #include <archive.h> | 7 | #include <archive.h> |
8 | #include <archive_entry.h> | 8 | #include <archive_entry.h> |
9 | #include "openssl/md5.h" | 9 | #include "openssl/md5.h" |
10 | #include "soapH.h" | 10 | #include "soapH.h" |
11 | 11 | ||
12 | struct throwable_exit { | 12 | struct throwable_exit { |
13 | int rc; | 13 | int rc; |
14 | throwable_exit(int rc_) : rc(rc_) { } | 14 | throwable_exit(int rc_) : rc(rc_) { } |
15 | }; | 15 | }; |
16 | 16 | ||
17 | class binary_t : public std::vector<unsigned char> { | 17 | class binary_t : public std::vector<unsigned char> { |
18 | public: | 18 | public: |
19 | binary_t() { } | 19 | binary_t() { } |
20 | binary_t(size_type n) : std::vector<unsigned char>(n) { } | 20 | binary_t(size_type n) : std::vector<unsigned char>(n) { } |
21 | binary_t(const std::string& h) { from_hex(h); } | 21 | binary_t(const std::string& h) { from_hex(h); } |
22 | binary_t(const void *d,size_t s) { from_data(d,s); } | 22 | binary_t(const void *d,size_t s) { from_data(d,s); } |
23 | 23 | ||
24 | binary_t& from_hex(const std::string& h); | 24 | binary_t& from_hex(const std::string& h); |
25 | binary_t& from_data(const void *d,size_t s); | 25 | binary_t& from_data(const void *d,size_t s); |
26 | binary_t& make_nonce(); | 26 | binary_t& make_nonce(); |
27 | 27 | ||
28 | std::string hex() const; | 28 | std::string hex() const; |
29 | binary_t md5() const; | 29 | binary_t md5() const; |
30 | }; | 30 | }; |
31 | 31 | ||
32 | struct md5_digester { | 32 | struct md5_digester { |
33 | MD5_CTX ctx; | 33 | MD5_CTX ctx; |
34 | md5_digester() { init(); } | 34 | md5_digester() { init(); } |
35 | 35 | ||
36 | void init(); | 36 | void init(); |
37 | void update(const void *d,size_t l); | 37 | void update(const void *d,size_t l); |
38 | binary_t final(); | 38 | binary_t final(); |
39 | 39 | ||
40 | template<typename T> | 40 | template<typename T> |
41 | void update(const T& x) { update(&x,sizeof(x)); } | 41 | void update(const T& x) { update(&x,sizeof(x)); } |
42 | 42 | ||
43 | template<typename T> | 43 | template<typename T> |
44 | struct update_iterator : public std::iterator<std::output_iterator_tag,T,void,T*,T&> { | 44 | struct update_iterator : public std::iterator<std::output_iterator_tag,T,void,T*,T&> { |
45 | md5_digester *d; | 45 | md5_digester *d; |
46 | update_iterator(md5_digester *d_) : d(d_) { } | 46 | update_iterator(md5_digester *d_) : d(d_) { } |
47 | update_iterator(const update_iterator& x) : d(x.d) { } | 47 | update_iterator(const update_iterator& x) : d(x.d) { } |
48 | 48 | ||
49 | update_iterator& operator*() { return *this; } | 49 | update_iterator& operator*() { return *this; } |
50 | update_iterator& operator++() { return *this; } | 50 | update_iterator& operator++() { return *this; } |
51 | update_iterator& operator++(int) { return *this; } | 51 | update_iterator& operator++(int) { return *this; } |
52 | 52 | ||
53 | update_iterator& operator=(const T& x) { | 53 | update_iterator& operator=(const T& x) { |
54 | d->update(x); return *this; | 54 | d->update(x); return *this; |
55 | } | 55 | } |
56 | }; | 56 | }; |
57 | 57 | ||
58 | template<typename T> | 58 | template<typename T> |
59 | update_iterator<T> updater() { | 59 | update_iterator<T> updater() { |
60 | return update_iterator<T>(this); | 60 | return update_iterator<T>(this); |
61 | } | 61 | } |
62 | 62 | ||
63 | }; | 63 | }; |
64 | template<> inline void md5_digester::update<binary_t>(const binary_t& x) { | 64 | template<> inline void md5_digester::update<binary_t>(const binary_t& x) { |
65 | update((const unsigned char*)&(x.front()),x.size()); | 65 | update((const unsigned char*)&(x.front()),x.size()); |
66 | } | 66 | } |
67 | 67 | ||
68 | #pragma pack(1) | 68 | #pragma pack(1) |
69 | struct block512_t { | 69 | struct block512_t { |
70 | enum { words = 512 / sizeof(uint16_t) }; | 70 | enum { words = 512 / sizeof(uint16_t) }; |
71 | uint16_t data[words]; | 71 | uint16_t data[words]; |
72 | 72 | ||
73 | inline uint8_t *dptr(size_t o) { return ((uint8_t*)this)+o; } | 73 | inline uint8_t *dptr(size_t o) { return ((uint8_t*)this)+o; } |
74 | 74 | ||
75 | static uint16_t tcpcksum(block512_t& data); | 75 | static uint16_t tcpcksum(block512_t& data); |
76 | }; | 76 | }; |
77 | #pragma pack() | 77 | #pragma pack() |
78 | 78 | ||
79 | struct integrity_digester { | 79 | struct integrity_digester { |
80 | md5_digester md5; | 80 | md5_digester md5; |
81 | size_t data_size; | 81 | size_t data_size; |
82 | block512_t data; | 82 | block512_t data; |
83 | 83 | ||
84 | integrity_digester() : data_size(0) { } | 84 | integrity_digester() : data_size(0) { } |
85 | void update(const void *d,size_t s); | 85 | void update(const void *d,size_t s); |
86 | binary_t final(const std::string& ukey); | 86 | binary_t final(const std::string& ukey); |
87 | }; | 87 | }; |
88 | 88 | ||
89 | 89 | ||
90 | class tmpdir_t { | 90 | class tmpdir_t { |
91 | public: | 91 | public: |
92 | std::string dir; | 92 | std::string dir; |
93 | 93 | ||
94 | tmpdir_t(const std::string& dt); | 94 | tmpdir_t(const std::string& dt); |
95 | ~tmpdir_t(); | 95 | ~tmpdir_t(); |
96 | 96 | ||
97 | std::string get_file(const std::string& f); | 97 | std::string get_file(const std::string& f); |
98 | }; | 98 | }; |
99 | 99 | ||
100 | class tarchive_t { | 100 | class tarchive_t { |
101 | public: | 101 | public: |
102 | struct archive *a; | 102 | struct archive *a; |
103 | struct archive_entry *e; | 103 | struct archive_entry *e; |
104 | 104 | ||
105 | tarchive_t(const char *); | 105 | tarchive_t(const char *); |
106 | ~tarchive_t(); | 106 | ~tarchive_t(); |
107 | 107 | ||
108 | bool read_next_header(); | 108 | bool read_next_header(); |
109 | 109 | ||
110 | std::string entry_pathname(); | 110 | std::string entry_pathname(); |
111 | 111 | ||
112 | bool read_data_into_fd(int fd); | 112 | bool read_data_into_fd(int fd); |
113 | }; | 113 | }; |
114 | 114 | ||
115 | struct mimewrite_base { | 115 | struct mimewrite_base { |
116 | virtual ~mimewrite_base() { } | 116 | virtual ~mimewrite_base() { } |
117 | 117 | ||
118 | virtual int write(const char *buf,size_t len) = 0; | 118 | virtual int write(const char *buf,size_t len) = 0; |
119 | virtual void close() = 0; | 119 | virtual void close() = 0; |
120 | }; | 120 | }; |
121 | struct mimewrite_string : public mimewrite_base { | 121 | struct mimewrite_string : public mimewrite_base { |
122 | std::string str; | 122 | std::string str; |
123 | int write(const char *buf,size_t len) { str.append(buf,len); return SOAP_OK; }; | 123 | int write(const char *buf,size_t len) { str.append(buf,len); return SOAP_OK; }; |
124 | void close() { } | 124 | void close() { } |
125 | }; | 125 | }; |
126 | struct mimewrite_tarfile : public mimewrite_base { | 126 | struct mimewrite_tarfile : public mimewrite_base { |
127 | std::string fn; | 127 | std::string fn; |
128 | std::fstream f; | 128 | std::fstream f; |
129 | integrity_digester idigest; | 129 | integrity_digester idigest; |
130 | mimewrite_tarfile(tmpdir_t& d); | 130 | mimewrite_tarfile(tmpdir_t& d); |
131 | ~mimewrite_tarfile(); | 131 | ~mimewrite_tarfile(); |
132 | int write(const char *buf,size_t len); | 132 | int write(const char *buf,size_t len); |
133 | void close() { } | 133 | void close() { } |
134 | }; | 134 | }; |
135 | binary_t integrity_digest(const void *ptr,size_t size, | ||
136 | const std::string& ukey); | ||
137 | 135 | ||
138 | #endif /* __EYETIL_H */ | 136 | #endif /* __EYETIL_H */ |