ref: 1d8fc9dd60d8c0ef4e672842c2805b6ba004245c
dir: /http.c/
#include <u.h>
#include <libc.h>
#include <stdio.h>
#include "masto9.h"
char *
httpget(char *token, char *url)
{
int ctlfd, bodyfd, conn, n;
char buf[1024];
char *body;
char *bearer_token;
ctlfd = open("/mnt/web/clone", ORDWR);
if (ctlfd < 0)
sysfatal("open: %r");
n = read(ctlfd, buf, sizeof(buf));
if (n < 0)
sysfatal("read: %r");
buf[n] = 0;
conn = atoi(buf);
/* the write(2) syscall (used by fprint) is considered
* failed if it returns -1 or N != Nwritten. to check for
* error here you'd have to snprint the url to a temporary
* buffer, get its length, then write it out and check the
* amount written against the length */
if (fprint(ctlfd, "url %s", url) <= 0)
sysfatal("write ctl failed 'url %s': %r", url);
bearer_token = concat("Authorization: Bearer ", token);
if (fprint(ctlfd, "headers %s", bearer_token) <= 0)
sysfatal("write ctl failed 'headers'");
snprint(buf, sizeof(buf), "/mnt/web/%d/body", conn);
bodyfd = open(buf, OREAD);
if (bodyfd < 0)
sysfatal("open %s: %r", buf);
body = emalloc(TLBUFSIZE * sizeof(char));
if (readn(bodyfd, body, TLBUFSIZE) <= 0)
sysfatal("readn: %r");
close(bodyfd);
close(ctlfd);
print("BODY %d", strlen(body));
return body;
}
char *
httppost(char *token, char *url, char *text)
{
int ctlfd, bodyfd, conn, n;
char *buf;
char *bearer_token;
buf = emalloc(TOOTBUFSIZE * sizeof(char));
ctlfd = open("/mnt/web/clone", ORDWR);
if (ctlfd < 0)
sysfatal("open ctlfd: %r");
/* n = write(ctlfd, Contenttype, sizeof(Contenttype)); */
/* if (n < 0) */
/* sysfatal("write: %r"); */
/* buf[n] = 0; */
conn = atoi(buf);
/* the write(2) syscall (used by fprint) is considered
* failed if it returns -1 or N != Nwritten. to check for
* error here you'd have to snprint the url to a temporary
* buffer, get its length, then write it out and check the
* amount written against the length */
if (fprint(ctlfd, "url %s", url) <= 0)
sysfatal("write ctl failed 'url %s': %r", url);
bearer_token = concat("Authorization: Bearer ", token);
if (fprint(ctlfd, "headers %s", bearer_token) <= 0)
sysfatal("write ctl failed 'headers'");
snprint(buf, TOOTBUFSIZE, "/mnt/web/%d/postbody", conn);
bodyfd = open(buf, OWRITE);
if (bodyfd < 0)
sysfatal("open bodyfd %s: %r", buf);
if (write(bodyfd, text, strlen(text)) < 0)
sysfatal("write: %r");
close(bodyfd);
snprint(buf, TOOTBUFSIZE, "/mnt/web/%d/body", conn);
bodyfd = open(buf, OREAD);
if (bodyfd < 0)
sysfatal("open %s: %r", buf);
if (readn(bodyfd, buf, TOOTBUFSIZE) <= 0)
sysfatal("readn: %r");
/* print("BUF %s", buf); */
close(bodyfd);
close(ctlfd);
return buf;
}