-
Notifications
You must be signed in to change notification settings - Fork 0
/
struktur.h
executable file
·341 lines (298 loc) · 6.47 KB
/
struktur.h
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
/*
* `struktur.h`
* Definisi struktur data Kancil.
* Penulis: Bayu Aditya H. <b@yuah.web.id>
* HakCipta: 2014 - 2015
* Lisensi: lihat LICENCE.txt
*/
#ifndef _KANCIL_STRUKTUR_H_
#define _KANCIL_STRUKTUR_H_
// Bila belum dimuat.
#ifndef _TR1_STDBOOL_H
#include <stdbool.h>
#endif
#ifndef _INC_TYPES
#include <sys/types.h>
#endif
#ifndef MAX_STR
#define MAX_STR 2048
#endif
// Alamat.
#ifndef INET_ADDRSTRLEN
#define INET_ADDRSTRLEN 16
#endif
#ifndef INET6_ADDRSTRLEN
#define INET6_ADDRSTRLEN 46
#endif
// Memastikan alamat
// dapat tersimpan
// di memori bagi pakai.
// Maksimal 10 inang
// dan 5 alamat.
#ifndef INFOALAMAT_MAX_ID
#define INFOALAMAT_MAX_ID 10
#endif
#ifndef INFOALAMAT_MAX_IP
#define INFOALAMAT_MAX_IP 5
#endif
#ifndef INFOALAMAT_MAX_STR
#define INFOALAMAT_MAX_STR 128
#endif
struct INFOALAMAT{
char inang [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_STR];
int ipcount [INFOALAMAT_MAX_ID+1];
int ai_family [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP];
int ai_socktype [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP];
int ai_protocol [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP];
unsigned int ai_addrlen [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP];
char ai_canonname [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP][INFOALAMAT_MAX_STR];
unsigned short sockaddr_sa_family [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP];
char sockaddr_sa_data [INFOALAMAT_MAX_ID+1][INFOALAMAT_MAX_IP][14];
bool kunci;
} INFOALAMAT;
// Kancil.
#ifndef CHUNK_MESSAGE_SIZE
#define CHUNK_MESSAGE_SIZE 1020
#endif
#ifndef MAX_CHUNK_ID
#define MAX_CHUNK_ID 65025 // 16-bit.
#endif
#ifndef BERKAS_MAX_STR
#define BERKAS_MAX_STR 255
#endif
// Terkirim.
#ifndef BERKAS_ID_NOTTRANSFERED
#define BERKAS_ID_NOTTRANSFERED 0
#endif
#ifndef BERKAS_ID_INTRANSFER
#define BERKAS_ID_INTRANSFER 1
#endif
#ifndef BERKAS_ID_TRANSFERED
#define BERKAS_ID_TRANSFERED 2
#endif
// Kirim.
struct KIRIMBERKAS{
/*
* `identifikasi` dan `identifikasi_sebelumnya`
* Memberikan informasi identifikasi dalam pengiriman berkas.
* `kelompok_kirim`
* Memberikan informasi kelompok pengiriman berkas.
*/
unsigned int identifikasi;
unsigned int identifikasi_sebelumnya;
unsigned int kelompok_kirim;
/*
* urut_kali.
* Informasi cacah kali pengiriman berurutan.
*/
int urut_kali;
/*
* `paksa_panji`.
* Memaksa penggunaan panji. Bila diaktifkan (memberi nilai panji sahih),
* maka dalam sambungan pengiriman, panji sambungan sesuai dengan nilai.
*/
int paksa_panji;
/*
* Ukuran.
* Ukuran berkas dan yang telah dikirim.
*/
double ukuran_berkas;
double ukuran_kirim;
double ukuran_kirim_sebelumnya;
/*
* Informasi inang dan berkas.
*/
char hostname[BERKAS_MAX_STR];
char portno[BERKAS_MAX_STR];
char berkas[BERKAS_MAX_STR];
char berkas_lajur[BERKAS_MAX_STR];
char berkas_identifikasi[BERKAS_MAX_STR];
/*
* Penghitung kecepatan.
* Membantu dalam melakukan menghitung kecepatan.
*/
double waktu_terkirim;
double detik;
double kecepatan;
/*
* Status dan keadaan.
*/
int coba;
bool do_kirim;
bool kunci;
int data_terkirim[MAX_CHUNK_ID];
} KIRIMBERKAS;
// Berkas.
struct TERIMABERKAS{
/*
* Identifikasi.
* Identifikasi pecahan yang diterima.
*/
char identifikasi[BERKAS_MAX_STR];
/*
* Nama berkas.
*/
char nama[BERKAS_MAX_STR];
/*
* Ukuran berkas akan diterima,
* telah diterima, dan ofset ukuran.
*/
double ofset;
double ukuran;
double diterima;
/*
* Identifikasi
* proses penulis.
*/
pid_t pid_tulis;
/*
* Status penulisan berkas.
* Bila sedang melakukan penulisan,
* maka sambungan yang masuk akan ditolak.
*/
bool sedang_sibuk;
bool terima_berkas;
/*
* Data identifikasi
* pesan yang diterima.
*/
char data_pesan[MAX_CHUNK_ID]
[CHUNK_MESSAGE_SIZE+1];
bool data_terima[MAX_CHUNK_ID];
} TERIMABERKAS;
#ifndef MAX_GATE
#define MAX_GATE 256
#endif
// Variabel global.
struct GLOBAL_CONFIG {
/*
* Menampilkan
* tingkatan kekutu.
*/
bool show_error;
bool show_warning;
bool show_notice;
bool show_info;
bool show_debug1;
bool show_debug2;
bool show_debug3;
bool show_debug4;
bool show_debug5;
bool quiet;
int debuglevel;
/*
* Transfer mentah.
* Bernilai `false`
* bila transfer terenkripsi.
*/
bool rawtransfer;
/*
* Eksperimen.
* Menggeser ke awal dari
* bita terakhir
* dalam pembacaan berkas.
*/
bool shifteof;
/*
* Memeriksa balasan
* dari Peladen.
*/
bool transferedcheck;
/*
* Menampilkan rangkuman
* dari pengiriman berkas.
* BELUM diterapkan.
*/
bool summary;
/*
* Kali dan tunggu
* mencoba pengiriman.
*/
int tries;
int waitretry;
/*
* Waktu (detik) tunggu
* sebelum melakukan
* pengiriman ulang
* kelompok pecahan selanjutnya.
*/
int waitqueue;
/*
* Jumlah maksimal sambungan.
* Penerimaan dan pengiriman.
*/
int maxconnection;
int parallel;
/*
* Pengaturan
* berkas.
*/
char completedir[BERKAS_MAX_STR];
char tempdir[BERKAS_MAX_STR];
char config[BERKAS_MAX_STR];
/*
* Lajur Berkas dikirim.
*/
char inputfile[BERKAS_MAX_STR];
/*
* Pengaturan
* garam.
*/
unsigned char salt[MAX_STR];
unsigned char salt_send[MAX_STR];
/*
* Pengaturan
* pemilihan IP.
*/
int timebase;
int timetolerance;
int gateid;
int gates_c;
/*
* Cara Pengalutan.
* 0 Hanya XOR
* 1 Menggunakan kunci publik RSA
*/
int gateshashing;
/*
* Inang penerima.
*/
int hostname_c;
char hostname[MAX_GATE][INFOALAMAT_MAX_STR];
/*
* Kunci publik dan privat
* serta bantalan RSA
*/
int pubkeys_c;
char pubkeys[MAX_GATE][BERKAS_MAX_STR];
char privkey[BERKAS_MAX_STR];
int rsa_padding;
/*
* Peladen.
*/
char listening[INFOALAMAT_MAX_STR];
char defaultport[INFOALAMAT_MAX_STR];
/*
* Hanya simulasi pengiriman.
*/
int dummy;
} GLOBAL_CONFIG;
#define aturan GLOBAL_CONFIG
// Informasi kancil.
struct GLOBAL_KANCIL {
int version_major;
int version_minor;
int version_patch;
int built_number;
char* progname;
char* progcode;
char* compile_mode;
char* compiler_machine;
char* compiler_version;
char* compiler_flags;
long built_time;
char* executable;
double unixtime;
} GLOBAL_KANCIL;
#define infokancil GLOBAL_KANCIL
#endif /* _KANCIL_STRUKTUR_H_ */