author | Michael Krelin <hacker@klever.net> | 2013-02-13 22:38:54 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2013-02-13 22:38:54 (UTC) |
commit | d6545bd95153a5e41cdae441643f4e4a0af94a49 (patch) (unidiff) | |
tree | 51e1ae7f4a3cba4de21e9c62b28c55d414064566 | |
parent | dd545573337e3c54ad4c2c64d72f750ad03aa2c9 (diff) | |
download | iii-d6545bd95153a5e41cdae441643f4e4a0af94a49.zip iii-d6545bd95153a5e41cdae441643f4e4a0af94a49.tar.gz iii-d6545bd95153a5e41cdae441643f4e4a0af94a49.tar.bz2 |
introduce mimewriter classess for gsoap mime streaming
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | src/eyetil.cc | 10 | ||||
-rw-r--r-- | src/eyetil.h | 22 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/eyetil.cc b/src/eyetil.cc index 6ccc4ae..fba8724 100644 --- a/src/eyetil.cc +++ b/src/eyetil.cc | |||
@@ -191,3 +191,13 @@ binary_t integrity_digest(const void *ptr,size_t size,const std::string& ukey) { | |||
191 | rv.update( binary_t(ukey) ); | 191 | rv.update( binary_t(ukey) ); |
192 | return rv.final(); | 192 | return rv.final(); |
193 | } | 193 | } |
194 | |||
195 | 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); | ||
197 | } | ||
198 | mimewrite_tarfile::~mimewrite_tarfile() { | ||
199 | unlink(fn.c_str()); | ||
200 | } | ||
201 | int mimewrite_tarfile::write(const char *buf,size_t len) { | ||
202 | return f.write(buf,len) ? (idigest.update(buf,len),SOAP_OK) : SOAP_ERR; | ||
203 | } | ||
diff --git a/src/eyetil.h b/src/eyetil.h index 8784cb4..64948d0 100644 --- a/src/eyetil.h +++ b/src/eyetil.h | |||
@@ -3,9 +3,11 @@ | |||
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; |
@@ -110,6 +112,26 @@ class tarchive_t { | |||
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 | ||