-
Notifications
You must be signed in to change notification settings - Fork 0
/
send.c
88 lines (69 loc) · 2.4 KB
/
send.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <dirent.h>
#include "network-functions.c"
#include "ii-functions.c"
// toss file format is raw msgline, NOT base64
char** dirs;
DIR *dir_with_tosses;
struct dirent *filename;
int filescount=0, i, result;
int MAXFILES=512; // максимальное количество файлов в out/
int comp(const void *a, const void *b) {
const char *u = (const char *)a;
const char *v = (const char *)b;
return strcmp(u, v);
}
int main() {
ii_base_init();
// выделяем ещё памяти для адреса, чтобы засунуть туда u/point
char* send_adress=(char*)malloc(sizeof(char*)*(strlen(adress)+8));
strcpy(send_adress, adress);
strcat(send_adress, "u/point");
dir_with_tosses=opendir(tossesdir);
dirs=(char**)malloc(sizeof(char*)*MAXFILES);
while((filename=readdir(dir_with_tosses))!=NULL) {
if (
(strcmp(filename->d_name, ".")!=0) &&
(strcmp(filename->d_name, "..")!=0)
) {
dirs[filescount]=(char*)malloc(sizeof(filename->d_name));
strcpy(dirs[filescount++], filename->d_name);
}
}
qsort(dirs, filescount, sizeof(char*), comp); // сортируем тоссы; точнее, пытаемся
if (filescount==0) return 0;
char* encoded_authstr=curl_easy_escape(curl, authstr, 0);
for (i=0;i<filescount;i++) {
char* tossfname=(char*)malloc(sizeof(char)*(strlen(dirs[i])+strlen(tossesdir)));
strcpy(tossfname, tossesdir);
strcat(tossfname, dirs[i]);
char* rawtext=file_get_contents(tossfname);
if (rawtext==NULL) {
continue;
}
char* code=curl_easy_escape(curl, b64c(rawtext), 0);
free(rawtext);
char* request=(char*)malloc(sizeof(char)*(strlen(code)+strlen(encoded_authstr)+13));
strcpy(request, "tmsg=");
strcat(request, code);
strcat(request, "&pauth=");
strcat(request, encoded_authstr);
curl_free(code);
result=getFile(send_adress, NULL, request);
printf(" %s: %d\n", tossfname, result);
if(result == 0) {
// перемещаем отправленное сообщение в sent/ (ну не удалять же его)
char* newfname=(char*)malloc(sizeof(char)*(strlen(dirs[i])+strlen(sentdir)+1));
strcpy(newfname, sentdir);
strcat(newfname, dirs[i]);
rename(tossfname, newfname);
free(newfname);
}
}
// освобождаем память... только вот смысл?
for (i=0;i<filescount; i++) {
free(dirs[i]);
}
free(dirs);
curl_free(encoded_authstr);
return 0;
}