|
|
|
#ifndef RESPONSE_H
|
|
|
|
#define RESPONSE_H
|
|
|
|
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
#include "util.h"
|
|
|
|
#include "requestresponse.h"
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* A struct reperesenting an http request
|
|
|
|
*/
|
|
|
|
typedef struct {
|
|
|
|
// Common versions are: 0.9, 1.0, 1.1, 2.0
|
|
|
|
float version;
|
|
|
|
int statusCode;
|
|
|
|
char *statusMessage;
|
|
|
|
HeaderList *headers;
|
|
|
|
void *body;
|
|
|
|
unsigned int headerLength;
|
|
|
|
} Response;
|
|
|
|
|
|
|
|
Response* newResponse();
|
|
|
|
/*
|
|
|
|
* creates the minium viable valid response
|
|
|
|
*/
|
|
|
|
void responseBarebones(Response *rsp);
|
|
|
|
void connectionEstablished(Response *rsp);
|
|
|
|
char *responseToString(Response *rsp);
|
|
|
|
/* sets the body of a response to a string
|
|
|
|
* @param rsp the response
|
|
|
|
* @param string the string
|
|
|
|
* @param updateContentLength whether the content-length header should be auto-updated
|
|
|
|
* Note: if you want to set a binary body, use responseSetBodyRaw
|
|
|
|
*/
|
|
|
|
void responseSetBody(Response *rsp, char *string, bool updateContentLength);
|
|
|
|
// TODO:
|
|
|
|
//void responseSetBodyRaw(Response *rsp, void *body, size_t size, bool updateContentLength);
|
|
|
|
void responseAddHeader(Response *rsp, char header[]);
|
|
|
|
Response* newResponseFromSocket(int socket);
|
|
|
|
void responseFirstLine( Response *req, char line[] );
|
|
|
|
|
|
|
|
void freeResponse( Response *rsp );
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* ifndef REQUEST_H */
|