initial master
authorTobias Sachs <src.twobees.de-co0Chie-ts@ctsachs.de>
Sun, 23 Aug 2020 12:18:46 +0000 (14:18 +0200)
committerTobias Sachs <src.twobees.de-co0Chie-ts@ctsachs.de>
Sun, 23 Aug 2020 12:39:47 +0000 (14:39 +0200)
14 files changed:
Changes [new file with mode: 0644]
MANIFEST [new file with mode: 0644]
Makefile.PL [new file with mode: 0644]
Makefile.old [new file with mode: 0644]
README [new symlink]
README.md [new file with mode: 0644]
ignore.txt [new file with mode: 0644]
lib/Netio230B.pm [new file with mode: 0644]
t/00-load.t [new file with mode: 0644]
t/01-const.t [new file with mode: 0644]
t/boilerplate.t [new file with mode: 0644]
t/manifest.t [new file with mode: 0644]
t/pod-coverage.t [new file with mode: 0644]
t/pod.t [new file with mode: 0644]

diff --git a/Changes b/Changes
new file mode 100644 (file)
index 0000000..42cf461
--- /dev/null
+++ b/Changes
@@ -0,0 +1,5 @@
+Revision history for Netio230B
+
+0.01    Date/time
+        First version, released on an unsuspecting world.
+
diff --git a/MANIFEST b/MANIFEST
new file mode 100644 (file)
index 0000000..d18edb8
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,9 @@
+Changes
+lib/Netio230B.pm
+Makefile.PL
+MANIFEST                       This list of files
+README
+t/00-load.t
+t/manifest.t
+t/pod-coverage.t
+t/pod.t
diff --git a/Makefile.PL b/Makefile.PL
new file mode 100644 (file)
index 0000000..554a3ca
--- /dev/null
@@ -0,0 +1,20 @@
+use 5.006;
+use strict;
+use warnings;
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+    NAME                => 'Netio230B',
+    AUTHOR              => q{Tobias Maier <diespambox@gmx.net>},
+    VERSION_FROM        => 'lib/Netio230B.pm',
+    ABSTRACT_FROM       => 'lib/Netio230B.pm',
+    ($ExtUtils::MakeMaker::VERSION >= 6.3002
+      ? ('LICENSE'=> 'bsd')
+      : ()),
+    PL_FILES            => {},
+    PREREQ_PM => {
+        'Test::More' => 0,
+    },
+    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+    clean               => { FILES => 'Netio230B-*' },
+);
diff --git a/Makefile.old b/Makefile.old
new file mode 100644 (file)
index 0000000..720d75a
--- /dev/null
@@ -0,0 +1,876 @@
+# This Makefile is for the Netio230B extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 7.34 (Revision: 73400) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+#       ANY CHANGES MADE HERE WILL BE LOST!
+#
+#   MakeMaker ARGV: ()
+#
+
+#   MakeMaker Parameters:
+
+#     ABSTRACT_FROM => q[lib/Netio230B.pm]
+#     AUTHOR => [q[Tobias Maier <diespambox@gmx.net>]]
+#     BUILD_REQUIRES => {  }
+#     CONFIGURE_REQUIRES => {  }
+#     LICENSE => q[bsd]
+#     NAME => q[Netio230B]
+#     PL_FILES => {  }
+#     PREREQ_PM => { Test::More=>q[0] }
+#     TEST_REQUIRES => {  }
+#     VERSION_FROM => q[lib/Netio230B.pm]
+#     clean => { FILES=>q[Netio230B-*] }
+#     dist => { COMPRESS=>q[gzip -9f], SUFFIX=>q[gz] }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/x86_64-linux-gnu/perl/5.30/Config.pm).
+# They may have been overridden via Makefile.PL or on the command line.
+AR = ar
+CC = x86_64-linux-gnu-gcc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E
+DLEXT = so
+DLSRC = dl_dlopen.xs
+EXE_EXT = 
+FULL_AR = /usr/bin/ar
+LD = x86_64-linux-gnu-gcc
+LDDLFLAGS = -shared -L/usr/local/lib -fstack-protector-strong
+LDFLAGS =  -fstack-protector-strong -L/usr/local/lib
+LIBC = libc-2.31.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 4.19.0
+RANLIB = :
+SITELIBEXP = /usr/local/share/perl/5.30.0
+SITEARCHEXP = /usr/local/lib/x86_64-linux-gnu/perl/5.30.0
+SO = so
+VENDORARCHEXP = /usr/lib/x86_64-linux-gnu/perl5/5.30
+VENDORLIBEXP = /usr/share/perl5
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = Netio230B
+NAME_SYM = Netio230B
+VERSION = 0.01
+VERSION_MACRO = VERSION
+VERSION_SYM = 0_01
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 0.01
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1p
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR = 
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /usr
+SITEPREFIX = /usr/local
+VENDORPREFIX = /usr
+INSTALLPRIVLIB = /usr/share/perl/5.30
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /usr/local/share/perl/5.30.0
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = /usr/share/perl5
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /usr/lib/x86_64-linux-gnu/perl/5.30
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/local/lib/x86_64-linux-gnu/perl/5.30.0
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = /usr/lib/x86_64-linux-gnu/perl5/5.30
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /usr/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /usr/local/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = /usr/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /usr/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLSITESCRIPT = /usr/local/bin
+DESTINSTALLSITESCRIPT = $(DESTDIR)$(INSTALLSITESCRIPT)
+INSTALLVENDORSCRIPT = /usr/bin
+DESTINSTALLVENDORSCRIPT = $(DESTDIR)$(INSTALLVENDORSCRIPT)
+INSTALLMAN1DIR = /usr/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /usr/local/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = /usr/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /usr/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /usr/local/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = /usr/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/share/perl/5.30
+PERL_ARCHLIB = /usr/lib/x86_64-linux-gnu/perl/5.30
+PERL_ARCHLIBDEP = /usr/lib/x86_64-linux-gnu/perl/5.30
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile
+MAKEFILE_OLD = Makefile.old
+MAKE_APERL_FILE = Makefile.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/x86_64-linux-gnu/perl/5.30/CORE
+PERL_INCDEP = /usr/lib/x86_64-linux-gnu/perl/5.30/CORE
+PERL = "/usr/bin/perl"
+FULLPERL = "/usr/bin/perl"
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_DIR = 755
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER   = /usr/share/perl/5.30/ExtUtils/MakeMaker.pm
+MM_VERSION  = 7.34
+MM_REVISION = 73400
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE  = Basename part of dynamic library. May be just equal BASEEXT.
+MAKE = make
+FULLEXT = Netio230B
+BASEEXT = Netio230B
+PARENT_NAME = 
+DLBASE = $(BASEEXT)
+VERSION_FROM = lib/Netio230B.pm
+OBJECT = 
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP = 
+
+# Handy lists of source code files:
+XS_FILES = 
+C_FILES  = 
+O_FILES  = 
+H_FILES  = 
+MAN1PODS = 
+MAN3PODS = lib/Netio230B.pm
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIBDEP)$(DFSEP)Config.pm $(PERL_INCDEP)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR      = $(INST_LIB)
+INST_ARCHLIBDIR  = $(INST_ARCHLIB)
+
+INST_AUTODIR     = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC      = 
+INST_DYNAMIC     = 
+INST_BOOT        = 
+
+# Extra linker info
+EXPORT_LIST        = 
+PERL_ARCHIVE       = 
+PERL_ARCHIVEDEP    = 
+PERL_ARCHIVE_AFTER = 
+
+
+TO_INST_PM = lib/Netio230B.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 7.34
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN)  -e 'use AutoSplit;  autosplit($$$$ARGV[0], $$$$ARGV[1], 0, 1, 1)' --
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(TRUE)
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
+FALSE = false
+TRUE = true
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
+DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
+UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
+MACROSTART = 
+MACROEND = 
+USEMAKEFILE = -f
+FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
+CP_NONEMPTY = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'cp_nonempty' --
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt : all
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip -9f
+SUFFIX = .gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = Netio230B
+DISTVNAME = Netio230B-0.01
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+       LINKTYPE="$(LINKTYPE)"\
+       LD="$(LD)"\
+       PREFIX="$(PREFIX)"\
+       PASTHRU_DEFINE='$(DEFINE) $(PASTHRU_DEFINE)'\
+       PASTHRU_INC='$(INC) $(PASTHRU_INC)'
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir pure_all subdirs clean_subdirs makemakerdflt manifypods realclean_subdirs subdirs_dynamic subdirs_pure_nolink subdirs_static subdirs-test_dynamic subdirs-test_static test_dynamic test_static
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+       $(NOECHO) $(NOOP)
+
+pure_all :: config pm_to_blib subdirs linkext
+       $(NOECHO) $(NOOP)
+
+       $(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+       $(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+       $(NOECHO) $(NOOP)
+
+help :
+       perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+       $(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+       $(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_LIBDIR)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
+       $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
+       $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_AUTODIR)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
+       $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
+       $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_BIN)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
+       $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_SCRIPT)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
+       $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
+       $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+       $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+       $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
+       $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: dynamic
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) config $(INST_BOOT) $(INST_DYNAMIC)
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all config  \
+       lib/Netio230B.pm
+       $(NOECHO) $(POD2MAN) --section=$(MAN3EXT) --perm_rw=$(PERM_RW) -u \
+         lib/Netio230B.pm $(INST_MAN3DIR)/Netio230B.$(MAN3EXT) 
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+       - $(RM_F) \
+         $(BASEEXT).bso $(BASEEXT).def \
+         $(BASEEXT).exp $(BASEEXT).x \
+         $(BOOTSTRAP) $(INST_ARCHAUTODIR)/extralibs.all \
+         $(INST_ARCHAUTODIR)/extralibs.ld $(MAKE_APERL_FILE) \
+         *$(LIB_EXT) *$(OBJ_EXT) \
+         *perl.core MYMETA.json \
+         MYMETA.yml blibdirs.ts \
+         core core.*perl.*.? \
+         core.[0-9] core.[0-9][0-9] \
+         core.[0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9] \
+         core.[0-9][0-9][0-9][0-9][0-9] lib$(BASEEXT).def \
+         mon.out perl \
+         perl$(EXE_EXT) perl.exe \
+         perlmain.c pm_to_blib \
+         pm_to_blib.ts so_locations \
+         tmon.out 
+       - $(RM_RF) \
+         Netio230B-* blib 
+         $(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+       - $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+# so clean is forced to complete before realclean_subdirs runs
+realclean_subdirs : clean
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+# Delete temporary files (via clean) and also delete dist files
+realclean purge :: realclean_subdirs
+       - $(RM_F) \
+         $(FIRST_MAKEFILE) $(MAKEFILE_OLD) 
+       - $(RM_RF) \
+         $(DISTVNAME) 
+
+
+# --- MakeMaker metafile section:
+metafile : create_distdir
+       $(NOECHO) $(ECHO) Generating META.yml
+       $(NOECHO) $(ECHO) '---' > META_new.yml
+       $(NOECHO) $(ECHO) 'abstract: '\''Control your NETIO-230B PDU with perl'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'author:' >> META_new.yml
+       $(NOECHO) $(ECHO) '  - '\''Tobias Maier <diespambox@gmx.net>'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml
+       $(NOECHO) $(ECHO) '  ExtUtils::MakeMaker: '\''0'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml
+       $(NOECHO) $(ECHO) '  ExtUtils::MakeMaker: '\''0'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'dynamic_config: 1' >> META_new.yml
+       $(NOECHO) $(ECHO) 'generated_by: '\''ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'license: bsd' >> META_new.yml
+       $(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml
+       $(NOECHO) $(ECHO) '  url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml
+       $(NOECHO) $(ECHO) '  version: '\''1.4'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'name: Netio230B' >> META_new.yml
+       $(NOECHO) $(ECHO) 'no_index:' >> META_new.yml
+       $(NOECHO) $(ECHO) '  directory:' >> META_new.yml
+       $(NOECHO) $(ECHO) '    - t' >> META_new.yml
+       $(NOECHO) $(ECHO) '    - inc' >> META_new.yml
+       $(NOECHO) $(ECHO) 'requires:' >> META_new.yml
+       $(NOECHO) $(ECHO) '  Test::More: '\''0'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'version: '\''0.01'\''' >> META_new.yml
+       $(NOECHO) $(ECHO) 'x_serialization_backend: '\''CPAN::Meta::YAML version 0.018'\''' >> META_new.yml
+       -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
+       $(NOECHO) $(ECHO) Generating META.json
+       $(NOECHO) $(ECHO) '{' > META_new.json
+       $(NOECHO) $(ECHO) '   "abstract" : "Control your NETIO-230B PDU with perl",' >> META_new.json
+       $(NOECHO) $(ECHO) '   "author" : [' >> META_new.json
+       $(NOECHO) $(ECHO) '      "Tobias Maier <diespambox@gmx.net>"' >> META_new.json
+       $(NOECHO) $(ECHO) '   ],' >> META_new.json
+       $(NOECHO) $(ECHO) '   "dynamic_config" : 1,' >> META_new.json
+       $(NOECHO) $(ECHO) '   "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",' >> META_new.json
+       $(NOECHO) $(ECHO) '   "license" : [' >> META_new.json
+       $(NOECHO) $(ECHO) '      "bsd"' >> META_new.json
+       $(NOECHO) $(ECHO) '   ],' >> META_new.json
+       $(NOECHO) $(ECHO) '   "meta-spec" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",' >> META_new.json
+       $(NOECHO) $(ECHO) '      "version" : 2' >> META_new.json
+       $(NOECHO) $(ECHO) '   },' >> META_new.json
+       $(NOECHO) $(ECHO) '   "name" : "Netio230B",' >> META_new.json
+       $(NOECHO) $(ECHO) '   "no_index" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '      "directory" : [' >> META_new.json
+       $(NOECHO) $(ECHO) '         "t",' >> META_new.json
+       $(NOECHO) $(ECHO) '         "inc"' >> META_new.json
+       $(NOECHO) $(ECHO) '      ]' >> META_new.json
+       $(NOECHO) $(ECHO) '   },' >> META_new.json
+       $(NOECHO) $(ECHO) '   "prereqs" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '      "build" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '         "requires" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '            "ExtUtils::MakeMaker" : "0"' >> META_new.json
+       $(NOECHO) $(ECHO) '         }' >> META_new.json
+       $(NOECHO) $(ECHO) '      },' >> META_new.json
+       $(NOECHO) $(ECHO) '      "configure" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '         "requires" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '            "ExtUtils::MakeMaker" : "0"' >> META_new.json
+       $(NOECHO) $(ECHO) '         }' >> META_new.json
+       $(NOECHO) $(ECHO) '      },' >> META_new.json
+       $(NOECHO) $(ECHO) '      "runtime" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '         "requires" : {' >> META_new.json
+       $(NOECHO) $(ECHO) '            "Test::More" : "0"' >> META_new.json
+       $(NOECHO) $(ECHO) '         }' >> META_new.json
+       $(NOECHO) $(ECHO) '      }' >> META_new.json
+       $(NOECHO) $(ECHO) '   },' >> META_new.json
+       $(NOECHO) $(ECHO) '   "release_status" : "stable",' >> META_new.json
+       $(NOECHO) $(ECHO) '   "version" : "0.01",' >> META_new.json
+       $(NOECHO) $(ECHO) '   "x_serialization_backend" : "JSON::PP version 4.02"' >> META_new.json
+       $(NOECHO) $(ECHO) '}' >> META_new.json
+       -$(NOECHO) $(MV) META_new.json $(DISTVNAME)/META.json
+
+
+# --- MakeMaker signature section:
+signature :
+       cpansign -s
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+       $(NOECHO) $(NOOP)
+
+distcheck :
+       $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+       $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+       $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+       $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+       $(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+         -e '    if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' --
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+       $(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+       uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+       $(NOECHO) $(ECHO) 'Created $(DISTVNAME).tar$(SUFFIX)_uu'
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+       $(PREOP)
+       $(TO_UNIX)
+       $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+       $(RM_RF) $(DISTVNAME)
+       $(COMPRESS) $(DISTVNAME).tar
+       $(NOECHO) $(ECHO) 'Created $(DISTVNAME).tar$(SUFFIX)'
+       $(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+       $(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+       $(PREOP)
+       $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+       $(RM_RF) $(DISTVNAME)
+       $(NOECHO) $(ECHO) 'Created $(DISTVNAME).zip'
+       $(POSTOP)
+
+shdist : distdir
+       $(PREOP)
+       $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+       $(RM_RF) $(DISTVNAME)
+       $(NOECHO) $(ECHO) 'Created $(DISTVNAME).shar'
+       $(POSTOP)
+
+
+# --- MakeMaker distdir section:
+create_distdir :
+       $(RM_RF) $(DISTVNAME)
+       $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+               -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+distdir : create_distdir distmeta 
+       $(NOECHO) $(NOOP)
+
+
+
+# --- MakeMaker dist_test section:
+disttest : distdir
+       cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL 
+       cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+       cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+
+# --- MakeMaker dist_ci section:
+ci :
+       $(ABSPERLRUN) -MExtUtils::Manifest=maniread -e '@all = sort keys %{ maniread() };' \
+         -e 'print(qq{Executing $(CI) @all\n});' \
+         -e 'system(qq{$(CI) @all}) == 0 or die $$!;' \
+         -e 'print(qq{Executing $(RCS_LABEL) ...\n});' \
+         -e 'system(qq{$(RCS_LABEL) @all}) == 0 or die $$!;' --
+
+
+# --- MakeMaker distmeta section:
+distmeta : create_distdir metafile
+       $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'exit unless -e q{META.yml};' \
+         -e 'eval { maniadd({q{META.yml} => q{Module YAML meta-data (added by MakeMaker)}}) }' \
+         -e '    or die "Could not add META.yml to MANIFEST: $${'\''@'\''}"' --
+       $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'exit unless -f q{META.json};' \
+         -e 'eval { maniadd({q{META.json} => q{Module JSON meta-data (added by MakeMaker)}}) }' \
+         -e '    or die "Could not add META.json to MANIFEST: $${'\''@'\''}"' --
+
+
+
+# --- MakeMaker distsignature section:
+distsignature : distmeta
+       $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) }' \
+         -e '    or die "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}"' --
+       $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
+       cd $(DISTVNAME) && cpansign -s
+
+
+
+# --- MakeMaker install section:
+
+install :: pure_install doc_install
+       $(NOECHO) $(NOOP)
+
+install_perl :: pure_perl_install doc_perl_install
+       $(NOECHO) $(NOOP)
+
+install_site :: pure_site_install doc_site_install
+       $(NOECHO) $(NOOP)
+
+install_vendor :: pure_vendor_install doc_vendor_install
+       $(NOECHO) $(NOOP)
+
+pure_install :: pure_$(INSTALLDIRS)_install
+       $(NOECHO) $(NOOP)
+
+doc_install :: doc_$(INSTALLDIRS)_install
+       $(NOECHO) $(NOOP)
+
+pure__install : pure_site_install
+       $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+       $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install :: all
+       $(NOECHO) umask 022; $(MOD_INSTALL) \
+               "$(INST_LIB)" "$(DESTINSTALLPRIVLIB)" \
+               "$(INST_ARCHLIB)" "$(DESTINSTALLARCHLIB)" \
+               "$(INST_BIN)" "$(DESTINSTALLBIN)" \
+               "$(INST_SCRIPT)" "$(DESTINSTALLSCRIPT)" \
+               "$(INST_MAN1DIR)" "$(DESTINSTALLMAN1DIR)" \
+               "$(INST_MAN3DIR)" "$(DESTINSTALLMAN3DIR)"
+       $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+               "$(SITEARCHEXP)/auto/$(FULLEXT)"
+
+
+pure_site_install :: all
+       $(NOECHO) umask 02; $(MOD_INSTALL) \
+               read "$(SITEARCHEXP)/auto/$(FULLEXT)/.packlist" \
+               write "$(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist" \
+               "$(INST_LIB)" "$(DESTINSTALLSITELIB)" \
+               "$(INST_ARCHLIB)" "$(DESTINSTALLSITEARCH)" \
+               "$(INST_BIN)" "$(DESTINSTALLSITEBIN)" \
+               "$(INST_SCRIPT)" "$(DESTINSTALLSITESCRIPT)" \
+               "$(INST_MAN1DIR)" "$(DESTINSTALLSITEMAN1DIR)" \
+               "$(INST_MAN3DIR)" "$(DESTINSTALLSITEMAN3DIR)"
+       $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+               "$(PERL_ARCHLIB)/auto/$(FULLEXT)"
+
+pure_vendor_install :: all
+       $(NOECHO) umask 022; $(MOD_INSTALL) \
+               "$(INST_LIB)" "$(DESTINSTALLVENDORLIB)" \
+               "$(INST_ARCHLIB)" "$(DESTINSTALLVENDORARCH)" \
+               "$(INST_BIN)" "$(DESTINSTALLVENDORBIN)" \
+               "$(INST_SCRIPT)" "$(DESTINSTALLVENDORSCRIPT)" \
+               "$(INST_MAN1DIR)" "$(DESTINSTALLVENDORMAN1DIR)" \
+               "$(INST_MAN3DIR)" "$(DESTINSTALLVENDORMAN3DIR)"
+
+
+doc_perl_install :: all
+
+doc_site_install :: all
+       $(NOECHO) $(ECHO) Appending installation info to "$(DESTINSTALLSITEARCH)/perllocal.pod"
+       -$(NOECHO) umask 02; $(MKPATH) "$(DESTINSTALLSITEARCH)"
+       -$(NOECHO) umask 02; $(DOC_INSTALL) \
+               "Module" "$(NAME)" \
+               "installed into" "$(INSTALLSITELIB)" \
+               LINKTYPE "$(LINKTYPE)" \
+               VERSION "$(VERSION)" \
+               EXE_FILES "$(EXE_FILES)" \
+               >> "$(DESTINSTALLSITEARCH)/perllocal.pod"
+
+doc_vendor_install :: all
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+       $(NOECHO) $(NOOP)
+
+uninstall_from_perldirs ::
+
+uninstall_from_sitedirs ::
+       $(NOECHO) $(UNINSTALL) "$(SITEARCHEXP)/auto/$(FULLEXT)/.packlist"
+
+uninstall_from_vendordirs ::
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE :
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+       $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+       $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+       -$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+       -$(NOECHO) $(MV)   $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+       - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
+       $(PERLRUN) Makefile.PL 
+       $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+       $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command.  <=="
+       $(FALSE)
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET    = perl
+FULLPERL      = "/usr/bin/perl"
+MAP_PERLINC   = "-Iblib/arch" "-Iblib/lib" "-I/usr/lib/x86_64-linux-gnu/perl/5.30" "-I/usr/share/perl/5.30"
+
+$(MAP_TARGET) :: $(MAKE_APERL_FILE)
+       $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : static $(FIRST_MAKEFILE) pm_to_blib
+       $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+       $(NOECHO) $(PERLRUNINST) \
+               Makefile.PL DIR="" \
+               MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+               MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = t/*.t
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+       $(NOECHO) $(NOOP)
+
+test :: $(TEST_TYPE)
+       $(NOECHO) $(NOOP)
+
+# Occasionally we may face this degenerate target:
+test_ : test_dynamic
+       $(NOECHO) $(NOOP)
+
+subdirs-test_dynamic :: dynamic pure_all
+
+test_dynamic :: subdirs-test_dynamic
+       PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES)
+
+testdb_dynamic :: dynamic pure_all
+       PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+subdirs-test_static :: static pure_all
+
+test_static :: subdirs-test_static
+       PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES)
+
+testdb_static :: static pure_all
+       PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd :
+       $(NOECHO) $(ECHO) '<SOFTPKG NAME="Netio230B" VERSION="0.01">' > Netio230B.ppd
+       $(NOECHO) $(ECHO) '    <ABSTRACT>Control your NETIO-230B PDU with perl</ABSTRACT>' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '    <AUTHOR>Tobias Maier &lt;diespambox@gmx.net&gt;</AUTHOR>' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '    <IMPLEMENTATION>' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '        <REQUIRE NAME="Test::More" />' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '        <ARCHITECTURE NAME="x86_64-linux-gnu-thread-multi-5.30" />' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '        <CODEBASE HREF="" />' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '    </IMPLEMENTATION>' >> Netio230B.ppd
+       $(NOECHO) $(ECHO) '</SOFTPKG>' >> Netio230B.ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
+       $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \
+         'lib/Netio230B.pm' 'blib/lib/Netio230B.pm' 
+       $(NOECHO) $(TOUCH) pm_to_blib
+
+
+# --- MakeMaker selfdocument section:
+
+# here so even if top_targets is overridden, these will still be defined
+# gmake will silently still work if any are .PHONY-ed but nmake won't
+
+static ::
+       $(NOECHO) $(NOOP)
+
+dynamic ::
+       $(NOECHO) $(NOOP)
+
+config ::
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
diff --git a/README b/README
new file mode 120000 (symlink)
index 0000000..42061c0
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+README.md
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..1b52b00
--- /dev/null
+++ b/README.md
@@ -0,0 +1,43 @@
+# Netio230B - Control your NETIO-230B PDU with perl
+
+## INSTALLATION
+
+To install this module, run the following commands:
+
+       perl Makefile.PL
+       make
+       make install
+
+
+## SYNOPSIS
+
+    use Netio230B;
+    use Data::Dumper;
+
+    my $foo = Netio230B->new(device => "192.168.1.22",
+                             username => "admin",
+                             password => "admin");
+    # get port states
+    my @allports = $foo->get_device_configuration();
+    print Dumper(@allports);
+
+## DESCRIPTION
+
+The Netio230B is a power distribution unit which can be controled via LAN
+see http://www.koukaam.se/showproduct.php?article_id=1502
+
+### REMARKS
+
+This module was build and tested against the firmware version 3.12 of the
+Netio230B device. This firmware seems to contain some bugs which manifest in
+hanging requests and sometimes requests which do not hang but return an empty
+result. Those issues are "handled" using a timeout for the requests
+and sending the request again and again (max 10 times).
+
+Since I upgraded to version 4.1 (which in it self was a PITA, you have to to
+it with Internet Explorer or it will fail...) I have not seen this behavior 
+again. 
+
+### AUTHENTICATION
+
+At the moment only open authentication method supported.
diff --git a/ignore.txt b/ignore.txt
new file mode 100644 (file)
index 0000000..39274d3
--- /dev/null
@@ -0,0 +1,12 @@
+blib*
+Makefile
+Makefile.old
+Build
+Build.bat
+_build*
+pm_to_blib*
+*.tar.gz
+.lwpcookies
+cover_db
+pod2htm*.tmp
+Netio230B-*
diff --git a/lib/Netio230B.pm b/lib/Netio230B.pm
new file mode 100644 (file)
index 0000000..98ed9ee
--- /dev/null
@@ -0,0 +1,374 @@
+package Netio230B;
+use strict;
+use warnings;
+use LWP::UserAgent;
+use Data::Dumper;
+use Time::HiRes;
+use DateTime;
+use Moose;
+
+=head1 NAME
+
+Netio230B - Control your NETIO-230B PDU with perl
+
+=head1 VERSION
+
+Version 0.01
+
+=cut
+
+our $VERSION = '0.01';
+
+=head1 SYNOPSIS
+
+    use Netio230B;
+    use Data::Dumper;
+
+    my $foo = Netio230B->new(device => "192.168.1.22",
+                             username => "admin",
+                             password => "admin");
+    # get port states
+    my @allports = $foo->get_device_configuration();
+    print Dumper(@allports);
+
+=cut
+=head1 DESCRIPTION
+
+The Netio230B is a power distribution unit which can be controled via LAN
+see http://www.koukaam.se/showproduct.php?article_id=1502
+
+=head2 REMARKS
+
+This module was build and tested against the firmware version 3.12 of the
+Netio230B device. This firmware seems to contain some bugs which manifest in
+hanging requests and sometimes requests which do not hang but return an empty
+result. Those issues are "handled" using a timeout for the requests
+and sending the request again and again (max 10 times).
+
+Since I upgraded to version 4.1 (which in it self was a PITA, you have to to
+it with Internet Explorer or it will fail...) I have not seen this behavior 
+again. 
+
+=head2 AUTHENTICATION
+
+At the moment only open authentication method supported.
+
+
+=cut
+
+my @ports;
+my $base_url;
+my $ua = LWP::UserAgent->new;
+
+=head1 ATTRIBUTES
+
+=head2 device 
+
+Hostname or IP adress of the device.
+=cut
+has 'device' => (
+    is       => 'ro',
+    isa      => 'Str',
+    required => 1,
+);
+
+=head2 username 
+
+Username used to login at the device.
+=cut
+has 'username' => (
+    is       => 'ro',
+    isa      => 'Str',
+    required => 1,
+);
+
+=head2 password  
+
+Password used to login at the device.
+=cut
+has 'password' => (
+    is       => 'ro',
+    isa      => 'Str',
+    required => 1,
+);
+
+=head2 logging
+
+If set to '1' the module logs to STDOUT what it is doing. 
+Default value is '0' (no logging).
+=cut
+has 'logging' => (
+    is       => 'rw',
+    isa      => 'Bool',
+    required => 0,
+    default  => 0,
+);
+
+=head2 timeout
+
+Timeout in seconds before a request is resent. 
+Default value is '1' (1 second).
+=cut
+has 'timeout' => (
+    is       => 'rw',
+    isa      => 'Int',
+    required => 0,
+    default  => 1,
+    trigger  => \&_set_timeout,
+);
+
+=head1 METHODS 
+
+=head2 get_device_configuration
+
+Returns an array containing the current state of the PDU. Each entry is 
+either 1 (active) or 0 (inactive):
+
+    my @state = $foo->get_device_configuration();
+    print "port 2 state is '".$port[1]."'\n";
+    
+=cut
+sub get_device_configuration {
+    my ($self) = @_;
+    $self->_log("requesting port configuration.");
+    my $url    = $base_url . "port=list";
+    my $result = $self->_get($url);
+    @ports = split( ' ', $result );
+    return @ports;
+}
+
+=head2 get_port_state
+
+Gets the current state of a single port.
+
+    my $state = $foo->get_port_state(2);
+    print ("Current state of port 2 is '$state'.\n");
+
+=cut
+
+sub get_port_state {
+    my ( $self, $port ) = @_;
+    $self->_log("get_port_state(port=$port)");
+    $self->get_device_configuration();
+    my $state = $ports[ $port - 1 ];
+    $self->_log("port '$port' has state '$state'");
+    return $state;
+}
+
+=head2 enable_port
+
+Activates a single port.
+
+    # enabel port #4
+    $foo->enable_port(4);
+=cut
+sub enable_port {
+    my ( $self, $port ) = @_;
+    die("Port number missing. Can not enable") unless $port;
+    $self->_log("enable_port(port=$port)");
+    $self->get_device_configuration();
+    if ( $ports[ $port - 1 ] != 1 ) {
+        $self->set_port( $port, 1, @ports );
+    }
+}
+
+=head2 disable_port
+
+Deactivates a single port.
+
+    # disabel port #4
+    $foo->disable_port(4);
+=cut
+sub disable_port {
+    my ( $self, $port ) = @_;
+    die("Port number missing. Can not enable") unless $port;
+    $self->_log("disable_port(port=$port)");
+    $self->get_device_configuration();
+    if ( $ports[ $port - 1 ] != 0 ) {
+        $ports[ $port - 1 ] = 0;
+        $self->_run_cmd();
+    }
+}
+
+=head2 set_port
+
+Sets the state of a port. Where state is one of '1', '0', 'u' or 'i'. 
+
+This may be used to interrupt the port:
+
+    #send interrupt command
+    $foo->set_port(2, 'i');
+=cut
+
+sub set_port {
+    my ( $self, $port, $state ) = @_;
+    die("Port number missing. Can not enable")     unless $port;
+    die("State to set is missing. Can not enable") unless $port;
+    die("State '$state' is not known.")            unless $state =~ m/[10ui]/;
+
+    $self->_log("set_port(port=$port,state=$state)");
+    $self->get_device_configuration();
+    $ports[ $port - 1 ] = $state;
+    $self->_run_cmd();
+}
+
+=head2 disable_all 
+
+Deactivates all ports.
+
+    # disabel all 
+    $foo->disable_all();
+=cut
+sub disable_all {
+    my ($self) = @_;
+    $self->_log("disable_all()");
+    @ports = ( 0, 0, 0, 0 );
+    $self->_run_cmd();
+}
+
+=head2 enable_all 
+
+Activates all ports.
+
+    # enable all ports
+    $foo->enable_all();
+=cut
+sub enable_all {
+    my ($self) = @_;
+    $self->_log("enable_all()");
+    @ports = ( 1, 1, 1, 1 );
+    $self->_run_cmd();
+}
+
+
+
+sub _rm_enclosing_htmltag {
+    my ($str) = @_;
+    return "" unless $str;
+    $str =~ s/<html> *//;
+    $str =~ s/ *<\/html>//;
+    return $str;
+}
+
+sub BUILD {
+    my $self = shift;
+    $self->_set_timeout( $self->timeout );
+    $self->_build_control_url();
+#   $self->get_device_configuration();
+}
+
+sub _set_timeout {
+    my ( $self, $newtimeout, $old ) = @_;
+    my $mess = "using timeout '$newtimeout'";
+    if ($old) {
+        $mess .= " instead of '$old'";
+    }
+    $self->_log( $mess . "." );
+    $ua->timeout($newtimeout);
+}
+
+sub _log {
+    my ( $self, $logstring ) = @_;
+    if ( $self->logging ) {
+        my $timestr = DateTime->now()->strftime("%F %T");
+        print $timestr . " Netio230B[" . $self->device . "]: $logstring\n";
+    }
+}
+
+sub _build_control_url {
+    my ($self) = @_;
+    $base_url =
+          "http://"
+        . $self->device
+        . "/tgi/control.tgi?" . "l=p:"
+        . $self->username . ":"
+        . $self->password . "&";
+}
+
+sub _run_cmd {
+    my ($self) = @_;
+    my $url = $base_url . "port=" . join( '', @ports );
+    my $result = $self->_get($url);
+}
+
+sub _get {
+    my ( $self, $url ) = @_;
+    $self->_log("request '$url'.");
+    my $result;
+    for ( my $count = 1; $count <= 10; $count++ ) {
+        $result = $ua->get($url);
+        my $status = $result->code . " " . $result->message;
+        if ( $result->is_error ) {
+            $self->_log( "resending because: " . $status );
+        }
+        elsif ( $result->decoded_content() eq "" ) {
+            $self->_log(
+                "resending because decoded answer was empty: " . $status );
+        }
+        else {
+            last;
+        }
+    }
+    my $decoded = $result->decoded_content();
+    my $rem     = _rm_enclosing_htmltag($decoded);
+    $self->_log("answer: '$rem'");
+    return $rem;
+}
+
+=head1 AUTHOR
+
+Tobias Maier, C<< <diespambox at gmx.net> >>
+
+=head1 BUGS
+
+Please report any bugs or feature requests to C<bug-netio230b at rt.cpan.org>, or through
+the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Netio230B>.  I will be notified, and then you'll
+automatically be notified of progress on your bug as I make changes.
+
+
+
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+    perldoc Netio230B
+
+
+You can also look for information at:
+
+=over 4
+
+=item * RT: CPAN's request tracker (report bugs here)
+
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Netio230B>
+
+=item * Search CPAN
+
+L<http://search.cpan.org/dist/Netio230B/>
+
+=back
+
+
+
+=head1 LICENSE AND COPYRIGHT
+
+This program is distributed under the WTFPL License:
+
+DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+Version 2, December 2004
+
+Copyright 2012 Tobias Maier, C<< <diespambox at gmx.net> >>
+
+Everyone is permitted to copy and distribute verbatim or modified
+copies of this license document, and changing it is allowed as long
+as the name is changed.
+
+DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING,
+DISTRIBUTION AND MODIFICATION
+
+0. You just DO WHAT THE FUCK YOU WANT TO.
+
+=cut
+
+1;    # End of Netio230B
diff --git a/t/00-load.t b/t/00-load.t
new file mode 100644 (file)
index 0000000..66ffde8
--- /dev/null
@@ -0,0 +1,9 @@
+#!perl -T
+
+use Test::More tests => 1;
+
+BEGIN {
+    use_ok( 'Netio230B' ) || print "Bail out!\n";
+}
+
+diag( "Testing Netio230B $Netio230B::VERSION, Perl $], $^X" );
diff --git a/t/01-const.t b/t/01-const.t
new file mode 100644 (file)
index 0000000..f3a46b4
--- /dev/null
@@ -0,0 +1,10 @@
+#!perl -T
+
+use Test::More tests => 1;
+use Netio230B;
+
+my $foo = Netio230B->new(device => "192.168.1.22",
+                             username => "admin",
+                             password => "admin");
+
+ok();
diff --git a/t/boilerplate.t b/t/boilerplate.t
new file mode 100644 (file)
index 0000000..d4f8bc3
--- /dev/null
@@ -0,0 +1,56 @@
+#!perl -T
+
+use 5.006;
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+sub not_in_file_ok {
+    my ($filename, %regex) = @_;
+    open( my $fh, '<', $filename )
+        or die "couldn't open $filename for reading: $!";
+
+    my %violated;
+
+    while (my $line = <$fh>) {
+        while (my ($desc, $regex) = each %regex) {
+            if ($line =~ $regex) {
+                push @{$violated{$desc}||=[]}, $.;
+            }
+        }
+    }
+
+    if (%violated) {
+        fail("$filename contains boilerplate text");
+        diag "$_ appears on lines @{$violated{$_}}" for keys %violated;
+    } else {
+        pass("$filename contains no boilerplate text");
+    }
+}
+
+sub module_boilerplate_ok {
+    my ($module) = @_;
+    not_in_file_ok($module =>
+        'the great new $MODULENAME'   => qr/ - The great new /,
+        'boilerplate description'     => qr/Quick summary of what the module/,
+        'stub function definition'    => qr/function[12]/,
+    );
+}
+
+TODO: {
+  local $TODO = "Need to replace the boilerplate text";
+
+  not_in_file_ok(README =>
+    "The README is used..."       => qr/The README is used/,
+    "'version information here'"  => qr/to provide version information/,
+  );
+
+  not_in_file_ok(Changes =>
+    "placeholder date/time"       => qr(Date/time)
+  );
+
+  module_boilerplate_ok('lib/Netio230B.pm');
+
+
+}
+
diff --git a/t/manifest.t b/t/manifest.t
new file mode 100644 (file)
index 0000000..45eb83f
--- /dev/null
@@ -0,0 +1,13 @@
+#!perl -T
+
+use strict;
+use warnings;
+use Test::More;
+
+unless ( $ENV{RELEASE_TESTING} ) {
+    plan( skip_all => "Author tests not required for installation" );
+}
+
+eval "use Test::CheckManifest 0.9";
+plan skip_all => "Test::CheckManifest 0.9 required" if $@;
+ok_manifest();
diff --git a/t/pod-coverage.t b/t/pod-coverage.t
new file mode 100644 (file)
index 0000000..fc40a57
--- /dev/null
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+use Test::More;
+
+# Ensure a recent version of Test::Pod::Coverage
+my $min_tpc = 1.08;
+eval "use Test::Pod::Coverage $min_tpc";
+plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage"
+    if $@;
+
+# Test::Pod::Coverage doesn't require a minimum Pod::Coverage version,
+# but older versions don't recognize some common documentation styles
+my $min_pc = 0.18;
+eval "use Pod::Coverage $min_pc";
+plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage"
+    if $@;
+
+all_pod_coverage_ok();
diff --git a/t/pod.t b/t/pod.t
new file mode 100644 (file)
index 0000000..ee8b18a
--- /dev/null
+++ b/t/pod.t
@@ -0,0 +1,12 @@
+#!perl -T
+
+use strict;
+use warnings;
+use Test::More;
+
+# Ensure a recent version of Test::Pod
+my $min_tp = 1.22;
+eval "use Test::Pod $min_tp";
+plan skip_all => "Test::Pod $min_tp required for testing POD" if $@;
+
+all_pod_files_ok();