+ # Store location
+ $self->{req}{location} = $content->{location};
+
+ # Store restry after
+ $self->{req}{retryafter} = $content->{retryafter};
+
+ # Store status
+ $self->{req}{status} = $content->{status};
+
+ # With processing
+ if ($self->{req}{status} eq 'processing') {
+ # Init max run
+ my $remaining = TIMEOUT;
+
+ # Iterate until processing order becomes ready
+ while (--$remaining >= 0 and $self->{req}{status} eq 'processing') {
+ # Sleep
+ sleep($self->{req}{retryafter});
+
+ # Refresh content
+ my $res = $self->_post($self->{req}{location}, '');
+
+ # Handle error
+ unless ($res->is_success) {
+ confess('POST '.$self->{req}{location}.' failed: '.$res->status_line);
+ }
+
+ # Handle error
+ unless ($res->content) {
+ confess('POST '.$self->{req}{location}.' empty content: '.$res->status_line);
+ }
+
+ # Handle error
+ unless ($res->headers->{location}) {
+ confess('POST '.$self->{req}{location}.' missing location: '.$res->status_line);
+ }
+
+ # Extract content
+ $content = from_json($res->content);
+
+ # Check status
+ unless ($content->{status} eq 'valid' or $content->{status} eq 'processing') {
+ confess('POST '.$self->{req}{location}.' invalid status: '.$content->{status}.': '.$res->status_line);
+ }
+
+ # Store location
+ # XXX: used with async response
+ $self->{req}{location} = $res->headers->{location};
+
+ # Store retry after
+ $self->{req}{retryafter} = (defined $res->headers->{'retry-after'} and $res->headers->{'retry-after'}) ? $res->headers->{'retry-after'} : 1;
+
+ # Store status
+ $self->{req}{status} = $content->{status};
+
+ # Write to file
+ write_file($file, to_json($content));
+ }
+
+ # Without valid state
+ unless($self->{req}{status} eq 'valid') {
+ confess('POST '.$self->{req}{location}.' invalid status: '.$self->{req}{status});
+ }
+ }
+