MINI SHELL

Server : Apache/2.2.2 (Fedora)
System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686
User : apache ( 48)
PHP Version : 5.2.9
Disable Function : NONE
Directory :  /proc/self/root/usr/include/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/usr/include/tuxmodule.h
#ifndef _TUX_MODULE_H
#define _TUX_MODULE_H

/*
 * TUX - Integrated HTTP layer and Object Cache
 *
 * Copyright (C) 2000, Ingo Molnar <mingo@redhat.com>
 *
 * module.h: user-space portions of the HTTP module API
 */

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <malloc.h>
#include <fcntl.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/tcp.h>

#include <tux.h>

extern char *TUXAPI_version;
extern unsigned long TUXAPI_version_len;
extern char *TUXAPI_docroot;
extern unsigned long TUXAPI_docroot_len;
extern char *TUXAPI_servername;
extern unsigned long TUXAPI_servername_len;

extern char **TUXAPI_modulename_array;

#define CGI_SERVER_NAME(req) TUXAPI_servername
#define CGI_SERVER_NAME_LEN(req) TUXAPI_servername_len
#define CGI_GATEWAY_INTERFACE(req) "CGI/1.1"
#define CGI_SERVER_PROTOCOL(req) \
		(((req)->http_version == HTTP_1_1) ? "HTTP/1.1" : "HTTP/1.0")
#define CGI_SERVER_PORT(req) 80
#define CGI_REQUEST_METHOD(req) ({  			\
	char *__res;					\
							\
        switch ((req)->http_method) 			\
        {						\
                case METHOD_GET:			\
                        __res = "GET"; break;		\
                case METHOD_POST:			\
                        __res = "POST"; break;		\
                case METHOD_HEAD:			\
                        __res = "HEAD"; break;		\
                case METHOD_PUT:			\
                        __res = "PUT"; break;		\
                default:				\
                        __res = "NONE"; break;		\
        }						\
	__res;						\
})
#define CGI_HTTP_ACCEPT(req) ((req)->accept)
#define CGI_HTTP_USER_AGENT(req) ((req)->user_agent)
#define CGI_HTTP_REFERER(req) ((req)->referer)
#define CGI_PATH_TRANSLATED(req) (TUXAPI_docroot)
#define CGI_DOCUMENT_ROOT(req) (TUXAPI_docroot)
#define CGI_PATH_INFO(req) ((req)->query)
#define CGI_SCRIPT_NAME(req) (TUXAPI_modulename_array[(req)->module_index])
#define CGI_QUERY_STRING(req) ((req)->query)

// For the time being you'll have to use ACTION_GET_HEADERS 
// and decode the info yourself if you want to do authentication.

#define CGI_REMOTE_USER(req) ""
#define CGI_REMOTE_AUTH_TYPE(req) ""
#define CGI_ANNOTATION_SERVER(req) ""

#define CGI_CONTENT_TYPE(req) ((req)->content_type)

extern int tux (unsigned int action, user_req_t *req);

extern void * TUXAPI_malloc_shared (unsigned int len);
extern char * TUXAPI_alloc_read_objectbuf (user_req_t *req, int fd);
extern void TUXAPI_free_objectbuf (user_req_t *req, void *buf);

/* queueing functions */
#if 0
/* the queueing API is not yet mature */
void * TUXAPI_create_queue_anonymous(void);
void * TUXAPI_create_queue(char *queue_name);
int TUXAPI_remove_queue(void *queue_handle);
int TUXAPI_enqueue_request(user_req_t *req, void *queue_handle);
int TUXAPI_enqueue_request_by_name(user_req_t *req, char *queue_name);
int TUXAPI_dequeue_request(void *queue_handle);
int TUXAPI_dequeue_request_by_name(char *queue_name);
#endif

#define BUG()								\
do {									\
	printf("TUX BUG at %d:%s!\n", __LINE__, __FILE__);		\
	tux(TUX_ACTION_STOPTHREAD, NULL);				\
	tux(TUX_ACTION_SHUTDOWN, NULL);					\
	*(int*)0=0;							\
	exit(-1);							\
} while (0)

#ifdef __i386__

#define LOCK_PREFIX "lock ; "

#define barrier() __asm__ __volatile__("": : :"memory")
struct __dummy { unsigned long a[100]; };
#define ADDR (*(volatile struct __dummy *) addr)

extern __inline__ int test_and_set_bit(int nr, volatile void * addr)
{
	int oldbit;

	__asm__ __volatile__( LOCK_PREFIX
		"btsl %2,%1\n\tsbbl %0,%0"
		:"=r" (oldbit),"=m" (ADDR)
		:"Ir" (nr));
	return oldbit;
}

extern __inline__ void TUXAPI_down (int *sem)
{
	while (test_and_set_bit(0, sem))
		barrier();
}

extern __inline__ void TUXAPI_up (int *sem)
{
	*((volatile int *)sem) = 0;
}

#elif defined(__powerpc__)

extern __inline__ void TUXAPI_down (int *sem)
{
	unsigned int tmp;

	__asm__ __volatile__(
	"b		2f\n\
1:	lwzx		%0,0,%1\n\
	cmpwi		0,%0,0\n\
	bne+		1b\n\
2:	lwarx		%0,0,%1\n\
	cmpwi		0,%0,0\n\
	bne-		1b\n\
	stwcx.		%2,0,%1\n\
	bne-		2b\n\
	isync"
	: "=&r"(tmp)
	: "r"((volatile int *)sem), "r"(1)
	: "cr0", "memory");
}

extern __inline__ void TUXAPI_up (int *sem)
{
	__asm__ __volatile__("lwsync": : :"memory");
	*((volatile int *)sem) = 0;
}

#elif defined(__ia64)

#include <ia64intrin.h>

static inline void
TUXAPI_down (int *sem)
{
	while (!__sync_bool_compare_and_swap(sem, 0, 1)) {
		while (*(volatile int *)sem)
			asm volatile ("hint @pause");
	}
}

static inline void
TUXAPI_up (int *sem)
{
	*((volatile int *)sem) = 0;
}

#else

#warning Using generic TUXAPI locks - not SMP safe
#define barrier() __asm__ __volatile__("": : :"memory")

extern __inline__ int test_and_set_bit(int nr, volatile void * addr)
{
	int oldbit;
	volatile unsigned long *foo;

	foo = addr;
	oldbit = (*foo >> nr) & 1;
	*foo = *foo | (1<<nr);

	return oldbit;
}

extern __inline__ void TUXAPI_down (int *sem)
{
	while (test_and_set_bit(0, sem))
		barrier();
}

extern __inline__ void TUXAPI_up (int *sem)
{
	*((volatile int *)sem) = 0;
}

#endif

#define TUX_DEBUG 0

#if TUX_DEBUG
# define Dprintk(x...) do { printf(x); fflush(stdout); } while (0)
#else
# define Dprintk(x...) do { } while (0)
#endif

#define HTTP_TRACE(req,info) Dprintk("HTTP trace at %s:%d, request %p, info %d, event %d (meth:%d, query:%s, cookies:%s).\n", __FILE__, __LINE__, (req)->id, info, (req)->event, (req)->http_method, (req)->query, (req)->cookies_len ? (req)->cookies : "<no cookies>")

#endif

Anon7 - 2021