Skip to content

Commit

Permalink
user-agent support
Browse files Browse the repository at this point in the history
  • Loading branch information
Kyle Maxwell committed Mar 23, 2009
1 parent 3859f1f commit 4a45ae6
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 5 deletions.
4 changes: 4 additions & 0 deletions README.C-LANG
Expand Up @@ -28,6 +28,10 @@ parsleyPtr parsley_compile(char* parsley, char* incl)
Notes: This is *NOT* thread-safe. (Usage of the parselet via parsley_parse_* *IS*
thread-safe, however.)

void parsley_set_user_agent(char *);

Sets the user-agent used by parsley's internal http library.

void parsley_free(parsleyPtr);

Frees the parsleyPtr's memory.
Expand Down
8 changes: 5 additions & 3 deletions parsley.c
Expand Up @@ -316,11 +316,8 @@ collate(xmlNodePtr xml) {
free(empty);
free(multi);
free(sortable);
// xml->children = NULL;
// xmlFreeNode(xml);

collate(groups);
// TODO: done? figure out what the recursion target needs to be and reimplement
} else {
xmlNodePtr child = xml->children;
while(child != NULL){
Expand All @@ -330,6 +327,11 @@ collate(xmlNodePtr xml) {
}
}

void
parsley_set_user_agent(char const * agent) {
_parsley_set_user_agent(agent);
}

static void
visit(parsedParsleyPtr ptr, xmlNodePtr xml, char* err);

Expand Down
1 change: 1 addition & 0 deletions parsley.h
Expand Up @@ -75,6 +75,7 @@ parsedParsleyPtr parsley_parse_file(parsleyPtr parsley, char* file, int flags);
parsedParsleyPtr parsley_parse_string(parsleyPtr parsley, char* string, size_t size, char* base_uri, int flags);
parsedParsleyPtr parsley_parse_doc(parsleyPtr, xmlDocPtr, int);

void parsley_set_user_agent(char const *agent);
static contextPtr parsley_parsing_context;

#endif
4 changes: 4 additions & 0 deletions parsley_main.c
Expand Up @@ -21,6 +21,7 @@ struct arguments
int flags;
int output_xml;
char *parsley;
char *user_agent;
char *input_file;
char *output_file;
};
Expand All @@ -42,6 +43,7 @@ static struct argp_option options[] = {
{"output", 'o', "FILE", 0, "Output to FILE instead of standard output" },
{"include", 'i', "FILE", 0, "Include the contents of FILE in the compiled XSLT" },
{"no-prune", 'n', 0, 0, "Don't prune empty subtrees" },
{"user-agent", 'U', "USER_AGENT", 0, "Value of HTTP User-Agent header" },
{"no-net", 'z', 0, 0, "Disable ftp and http access for parselets" },
{"no-filesystem", 'Z', 0, 0, "Disable filesystem access for parselets" },
{ 0 }
Expand All @@ -58,6 +60,8 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state)
case 'x':
arguments->flags &= ~PARSLEY_OPTIONS_HTML;
break;
case 'U':
parsley_set_user_agent(arg);
case 'n':
arguments->flags &= ~PARSLEY_OPTIONS_PRUNE;
break;
Expand Down
16 changes: 14 additions & 2 deletions util.c
Expand Up @@ -22,13 +22,25 @@ FILE* parsley_fopen(char* name, char* mode) {
return fo;
}

static int parsley_io_mode = ~0;
static int parsley_io_mode = 0;
static char *parsley_user_agent_header = NULL;

int
parsley_io_get_mode() {
return parsley_io_mode;
}

void
_parsley_set_user_agent(char * agent) {
if(parsley_user_agent_header != NULL) free(parsley_user_agent_header);
asprintf(&parsley_user_agent_header, "User-Agent: %s\n", agent);
}

static void *
xmlUserAgentIOHTTPOpen(const char * file_name) {
return(xmlNanoHTTPMethod(file_name, NULL, NULL, NULL, parsley_user_agent_header, 0));
}

void
parsley_io_set_mode(int mode) {
if(mode == parsley_io_mode) return;
Expand All @@ -47,7 +59,7 @@ parsley_io_set_mode(int mode) {
}
if(parsley_io_mode & PARSLEY_OPTIONS_ALLOW_NET) {
#ifdef LIBXML_HTTP_ENABLED
xmlRegisterInputCallbacks(xmlIOHTTPMatch, xmlIOHTTPOpen,
xmlRegisterInputCallbacks(xmlIOHTTPMatch, xmlUserAgentIOHTTPOpen,
xmlIOHTTPRead, xmlIOHTTPClose);
#endif /* LIBXML_HTTP_ENABLED */

Expand Down
1 change: 1 addition & 0 deletions util.h
Expand Up @@ -27,5 +27,6 @@ char* parsley_key_tag(char*);
pxpathPtr parsley_key_filter(char*);
int parsley_io_get_mode();
void parsley_io_set_mode(int mode);
void _parsley_set_user_agent(char *agent);

#endif

0 comments on commit 4a45ae6

Please sign in to comment.