ports/60216: New port: ftp/prozilla - A download accelerator

Nosov Artem chip-set at mail.ru
Sat Dec 13 23:20:16 UTC 2003


>Number:         60216
>Category:       ports
>Synopsis:       New port: ftp/prozilla - A download accelerator
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Dec 13 15:20:09 PST 2003
>Closed-Date:
>Last-Modified:
>Originator:     Nosov Artem
>Release:        FreeBSD 4.8-RELEASE i386
>Organization:
ASC
>Environment:
System: FreeBSD 4.8-RELEASE


	
>Description:

New port: ftp/prozilla - A downloads accelerator

After nine days of working ... seems that is's working ;). Please test it and write some feedback about my implementation of gethostbyname_r() function. Thx.

ProZilla is a download accelerator which gives you a 200% to 300% 
improvement in your file downloading speeds.

Features:
- Supports FTP
- Supports HTTP including redirection
- Supports resuming
- Complete acceleration: the file will be downloaded as fast as possible
  as your bandwidth allows 
- FTP passwords can be specified with the URL, or can be obtained
  automatically from the .netrc if it exists.
- The number of connections that prozilla uses can be specified using the -k
  option (4 by default).
- The bandwidth can be limited using the --max-bps switch or from the
  config file.
- FTPsearch support, to enable this specify the -s option. 

>How-To-Repeat:
	
>Fix:

	

--- prozilla.shar begins here ---
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	prozilla/
#	prozilla/files
#	prozilla/files/patch-src::ftpsearch.c
#	prozilla/files/patch-src::misc.c
#	prozilla/files/patch-src::http-retr.c
#	prozilla/files/patch-src::ping.c
#	prozilla/files/patch-src::ftp-retr.c
#	prozilla/files/patch-src::connection.c
#	prozilla/files/patch-src::connect.c
#	prozilla/files/patch-configure.in
#	prozilla/Makefile
#	prozilla/distinfo
#	prozilla/pkg-plist
#	prozilla/pkg-descr
#
echo c - prozilla/
mkdir -p prozilla/ > /dev/null 2>&1
echo c - prozilla/files
mkdir -p prozilla/files > /dev/null 2>&1
echo x - prozilla/files/patch-src::ftpsearch.c
sed 's/^X//' >prozilla/files/patch-src::ftpsearch.c << 'END-of-prozilla/files/patch-src::ftpsearch.c'
X--- src/ftpsearch.c.orig	Fri Dec 12 23:25:02 2003
X+++ src/ftpsearch.c	Fri Dec 12 23:25:33 2003
X@@ -25,6 +25,9 @@
X #include <sys/socket.h>
X #include <fcntl.h>
X #include <netdb.h>
X+#if defined(__FreeBSD__)
X+#include <netinet/in_systm.h>
X+#endif /* __FreeBSD__ */
X #include <netinet/in.h>
X #include <netinet/ip.h>
X #include <arpa/inet.h>
END-of-prozilla/files/patch-src::ftpsearch.c
echo x - prozilla/files/patch-src::misc.c
sed 's/^X//' >prozilla/files/patch-src::misc.c << 'END-of-prozilla/files/patch-src::misc.c'
X--- src/misc.c.orig	Fri Dec 12 23:33:19 2003
X+++ src/misc.c	Fri Dec 12 23:33:58 2003
X@@ -24,7 +24,9 @@
X #include <stdio.h>
X #include <stdarg.h>
X #include <stdlib.h>
X+#if !defined(__FreeBSD__)
X #include <malloc.h>
X+#endif /* !__FreeBSD__ */
X #include <string.h>
X #include <ctype.h>
X #include <curses.h>
END-of-prozilla/files/patch-src::misc.c
echo x - prozilla/files/patch-src::http-retr.c
sed 's/^X//' >prozilla/files/patch-src::http-retr.c << 'END-of-prozilla/files/patch-src::http-retr.c'
X--- src/http-retr.c.orig	Fri Dec 12 23:25:48 2003
X+++ src/http-retr.c	Fri Dec 12 23:26:14 2003
X@@ -32,6 +32,9 @@
X #include <fcntl.h>
X #include <sys/socket.h>
X #include <sys/time.h>
X+#if defined(__FreeBSD__)
X+#include <netinet/in_systm.h>
X+#endif /* __FreeBSD__ */
X #include <netinet/in.h>
X #include <netinet/ip.h>
X #include <netinet/tcp.h>
END-of-prozilla/files/patch-src::http-retr.c
echo x - prozilla/files/patch-src::ping.c
sed 's/^X//' >prozilla/files/patch-src::ping.c << 'END-of-prozilla/files/patch-src::ping.c'
X--- src/ping.c.orig	Fri Dec 12 23:34:06 2003
X+++ src/ping.c	Fri Dec 12 23:34:41 2003
X@@ -23,6 +23,9 @@
X #include <sys/socket.h>
X #include <fcntl.h>
X #include <netdb.h>
X+#if defined(__FreeBSD__)
X+#include <netinet/in_systm.h>
X+#endif /* __FreeBSD__ */
X #include <netinet/in.h>
X #include <netinet/ip.h>
X #include <arpa/inet.h>
END-of-prozilla/files/patch-src::ping.c
echo x - prozilla/files/patch-src::ftp-retr.c
sed 's/^X//' >prozilla/files/patch-src::ftp-retr.c << 'END-of-prozilla/files/patch-src::ftp-retr.c'
X--- src/ftp-retr.c.orig	Fri Dec 12 23:24:04 2003
X+++ src/ftp-retr.c	Fri Dec 12 23:24:44 2003
X@@ -32,6 +32,9 @@
X #include <netdb.h>
X #include <sys/socket.h>
X #include <sys/time.h>
X+#if defined(__FreeBSD__)
X+#include <netinet/in_systm.h>
X+#endif /* __FreeBSD__ */
X #include <netinet/in.h>
X #include <netinet/ip.h>
X #include <netinet/tcp.h>
END-of-prozilla/files/patch-src::ftp-retr.c
echo x - prozilla/files/patch-src::connection.c
sed 's/^X//' >prozilla/files/patch-src::connection.c << 'END-of-prozilla/files/patch-src::connection.c'
X--- src/connection.c.orig	Fri Dec 12 23:22:26 2003
X+++ src/connection.c	Fri Dec 12 23:23:38 2003
X@@ -30,7 +30,12 @@
X #include <assert.h>
X #include <pthread.h>
X 
X+#if defined(__FreeBSD__)
X+#include <sys/param.h>
X+#include <sys/mount.h>
X+#else 
X #include <sys/vfs.h>
X+#endif /* !__FreeBSD__ */
X 
X #include "connection.h"
X #include "misc.h"
END-of-prozilla/files/patch-src::connection.c
echo x - prozilla/files/patch-src::connect.c
sed 's/^X//' >prozilla/files/patch-src::connect.c << 'END-of-prozilla/files/patch-src::connect.c'
X--- src/connect.c.orig	Fri Dec 12 23:40:31 2003
X+++ src/connect.c	Sat Dec 13 00:51:03 2003
X@@ -27,6 +27,9 @@
X #include <sys/socket.h>
X #include <fcntl.h>
X #include <netdb.h>
X+#if defined(__FreeBSD__)
X+#include <netinet/in_systm.h>
X+#endif /* __FreeBSD__ */
X #include <netinet/in.h>
X #include <netinet/ip.h>
X #include <netdb.h>
X@@ -42,6 +45,116 @@
X #include "runtime.h"
X #include "debug.h"
X 
X+#if defined(__FreeBSD__)
X+/*
X+ * Thread safe implementation of gethostbyname
X+ */
X+#include <machine/param.h>
X+#include <errno.h>
X+#include <netdb.h>
X+#include <pthread.h>
X+
X+static pthread_mutex_t  __hostkey_mutex = PTHREAD_MUTEX_INITIALIZER;
X+
X+/* based on bind implementation with cosmetic modifications */
X+static int
X+copy_hostent(struct hostent *src, struct hostent *dest, 
X+    char *buf, size_t buflen) 
X+{
X+	char *cp;
X+	char **ptr;
X+	int i, n;
X+	size_t nptr, len;
X+
X+	/* Find out the amount of space required to store the answer. */
X+	nptr = 2; /* NULL ptrs */
X+	len = (char *) ALIGN(buf) - buf;
X+	for (i = 0; src->h_addr_list[i]; i++, nptr++) {
X+		len += src->h_length;
X+	}
X+	for (i = 0; src->h_aliases[i]; i++, nptr++) {
X+		len += strlen(src->h_aliases[i]) + 1;
X+	}
X+	len += strlen(src->h_name) + 1;
X+	len += nptr * sizeof(char *);
X+	
X+	if (len > buflen) {
X+		errno = ERANGE;
X+		return -1;
X+	}
X+
X+	/* copy address size and type */
X+	dest->h_addrtype = src->h_addrtype;
X+	n = dest->h_length = src->h_length;
X+
X+	ptr = (char **)ALIGN(buf);
X+	cp = (char *)ALIGN(buf) + nptr * sizeof(char *);
X+
X+	/* copy address list */
X+	dest->h_addr_list = ptr;
X+	for (i = 0; src->h_addr_list[i]; i++ , ptr++) {
X+		memcpy(cp, src->h_addr_list[i], n);
X+		dest->h_addr_list[i] = cp;
X+		cp += n;
X+	}
X+	dest->h_addr_list[i] = NULL;
X+	ptr++;
X+
X+	/* copy official name */
X+	n = strlen(src->h_name) + 1;
X+	strcpy(cp, src->h_name);
X+	dest->h_name = cp;
X+	cp += n;
X+
X+	/* copy aliases */
X+	dest->h_aliases = ptr;
X+	for (i = 0 ; src->h_aliases[i]; i++) {
X+		n = strlen(src->h_aliases[i]) + 1;
X+		strcpy(cp, src->h_aliases[i]);
X+		dest->h_aliases[i] = cp;
X+		cp += n;
X+	}
X+	dest->h_aliases[i] = NULL;
X+
X+	return 0;
X+}
X+
X+/*
X+ * I'am not sure in this gethostbyname_r implemention, but seems 
X+ * it works fine. If you have some feedback or suggestions please 
X+ * mail me chip-set at mail.ru
X+ */
X+int
X+mygethostbyname_r(const char *name, struct hostent *ret, char *buf, 
X+    size_t buflen, struct hostent **result, int *h_errnop)
X+{
X+  struct hostent *hp;
X+  int res;
X+  
X+  pthread_mutex_lock(&__hostkey_mutex);
X+  hp = gethostbyname(name);
X+  if (NULL == hp)
X+  {
X+    /* unlocking mutex and store error results */
X+    *h_errnop = h_errno;
X+    pthread_mutex_unlock(&__hostkey_mutex);
X+    *result = NULL;
X+    return -1;
X+  }
X+  res = copy_hostent(hp, ret, buf, buflen);
X+  pthread_mutex_unlock(&__hostkey_mutex);
X+  if (res < 0)
X+  {
X+    *result = NULL;
X+    return res;
X+  }
X+  /* success */
X+  *result = ret;
X+  return 0;
X+}
X+
X+#endif /* __FreeBSD__ */
X+
X uerr_t connect_to_server(int *sock, char *name, int port, int timeout)
X {
X     unsigned int portnum;
X@@ -357,6 +470,11 @@
X 			  gethostbyname_r(host,hostbuf,*tmphstbuf,*hstbuflen,&herr)))
X 	       && (errno == ERANGE))
X #endif
X+#if defined(__FreeBSD__)
X+  while ((res = 
X+      mygethostbyname_r(host, hostbuf, *tmphstbuf, *hstbuflen, &hp, &herr))
X+    && (errno == ERANGE))
X+#endif  
X 	{
X 	    /* Enlarge the buffer. */
X 	    *hstbuflen *= 2;
END-of-prozilla/files/patch-src::connect.c
echo x - prozilla/files/patch-configure.in
sed 's/^X//' >prozilla/files/patch-configure.in << 'END-of-prozilla/files/patch-configure.in'
X--- configure.in.orig	Sat Dec 13 00:56:35 2003
X+++ configure.in	Sat Dec 13 00:59:02 2003
X@@ -7,6 +7,8 @@
X AC_PROG_CC
X AC_PROG_INSTALL
X 
X+AC_CHECK_LIB(gnugetopt, getopt_long,, AC_MSG_ERROR([** The gnugetopt library is not installed.**]))
X+
X dnl Replace `main' with a function in -lpthread:
X AC_CHECK_LIB(pthread, pthread_create,, AC_MSG_ERROR([** The pthread library is not installed.**]))
X 
X@@ -45,7 +47,7 @@
X AC_FUNC_VPRINTF
X AC_CHECK_FUNCS(gettimeofday select socket strdup strerror strstr)
X 
X-AC_caolan_FUNC_WHICH_GETHOSTBYNAME_R
X+dnl AC_caolan_FUNC_WHICH_GETHOSTBYNAME_R
X 
X AC_OUTPUT(src/Makefile man/Makefile Makefile)
X 
END-of-prozilla/files/patch-configure.in
echo x - prozilla/Makefile
sed 's/^X//' >prozilla/Makefile << 'END-of-prozilla/Makefile'
X# New ports collection makefile for:	prozilla
X# Date created:				Fri 12 December 2003
X# Whom:					Nosov Artem <chip-set at mail.ru>
X#
X# $FreeBSD$
X#
X
XPORTNAME=	prozilla
XPORTVERSION=	1.3.6
XCATEGORIES=	ftp www
XMASTER_SITES=	http://prozilla.genesys.ro/downloads/prozilla/tarballs/
X
XMAINTAINER=	chip-set at mail.ru
XCOMMENT=	A download accelerator
X
XBUILD_DEPENDS=	autoconf:${PORTSDIR}/devel/autoconf
XLIB_DEPENDS=    ncurses.5:${PORTSDIR}/devel/ncurses
X
XUSE_GETOPT_LONG=	yes
XUSE_GMAKE=	yes
XUSE_REINPLACE=	yes
X
XGNU_CONFIGURE=	yes
XCONFIGURE_TARGET=       --build=${MACHINE_ARCH}-portbld-freebsd${OSREL}
XCONFIGURE_ENV=	CPPFLAGS="${CPPFLAGS} -I${LOCALBASE}/include" \
X		LIBS="-L${LOCALBASE}/lib"
XMAKE_ARGS=	ACLOCAL="${TRUE}" AUTOCONF="${TRUE}" AUTOMAKE="${TRUE}" \
X	   	AUTOHEADER="${TRUE}"
X
XMAN1=		prozilla.1
XMLINKS=		prozilla.1 proz.1
X
Xpre-configure:
X	@cd ${WRKSRC} && autoconf
X	@${REINPLACE_CMD} -e \
X		's|-lpthread|${PTHREAD_LIBS}|g' ${WRKSRC}/configure
X
Xpost-install:
X.if !defined(NOPORTDOCS)
X	@${MKDIR} ${DOCSDIR}
X.for file in FAQ README TODO
X	@${INSTALL_DATA} ${WRKSRC}/${file} ${DOCSDIR}
X.endfor
X.endif
X
X.include <bsd.port.mk>
END-of-prozilla/Makefile
echo x - prozilla/distinfo
sed 's/^X//' >prozilla/distinfo << 'END-of-prozilla/distinfo'
XMD5 (prozilla-1.3.6.tar.gz) = 65864dfe72f5cb7d7e595ca6f34fc7d7
END-of-prozilla/distinfo
echo x - prozilla/pkg-plist
sed 's/^X//' >prozilla/pkg-plist << 'END-of-prozilla/pkg-plist'
Xbin/proz
X at unexec if cmp -s %D/etc/prozilla.conf %D/etc/prozilla.conf-sample; then rm -f %D/etc/prozilla.conf; fi
Xetc/prozilla.conf-sample
X%%PORTDOCS%%share/doc/prozilla/FAQ
X%%PORTDOCS%%share/doc/prozilla/README
X%%PORTDOCS%%share/doc/prozilla/TODO
X%%PORTDOCS%%@dirrm share/doc/prozilla
END-of-prozilla/pkg-plist
echo x - prozilla/pkg-descr
sed 's/^X//' >prozilla/pkg-descr << 'END-of-prozilla/pkg-descr'
XProZilla is a download accelerator which gives you a 200% to 300% 
Ximprovement in your file downloading speeds.
X
XFeatures:
X- Supports FTP
X- Supports HTTP including redirection
X- Supports resuming
X- Complete acceleration: the file will be downloaded as fast as possible
X  as your bandwidth allows 
X- FTP passwords can be specified with the URL, or can be obtained
X  automatically from the .netrc if it exists.
X- The number of connections that prozilla uses can be specified using the -k
X  option (4 by default).
X- The bandwidth can be limited using the --max-bps switch or from the
X  config file.
X- FTPsearch support, to enable this specify the -s option. 
X
X- Nosov Artem
Xchip-set at mail.ru
END-of-prozilla/pkg-descr
exit
--- prozilla.shar ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list