Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: experimental/n…
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 160 lines (117 sloc) 4.49 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_0.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/


#ifndef _NEW_SAPI_H
#define _NEW_SAPI_H

#include "zend.h"
#include "zend_llist.h"
#include "zend_operators.h"

#define SAPI_POST_BLOCK_SIZE 4000

#if WIN32||WINNT
# ifdef SAPI_EXPORTS
# define SAPI_API __declspec(dllexport)
# else
# define SAPI_API __declspec(dllimport)
# endif
#else
#define SAPI_API
#endif


typedef struct {
char *header;
uint header_len;
} sapi_header_struct;


typedef struct {
zend_llist headers;
int http_response_code;
unsigned char send_default_content_type;
char *http_status_line;
} sapi_headers_struct;


typedef struct _sapi_module_struct sapi_module_struct;


extern sapi_module_struct sapi_module; /* true global */


typedef struct {
char *request_method;
char *query_string;
char *post_data;
char *cookie_data;
uint content_length;

char *path_translated;
char *request_uri;

char *content_type;

unsigned char headers_only;

/* for HTTP authentication */
char *auth_user;
char *auth_password;
} sapi_request_info;


typedef struct {
void *server_context;
sapi_request_info request_info;
sapi_headers_struct sapi_headers;
uint read_post_bytes;
unsigned char headers_sent;
} sapi_globals_struct;


#ifdef ZTS
# define SLS_D sapi_globals_struct *sapi_globals
# define SLS_DC , SLS_D
# define SLS_C sapi_globals
# define SLS_CC , SLS_C
# define SG(v) (sapi_globals->v)
# define SLS_FETCH() sapi_globals_struct *sapi_globals = ts_resource(sapi_globals_id)
SAPI_API extern int sapi_globals_id;
#else
# define SLS_D
# define SLS_DC
# define SLS_C
# define SLS_CC
# define SG(v) (sapi_globals.v)
# define SLS_FETCH()
extern SAPI_API sapi_globals_struct sapi_globals;
#endif

typedef struct _sapi_post_content_type_reader {
char *content_type;
uint content_type_len;
void (*post_reader)(char *content_type_dup SLS_DC);
} sapi_post_content_type_reader;


SAPI_API void sapi_startup(sapi_module_struct *sf);
SAPI_API void sapi_activate(SLS_D);
SAPI_API void sapi_deactivate(SLS_D);

SAPI_API int sapi_add_header(char *header_line, uint header_line_len);
SAPI_API int sapi_send_headers();

SAPI_API int sapi_register_post_reader(sapi_post_content_type_reader *post_content_type_reader);
SAPI_API void sapi_unregister_post_reader(sapi_post_content_type_reader *post_content_type_reader);

struct _sapi_module_struct {
char *name;

int (*startup)(struct _sapi_module_struct *sapi_module);
int (*shutdown)(struct _sapi_module_struct *sapi_module);

int (*ub_write)(const char *str, unsigned int str_length);

void (*sapi_error)(int type, const char *error_msg, ...);

int (*header_handler)(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC);
int (*send_headers)(sapi_headers_struct *sapi_headers SLS_DC);
void (*send_header)(sapi_header_struct *sapi_header, void *server_context);

int (*read_post)(char *buffer, uint count_bytes SLS_DC);
char *(*read_cookies)(SLS_D);
};


/* header_handler() constants */
#define SAPI_HEADER_ADD (1<<0)
#define SAPI_HEADER_DELETE_ALL (1<<1)
#define SAPI_HEADER_SEND_NOW (1<<2)


#define SAPI_HEADER_SENT_SUCCESSFULLY 1
#define SAPI_HEADER_DO_SEND 2
#define SAPI_HEADER_SEND_FAILED 3

#define SAPI_DEFAULT_CONTENT_TYPE "Content-Type: text/html"

#define SAPI_POST_READER_FUNC(post_reader) void post_reader(char *content_type_dup SLS_DC)

SAPI_POST_READER_FUNC(sapi_read_standard_form_data);

#endif /* _NEW_SAPI_H */
Something went wrong with that request. Please try again.