Merge branch 'master' of https://github.com/antma/tg
Conflicts: tools.c
This commit is contained in:
commit
77f56cfd57
15
main.c
15
main.c
@ -180,12 +180,19 @@ char *make_full_path (char *s) {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void running_for_first_time (void) {
|
void check_type_sizes (void) {
|
||||||
if (sizeof (void) != 1) {
|
if (sizeof (int) != 4u) {
|
||||||
logprintf ("sizeof (void) isn't equal 1\n");
|
logprintf ("sizeof (int) isn't equal 4.\n");
|
||||||
logprintf ("GNU C compiler extension isn't available?\n");
|
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
if (sizeof (char) != 1u) {
|
||||||
|
logprintf ("sizeof (char) isn't equal 1.\n");
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void running_for_first_time (void) {
|
||||||
|
check_type_sizes ();
|
||||||
if (config_filename) {
|
if (config_filename) {
|
||||||
return; // Do not create custom config file
|
return; // Do not create custom config file
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "include.h"
|
#include "include.h"
|
||||||
@ -1493,26 +1492,13 @@ void work_packed (struct connection *c, long long msg_id) {
|
|||||||
|
|
||||||
int l = prefetch_strlen ();
|
int l = prefetch_strlen ();
|
||||||
char *s = fetch_str (l);
|
char *s = fetch_str (l);
|
||||||
size_t dl = MAX_PACKED_SIZE;
|
|
||||||
|
|
||||||
z_stream strm;
|
int total_out = tinflate (s, l, buf, MAX_PACKED_SIZE);
|
||||||
memset (&strm, 0, sizeof (strm));
|
|
||||||
assert (inflateInit2 (&strm, 16 + MAX_WBITS) == Z_OK);
|
|
||||||
strm.avail_in = l;
|
|
||||||
strm.next_in = (void *)s;
|
|
||||||
strm.avail_out = MAX_PACKED_SIZE;
|
|
||||||
strm.next_out = (void *)buf;
|
|
||||||
|
|
||||||
int err = inflate (&strm, Z_FINISH);
|
|
||||||
if (verbosity) {
|
|
||||||
logprintf ( "inflate error = %d\n", err);
|
|
||||||
logprintf ( "inflated %d bytes\n", (int)strm.total_out);
|
|
||||||
}
|
|
||||||
int *end = in_ptr;
|
int *end = in_ptr;
|
||||||
int *eend = in_end;
|
int *eend = in_end;
|
||||||
assert (dl % 4 == 0);
|
//assert (total_out % 4 == 0);
|
||||||
in_ptr = buf;
|
in_ptr = buf;
|
||||||
in_end = in_ptr + strm.total_out / 4;
|
in_end = in_ptr + total_out / 4;
|
||||||
if (verbosity >= 4) {
|
if (verbosity >= 4) {
|
||||||
logprintf ( "Unzipped data: ");
|
logprintf ( "Unzipped data: ");
|
||||||
hexdump_in ();
|
hexdump_in ();
|
||||||
|
@ -52,7 +52,7 @@ long long rsa_encrypted_chunks, rsa_decrypted_chunks;
|
|||||||
BN_CTX *BN_ctx;
|
BN_CTX *BN_ctx;
|
||||||
int verbosity;
|
int verbosity;
|
||||||
|
|
||||||
int get_random_bytes (void *buf, int n) {
|
int get_random_bytes (unsigned char *buf, int n) {
|
||||||
int r = 0, h = open ("/dev/random", O_RDONLY | O_NONBLOCK);
|
int r = 0, h = open ("/dev/random", O_RDONLY | O_NONBLOCK);
|
||||||
if (h >= 0) {
|
if (h >= 0) {
|
||||||
r = read (h, buf, n);
|
r = read (h, buf, n);
|
||||||
|
@ -427,7 +427,7 @@ static inline void fetch_ints (void *data, int count) {
|
|||||||
in_ptr += count;
|
in_ptr += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_random_bytes (void *buf, int n);
|
int get_random_bytes (unsigned char *buf, int n);
|
||||||
|
|
||||||
int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *E);
|
int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *E);
|
||||||
int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *D);
|
int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *D);
|
||||||
|
9
net.c
9
net.c
@ -115,7 +115,8 @@ void delete_connection_buffer (struct connection_buffer *b) {
|
|||||||
tfree (b, sizeof (*b));
|
tfree (b, sizeof (*b));
|
||||||
}
|
}
|
||||||
|
|
||||||
int write_out (struct connection *c, const void *data, int len) {
|
int write_out (struct connection *c, const void *_data, int len) {
|
||||||
|
const unsigned char *data = _data;
|
||||||
if (!len) { return 0; }
|
if (!len) { return 0; }
|
||||||
assert (len > 0);
|
assert (len > 0);
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@ -146,7 +147,8 @@ int write_out (struct connection *c, const void *data, int len) {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_in (struct connection *c, void *data, int len) {
|
int read_in (struct connection *c, void *_data, int len) {
|
||||||
|
unsigned char *data = _data;
|
||||||
if (!len) { return 0; }
|
if (!len) { return 0; }
|
||||||
assert (len > 0);
|
assert (len > 0);
|
||||||
if (len > c->in_bytes) {
|
if (len > c->in_bytes) {
|
||||||
@ -177,7 +179,8 @@ int read_in (struct connection *c, void *data, int len) {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_in_lookup (struct connection *c, void *data, int len) {
|
int read_in_lookup (struct connection *c, void *_data, int len) {
|
||||||
|
unsigned char *data = _data;
|
||||||
if (!len || !c->in_bytes) { return 0; }
|
if (!len || !c->in_bytes) { return 0; }
|
||||||
assert (len > 0);
|
assert (len > 0);
|
||||||
if (len > c->in_bytes) {
|
if (len > c->in_bytes) {
|
||||||
|
8
net.h
8
net.h
@ -93,10 +93,10 @@ struct dc_serialized {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct connection_buffer {
|
struct connection_buffer {
|
||||||
void *start;
|
unsigned char *start;
|
||||||
void *end;
|
unsigned char *end;
|
||||||
void *rptr;
|
unsigned char *rptr;
|
||||||
void *wptr;
|
unsigned char *wptr;
|
||||||
struct connection_buffer *next;
|
struct connection_buffer *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
23
queries.c
23
queries.c
@ -20,7 +20,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <zlib.h>
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -215,26 +214,12 @@ void query_result (long long id UU) {
|
|||||||
fetch_int ();
|
fetch_int ();
|
||||||
int l = prefetch_strlen ();
|
int l = prefetch_strlen ();
|
||||||
char *s = fetch_str (l);
|
char *s = fetch_str (l);
|
||||||
size_t dl = MAX_PACKED_SIZE;
|
int total_out = tinflate (s, l, packed_buffer, MAX_PACKED_SIZE);
|
||||||
|
|
||||||
z_stream strm;
|
|
||||||
memset (&strm, 0, sizeof (strm));
|
|
||||||
assert (inflateInit2 (&strm, 16 + MAX_WBITS) == Z_OK);
|
|
||||||
strm.avail_in = l;
|
|
||||||
strm.next_in = (void *)s;
|
|
||||||
strm.avail_out = MAX_PACKED_SIZE;
|
|
||||||
strm.next_out = (void *)packed_buffer;
|
|
||||||
|
|
||||||
int err = inflate (&strm, Z_FINISH);
|
|
||||||
if (verbosity) {
|
|
||||||
logprintf ( "inflate error = %d\n", err);
|
|
||||||
logprintf ( "inflated %d bytes\n", (int)strm.total_out);
|
|
||||||
}
|
|
||||||
end = in_ptr;
|
end = in_ptr;
|
||||||
eend = in_end;
|
eend = in_end;
|
||||||
assert (dl % 4 == 0);
|
//assert (total_out % 4 == 0);
|
||||||
in_ptr = packed_buffer;
|
in_ptr = packed_buffer;
|
||||||
in_end = in_ptr + strm.total_out / 4;
|
in_end = in_ptr + total_out / 4;
|
||||||
if (verbosity >= 4) {
|
if (verbosity >= 4) {
|
||||||
logprintf ( "Unzipped data: ");
|
logprintf ( "Unzipped data: ");
|
||||||
hexdump_in ();
|
hexdump_in ();
|
||||||
@ -2329,7 +2314,7 @@ void do_create_keys_end (struct secret_chat *U) {
|
|||||||
ensure_ptr (a);
|
ensure_ptr (a);
|
||||||
ensure (BN_mod_exp (r, g_b, a, p, ctx));
|
ensure (BN_mod_exp (r, g_b, a, p, ctx));
|
||||||
|
|
||||||
void *t = talloc (256);
|
unsigned char *t = talloc (256);
|
||||||
memcpy (t, U->key, 256);
|
memcpy (t, U->key, 256);
|
||||||
|
|
||||||
memset (U->key, 0, sizeof (U->key));
|
memset (U->key, 0, sizeof (U->key));
|
||||||
|
25
tools.c
25
tools.c
@ -24,10 +24,12 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
|
extern int verbosity;
|
||||||
|
|
||||||
static void out_of_memory (void) {
|
static void out_of_memory (void) {
|
||||||
logprintf ("Out of memory\n");
|
logprintf ("Out of memory\n");
|
||||||
@ -137,3 +139,26 @@ void ensure_ptr (void *p) {
|
|||||||
out_of_memory ();
|
out_of_memory ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int tinflate (void *input, int ilen, void *output, int olen) {
|
||||||
|
z_stream strm;
|
||||||
|
memset (&strm, 0, sizeof (strm));
|
||||||
|
assert (inflateInit2 (&strm, 16 + MAX_WBITS) == Z_OK);
|
||||||
|
strm.avail_in = ilen;
|
||||||
|
strm.next_in = input;
|
||||||
|
strm.avail_out = olen ;
|
||||||
|
strm.next_out = output;
|
||||||
|
int err = inflate (&strm, Z_FINISH), total_out = 0;
|
||||||
|
if (err == Z_OK || err == Z_STREAM_END) {
|
||||||
|
total_out = (int) strm.total_out;
|
||||||
|
if (err == Z_STREAM_END && verbosity >= 2) {
|
||||||
|
logprintf ( "inflated %d bytes\n", (int) strm.total_out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (verbosity && err != Z_STREAM_END) {
|
||||||
|
logprintf ( "inflate error = %d\n", err);
|
||||||
|
logprintf ( "inflated %d bytes\n", (int) strm.total_out);
|
||||||
|
}
|
||||||
|
inflateEnd (&strm);
|
||||||
|
return total_out;
|
||||||
|
}
|
||||||
|
1
tools.h
1
tools.h
@ -24,6 +24,7 @@ void *talloc (size_t size);
|
|||||||
void *trealloc (void *ptr, size_t old_size, size_t size);
|
void *trealloc (void *ptr, size_t old_size, size_t size);
|
||||||
void *talloc0 (size_t size);
|
void *talloc0 (size_t size);
|
||||||
char *tstrdup (const char *s);
|
char *tstrdup (const char *s);
|
||||||
|
int tinflate (void *input, int ilen, void *output, int olen);
|
||||||
void ensure (int r);
|
void ensure (int r);
|
||||||
void ensure_ptr (void *p);
|
void ensure_ptr (void *p);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user