+ZEND_BEGIN_ARG_INFO_EX(ai_HttpUrl_parse, 0, 0, 1)
+ ZEND_ARG_INFO(0, url)
+ ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO();
+PHP_METHOD(HttpUrl, parse)
+{
+ char *str;
+ int len;
+ long flags = 0;
+ php_http_url_t url;
+ zend_error_handling zeh;
+
+ php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &str, &len, &flags), invalid_arg, return);
+
+ zend_replace_error_handling(EH_THROW, php_http_exception_bad_url_class_entry, &zeh TSRMLS_CC);
+ if (php_http_url_init(&url, str, len, flags TSRMLS_CC)) {
+ object_init_ex(return_value, php_http_url_class_entry);
+ if (url.scheme.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("scheme"),
+ url.scheme.str, url.scheme.len TSRMLS_CC);
+ }
+ if (url.authority.userinfo.username.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("user"),
+ url.authority.userinfo.username.str, url.authority.userinfo.username.len TSRMLS_CC);
+ }
+ if (url.authority.userinfo.password.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("pass"),
+ url.authority.userinfo.password.str, url.authority.userinfo.password.len TSRMLS_CC);
+ }
+ if (url.authority.host.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("host"),
+ url.authority.host.str, url.authority.host.len TSRMLS_CC);
+ }
+ if (url.authority.port) {
+ zend_update_property_long(php_http_url_class_entry, return_value, ZEND_STRL("port"),
+ url.authority.port TSRMLS_CC);
+ }
+ if (url.path.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("path"),
+ url.path.str, url.path.len TSRMLS_CC);
+ }
+ if (url.query.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("query"),
+ url.query.str, url.query.len TSRMLS_CC);
+ }
+ if (url.fragment.len) {
+ zend_update_property_stringl(php_http_url_class_entry, return_value, ZEND_STRL("fragment"),
+ url.fragment.str, url.fragment.len TSRMLS_CC);
+ }
+ php_http_url_dtor(&url);
+ }
+ zend_restore_error_handling(&zeh TSRMLS_CC);
+}
+
+static zend_function_entry php_http_url_methods[] = {
+ PHP_ME(HttpUrl, __construct, ai_HttpUrl___construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
+ PHP_ME(HttpUrl, mod, ai_HttpUrl_mod, ZEND_ACC_PUBLIC)
+ PHP_ME(HttpUrl, toString, ai_HttpUrl_toString, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(HttpUrl, __toString, toString, ai_HttpUrl_toString, ZEND_ACC_PUBLIC)
+ PHP_ME(HttpUrl, toArray, ai_HttpUrl_toArray, ZEND_ACC_PUBLIC)
+ PHP_ME(HttpUrl, parse, ai_HttpUrl_parse, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+ EMPTY_FUNCTION_ENTRY
+};
+
+zend_class_entry *php_http_url_class_entry;
+