-rw-r--r-- | src/eyetil.cc | 9 | ||||
-rw-r--r-- | src/eyetil.h | 2 |
2 files changed, 0 insertions, 11 deletions
diff --git a/src/eyetil.cc b/src/eyetil.cc index 5bceec7..5489d7b 100644 --- a/src/eyetil.cc +++ b/src/eyetil.cc | |||
@@ -138,66 +138,57 @@ tmpdir_t::tmpdir_t(const std::string& dt) : dir(dt) { | |||
138 | } | 138 | } |
139 | tmpdir_t::~tmpdir_t() { | 139 | tmpdir_t::~tmpdir_t() { |
140 | assert(!dir.empty()); | 140 | assert(!dir.empty()); |
141 | if(rmdir(dir.c_str())) { | 141 | if(rmdir(dir.c_str())) { |
142 | syslog(LOG_WARNING,"Failed to remove '%s' directory",dir.c_str()); | 142 | syslog(LOG_WARNING,"Failed to remove '%s' directory",dir.c_str()); |
143 | } | 143 | } |
144 | } | 144 | } |
145 | 145 | ||
146 | std::string tmpdir_t::get_file(const std::string& f) { | 146 | std::string tmpdir_t::get_file(const std::string& f) { |
147 | std::string::size_type ls = f.rfind('/'); | 147 | std::string::size_type ls = f.rfind('/'); |
148 | return dir+'/'+( | 148 | return dir+'/'+( |
149 | (ls==std::string::npos) | 149 | (ls==std::string::npos) |
150 | ? f | 150 | ? f |
151 | : f.substr(ls+1) | 151 | : f.substr(ls+1) |
152 | ); | 152 | ); |
153 | } | 153 | } |
154 | 154 | ||
155 | tarchive_t::tarchive_t(const char *fn) : a(archive_read_new()), e(0) { | 155 | tarchive_t::tarchive_t(const char *fn) : a(archive_read_new()), e(0) { |
156 | if(!a) throw std::runtime_error("failed to archive_read_new()"); | 156 | if(!a) throw std::runtime_error("failed to archive_read_new()"); |
157 | if(archive_read_support_format_tar(a)) { | 157 | if(archive_read_support_format_tar(a)) { |
158 | archive_read_finish(a); | 158 | archive_read_finish(a); |
159 | throw std::runtime_error("failed to archive_read_support_format_tar()"); | 159 | throw std::runtime_error("failed to archive_read_support_format_tar()"); |
160 | } | 160 | } |
161 | if(archive_read_open_filename(a,fn,16384)) { | 161 | if(archive_read_open_filename(a,fn,16384)) { |
162 | archive_read_finish(a); | 162 | archive_read_finish(a); |
163 | throw std::runtime_error("failed to archive_read_open_memory()"); | 163 | throw std::runtime_error("failed to archive_read_open_memory()"); |
164 | } | 164 | } |
165 | } | 165 | } |
166 | tarchive_t::~tarchive_t() { | 166 | tarchive_t::~tarchive_t() { |
167 | assert(a); | 167 | assert(a); |
168 | archive_read_finish(a); | 168 | archive_read_finish(a); |
169 | } | 169 | } |
170 | 170 | ||
171 | bool tarchive_t::read_next_header() { | 171 | bool tarchive_t::read_next_header() { |
172 | assert(a); | 172 | assert(a); |
173 | return archive_read_next_header(a,&e)==ARCHIVE_OK; | 173 | return archive_read_next_header(a,&e)==ARCHIVE_OK; |
174 | } | 174 | } |
175 | 175 | ||
176 | std::string tarchive_t::entry_pathname() { | 176 | std::string tarchive_t::entry_pathname() { |
177 | assert(a); assert(e); | 177 | assert(a); assert(e); |
178 | return archive_entry_pathname(e); | 178 | return archive_entry_pathname(e); |
179 | } | 179 | } |
180 | 180 | ||
181 | bool tarchive_t::read_data_into_fd(int fd) { | 181 | bool tarchive_t::read_data_into_fd(int fd) { |
182 | assert(a); | 182 | assert(a); |
183 | return archive_read_data_into_fd(a,fd)==ARCHIVE_OK; | 183 | return archive_read_data_into_fd(a,fd)==ARCHIVE_OK; |
184 | } | 184 | } |
185 | 185 | ||
186 | |||
187 | binary_t integrity_digest(const void *ptr,size_t size,const std::string& ukey) { | ||
188 | md5_digester rv; | ||
189 | std::transform( (block512_t*)ptr, ((block512_t*)ptr)+size/sizeof(block512_t), | ||
190 | rv.updater<uint16_t>(), block512_t::tcpcksum ); | ||
191 | rv.update( binary_t(ukey) ); | ||
192 | return rv.final(); | ||
193 | } | ||
194 | |||
195 | mimewrite_tarfile::mimewrite_tarfile(tmpdir_t& d) { | 186 | mimewrite_tarfile::mimewrite_tarfile(tmpdir_t& d) { |
196 | f.open((fn=d.get_file("the-tarfile.tar")).c_str(),std::ios_base::in|std::ios_base::out|std::ios_base::trunc|std::ios_base::binary); | 187 | f.open((fn=d.get_file("the-tarfile.tar")).c_str(),std::ios_base::in|std::ios_base::out|std::ios_base::trunc|std::ios_base::binary); |
197 | } | 188 | } |
198 | mimewrite_tarfile::~mimewrite_tarfile() { | 189 | mimewrite_tarfile::~mimewrite_tarfile() { |
199 | unlink(fn.c_str()); | 190 | unlink(fn.c_str()); |
200 | } | 191 | } |
201 | int mimewrite_tarfile::write(const char *buf,size_t len) { | 192 | int mimewrite_tarfile::write(const char *buf,size_t len) { |
202 | return f.write(buf,len) ? (idigest.update(buf,len),SOAP_OK) : SOAP_ERR; | 193 | return f.write(buf,len) ? (idigest.update(buf,len),SOAP_OK) : SOAP_ERR; |
203 | } | 194 | } |
diff --git a/src/eyetil.h b/src/eyetil.h index 8af18a4..22e07f1 100644 --- a/src/eyetil.h +++ b/src/eyetil.h | |||
@@ -87,52 +87,50 @@ struct integrity_digester { | |||
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 */ |