Example #1
0
char *php_http_url_authority_to_string(const php_http_url_t *url, char **url_str, size_t *url_len)
{
	php_http_buffer_t buf;

	php_http_buffer_init(&buf);

	if (url->user && *url->user) {
		php_http_buffer_appendl(&buf, url->user);
		if (url->pass && *url->pass) {
			php_http_buffer_appends(&buf, ":");
			php_http_buffer_appendl(&buf, url->pass);
		}
		php_http_buffer_appends(&buf, "@");
	}

	if (url->host && *url->host) {
		php_http_buffer_appendl(&buf, url->host);
		if (url->port) {
			php_http_buffer_appendf(&buf, ":%hu", url->port);
		}
	}

	php_http_buffer_shrink(&buf);
	php_http_buffer_fix(&buf);

	if (url_len) {
		*url_len = buf.used;
	}

	if (url_str) {
		*url_str = buf.data;
	}

	return buf.data;
}
Example #2
0
static PHP_HTTP_FILTER_FUNCTION(chunked_encode)
{
	php_http_buffer_t buf;
	php_stream_bucket *ptr, *nxt;
	
	if (bytes_consumed) {
		*bytes_consumed = 0;
	}
	
	/* new data available? */
	php_http_buffer_init(&buf);

	/* fetch available bucket data */
	for (ptr = buckets_in->head; ptr; ptr = nxt) {
		if (bytes_consumed) {
			*bytes_consumed += ptr->buflen;
		}
#if DBG_FILTER
		fprintf(stderr, "update: chunked (-> %zu) (w: %zu, r: %zu)\n", ptr->buflen, stream->writepos, stream->readpos);
#endif
		
		nxt = ptr->next;
		php_stream_bucket_unlink(ptr);
		php_http_buffer_appendf(&buf, "%lx" PHP_HTTP_CRLF, (long unsigned int) ptr->buflen);
		php_http_buffer_append(&buf, ptr->buf, ptr->buflen);
		php_http_buffer_appends(&buf, PHP_HTTP_CRLF);

		/* pass through */
		NEW_BUCKET(buf.data, buf.used);
		/* reset */
		php_http_buffer_reset(&buf);
		php_stream_bucket_delref(ptr);
	}

	/* free buffer */
	php_http_buffer_dtor(&buf);
	
	/* terminate with "0" */
	if (PHP_HTTP_FILTER_IS_CLOSING(stream, flags)) {
#if DBG_FILTER
		fprintf(stderr, "finish: chunked\n");
#endif
		
		NEW_BUCKET("0" PHP_HTTP_CRLF PHP_HTTP_CRLF, lenof("0" PHP_HTTP_CRLF PHP_HTTP_CRLF));
	}
	
	return PSFS_PASS_ON;
}
php_http_message_parser_object_t *php_http_message_parser_object_new_ex(zend_class_entry *ce, php_http_message_parser_t *parser)
{
	php_http_message_parser_object_t *o;

	o = ecalloc(1, sizeof(*o) + zend_object_properties_size(ce));
	zend_object_std_init(&o->zo, ce);
	object_properties_init(&o->zo, ce);

	if (parser) {
		o->parser = parser;
	} else {
		o->parser = php_http_message_parser_init(NULL);
	}
	php_http_buffer_init(&o->buffer);
	o->zo.handlers = &php_http_message_parser_object_handlers;

	return o;
}