diff options
| -rw-r--r-- | data.c | 96 | ||||
| -rw-r--r-- | snac.c | 94 |
2 files changed, 96 insertions, 94 deletions
| @@ -1748,3 +1748,99 @@ void purge_all(void) | |||
| 1748 | 1748 | ||
| 1749 | purge_server(); | 1749 | purge_server(); |
| 1750 | } | 1750 | } |
| 1751 | |||
| 1752 | |||
| 1753 | /** archive **/ | ||
| 1754 | |||
| 1755 | void srv_archive(const char *direction, xs_dict *req, | ||
| 1756 | const char *payload, int p_size, | ||
| 1757 | int status, xs_dict *headers, | ||
| 1758 | const char *body, int b_size) | ||
| 1759 | /* archives a connection */ | ||
| 1760 | { | ||
| 1761 | /* obsessive archiving */ | ||
| 1762 | xs *date = tid(0); | ||
| 1763 | xs *dir = xs_fmt("%s/archive/%s_%s", srv_basedir, date, direction); | ||
| 1764 | FILE *f; | ||
| 1765 | |||
| 1766 | if (mkdirx(dir) != -1) { | ||
| 1767 | xs *meta_fn = xs_fmt("%s/_META", dir); | ||
| 1768 | |||
| 1769 | if ((f = fopen(meta_fn, "w")) != NULL) { | ||
| 1770 | xs *j1 = xs_json_dumps_pp(req, 4); | ||
| 1771 | xs *j2 = xs_json_dumps_pp(headers, 4); | ||
| 1772 | |||
| 1773 | fprintf(f, "dir: %s\n", direction); | ||
| 1774 | fprintf(f, "req: %s\n", j1); | ||
| 1775 | fprintf(f, "p_size: %d\n", p_size); | ||
| 1776 | fprintf(f, "status: %d\n", status); | ||
| 1777 | fprintf(f, "response: %s\n", j2); | ||
| 1778 | fprintf(f, "b_size: %d\n", b_size); | ||
| 1779 | fclose(f); | ||
| 1780 | } | ||
| 1781 | |||
| 1782 | if (p_size && payload) { | ||
| 1783 | xs *payload_fn = NULL; | ||
| 1784 | xs *payload_fn_raw = NULL; | ||
| 1785 | char *v = xs_dict_get(req, "content-type"); | ||
| 1786 | |||
| 1787 | if (v && xs_str_in(v, "json") != -1) { | ||
| 1788 | payload_fn = xs_fmt("%s/payload.json", dir); | ||
| 1789 | |||
| 1790 | if ((f = fopen(payload_fn, "w")) != NULL) { | ||
| 1791 | xs *v1 = xs_json_loads(payload); | ||
| 1792 | xs *j1 = NULL; | ||
| 1793 | |||
| 1794 | if (v1 != NULL) | ||
| 1795 | j1 = xs_json_dumps_pp(v1, 4); | ||
| 1796 | |||
| 1797 | if (j1 != NULL) | ||
| 1798 | fwrite(j1, strlen(j1), 1, f); | ||
| 1799 | else | ||
| 1800 | fwrite(payload, p_size, 1, f); | ||
| 1801 | |||
| 1802 | fclose(f); | ||
| 1803 | } | ||
| 1804 | } | ||
| 1805 | |||
| 1806 | payload_fn_raw = xs_fmt("%s/payload", dir); | ||
| 1807 | |||
| 1808 | if ((f = fopen(payload_fn_raw, "w")) != NULL) { | ||
| 1809 | fwrite(payload, p_size, 1, f); | ||
| 1810 | fclose(f); | ||
| 1811 | } | ||
| 1812 | } | ||
| 1813 | |||
| 1814 | if (b_size && body) { | ||
| 1815 | xs *body_fn = NULL; | ||
| 1816 | char *v = xs_dict_get(headers, "content-type"); | ||
| 1817 | |||
| 1818 | if (v && xs_str_in(v, "json") != -1) { | ||
| 1819 | body_fn = xs_fmt("%s/body.json", dir); | ||
| 1820 | |||
| 1821 | if ((f = fopen(body_fn, "w")) != NULL) { | ||
| 1822 | xs *v1 = xs_json_loads(body); | ||
| 1823 | xs *j1 = NULL; | ||
| 1824 | |||
| 1825 | if (v1 != NULL) | ||
| 1826 | j1 = xs_json_dumps_pp(v1, 4); | ||
| 1827 | |||
| 1828 | if (j1 != NULL) | ||
| 1829 | fwrite(j1, strlen(j1), 1, f); | ||
| 1830 | else | ||
| 1831 | fwrite(body, b_size, 1, f); | ||
| 1832 | |||
| 1833 | fclose(f); | ||
| 1834 | } | ||
| 1835 | } | ||
| 1836 | else { | ||
| 1837 | body_fn = xs_fmt("%s/body", dir); | ||
| 1838 | |||
| 1839 | if ((f = fopen(body_fn, "w")) != NULL) { | ||
| 1840 | fwrite(body, b_size, 1, f); | ||
| 1841 | fclose(f); | ||
| 1842 | } | ||
| 1843 | } | ||
| 1844 | } | ||
| 1845 | } | ||
| 1846 | } | ||
| @@ -148,97 +148,3 @@ int check_password(const char *uid, const char *passwd, const char *hash) | |||
| 148 | 148 | ||
| 149 | return ret; | 149 | return ret; |
| 150 | } | 150 | } |
| 151 | |||
| 152 | |||
| 153 | void srv_archive(const char *direction, xs_dict *req, | ||
| 154 | const char *payload, int p_size, | ||
| 155 | int status, xs_dict *headers, | ||
| 156 | const char *body, int b_size) | ||
| 157 | /* archives a connection */ | ||
| 158 | { | ||
| 159 | /* obsessive archiving */ | ||
| 160 | xs *date = tid(0); | ||
| 161 | xs *dir = xs_fmt("%s/archive/%s_%s", srv_basedir, date, direction); | ||
| 162 | FILE *f; | ||
| 163 | |||
| 164 | if (mkdirx(dir) != -1) { | ||
| 165 | xs *meta_fn = xs_fmt("%s/_META", dir); | ||
| 166 | |||
| 167 | if ((f = fopen(meta_fn, "w")) != NULL) { | ||
| 168 | xs *j1 = xs_json_dumps_pp(req, 4); | ||
| 169 | xs *j2 = xs_json_dumps_pp(headers, 4); | ||
| 170 | |||
| 171 | fprintf(f, "dir: %s\n", direction); | ||
| 172 | fprintf(f, "req: %s\n", j1); | ||
| 173 | fprintf(f, "p_size: %d\n", p_size); | ||
| 174 | fprintf(f, "status: %d\n", status); | ||
| 175 | fprintf(f, "response: %s\n", j2); | ||
| 176 | fprintf(f, "b_size: %d\n", b_size); | ||
| 177 | fclose(f); | ||
| 178 | } | ||
| 179 | |||
| 180 | if (p_size && payload) { | ||
| 181 | xs *payload_fn = NULL; | ||
| 182 | xs *payload_fn_raw = NULL; | ||
| 183 | char *v = xs_dict_get(req, "content-type"); | ||
| 184 | |||
| 185 | if (v && xs_str_in(v, "json") != -1) { | ||
| 186 | payload_fn = xs_fmt("%s/payload.json", dir); | ||
| 187 | |||
| 188 | if ((f = fopen(payload_fn, "w")) != NULL) { | ||
| 189 | xs *v1 = xs_json_loads(payload); | ||
| 190 | xs *j1 = NULL; | ||
| 191 | |||
| 192 | if (v1 != NULL) | ||
| 193 | j1 = xs_json_dumps_pp(v1, 4); | ||
| 194 | |||
| 195 | if (j1 != NULL) | ||
| 196 | fwrite(j1, strlen(j1), 1, f); | ||
| 197 | else | ||
| 198 | fwrite(payload, p_size, 1, f); | ||
| 199 | |||
| 200 | fclose(f); | ||
| 201 | } | ||
| 202 | } | ||
| 203 | |||
| 204 | payload_fn_raw = xs_fmt("%s/payload", dir); | ||
| 205 | |||
| 206 | if ((f = fopen(payload_fn_raw, "w")) != NULL) { | ||
| 207 | fwrite(payload, p_size, 1, f); | ||
| 208 | fclose(f); | ||
| 209 | } | ||
| 210 | } | ||
| 211 | |||
| 212 | if (b_size && body) { | ||
| 213 | xs *body_fn = NULL; | ||
| 214 | char *v = xs_dict_get(headers, "content-type"); | ||
| 215 | |||
| 216 | if (v && xs_str_in(v, "json") != -1) { | ||
| 217 | body_fn = xs_fmt("%s/body.json", dir); | ||
| 218 | |||
| 219 | if ((f = fopen(body_fn, "w")) != NULL) { | ||
| 220 | xs *v1 = xs_json_loads(body); | ||
| 221 | xs *j1 = NULL; | ||
| 222 | |||
| 223 | if (v1 != NULL) | ||
| 224 | j1 = xs_json_dumps_pp(v1, 4); | ||
| 225 | |||
| 226 | if (j1 != NULL) | ||
| 227 | fwrite(j1, strlen(j1), 1, f); | ||
| 228 | else | ||
| 229 | fwrite(body, b_size, 1, f); | ||
| 230 | |||
| 231 | fclose(f); | ||
| 232 | } | ||
| 233 | } | ||
| 234 | else { | ||
| 235 | body_fn = xs_fmt("%s/body", dir); | ||
| 236 | |||
| 237 | if ((f = fopen(body_fn, "w")) != NULL) { | ||
| 238 | fwrite(body, b_size, 1, f); | ||
| 239 | fclose(f); | ||
| 240 | } | ||
| 241 | } | ||
| 242 | } | ||
| 243 | } | ||
| 244 | } \ No newline at end of file | ||