#include "stdinc.h"
#include "dat.h"
#include "fns.h"
void
usage(void)
{
fprint(2, "usage: s3mkarena [-v] [config]\n");
threadexitsall("usage");
}
void
threadmain(int argc, char **argv)
{
char *bucket, *configfile, *err;
S3Vconfig config;
S3Con c;
S3Req req;
S3Resp resp;
fmtinstall('Z', hdatefmt);
fmtinstall('H', httpfmt);
fmtinstall('U', hurlfmt);
fmtinstall('[', encodefmt);
bucket = nil;
configfile = nil;
ARGBEGIN{
case 'v':
chattyS3++;
break;
case 'b':
bucket = EARGF(usage());
break;
default:
usage();
}ARGEND
if(!argv)
configfile = *argv;
else
configfile = "s3venti.conf";
if(s3vconfig(configfile, &config) < 0)
sysfatal("can't process configuration file");
if(bucket)
config.bucket = bucket;
if(!config.bucket)
sysfatal("no bucket specified");
if(err = S3open(&c, config.s3host, config.s3port))
sysfatal("s3mkarena %s\n", err);
memset(&req, 0, sizeof(req));
req.cfd = -1;
req.method = "PUT";
req.resource = smprint("/%U", config.bucket);
if(err = S3request(&c, &req, &resp)) {
sysfatal( "s3mkarena: create bucket failed: %s", err );
}
if(resp.result[0] != '2'){
fprint(2, "s3mkarena: s3 server reported %s\n", resp.result );
S3responsefd(&resp, 2);
threadexitsall("request failed");
}
req.resource = smprint("/%U/magic", config.bucket);
req.clen = magiclen+AESbsize;
req.content = vtmalloc(req.clen);
memcpy(req.content+AESbsize, magic, magiclen);
if(config.key){
encryptblock(req.content, magiclen, config.key);
}
if(err = S3request(&c, &req, &resp)) {
sysfatal( "magic number failed: %s", err );
}
if(resp.result[0] != '2'){
fprint(2, "s3mkarena: s3 server reported %s\n", resp.result );
S3responsefd(&resp, 2);
threadexitsall("request failed");
}
S3close(&c);
threadexitsall(nil);
}
|