A bit more implementation in dummy web-server

pull/193/head
Karai Csaba 9 years ago committed by Thorsten von Eicken
parent 45a127523e
commit a2121f13af
  1. 98
      examples/dummy-web-server.pl

@ -20,6 +20,13 @@ die "cannot create socket $!\n" unless $server;
print "server waiting for client connection on port 7777\n"; print "server waiting for client connection on port 7777\n";
my @webmethods = (
[ "menu", \&getMenu ],
[ "pins", \&getPins ],
[ "system/info", \&getSystemInfo ],
[ "wifi/info", \&getWifiInfo ],
);
my $client; my $client;
while ($client = $server->accept()) while ($client = $server->accept())
@ -39,9 +46,10 @@ while ($client = $server->accept())
close $server; close $server;
my $httpReq = parse_http( $client ); my $httpReq = parse_http( $client );
print Dumper($httpReq); #print Dumper($httpReq);
print Dumper($httpReq->{url});
my $httpResp = process_http( $httpReq ); my $httpResp = process_http( $httpReq );
print Dumper($httpResp); #print Dumper($httpResp);
my $data = "HTTP/1.1 " . $httpResp->{code} . " " . $httpResp->{text} . "\r\n"; my $data = "HTTP/1.1 " . $httpResp->{code} . " " . $httpResp->{text} . "\r\n";
@ -58,7 +66,6 @@ while ($client = $server->accept())
$data .= $httpResp->{body}; $data .= $httpResp->{body};
} }
print "$data\n\n";
$client->send($data); $client->send($data);
if( $httpResp->{done} ) if( $httpResp->{done} )
@ -146,6 +153,29 @@ sub slurp
return $cnt; return $cnt;
} }
sub content_response
{
my ($content, $url) = @_;
my %resp;
$resp{code} = 200;
$resp{text} = "OK";
$resp{done} = 1;
$resp{body} = $content;
$resp{fields} = {};
$resp{fields}{'Content-Length'} = length($content);
$resp{fields}{'Content-Type'} = "text/json";
$resp{fields}{'Content-Type'} = "text/html; charset=UTF-8" if( $url =~ /\.html$/ );
$resp{fields}{'Content-Type'} = "text/css" if( $url =~ /\.css$/ );
$resp{fields}{'Content-Type'} = "text/javascript" if( $url =~ /\.js$/ );
$resp{fields}{'Content-Type'} = "image/gif" if( $url =~ /\.ico$/ );
$resp{fields}{'Connection'} = 'close';
return \%resp;
}
sub process_http sub process_http
{ {
my ($httpReq) = @_; my ($httpReq) = @_;
@ -172,23 +202,14 @@ sub process_http
my $prep = slurp( "$pth/../html/head-" ); my $prep = slurp( "$pth/../html/head-" );
$cnt = "$prep$cnt"; $cnt = "$prep$cnt";
} }
return content_response($cnt, $url);
}
elsif( grep { $_->[0] eq $url } @webmethods )
{
my @mth = grep { $_->[0] eq $url } @webmethods;
my $webm = $mth[0];
my %resp; return content_response( $webm->[1]->(), $url );
$resp{code} = 200;
$resp{text} = "OK";
$resp{done} = 1;
$resp{body} = $cnt;
$resp{fields} = {};
$resp{fields}{'Content-Length'} = length($cnt);
$resp{fields}{'Content-Type'} = "text/html; charset=UTF-8" if( $url =~ /\.html$/ );
$resp{fields}{'Content-Type'} = "text/css" if( $url =~ /\.css$/ );
$resp{fields}{'Content-Type'} = "text/javascript" if( $url =~ /\.js$/ );
$resp{fields}{'Content-Type'} = "image/gif" if( $url =~ /\.ico$/ );
$resp{fields}{'Connection'} = 'close';
return \%resp;
} }
else else
{ {
@ -200,3 +221,42 @@ sub process_http
return error_response(400, "Invalid HTTP request"); return error_response(400, "Invalid HTTP request");
} }
sub getMenu
{
my $out = sprintf(
"{ " .
"\"menu\": [ " .
"\"Home\", \"/home.html\", " .
"\"WiFi Station\", \"/wifi/wifiSta.html\", " .
"\"WiFi Soft-AP\", \"/wifi/wifiAp.html\", " .
"\"µC Console\", \"/console.html\", " .
"\"Services\", \"/services.html\", " .
#ifdef MQTT
"\"REST/MQTT\", \"/mqtt.html\", " .
#endif
"\"Debug log\", \"/log.html\", " .
"\"Web Server\", \"/web-server.html\"" .
"%s" .
" ], " .
"\"version\": \"%s\", " .
"\"name\": \"%s\"" .
" }", "", "dummy", "dummy-esp-link");
return $out;
}
sub getPins
{
return '{ "reset":12, "isp":-1, "conn":-1, "ser":2, "swap":0, "rxpup":1 }';
}
sub getSystemInfo
{
return '{ "name": "esp-link-dummy", "reset cause": "6=external", "size": "4MB:512/512", "upload-size": "3145728", "id": "0xE0 0x4016", "partition": "user2.bin", "slip": "disabled", "mqtt": "disabled/disconnected", "baud": "57600", "description": "" }';
}
sub getWifiInfo
{
return '{"mode": "STA", "modechange": "yes", "ssid": "DummySSID", "status": "got IP address", "phy": "11n", "rssi": "-45dB", "warn": "Switch to <a href=\"#\" onclick=\"changeWifiMode(3)\">STA+AP mode</a>", "apwarn": "Switch to <a href=\"#\" onclick=\"changeWifiMode(3)\">STA+AP mode</a>", "mac":"12:34:56:78:9a:bc", "chan":"11", "apssid": "ESP_012345", "appass": "", "apchan": "11", "apmaxc": "4", "aphidd": "disabled", "apbeac": "100", "apauth": "OPEN","apmac":"12:34:56:78:9a:bc", "ip": "192.168.1.2", "netmask": "255.255.255.0", "gateway": "192.168.1.1", "hostname": "esp-link", "staticip": "0.0.0.0", "dhcp": "on"}';
}

Loading…
Cancel
Save