aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_zlib
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_zlib')
-rw-r--r--src/ejabberd_zlib/Makefile.in63
-rw-r--r--src/ejabberd_zlib/Makefile.win3236
-rw-r--r--src/ejabberd_zlib/ejabberd_zlib.erl208
-rw-r--r--src/ejabberd_zlib/ejabberd_zlib_drv.c219
4 files changed, 0 insertions, 526 deletions
diff --git a/src/ejabberd_zlib/Makefile.in b/src/ejabberd_zlib/Makefile.in
deleted file mode 100644
index b572c1169..000000000
--- a/src/ejabberd_zlib/Makefile.in
+++ /dev/null
@@ -1,63 +0,0 @@
-# $Id$
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-
-ZLIB_CFLAGS = @ZLIB_CFLAGS@
-ZLIB_LIBS = @ZLIB_LIBS@
-
-ERLANG_CFLAGS = @ERLANG_CFLAGS@
-ERLANG_LIBS = @ERLANG_LIBS@
-
-# Assume Linux-style dynamic library flags
-DYNAMIC_LIB_CFLAGS = -fpic -shared
-ifeq ($(shell uname),Darwin)
- DYNAMIC_LIB_CFLAGS = -fPIC -bundle -flat_namespace -undefined suppress
-endif
-ifeq ($(shell uname),SunOs)
- DYNAMIC_LIB_CFLAGS = -KPIC -G -z text
-endif
-
-EFLAGS += -I ..
-EFLAGS += -pz ..
-
-# make debug=true to compile Erlang module with debug informations.
-ifdef debug
- EFLAGS+=+debug_info
-endif
-
-ERLSHLIBS = ../ejabberd_zlib_drv.so
-OUTDIR = ..
-SOURCES = $(wildcard *.erl)
-BEAMS = $(addprefix $(OUTDIR)/,$(SOURCES:.erl=.beam))
-
-all: $(BEAMS) $(ERLSHLIBS)
-
-$(OUTDIR)/%.beam: %.erl
- @ERLC@ -W $(EFLAGS) -o $(OUTDIR) $<
-
-#all: $(ERLSHLIBS)
-# erl -s make all report "{outdir, \"..\"}" -noinput -s erlang halt
-
-$(ERLSHLIBS): ../%.so: %.c
- $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
- $(subst ../,,$(subst .so,.c,$@)) \
- $(LIBS) \
- $(ZLIB_LIBS) \
- $(ZLIB_CFLAGS) \
- $(ERLANG_LIBS) \
- $(ERLANG_CFLAGS) \
- -o $@ \
- $(DYNAMIC_LIB_CFLAGS)
-
-clean:
- rm -f $(BEAMS) $(ERLSHLIBS)
-
-distclean: clean
- rm -f Makefile
-
-TAGS:
- etags *.erl
diff --git a/src/ejabberd_zlib/Makefile.win32 b/src/ejabberd_zlib/Makefile.win32
deleted file mode 100644
index 0041df83c..000000000
--- a/src/ejabberd_zlib/Makefile.win32
+++ /dev/null
@@ -1,36 +0,0 @@
-
-include ..\Makefile.inc
-
-EFLAGS = -I .. -pz ..
-
-OUTDIR = ..
-BEAMS = ..\ejabberd_zlib.beam
-
-SOURCE = ejabberd_zlib_drv.c
-OBJECT = ejabberd_zlib_drv.o
-DLL = $(OUTDIR)\ejabberd_zlib_drv.dll
-
-ALL : $(DLL) $(BEAMS)
-
-CLEAN :
- -@erase $(DLL)
- -@erase $(OUTDIR)\ejabberd_zlib_drv.exp
- -@erase $(OUTDIR)\ejabberd_zlib_drv.lib
- -@erase $(OBJECT)
- -@erase $(BEAMS)
-
-$(OUTDIR)\ejabberd_zlib.beam : ejabberd_zlib.erl
- erlc -W $(EFLAGS) -o $(OUTDIR) ejabberd_zlib.erl
-
-CC=cl.exe
-CC_FLAGS=-nologo -D__WIN32__ -DWIN32 -DWINDOWS -D_WIN32 -DNT -MD -Ox -I"$(ERLANG_DIR)\usr\include" -I"$(EI_DIR)\include" -I"$(ZLIB_DIR)\include"
-
-LD=link.exe
-LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(ZLIB_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
-
-$(DLL) : $(OBJECT)
- $(LD) $(LD_FLAGS) -out:$@ $<
-
-$(OBJECT) : $(SOURCE)
- $(CC) $(CC_FLAGS) -c -Fo$@ $<
-
diff --git a/src/ejabberd_zlib/ejabberd_zlib.erl b/src/ejabberd_zlib/ejabberd_zlib.erl
deleted file mode 100644
index 3dee8d687..000000000
--- a/src/ejabberd_zlib/ejabberd_zlib.erl
+++ /dev/null
@@ -1,208 +0,0 @@
-%%%----------------------------------------------------------------------
-%%% File : ejabberd_zlib.erl
-%%% Author : Alexey Shchepin <alexey@process-one.net>
-%%% Purpose : Interface to zlib
-%%% Created : 19 Jan 2006 by Alexey Shchepin <alexey@process-one.net>
-%%%
-%%%
-%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
-%%%
-%%% 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; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% 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, write to the Free Software
-%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-%%% 02111-1307 USA
-%%%
-%%%----------------------------------------------------------------------
-
--module(ejabberd_zlib).
-
--author('alexey@process-one.net').
-
--behaviour(gen_server).
-
--export([start/0, start_link/0, enable_zlib/2,
- disable_zlib/1, send/2, recv/2, recv/3, recv_data/2,
- setopts/2, sockname/1, peername/1, get_sockmod/1,
- controlling_process/2, close/1]).
-
-%% Internal exports, call-back functions.
--export([init/1, handle_call/3, handle_cast/2,
- handle_info/2, code_change/3, terminate/2]).
-
--define(DEFLATE, 1).
-
--define(INFLATE, 2).
-
--record(zlibsock, {sockmod :: atom(),
- socket :: inet:socket(),
- zlibport :: port()}).
-
--type zlib_socket() :: #zlibsock{}.
-
--export_type([zlib_socket/0]).
-
-start() ->
- gen_server:start({local, ?MODULE}, ?MODULE, [], []).
-
-start_link() ->
- gen_server:start_link({local, ?MODULE}, ?MODULE, [],
- []).
-
-init([]) ->
- case erl_ddll:load_driver(ejabberd:get_so_path(),
- ejabberd_zlib_drv)
- of
- ok -> ok;
- {error, already_loaded} -> ok
- end,
- Port = open_port({spawn, "ejabberd_zlib_drv"},
- [binary]),
- {ok, Port}.
-
-%%% --------------------------------------------------------
-%%% The call-back functions.
-%%% --------------------------------------------------------
-
-handle_call(_, _, State) -> {noreply, State}.
-
-handle_cast(_, State) -> {noreply, State}.
-
-handle_info({'EXIT', Port, Reason}, Port) ->
- {stop, {port_died, Reason}, Port};
-handle_info({'EXIT', _Pid, _Reason}, Port) ->
- {noreply, Port};
-handle_info(_, State) -> {noreply, State}.
-
-code_change(_OldVsn, State, _Extra) -> {ok, State}.
-
-terminate(_Reason, Port) -> Port ! {self, close}, ok.
-
--spec enable_zlib(atom(), inet:socket()) -> {ok, zlib_socket()}.
-
-enable_zlib(SockMod, Socket) ->
- case erl_ddll:load_driver(ejabberd:get_so_path(),
- ejabberd_zlib_drv)
- of
- ok -> ok;
- {error, already_loaded} -> ok
- end,
- Port = open_port({spawn, "ejabberd_zlib_drv"},
- [binary]),
- {ok,
- #zlibsock{sockmod = SockMod, socket = Socket,
- zlibport = Port}}.
-
--spec disable_zlib(zlib_socket()) -> {atom(), inet:socket()}.
-
-disable_zlib(#zlibsock{sockmod = SockMod,
- socket = Socket, zlibport = Port}) ->
- port_close(Port), {SockMod, Socket}.
-
--spec recv(zlib_socket(), number()) -> {ok, binary()} | {error, any()}.
-
-recv(Socket, Length) -> recv(Socket, Length, infinity).
-
--spec recv(zlib_socket(), number(), timeout()) -> {ok, binary()} |
- {error, any()}.
-
-recv(#zlibsock{sockmod = SockMod, socket = Socket} =
- ZlibSock,
- Length, Timeout) ->
- case SockMod:recv(Socket, Length, Timeout) of
- {ok, Packet} -> recv_data(ZlibSock, Packet);
- {error, _Reason} = Error -> Error
- end.
-
--spec recv_data(zlib_socket(), iodata()) -> {ok, binary()} | {error, any()}.
-
-recv_data(#zlibsock{sockmod = SockMod,
- socket = Socket} =
- ZlibSock,
- Packet) ->
- case SockMod of
- gen_tcp -> recv_data2(ZlibSock, Packet);
- _ ->
- case SockMod:recv_data(Socket, Packet) of
- {ok, Packet2} -> recv_data2(ZlibSock, Packet2);
- Error -> Error
- end
- end.
-
-recv_data2(ZlibSock, Packet) ->
- case catch recv_data1(ZlibSock, Packet) of
- {'EXIT', Reason} -> {error, Reason};
- Res -> Res
- end.
-
-recv_data1(#zlibsock{zlibport = Port} = _ZlibSock,
- Packet) ->
- case port_control(Port, ?INFLATE, Packet) of
- <<0, In/binary>> -> {ok, In};
- <<1, Error/binary>> -> {error, (Error)}
- end.
-
--spec send(zlib_socket(), iodata()) -> ok | {error, binary() | inet:posix()}.
-
-send(#zlibsock{sockmod = SockMod, socket = Socket,
- zlibport = Port},
- Packet) ->
- case port_control(Port, ?DEFLATE, Packet) of
- <<0, Out/binary>> -> SockMod:send(Socket, Out);
- <<1, Error/binary>> -> {error, (Error)}
- end.
-
--spec setopts(zlib_socket(), list()) -> ok | {error, inet:posix()}.
-
-setopts(#zlibsock{sockmod = SockMod, socket = Socket},
- Opts) ->
- case SockMod of
- gen_tcp -> inet:setopts(Socket, Opts);
- _ -> SockMod:setopts(Socket, Opts)
- end.
-
--spec sockname(zlib_socket()) -> {ok, {inet:ip_address(), inet:port_number()}} |
- {error, inet:posix()}.
-
-sockname(#zlibsock{sockmod = SockMod,
- socket = Socket}) ->
- case SockMod of
- gen_tcp -> inet:sockname(Socket);
- _ -> SockMod:sockname(Socket)
- end.
-
--spec get_sockmod(zlib_socket()) -> atom().
-
-get_sockmod(#zlibsock{sockmod = SockMod}) -> SockMod.
-
--spec peername(zlib_socket()) -> {ok, {inet:ip_address(), inet:port_number()}} |
- {error, inet:posix()}.
-
-peername(#zlibsock{sockmod = SockMod,
- socket = Socket}) ->
- case SockMod of
- gen_tcp -> inet:peername(Socket);
- _ -> SockMod:peername(Socket)
- end.
-
--spec controlling_process(zlib_socket(), pid()) -> ok | {error, atom()}.
-
-controlling_process(#zlibsock{sockmod = SockMod,
- socket = Socket},
- Pid) ->
- SockMod:controlling_process(Socket, Pid).
-
--spec close(zlib_socket()) -> true.
-
-close(#zlibsock{sockmod = SockMod, socket = Socket,
- zlibport = Port}) ->
- SockMod:close(Socket), port_close(Port).
diff --git a/src/ejabberd_zlib/ejabberd_zlib_drv.c b/src/ejabberd_zlib/ejabberd_zlib_drv.c
deleted file mode 100644
index ea1cc74ca..000000000
--- a/src/ejabberd_zlib/ejabberd_zlib_drv.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * ejabberd, Copyright (C) 2002-2013 ProcessOne
- *
- * 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; either version 2 of the
- * License, or (at your option) any later version.
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <erl_driver.h>
-#include <zlib.h>
-
-/*
- * R15B changed several driver callbacks to use ErlDrvSizeT and
- * ErlDrvSSizeT typedefs instead of int.
- * This provides missing typedefs on older OTP versions.
- */
-#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
-typedef int ErlDrvSizeT;
-typedef int ErlDrvSSizeT;
-#endif
-
-#define BUF_SIZE 1024
-
-typedef struct {
- ErlDrvPort port;
- z_stream *d_stream;
- z_stream *i_stream;
-} ejabberd_zlib_data;
-
-static void* zlib_alloc(void* data, unsigned int items, unsigned int size)
-{
- return (void*) driver_alloc(items*size);
-}
-
-static void zlib_free(void* data, void* addr)
-{
- driver_free(addr);
-}
-
-static ErlDrvData ejabberd_zlib_drv_start(ErlDrvPort port, char *buff)
-{
- ejabberd_zlib_data *d =
- (ejabberd_zlib_data *)driver_alloc(sizeof(ejabberd_zlib_data));
- d->port = port;
-
- d->d_stream = (z_stream *)driver_alloc(sizeof(z_stream));
-
- d->d_stream->zalloc = zlib_alloc;
- d->d_stream->zfree = zlib_free;
- d->d_stream->opaque = (voidpf)0;
-
- deflateInit(d->d_stream, Z_DEFAULT_COMPRESSION);
-
- d->i_stream = (z_stream *)driver_alloc(sizeof(z_stream));
-
- d->i_stream->zalloc = zlib_alloc;
- d->i_stream->zfree = zlib_free;
- d->i_stream->opaque = (voidpf)0;
-
- inflateInit(d->i_stream);
-
- set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY);
-
- return (ErlDrvData)d;
-}
-
-static void ejabberd_zlib_drv_stop(ErlDrvData handle)
-{
- ejabberd_zlib_data *d = (ejabberd_zlib_data *)handle;
-
- deflateEnd(d->d_stream);
- driver_free(d->d_stream);
-
- inflateEnd(d->i_stream);
- driver_free(d->i_stream);
-
- driver_free((char *)handle);
-}
-
-
-#define DEFLATE 1
-#define INFLATE 2
-
-#define die_unless(cond, errstr) \
- if (!(cond)) \
- { \
- rlen = strlen(errstr) + 1; \
- b = driver_realloc_binary(b, rlen); \
- b->orig_bytes[0] = 1; \
- strncpy(b->orig_bytes + 1, errstr, rlen - 1); \
- *rbuf = (char *)b; \
- return rlen; \
- }
-
-
-static ErlDrvSSizeT ejabberd_zlib_drv_control(ErlDrvData handle,
- unsigned int command,
- char *buf, ErlDrvSizeT len,
- char **rbuf, ErlDrvSizeT rlen)
-{
- ejabberd_zlib_data *d = (ejabberd_zlib_data *)handle;
- int err;
- int size;
- ErlDrvBinary *b;
-
- switch (command)
- {
- case DEFLATE:
- size = BUF_SIZE + 1;
- rlen = 1;
- b = driver_alloc_binary(size);
- b->orig_bytes[0] = 0;
-
- d->d_stream->next_in = (unsigned char *)buf;
- d->d_stream->avail_in = len;
- d->d_stream->avail_out = 0;
- err = Z_OK;
-
- while (err == Z_OK && d->d_stream->avail_out == 0)
- {
- d->d_stream->next_out = (unsigned char *)b->orig_bytes + rlen;
- d->d_stream->avail_out = BUF_SIZE;
-
- err = deflate(d->d_stream, Z_SYNC_FLUSH);
- die_unless((err == Z_OK) || (err == Z_STREAM_END),
- "Deflate error");
-
- rlen += (BUF_SIZE - d->d_stream->avail_out);
- size += (BUF_SIZE - d->d_stream->avail_out);
- b = driver_realloc_binary(b, size);
- }
- b = driver_realloc_binary(b, rlen);
- *rbuf = (char *)b;
- return rlen;
- case INFLATE:
- size = BUF_SIZE + 1;
- rlen = 1;
- b = driver_alloc_binary(size);
- b->orig_bytes[0] = 0;
-
- if (len > 0) {
- d->i_stream->next_in = (unsigned char *)buf;
- d->i_stream->avail_in = len;
- d->i_stream->avail_out = 0;
- err = Z_OK;
-
- while (err == Z_OK && d->i_stream->avail_out == 0)
- {
- d->i_stream->next_out = (unsigned char *)b->orig_bytes + rlen;
- d->i_stream->avail_out = BUF_SIZE;
-
- err = inflate(d->i_stream, Z_SYNC_FLUSH);
- die_unless((err == Z_OK) || (err == Z_STREAM_END),
- "Inflate error");
-
- rlen += (BUF_SIZE - d->i_stream->avail_out);
- size += (BUF_SIZE - d->i_stream->avail_out);
- b = driver_realloc_binary(b, size);
- }
- }
- b = driver_realloc_binary(b, rlen);
- *rbuf = (char *)b;
- return rlen;
- }
-
- b = driver_alloc_binary(1);
- b->orig_bytes[0] = 0;
- *rbuf = (char *)b;
- return 1;
-}
-
-
-ErlDrvEntry ejabberd_zlib_driver_entry = {
- NULL, /* F_PTR init, N/A */
- ejabberd_zlib_drv_start, /* L_PTR start, called when port is opened */
- ejabberd_zlib_drv_stop, /* F_PTR stop, called when port is closed */
- NULL, /* F_PTR output, called when erlang has sent */
- NULL, /* F_PTR ready_input, called when input descriptor ready */
- NULL, /* F_PTR ready_output, called when output descriptor ready */
- "ejabberd_zlib_drv", /* char *driver_name, the argument to open_port */
- NULL, /* F_PTR finish, called when unloaded */
- NULL, /* handle */
- ejabberd_zlib_drv_control, /* F_PTR control, port_command callback */
- NULL, /* F_PTR timeout, reserved */
- NULL, /* F_PTR outputv, reserved */
- /* Added in Erlang/OTP R15B: */
- NULL, /* ready_async */
- NULL, /* flush */
- NULL, /* call */
- NULL, /* event */
- ERL_DRV_EXTENDED_MARKER, /* extended_marker */
- ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
- ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
- 0, /* driver_flags */
- NULL, /* handle2 */
- NULL, /* process_exit */
- NULL /* stop_select */
-};
-
-DRIVER_INIT(ejabberd_zlib_drv) /* must match name in driver_entry */
-{
- return &ejabberd_zlib_driver_entry;
-}
-
-