Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4a311cdc8 | ||
|
|
08617d0017 | ||
|
|
38cd3b0371 | ||
|
|
5944e61dfe | ||
|
|
585b2b08bc | ||
|
|
a3aa6fc4fb | ||
|
|
6f36424d12 | ||
|
|
fa9301da16 | ||
|
|
c154a00358 | ||
|
|
4246b510d2 | ||
|
|
c71db48ae1 | ||
|
|
e3cce8aeb9 | ||
|
|
ad0d205ff3 | ||
|
|
030087cb27 | ||
|
|
eefa7722c5 | ||
|
|
17547f555d | ||
|
|
ec9c59ce69 | ||
|
|
679927a684 | ||
|
|
2999faf5d7 | ||
|
|
219384b7e5 | ||
|
|
3649e46b03 | ||
|
|
88f314bc75 | ||
|
|
e2b3dc1b46 | ||
|
|
1815ea519f | ||
|
|
33356d5d35 | ||
|
|
4a5d07ec45 | ||
|
|
a50882e1ac | ||
|
|
b2cb8ebcbe | ||
|
|
6fd6cf8c4a | ||
|
|
f0fc2751e5 | ||
|
|
81cab007d0 | ||
|
|
606396839f | ||
|
|
a8e37bafb9 | ||
|
|
87a38012cd | ||
|
|
f04816e9a5 | ||
|
|
7107d036b1 |
@@ -16,7 +16,9 @@ glorytun_SOURCES = \
|
||||
src/tun.c \
|
||||
src/tun.h \
|
||||
src/db.c \
|
||||
src/db.h
|
||||
src/db.h \
|
||||
src/state.c \
|
||||
src/state.h
|
||||
|
||||
EXTRA_DIST = \
|
||||
LICENSE \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Glorytun
|
||||
# π₁(Glorytun)=ℤ²
|
||||
|
||||
Small, Simple and Stupid TCP VPN.
|
||||
|
||||
@@ -8,8 +8,7 @@ This code will probably format your harddisk!
|
||||
|
||||
#### Build and Install
|
||||
|
||||
Glorytun depends on [libsodium](https://github.com/jedisct1/libsodium) version >= 1.0.4
|
||||
and needs an AES-NI capable CPU.
|
||||
Glorytun depends on [libsodium](https://github.com/jedisct1/libsodium) version >= 1.0.4.
|
||||
|
||||
To build and install the latest version:
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ AC_PROG_CC_C99
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
AC_SEARCH_LIBS([getaddrinfo], [resolv nsl])
|
||||
AC_SEARCH_LIBS([socket], [socket])
|
||||
AC_CHECK_LIB([rt], [clock_gettime])
|
||||
AC_CHECK_FUNCS([clock_gettime])
|
||||
PKG_CHECK_MODULES([libsodium], [libsodium >= 1.0.4])
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
|
||||
19
src/buffer.h
19
src/buffer.h
@@ -49,15 +49,18 @@ static inline size_t buffer_read_size (buffer_t *buffer)
|
||||
|
||||
static inline void buffer_shift (buffer_t *buffer)
|
||||
{
|
||||
if (buffer->read==buffer->data)
|
||||
return;
|
||||
|
||||
if (buffer->read==buffer->write) {
|
||||
buffer_format(buffer);
|
||||
} else {
|
||||
const uint8_t *src = PALIGN_DOWN(buffer->read);
|
||||
const size_t size = ALIGN(buffer->write-src);
|
||||
if (buffer->data+size<src) {
|
||||
memcpy(buffer->data, src, size);
|
||||
buffer->read -= src-buffer->data;
|
||||
buffer->write -= src-buffer->data;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const size_t size = buffer_read_size(buffer);
|
||||
|
||||
memmove(buffer->data, buffer->read, size);
|
||||
|
||||
buffer->read = buffer->data;
|
||||
buffer->write = buffer->data+size;
|
||||
}
|
||||
|
||||
776
src/main.c
776
src/main.c
File diff suppressed because it is too large
Load Diff
62
src/state.c
Normal file
62
src/state.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include "common.h"
|
||||
|
||||
#include "state.h"
|
||||
#include "str.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
int state_create (const char *filename)
|
||||
{
|
||||
if (str_empty(filename))
|
||||
return -1;
|
||||
|
||||
int fd = open(filename, O_WRONLY);
|
||||
|
||||
if (fd==-1) {
|
||||
if (errno!=EINTR)
|
||||
perror("open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct stat st = {0};
|
||||
|
||||
if (fstat(fd, &st)==-1) {
|
||||
perror("fstat");
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!S_ISFIFO(st.st_mode)) {
|
||||
gt_log("`%s' is not a fifo\n", filename);
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
void state_send (int fd, const char *state, const char *info)
|
||||
{
|
||||
if (str_empty(state))
|
||||
return;
|
||||
|
||||
if (fd==-1) {
|
||||
gt_print("%s %s\n", state, info);
|
||||
return;
|
||||
}
|
||||
|
||||
const char *strs[] = { state, " ", info, "\n" };
|
||||
char *str = str_cat(strs, COUNT(strs));
|
||||
|
||||
if (!str) {
|
||||
perror("str_cat");
|
||||
return;
|
||||
}
|
||||
|
||||
if (write(fd, str, str_len(str))==-1 && errno!=EINTR)
|
||||
perror("write");
|
||||
|
||||
free(str);
|
||||
}
|
||||
4
src/state.h
Normal file
4
src/state.h
Normal file
@@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
int state_create (const char *);
|
||||
void state_send (int, const char *, const char *);
|
||||
@@ -47,7 +47,7 @@ static inline size_t str_len (const char *restrict str)
|
||||
return strlen(str);
|
||||
}
|
||||
|
||||
static inline char *str_cat (const char *const strs[], size_t count)
|
||||
static inline char *str_cat (const char **strs, size_t count)
|
||||
{
|
||||
size_t size = 1;
|
||||
|
||||
|
||||
@@ -131,9 +131,9 @@ static int tun_create_by_id (char *name, size_t size, unsigned id, int mq)
|
||||
|
||||
#endif
|
||||
|
||||
int tun_create (char *dev_name, int mq)
|
||||
int tun_create (char *dev_name, char **ret_name, int mq)
|
||||
{
|
||||
char name[64];
|
||||
char name[64] = {0};
|
||||
int fd = -1;
|
||||
|
||||
#ifndef IFF_MULTI_QUEUE
|
||||
@@ -148,8 +148,8 @@ int tun_create (char *dev_name, int mq)
|
||||
fd = tun_create_by_name(name, sizeof(name), dev_name, mq);
|
||||
}
|
||||
|
||||
if (fd!=-1)
|
||||
gt_print("tun name: %s\n", name);
|
||||
if (fd!=-1 && ret_name)
|
||||
*ret_name = strdup(name);
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
int tun_create (char *, int);
|
||||
int tun_create (char *, char **, int);
|
||||
ssize_t tun_read (int, void *, size_t);
|
||||
ssize_t tun_write (int, const void *, size_t);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -z "${VERSION}" ] && VERSION=`git describe --tags --always 2>/dev/null` \
|
||||
[ -z "${VERSION}" ] && VERSION=`git describe --tags --match='v[0-9].*' 2>/dev/null` \
|
||||
&& VERSION=${VERSION#v}
|
||||
|
||||
[ -z "${VERSION}" ] && VERSION=`cat VERSION 2>/dev/null`
|
||||
|
||||
Reference in New Issue
Block a user