Last active
August 29, 2015 14:13
-
-
Save GPrathap/20d2ab2a62e7bf0198cd to your computer and use it in GitHub Desktop.
Virtual host configuration file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "httpd.h" | |
#include "http_core.h" | |
#include "http_protocol.h" | |
#include "http_request.h" | |
#include "apr_strings.h" | |
#include "apr_network_io.h" | |
#include "apr_md5.h" | |
#include "apr_sha1.h" | |
#include "apr_hash.h" | |
#include "apr_base64.h" | |
#include "apr_dbd.h" | |
#include <apr_file_info.h> | |
#include <apr_file_io.h> | |
#include <apr_tables.h> | |
#include "util_script.h" | |
typedef struct { | |
const char* key; | |
const char* value; | |
} keyValuePair; | |
/* Define prototypes of our functions in this module */ | |
static void register_hooks(apr_pool_t *pool); | |
static int example_handler(request_rec *r); | |
keyValuePair* readPost(request_rec* r); | |
/* Define our module as an entity and assign a function for registering hooks */ | |
module AP_MODULE_DECLARE_DATA proxcyExe_module = | |
{ | |
STANDARD20_MODULE_STUFF, | |
NULL, // Per-directory configuration handler | |
NULL, // Merge handler for per-directory configurations | |
NULL, // Per-server configuration handler | |
NULL, // Merge handler for per-server configurations | |
NULL, // Any directives we may have for httpd | |
register_hooks // Our hook registering function | |
}; | |
/* register_hooks: Adds a hook to the httpd process */ | |
static void register_hooks(apr_pool_t *pool) | |
{ | |
/* Hook the request handler */ | |
ap_hook_handler(example_handler, NULL, NULL, APR_HOOK_LAST); | |
} | |
/* The handler function for our module. | |
* This is where all the fun happens! | |
*/ | |
static int example_handler1(request_rec *r) | |
{ | |
/* First off, we need to check if this is a call for the "example" handler. | |
* If it is, we accept it and do our things, it not, we simply return DECLINED, | |
* and Apache will try somewhere else. | |
*/ | |
if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED); | |
// The first thing we will do is write a simple "Hello, world!" back to the client. | |
ap_rputs("Hello, world!<br/>", r); | |
return OK; | |
} | |
static int example_handler(request_rec *r) | |
{ | |
/* Set the appropriate content type */ | |
ap_set_content_type(r, "application/json"); | |
/* Print out the IP address of the client connecting to us: */ | |
ap_rprintf(r, "<h2>Hello, %s!</h2>", r->useragent_ip); | |
/* If we were reached through a GET or a POST request, be happy, else sad. */ | |
if ( !strcmp(r->method, "POST") || !strcmp(r->method, "GET") ) { | |
//ap_rputs("You used a GET that makes us happy!<br/>", r); | |
ap_rprintf(r, "Your query string was---->: %s", r->args); | |
} | |
else { | |
ap_rputs("You did not use POST or GET, that makes us sad :(<br/>", r); | |
} | |
/* Lastly, if there was a query string, let's print that too! */ | |
if (r->args) { | |
ap_rprintf(r, "Your query string was: %s", r->args); | |
} | |
return OK; | |
} | |
keyValuePair* readPost(request_rec* r) | |
{ | |
apr_array_header_t *pairs = NULL; | |
apr_off_t len; | |
apr_size_t size; | |
int res; | |
int i = 0; | |
char *buffer; | |
keyValuePair* kvp; | |
res = ap_parse_form_data(r, NULL, &pairs, -1, HUGE_STRING_LEN); | |
if (res != OK || !pairs) return NULL; /* Return NULL if we failed or if there are is no POST data */ | |
kvp = apr_pcalloc(r->pool, sizeof(keyValuePair) * (pairs->nelts + 1)); | |
while (pairs && !apr_is_empty_array(pairs)) { | |
ap_form_pair_t *pair = (ap_form_pair_t *) apr_array_pop(pairs); | |
apr_brigade_length(pair->value, 1, &len); | |
size = (apr_size_t) len; | |
buffer = apr_palloc(r->pool, size + 1); | |
apr_brigade_flatten(pair->value, buffer, &size); | |
buffer[len] = 0; | |
kvp[i].key = apr_pstrdup(r->pool, pair->name); | |
kvp[i].value = buffer; | |
i++; | |
} | |
return kvp; | |
} | |
static int example_handler3(request_rec *r) | |
{ | |
/*~~~~~~~~~~~~~~~~~~~~~~*/ | |
keyValuePair* formData; | |
/*~~~~~~~~~~~~~~~~~~~~~~*/ | |
formData = readPost(r); | |
/* if (formData) { | |
int i; | |
for (i = 0; &formData[i]; i++) { | |
if (formData[i].key && formData[i].value) { | |
ap_rprintf(r, "%s = %s\n", formData[i].key, formData[i].value); | |
} else if (formData[i].key) { | |
ap_rprintf(r, "%s\n", formData[i].key); | |
} else if (formData[i].value) { | |
ap_rprintf(r, "= %s\n", formData[i].value); | |
} else { | |
break; | |
} | |
} | |
}*/ | |
ap_rprintf(r, "%s\n", "Set handle r works flow...S"); | |
return OK; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<VirtualHost *:80> | |
#ServerName www.example.com | |
#ProxyPreserveHost On | |
ServerName localhost | |
ServerAdmin webmaster@localhost | |
DocumentRoot /var/www/test.com | |
ProxyPass / http://0.0.0.0:8080/user/userlist | |
ProxyBadHeader Ignore | |
<Location / > | |
SetHandler proxcyExe | |
#ProxyPassReverse http://0.0.0.0:8080/user/userlist | |
</Location> | |
ErrorLog ${APACHE_LOG_DIR}/error.log | |
CustomLog ${APACHE_LOG_DIR}/access.log combined | |
</VirtualHost> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment