-rw-r--r-- | src/eyetil.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/eyetil.h b/src/eyetil.h index 8784cb4..64948d0 100644 --- a/src/eyetil.h +++ b/src/eyetil.h | |||
@@ -1,40 +1,42 @@ | |||
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 <archive.h> | 7 | #include <archive.h> |
7 | #include <archive_entry.h> | 8 | #include <archive_entry.h> |
8 | #include "openssl/md5.h" | 9 | #include "openssl/md5.h" |
10 | #include "soapH.h" | ||
9 | 11 | ||
10 | struct throwable_exit { | 12 | struct throwable_exit { |
11 | int rc; | 13 | int rc; |
12 | throwable_exit(int rc_) : rc(rc_) { } | 14 | throwable_exit(int rc_) : rc(rc_) { } |
13 | }; | 15 | }; |
14 | 16 | ||
15 | class binary_t : public std::vector<unsigned char> { | 17 | class binary_t : public std::vector<unsigned char> { |
16 | public: | 18 | public: |
17 | binary_t() { } | 19 | binary_t() { } |
18 | binary_t(size_type n) : std::vector<unsigned char>(n) { } | 20 | binary_t(size_type n) : std::vector<unsigned char>(n) { } |
19 | binary_t(const std::string& h) { from_hex(h); } | 21 | binary_t(const std::string& h) { from_hex(h); } |
20 | 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); } |
21 | 23 | ||
22 | binary_t& from_hex(const std::string& h); | 24 | binary_t& from_hex(const std::string& h); |
23 | binary_t& from_data(const void *d,size_t s); | 25 | binary_t& from_data(const void *d,size_t s); |
24 | binary_t& make_nonce(); | 26 | binary_t& make_nonce(); |
25 | 27 | ||
26 | std::string hex() const; | 28 | std::string hex() const; |
27 | binary_t md5() const; | 29 | binary_t md5() const; |
28 | }; | 30 | }; |
29 | 31 | ||
30 | struct md5_digester { | 32 | struct md5_digester { |
31 | MD5_CTX ctx; | 33 | MD5_CTX ctx; |
32 | md5_digester() { init(); } | 34 | md5_digester() { init(); } |
33 | 35 | ||
34 | void init(); | 36 | void init(); |
35 | void update(const void *d,size_t l); | 37 | void update(const void *d,size_t l); |
36 | binary_t final(); | 38 | binary_t final(); |
37 | 39 | ||
38 | template<typename T> | 40 | template<typename T> |
39 | void update(const T& x) { update(&x,sizeof(x)); } | 41 | void update(const T& x) { update(&x,sizeof(x)); } |
40 | 42 | ||
@@ -81,36 +83,56 @@ struct integrity_digester { | |||
81 | 83 | ||
82 | integrity_digester() : data_size(0) { } | 84 | integrity_digester() : data_size(0) { } |
83 | void update(const void *d,size_t s); | 85 | void update(const void *d,size_t s); |
84 | binary_t final(const std::string& ukey); | 86 | binary_t final(const std::string& ukey); |
85 | }; | 87 | }; |
86 | 88 | ||
87 | 89 | ||
88 | class tmpdir_t { | 90 | class tmpdir_t { |
89 | public: | 91 | public: |
90 | std::string dir; | 92 | std::string dir; |
91 | 93 | ||
92 | tmpdir_t(const std::string& dt); | 94 | tmpdir_t(const std::string& dt); |
93 | ~tmpdir_t(); | 95 | ~tmpdir_t(); |
94 | 96 | ||
95 | std::string get_file(const std::string& f); | 97 | std::string get_file(const std::string& f); |
96 | }; | 98 | }; |
97 | 99 | ||
98 | class tarchive_t { | 100 | class tarchive_t { |
99 | public: | 101 | public: |
100 | struct archive *a; | 102 | struct archive *a; |
101 | struct archive_entry *e; | 103 | struct archive_entry *e; |
102 | 104 | ||
103 | tarchive_t(void *p,size_t s); | 105 | tarchive_t(void *p,size_t s); |
104 | ~tarchive_t(); | 106 | ~tarchive_t(); |
105 | 107 | ||
106 | bool read_next_header(); | 108 | bool read_next_header(); |
107 | 109 | ||
108 | std::string entry_pathname(); | 110 | std::string entry_pathname(); |
109 | 111 | ||
110 | bool read_data_into_fd(int fd); | 112 | bool read_data_into_fd(int fd); |
111 | }; | 113 | }; |
112 | 114 | ||
115 | struct mimewrite_base { | ||
116 | virtual ~mimewrite_base() { } | ||
117 | |||
118 | virtual int write(const char *buf,size_t len) = 0; | ||
119 | virtual void close() = 0; | ||
120 | }; | ||
121 | struct mimewrite_string : public mimewrite_base { | ||
122 | std::string str; | ||
123 | int write(const char *buf,size_t len) { str.append(buf,len); return SOAP_OK; }; | ||
124 | void close() { } | ||
125 | }; | ||
126 | struct mimewrite_tarfile : public mimewrite_base { | ||
127 | std::string fn; | ||
128 | std::fstream f; | ||
129 | integrity_digester idigest; | ||
130 | mimewrite_tarfile(tmpdir_t& d); | ||
131 | ~mimewrite_tarfile(); | ||
132 | int write(const char *buf,size_t len); | ||
133 | void close() { } | ||
134 | }; | ||
113 | binary_t integrity_digest(const void *ptr,size_t size, | 135 | binary_t integrity_digest(const void *ptr,size_t size, |
114 | const std::string& ukey); | 136 | const std::string& ukey); |
115 | 137 | ||
116 | #endif /* __EYETIL_H */ | 138 | #endif /* __EYETIL_H */ |