our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
- @EXPORT = qw(&parse_info1 &rsync_master
+ @EXPORT = qw(&parse_info_clientside
&parse_info_serverside &parse_info_serverside_ocean
%oceans %commods %clients %routes %route_mysteries
&parse_pctb_commodmap %pctb_commodmap @pctb_commodmap
&pipethrough_prep &pipethrough_run
&pipethrough_run_along &pipethrough_run_finish
&pipethrough_run_gzip
- &cgipostform);
+ &cgipostform &yarrgpostform);
%EXPORT_TAGS = ( );
@EXPORT_OK = qw();
pipethrough_run($_[0],undef,'gzip','gzip');
}
+sub yarrgpostform ($$) {
+ my ($ua, $form) = @_;
+ my $dest= $ENV{'YPPSC_YARRG_YARRG'};
+ get_our_version($form, 'client');
+ return cgipostform($ua, "$dest/commod-update-receiver", $form);
+}
+
sub cgipostform ($$$) {
my ($ua, $url, $form) = @_;
my $req= HTTP::Request::Common::POST($url,
return pipethrough_run($tf,undef,'gzip','gzip');
}
-sub main__uploadyaarg () {
+sub main__uploadyarrg () {
my %o;
parse_info_clientside();
$o{'ocean'}= $ENV{'YPPSC_OCEAN'} or die;
$o{'island'}= $ENV{'YPPSC_ISLAND'} or die;
- $o{'timestamp'}= 10;
- get_our_version(\%o, 'client');
+ $o{'timestamp'}= $ENV{'YPPSC_DATA_TIMESTAMP'} or die;
my $tf= pipethrough_prep();
write_tsv($tf);
Content_Type => 'application/octet-stream',
Content => $oz ];
- my $dest= $ENV{'YPPSC_YARRG_YARRG'};
-
- my $respcontent= cgipostform($ua, "$dest/commod-update-receiver", \%o);
+ my $respcontent= yarrgpostform($ua, \%o);
$respcontent =~ m/^OK\b/ or die "$respcontent ?";
}
# are used without permission. This program is not endorsed or
# sponsored by Three Rings.
-
-# Uploads contain:
-# ocean canonical mixed case
-# island canonical mixed case
+# All calls contain:
# clientname "ypp-sc-tools"
# clientversion 2.1-g2e06a26 [from git-describe --tags HEAD]
# clientfixes "lastpage" [space separated list]
+#
+# Timestamp requests contain:
+# requesttimestamp
+#
+# Uploads contain:
+# ocean canonical mixed case
+# island canonical mixed case
# data filename=deduped.tsv.gz output of yarrg --tsv
$o{'clientversion'}= must_param('clientversion', "^(\\d[-+._0-9a-zA-Z]+)\$");
+if (param('requesttimestamp')) {
+ my $now= time; defined $now or die;
+ print header(-type=>'text/plain', -charset=>'us-ascii'), "OK $now.\n";
+ exit(0);
+}
+
$o{'ocean'}= must_param('ocean', $re_any);
$o{'island'}= must_param('island', $re_any);
void fetch_with_rsync_gz(const char *stem) { rsync_core(stem,".gz",""); }
void fetch_with_rsync(const char *stem) { rsync_core(stem,"","z"); }
+static void get_timestamp(void) {
+ FILE *tf;
+ pid_t child;
+ sysassert( tf= tmpfile() );
+
+ sysassert( (child= fork()) != -1 );
+ if (!child) {
+ sysassert( dup2(fileno(tf),1)==1 );
+ EXECLP_HELPER("database-info-fetch","timestamp",(char*)0);
+ }
+ waitpid_check_exitstatus(child,"timestamp request",0);
+
+ sysassert( fseek(tf,0,SEEK_SET) == 0 );
+ static char lbuf[30];
+ int l= fread(lbuf,1,sizeof(lbuf),tf);
+ sysassert( !ferror(tf) );
+ assert( feof(tf) );
+ assert( l>1 );
+ l--;
+ assert( lbuf[l]=='\n' );
+ lbuf[l]= 0;
+
+ sysassert(! setenv("YPPSC_DATA_TIMESTAMP",lbuf,1) );
+ fclose(tf);
+}
+
static void set_server(const char *envname, const char *defprotocol,
const char *defvalue, const char *defvalue_test,
const char *userspecified,
o_screenshot_fn= masprintf("%s/_pages.ppm.gz", get_vardir());
/* Actually do the work */
+
+ if ((o_flags & ff_upload) && (o_flags & ff_use_yarrg))
+ get_timestamp();
canon_colour_prepare();
});
}
+sub main__timestamp () {
+ my %o;
+ $o{'requesttimestamp'}= '1';
+ my $respcontent= yarrgpostform($ua, \%o);
+ $respcontent =~ m/^OK ([1-9]\d{1,20})\./ or die "$respcontent ?";
+ print "$1\n";
+ exit(0);
+}
+
sub main__sunshinewidget () {
print <<END
Land {On land} {