From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

/******************************************************************************
* Perlbal XS HTTPHeaders class *
* Written by Mark Smith (junior@sixapart.com) *
* *
* This program is free software; you can redistribute it and/or modify it *
* under the same terms as Perl itself. *
* *
* Copyright 2004 Danga Interactive, Inc. *
* Copyright 2005 Six Apart, Ltd. *
******************************************************************************/
#ifndef __HEADERS_H
#define __HEADERS_H
extern "C" {
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
}
/* some general purpose defines we use */
#define H_REQUEST 1
#define H_RESPONSE 2
/* setup method constants */
#define M_GET 1
#define M_POST 2
#define M_OPTIONS 3
#define M_PUT 4
#define M_DELETE 5
#define M_HEAD 6
/* some structs we use for storing header information */
struct Header {
int keylen; /* 14 */
char *key; /* Content-length */
SV *sv_value; /* 5 */
Header *prev, *next;
};
/* the main headers class */
class HTTPHeaders {
private:
int versionNumber, statusCode, headersType, method;
SV *sv_uri, *sv_firstLine, *sv_methodString;
Header *hdrs, *hdrtail;
Header *findHeader(char *which, int len = 0);
void freeHeader(Header *hdr);
public:
/* constructor and destructor */
HTTPHeaders();
~HTTPHeaders();
int parseHeaders(SV *headers);
/* reconstructor */
SV *getReconstructed();
/* get and set header values */
SV *getHeader(char *which);
void setHeader(char *which, char *value);
/* extra getters that we use to speed stuff up */
int getMethod();
SV *getMethodString();
int getStatusCode();
void setStatusCode(int code);
void setVersionNumber(int version);
int getVersionNumber();
bool isRequest();
bool isResponse();
void setCodeText(int code, char *codetext);
SV *getURI();
SV *setURI(char *uri);
SV *getHeadersList();
};
#endif