/******************************************************************************
* 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. *
******************************************************************************/
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include "headers.h"
#include "const-c.inc"
MODULE = Perlbal::XS::HTTPHeaders PACKAGE = Perlbal::XS::HTTPHeaders
INCLUDE: const-xs.inc
HTTPHeaders *
HTTPHeaders::new( headers, junk = 0 )
SV *headers
int junk
CODE:
RETVAL = new HTTPHeaders();
if (!RETVAL) XSRETURN_UNDEF;
if (!RETVAL->parseHeaders( headers )) {
delete RETVAL;
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
void
HTTPHeaders::DESTROY()
SV *
HTTPHeaders::getReconstructed()
SV *
HTTPHeaders::getHeader( which )
char *which
void
HTTPHeaders::setHeader( which, value )
char *which
char *value
int
HTTPHeaders::getMethod()
int
HTTPHeaders::getStatusCode()
int
HTTPHeaders::getVersionNumber()
void
HTTPHeaders::setVersionNumber( version )
int version
bool
HTTPHeaders::isRequest()
bool
HTTPHeaders::isResponse()
void
HTTPHeaders::setStatusCode( code )
int code
void
HTTPHeaders::setCodeText( code, codetext )
int code
char *codetext
SV *
HTTPHeaders::getURI()
################################################################################
## setup functions that call through to our native functions; this is the
## interface definition that Perlbal expects to use when we're a replacement
## for the standard library
SV *
HTTPHeaders::header( which, value = NULL )
char *which
char *value
PROTOTYPE: $;$
CODE:
// THIS is first argument, so we expect 2 or 3
if (items > 2) {
THIS->setHeader( which, value );
if (GIMME_V != G_VOID && value) {
RETVAL = THIS->getHeader( which );
} else {
XSRETURN_UNDEF;
}
} else
RETVAL = THIS->getHeader( which );
OUTPUT:
RETVAL
SV *
HTTPHeaders::to_string()
CODE:
RETVAL = THIS->getReconstructed();
OUTPUT:
RETVAL
SV *
HTTPHeaders::to_string_ref()
CODE:
SV *temp = THIS->getReconstructed();
RETVAL = newRV_noinc(temp);
OUTPUT:
RETVAL
SV *
HTTPHeaders::request_method()
CODE:
switch ( THIS->getMethod() ) {
case M_GET:
RETVAL = newSVpvn("GET", 3);
break;
case M_HEAD:
RETVAL = newSVpvn("HEAD", 4);
break;
case M_POST:
RETVAL = newSVpvn("POST", 4);
break;
case M_OPTIONS:
RETVAL = newSVpvn("OPTIONS", 7);
break;
case M_PUT:
RETVAL = newSVpvn("PUT", 3);
break;
case M_DELETE:
RETVAL = newSVpvn("DELETE", 6);
break;
default:
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
SV *
HTTPHeaders::request_uri()
CODE:
RETVAL = THIS->getURI();
OUTPUT:
RETVAL
int
HTTPHeaders::response_code()
CODE:
RETVAL = THIS->getStatusCode();
OUTPUT:
RETVAL
int
HTTPHeaders::version_number( value = 0 )
int value
CODE:
// do a set if we have 2 parameters
if (items == 2) {
THIS->setVersionNumber( value );
RETVAL = value;
} else
RETVAL = THIS->getVersionNumber();
OUTPUT:
RETVAL