From 77e4210569acf87f44236870771e41218361cdad Mon Sep 17 00:00:00 2001 From: betateilchen <> Date: Fri, 30 Jan 2015 19:59:13 +0000 Subject: [PATCH] 55_GDS.pm: added own FWEXT instead HTTPSRV git-svn-id: https://svn.fhem.de/fhem/trunk@7779 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/55_GDS.pm | 98 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 90 insertions(+), 8 deletions(-) diff --git a/fhem/FHEM/55_GDS.pm b/fhem/FHEM/55_GDS.pm index 249249385..a5d74dfb6 100644 --- a/fhem/FHEM/55_GDS.pm +++ b/fhem/FHEM/55_GDS.pm @@ -1,4 +1,4 @@ -# $Id: 55_GDS.pm 7699 2015-01-24 19:53:30Z betateilchen $ +# $Id: 55_GDS.pm 7758 2015-01-28 13:36:51Z betateilchen $ #################################################################################################### # # 55_GDS.pm @@ -68,9 +68,10 @@ sub GDS_Initialize($) { $tempDir = "c:\\temp\\" if($^O eq "MSWin32"); + GDS_addExtension("GDS_CGI","gds","GDS Files"); + fillMappingTables($hash); initDropdownLists($hash); - createIndexFile($hash); if($name){ (undef, $found) = retrieveFile($hash,"conditions"); @@ -105,14 +106,8 @@ sub GDS_Define($$$) { Log3($name, 3, "GDS $name: created"); Log3($name, 3, "GDS $name: tempDir=".$tempDir); - $dummy = "gds_web_".$name; - CommandDefine(undef, $dummy." HTTPSRV ".$name." ".$tempDir." GDS ".$name." Files"); - $defs{$dummy}{TEMPORARY} = 1; - $attr{$dummy}{directoryindex} = $name.".html"; - $attr{$dummy}{room} = 'hidden'; fillMappingTables($hash); initDropdownLists($hash); - createIndexFile($hash); (undef, $found) = retrieveFile($hash,"conditions"); if($found){ @@ -398,6 +393,91 @@ sub GDS_GetUpdate($) { return 1; } +sub GDS_addExtension($$$) { + my ($func,$link,$friendlyname)= @_; + + my $url = "/" . $link; + $data{FWEXT}{$url}{FUNC} = $func; + $data{FWEXT}{$url}{LINK} = "+$link"; + $data{FWEXT}{$url}{NAME} = $friendlyname; + $data{FWEXT}{$url}{FORKABLE} = 0; +} + +sub GDS_CGI { + my ($request) = @_; + my ($name,$ext)= GDS_splitRequest($request); + if(defined($name)) { + my $filename= "$tempDir/$name.$ext"; + my $MIMEtype= filename2MIMEType($filename); + my @contents; + if(open(INPUTFILE, $filename)) { + binmode(INPUTFILE); + @contents= ; + close(INPUTFILE); + return("$MIMEtype; charset=utf-8", join("", @contents)); + } else { + return("text/plain; charset=utf-8", "File not found: $filename"); + } + } else { + return GDS_Overview(); + } +} + +sub GDS_splitRequest($) { + my ($request) = @_; + + if($request =~ /^.*\/gds$/) { + # http://localhost:8083/fhem/gds2 + return (undef,undef); # name, ext + } else { + my $call= $request; + $call =~ s/^.*\/gds\/([^\/]*)$/$1/; + my $name= $call; + $name =~ s/^(.*)\.(jpg)$/$1/; + my $ext= $call; + $ext =~ s/^$name\.(.*)$/$1/; + return ($name,$ext); + } +} + +sub GDS_Overview { + my ($name, $url); + my $html= GDS_HTMLHead("GDS Overview") . "\n\n"; + foreach my $def (sort keys %defs) { + if($defs{$def}{TYPE} eq "GDS") { + $name= $defs{$def}{NAME}; + $url = GDS_getURL(); + $html .= "$name
\n\n\n"; + } + } + $html.="\n" . GDS_HTMLTail(); + + return ("text/html; charset=utf-8", $html); +} + +sub GDS_HTMLHead($) { + my ($title) = @_; + my $doctype= ''; + my $xmlns= 'xmlns="http://www.w3.org/1999/xhtml"'; + my $code= "$doctype\n\n\n$title\n\n"; + return $code; +} + +sub GDS_HTMLTail { + return ""; +} + +sub GDS_getURL { + my $name = `hostname`; + chop($name); + my $proto = (AttrVal($FW_wname, 'HTTPS', 0) == 1) ? 'https' : 'http'; + return $proto."://$name:" . $defs{$FW_wname}{PORT} . $FW_ME; +} #################################################################################################### # @@ -1233,6 +1313,8 @@ sub gdsHeadlines($;$) { # # 2015-01-03 added multiple alerts handling # +# 2015-01-30 changed use own FWEXT instead of HTTPSRV +# #################################################################################################### # # Further informations