Installing libVFS.so as a generic AppWrapper
This commit is contained in:
parent
9dfefc69a1
commit
02e643a6b8
12
Makefile
12
Makefile
|
@ -1,6 +1,6 @@
|
||||||
PACKAGE = VPN
|
PACKAGE = VPN
|
||||||
VERSION = 0.0.0
|
VERSION = 0.0.0
|
||||||
SUBDIRS = data include src
|
SUBDIRS = include src tools
|
||||||
RM ?= rm -f
|
RM ?= rm -f
|
||||||
LN ?= ln -f
|
LN ?= ln -f
|
||||||
TAR ?= tar -czvf
|
TAR ?= tar -czvf
|
||||||
|
@ -21,18 +21,20 @@ dist:
|
||||||
$(RM) -r -- $(PACKAGE)-$(VERSION)
|
$(RM) -r -- $(PACKAGE)-$(VERSION)
|
||||||
$(LN) -s -- . $(PACKAGE)-$(VERSION)
|
$(LN) -s -- . $(PACKAGE)-$(VERSION)
|
||||||
@$(TAR) $(PACKAGE)-$(VERSION).tar.gz -- \
|
@$(TAR) $(PACKAGE)-$(VERSION).tar.gz -- \
|
||||||
$(PACKAGE)-$(VERSION)/data/Makefile \
|
|
||||||
$(PACKAGE)-$(VERSION)/data/VPN.interface \
|
|
||||||
$(PACKAGE)-$(VERSION)/data/project.conf \
|
|
||||||
$(PACKAGE)-$(VERSION)/include/VPN.h \
|
$(PACKAGE)-$(VERSION)/include/VPN.h \
|
||||||
$(PACKAGE)-$(VERSION)/include/Makefile \
|
$(PACKAGE)-$(VERSION)/include/Makefile \
|
||||||
|
$(PACKAGE)-$(VERSION)/include/VPN.interface \
|
||||||
|
$(PACKAGE)-$(VERSION)/include/appbroker.sh \
|
||||||
$(PACKAGE)-$(VERSION)/include/project.conf \
|
$(PACKAGE)-$(VERSION)/include/project.conf \
|
||||||
$(PACKAGE)-$(VERSION)/src/vpn.c \
|
$(PACKAGE)-$(VERSION)/src/vpn.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/main.c \
|
$(PACKAGE)-$(VERSION)/src/main.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/Makefile \
|
$(PACKAGE)-$(VERSION)/src/Makefile \
|
||||||
$(PACKAGE)-$(VERSION)/src/appbroker.sh \
|
$(PACKAGE)-$(VERSION)/src/common.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/vpn.h \
|
$(PACKAGE)-$(VERSION)/src/vpn.h \
|
||||||
$(PACKAGE)-$(VERSION)/src/project.conf \
|
$(PACKAGE)-$(VERSION)/src/project.conf \
|
||||||
|
$(PACKAGE)-$(VERSION)/tools/libvpn.c \
|
||||||
|
$(PACKAGE)-$(VERSION)/tools/Makefile \
|
||||||
|
$(PACKAGE)-$(VERSION)/tools/project.conf \
|
||||||
$(PACKAGE)-$(VERSION)/COPYING \
|
$(PACKAGE)-$(VERSION)/COPYING \
|
||||||
$(PACKAGE)-$(VERSION)/Makefile \
|
$(PACKAGE)-$(VERSION)/Makefile \
|
||||||
$(PACKAGE)-$(VERSION)/config.h \
|
$(PACKAGE)-$(VERSION)/config.h \
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
PREFIX = /usr/local
|
|
||||||
DESTDIR =
|
|
||||||
MKDIR ?= mkdir -p
|
|
||||||
INSTALL ?= install
|
|
||||||
RM ?= rm -f
|
|
||||||
|
|
||||||
|
|
||||||
all:
|
|
||||||
|
|
||||||
clean:
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MKDIR) $(DESTDIR)$(PREFIX)/etc/AppInterface
|
|
||||||
$(INSTALL) -m 0644 -- VPN.interface $(DESTDIR)$(PREFIX)/etc/AppInterface/VPN.interface
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
$(RM) -- $(DESTDIR)$(PREFIX)/etc/AppInterface/VPN.interface
|
|
||||||
|
|
||||||
.PHONY: all clean distclean install uninstall
|
|
|
@ -1,4 +0,0 @@
|
||||||
dist=Makefile,VPN.interface
|
|
||||||
|
|
||||||
[VPN.interface]
|
|
||||||
install=$(PREFIX)/etc/AppInterface
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
MKDIR ?= mkdir -p
|
||||||
|
INSTALL ?= install
|
||||||
|
RM ?= rm -f
|
||||||
|
TARGETS = VPN.h
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
RM ?= rm -f
|
RM ?= rm -f
|
||||||
|
@ -7,17 +11,25 @@ INSTALL ?= install
|
||||||
INCLUDEDIR= $(PREFIX)/include
|
INCLUDEDIR= $(PREFIX)/include
|
||||||
|
|
||||||
|
|
||||||
all:
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
VPN.h: VPN.interface
|
||||||
|
./appbroker.sh -P "$(PREFIX)" -- "VPN.h"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
$(RM) -- $(VPN.h_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
|
$(RM) -- $(TARGETS)
|
||||||
|
|
||||||
install:
|
install: $(TARGETS)
|
||||||
$(MKDIR) $(DESTDIR)$(INCLUDEDIR)
|
$(MKDIR) $(DESTDIR)$(INCLUDEDIR)
|
||||||
$(INSTALL) -m 0644 -- VPN.h $(DESTDIR)$(INCLUDEDIR)/VPN.h
|
$(INSTALL) -m 0644 -- VPN.h $(DESTDIR)$(INCLUDEDIR)/VPN.h
|
||||||
|
$(MKDIR) $(DESTDIR)$(PREFIX)/etc/AppInterface
|
||||||
|
$(INSTALL) -m 0644 -- VPN.interface $(DESTDIR)$(PREFIX)/etc/AppInterface/VPN.interface
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
$(RM) -- $(DESTDIR)$(INCLUDEDIR)/VPN.h
|
$(RM) -- $(DESTDIR)$(INCLUDEDIR)/VPN.h
|
||||||
|
$(RM) -- $(DESTDIR)$(PREFIX)/etc/AppInterface/VPN.interface
|
||||||
|
|
||||||
.PHONY: all clean distclean install uninstall
|
.PHONY: all clean distclean install uninstall
|
||||||
|
|
|
@ -1,26 +1,56 @@
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
|
||||||
/* This file is part of DeforaOS System VPN */
|
|
||||||
/* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef VPN_VPN_H
|
#ifndef VPN_VPN_H
|
||||||
# define VPN_VPN_H
|
# define VPN_VPN_H
|
||||||
|
|
||||||
|
# include <stdint.h>
|
||||||
|
# include <System.h>
|
||||||
|
|
||||||
|
|
||||||
/* VPN */
|
|
||||||
/* types */
|
/* types */
|
||||||
typedef enum _VPNProtocol { VPN_PROTOCOL_IP_TCP = 0 } VPNProtocol;
|
typedef Buffer * BUFFER;
|
||||||
|
typedef double * DOUBLE;
|
||||||
|
typedef float * FLOAT;
|
||||||
|
typedef int16_t INT16;
|
||||||
|
typedef int32_t INT32;
|
||||||
|
typedef uint16_t UINT16;
|
||||||
|
typedef uint32_t UINT32;
|
||||||
|
typedef String const * STRING;
|
||||||
|
typedef void VOID;
|
||||||
|
|
||||||
|
typedef BUFFER BUFFER_IN;
|
||||||
|
|
||||||
|
typedef DOUBLE DOUBLE_IN;
|
||||||
|
|
||||||
|
typedef FLOAT FLOAT_IN;
|
||||||
|
typedef INT32 INT32_IN;
|
||||||
|
typedef UINT32 UINT32_IN;
|
||||||
|
typedef STRING STRING_IN;
|
||||||
|
|
||||||
|
typedef Buffer * BUFFER_OUT;
|
||||||
|
typedef int32_t * INT32_OUT;
|
||||||
|
typedef uint32_t * UINT32_OUT;
|
||||||
|
typedef String ** STRING_OUT;
|
||||||
|
|
||||||
|
typedef Buffer * BUFFER_INOUT;
|
||||||
|
typedef int32_t * INT32_INOUT;
|
||||||
|
typedef uint32_t * UINT32_INOUT;
|
||||||
|
typedef String ** STRING_INOUT;
|
||||||
|
|
||||||
|
|
||||||
|
/* constants */
|
||||||
|
# define VPN_PROTOCOL_IP_TCP 0
|
||||||
|
# define VPN_EPERM 1
|
||||||
|
# define VPN_EBADF 9
|
||||||
|
# define VPN_EPROTO 96
|
||||||
|
|
||||||
|
|
||||||
|
/* calls */
|
||||||
|
INT32 VPN_close(INT32 fd);
|
||||||
|
INT32 VPN_connect(UINT32 protocol, STRING name);
|
||||||
|
INT32 VPN_recv(INT32 fd, BUFFER_IN buf, UINT32 size, UINT32 flags);
|
||||||
|
INT32 VPN_send(INT32 fd, BUFFER_OUT buf, UINT32 size, UINT32 flags);
|
||||||
|
|
||||||
#endif /* !VPN_VPN_H */
|
#endif /* !VPN_VPN_H */
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
service=VPN
|
service=VPN
|
||||||
port=4246
|
port=4246
|
||||||
|
|
||||||
|
[constants]
|
||||||
|
#protocols
|
||||||
|
PROTOCOL_IP_TCP=0
|
||||||
|
#errno
|
||||||
|
EPERM=1
|
||||||
|
EBADF=9
|
||||||
|
EPROTO=96
|
||||||
|
|
||||||
[call::close]
|
[call::close]
|
||||||
ret=INT32
|
ret=INT32
|
||||||
arg1=INT32,fd
|
arg1=INT32,fd
|
56
include/appbroker.sh
Executable file
56
include/appbroker.sh
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#$Id$
|
||||||
|
#Copyright (c) 2011 Pierre Pronchery <khorben@defora.org>
|
||||||
|
#All rights reserved.
|
||||||
|
#
|
||||||
|
#Redistribution and use in source and binary forms, with or without
|
||||||
|
#modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this
|
||||||
|
# list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
#AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
#IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
#FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
#SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
#OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
#OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#functions
|
||||||
|
#usage
|
||||||
|
_usage()
|
||||||
|
{
|
||||||
|
echo "Usage: appbroker.sh target" 1>&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#main
|
||||||
|
while getopts P: name; do
|
||||||
|
case "$name" in
|
||||||
|
P)
|
||||||
|
#we can ignore it
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
_usage
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(($OPTIND - 1))
|
||||||
|
if [ $# -ne 1 ]; then
|
||||||
|
_usage
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
APPINTERFACE="${1%%.h}.interface"
|
||||||
|
AppBroker -o "$1" "$APPINTERFACE"
|
|
@ -1,2 +1,11 @@
|
||||||
|
targets=VPN.h
|
||||||
includes=VPN.h
|
includes=VPN.h
|
||||||
dist=Makefile
|
dist=Makefile,VPN.interface,appbroker.sh
|
||||||
|
|
||||||
|
[VPN.h]
|
||||||
|
type=script
|
||||||
|
script=./appbroker.sh
|
||||||
|
depends=VPN.interface
|
||||||
|
|
||||||
|
[VPN.interface]
|
||||||
|
install=$(PREFIX)/etc/AppInterface
|
||||||
|
|
|
@ -2,5 +2,5 @@ package=VPN
|
||||||
version=0.0.0
|
version=0.0.0
|
||||||
config=h
|
config=h
|
||||||
|
|
||||||
subdirs=data,include,src
|
subdirs=include,src,tools
|
||||||
dist=COPYING,Makefile,config.h
|
dist=COPYING,Makefile,config.h
|
||||||
|
|
10
src/Makefile
10
src/Makefile
|
@ -1,4 +1,4 @@
|
||||||
TARGETS = ../data/VPN.h VPN
|
TARGETS = ../include/VPN.h VPN
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
BINDIR = $(PREFIX)/bin
|
BINDIR = $(PREFIX)/bin
|
||||||
|
@ -17,8 +17,8 @@ INSTALL ?= install
|
||||||
|
|
||||||
all: $(TARGETS)
|
all: $(TARGETS)
|
||||||
|
|
||||||
../data/VPN.h: ../data/VPN.interface
|
../include/VPN.h:
|
||||||
./appbroker.sh -P "$(PREFIX)" -- "../data/VPN.h"
|
../include/appbroker.sh -P "$(PREFIX)" -- "../include/VPN.h"
|
||||||
|
|
||||||
VPN_OBJS = vpn.o main.o
|
VPN_OBJS = vpn.o main.o
|
||||||
VPN_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
VPN_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
@ -27,14 +27,14 @@ VPN_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
VPN: $(VPN_OBJS)
|
VPN: $(VPN_OBJS)
|
||||||
$(CC) -o VPN $(VPN_OBJS) $(VPN_LDFLAGS)
|
$(CC) -o VPN $(VPN_OBJS) $(VPN_LDFLAGS)
|
||||||
|
|
||||||
vpn.o: vpn.c ../data/VPN.h
|
vpn.o: vpn.c ../include/VPN.h
|
||||||
$(CC) $(VPN_CFLAGS) -c vpn.c
|
$(CC) $(VPN_CFLAGS) -c vpn.c
|
||||||
|
|
||||||
main.o: main.c
|
main.o: main.c
|
||||||
$(CC) $(VPN_CFLAGS) -c main.c
|
$(CC) $(VPN_CFLAGS) -c main.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -- $(../data/VPN.h_OBJS) $(VPN_OBJS)
|
$(RM) -- $(../include/VPN.h_OBJS) $(VPN_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) -- $(TARGETS)
|
$(RM) -- $(TARGETS)
|
||||||
|
|
|
@ -1,16 +1,15 @@
|
||||||
targets=../data/VPN.h,VPN
|
targets=../include/VPN.h,VPN
|
||||||
cppflags_force=-I ../include
|
cppflags_force=-I ../include
|
||||||
cppflags=
|
cppflags=
|
||||||
cflags_force=-W `pkg-config --cflags libApp`
|
cflags_force=-W `pkg-config --cflags libApp`
|
||||||
cflags=-Wall -g -O2 -pedantic
|
cflags=-Wall -g -O2 -pedantic
|
||||||
ldflags_force=`pkg-config --libs libApp` -Wl,--export-dynamic
|
ldflags_force=`pkg-config --libs libApp` -Wl,--export-dynamic
|
||||||
ldflags=
|
ldflags=
|
||||||
dist=Makefile,appbroker.sh,vpn.h
|
dist=Makefile,common.c,vpn.h
|
||||||
|
|
||||||
[../data/VPN.h]
|
[../include/VPN.h]
|
||||||
type=script
|
type=script
|
||||||
script=./appbroker.sh
|
script=../include/appbroker.sh
|
||||||
depends=../data/VPN.interface
|
|
||||||
|
|
||||||
[VPN]
|
[VPN]
|
||||||
type=binary
|
type=binary
|
||||||
|
@ -18,4 +17,4 @@ sources=vpn.c,main.c
|
||||||
install=$(BINDIR)
|
install=$(BINDIR)
|
||||||
|
|
||||||
[vpn.c]
|
[vpn.c]
|
||||||
depends=../data/VPN.h
|
depends=../include/VPN.h
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include <System.h>
|
#include <System.h>
|
||||||
#include "VPN.h"
|
#include "VPN.h"
|
||||||
#include "vpn.h"
|
#include "vpn.h"
|
||||||
#include "../data/VPN.h"
|
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,6 +38,11 @@ typedef struct _VPNClient
|
||||||
size_t sockets_cnt;
|
size_t sockets_cnt;
|
||||||
} VPNClient;
|
} VPNClient;
|
||||||
|
|
||||||
|
typedef enum _VPNProtocol
|
||||||
|
{
|
||||||
|
VP_IP_TCP = VPN_PROTOCOL_IP_TCP
|
||||||
|
} VPNProtocol;
|
||||||
|
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
static AppServer * _appserver;
|
static AppServer * _appserver;
|
||||||
|
@ -111,7 +115,7 @@ int32_t VPN_connect(uint32_t protocol, String const * uri)
|
||||||
|
|
||||||
switch(vprotocol)
|
switch(vprotocol)
|
||||||
{
|
{
|
||||||
case VPN_PROTOCOL_IP_TCP:
|
case VP_IP_TCP:
|
||||||
sdomain = PF_INET;
|
sdomain = PF_INET;
|
||||||
stype = SOCK_STREAM;
|
stype = SOCK_STREAM;
|
||||||
sa_in.sin_family = AF_INET;
|
sa_in.sin_family = AF_INET;
|
||||||
|
|
46
tools/Makefile
Normal file
46
tools/Makefile
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
TARGETS = libVPN.so
|
||||||
|
PREFIX = /usr/local
|
||||||
|
DESTDIR =
|
||||||
|
LIBDIR = $(PREFIX)/lib
|
||||||
|
CC ?= cc
|
||||||
|
CPPFLAGSF= -I ../include
|
||||||
|
CPPFLAGS= -I $(PREFIX)/include
|
||||||
|
CFLAGSF = -W -fPIC `pkg-config --cflags libApp`
|
||||||
|
CFLAGS = -Wall -g -O2 -pedantic
|
||||||
|
LDFLAGSF= `pkg-config --libs libApp`
|
||||||
|
LDFLAGS =
|
||||||
|
AR ?= ar
|
||||||
|
RANLIB ?= ranlib
|
||||||
|
CCSHARED?= $(CC) -shared
|
||||||
|
RM ?= rm -f
|
||||||
|
LN ?= ln -f
|
||||||
|
MKDIR ?= mkdir -p
|
||||||
|
INSTALL ?= install
|
||||||
|
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
libVPN_OBJS = libvpn.o
|
||||||
|
libVPN_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
libVPN_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
|
||||||
|
libVPN.so: $(libVPN_OBJS)
|
||||||
|
$(CCSHARED) -o libVPN.so $(libVPN_OBJS) $(libVPN_LDFLAGS)
|
||||||
|
|
||||||
|
libvpn.o: libvpn.c ../include/VPN.h
|
||||||
|
$(CC) $(libVPN_CFLAGS) -c libvpn.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) -- $(libVPN_OBJS)
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
$(RM) -- $(TARGETS)
|
||||||
|
|
||||||
|
install: $(TARGETS)
|
||||||
|
$(MKDIR) $(DESTDIR)$(PREFIX)/lib/AppWrapper
|
||||||
|
$(INSTALL) -m 0644 -- libVPN.so $(DESTDIR)$(PREFIX)/lib/AppWrapper/libVPN.so
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
$(RM) -- $(DESTDIR)$(PREFIX)/lib/AppWrapper/libVPN.so
|
||||||
|
|
||||||
|
.PHONY: all clean distclean install uninstall
|
105
tools/libvpn.c
Normal file
105
tools/libvpn.c
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
|
||||||
|
/* This file is part of DeforaOS System VPN */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <System.h>
|
||||||
|
#include <System/App.h>
|
||||||
|
#include "../src/common.c"
|
||||||
|
|
||||||
|
|
||||||
|
/* libVPN */
|
||||||
|
/* private */
|
||||||
|
/* types */
|
||||||
|
typedef struct _VPNSocket
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
} VPNSocket;
|
||||||
|
|
||||||
|
|
||||||
|
/* constants */
|
||||||
|
#define PROGNAME "libVPN"
|
||||||
|
#define VPN_OFFSET 1024
|
||||||
|
|
||||||
|
|
||||||
|
/* variables */
|
||||||
|
static AppClient * _appclient = NULL;
|
||||||
|
|
||||||
|
/* local functions */
|
||||||
|
static int (*old_connect)(int fd, const struct sockaddr * name,
|
||||||
|
socklen_t namelen);
|
||||||
|
|
||||||
|
|
||||||
|
/* prototypes */
|
||||||
|
static void _libvpn_init(void);
|
||||||
|
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
static void _libvpn_init(void)
|
||||||
|
{
|
||||||
|
static void * hdl = NULL;
|
||||||
|
/* FIXME some symbols may be in libsocket.so instead */
|
||||||
|
static char * libc[] = { "/lib/libc.so", "/lib/libc.so.6" };
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if(hdl != NULL)
|
||||||
|
return;
|
||||||
|
for(i = 0; i < sizeof(libc) / sizeof(*libc); i++)
|
||||||
|
if((hdl = dlopen(libc[i], RTLD_LAZY)) != NULL)
|
||||||
|
break;
|
||||||
|
if(hdl == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: %s\n", PROGNAME, dlerror());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if((old_connect = dlsym(hdl, "connect")) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: %s\n", PROGNAME, dlerror());
|
||||||
|
dlclose(hdl);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
dlclose(hdl);
|
||||||
|
if((_appclient = appclient_new("VPN")) == NULL)
|
||||||
|
{
|
||||||
|
error_print(PROGNAME);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* interface */
|
||||||
|
/* connect */
|
||||||
|
int connect(int fd, const struct sockaddr * name, socklen_t namelen)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
_libvpn_init();
|
||||||
|
if(fd < VPN_OFFSET)
|
||||||
|
return old_connect(fd, name, namelen);
|
||||||
|
if(appclient_call(_appclient, &ret, "connect", fd - VPN_OFFSET) != 0)
|
||||||
|
return -1;
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "DEBUG: connect(%d) => %d\n", fd - VFS_OFFSET, ret);
|
||||||
|
#endif
|
||||||
|
if(ret != 0)
|
||||||
|
return _vpn_errno(_vpn_error, _vpn_error_cnt, -ret, 1);
|
||||||
|
return ret;
|
||||||
|
}
|
16
tools/project.conf
Normal file
16
tools/project.conf
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
targets=libVPN
|
||||||
|
cppflags_force=-I ../include
|
||||||
|
cppflags=-I $(PREFIX)/include
|
||||||
|
cflags_force=-W -fPIC `pkg-config --cflags libApp`
|
||||||
|
cflags=-Wall -g -O2 -pedantic
|
||||||
|
ldflags_force=`pkg-config --libs libApp`
|
||||||
|
ldflags=
|
||||||
|
dist=Makefile
|
||||||
|
|
||||||
|
[libVPN]
|
||||||
|
type=plugin
|
||||||
|
sources=libvpn.c
|
||||||
|
install=$(PREFIX)/lib/AppWrapper
|
||||||
|
|
||||||
|
[libvpn.c]
|
||||||
|
depends=../include/VPN.h
|
Loading…
Reference in New Issue
Block a user