mirror of
https://github.com/xcat2/xNBA.git
synced 2025-02-16 18:48:12 +00:00
Access to the gpxe.org and etherboot.org domains and associated resources has been revoked by the registrant of the domain. Work around this problem by renaming project from gPXE to iPXE, and updating URLs to match. Also update README, LOG and COPYRIGHTS to remove obsolete information. Signed-off-by: Michael Brown <mcb30@ipxe.org>
149 lines
3.4 KiB
C
149 lines
3.4 KiB
C
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <ipxe/uri.h>
|
|
|
|
#define URI_MAX_LEN 1024
|
|
|
|
struct uri_test {
|
|
const char *base_uri_string;
|
|
const char *relative_uri_string;
|
|
const char *resolved_uri_string;
|
|
};
|
|
|
|
static struct uri_test uri_tests[] = {
|
|
{ "http://www.fensystems.co.uk", "",
|
|
"http://www.fensystems.co.uk/" },
|
|
{ "http://ipxe.org/wiki/page1", "page2",
|
|
"http://ipxe.org/wiki/page2" },
|
|
{ "http://ipxe.org/wiki/page1", "../page3",
|
|
"http://ipxe.org/page3" },
|
|
{ "tftp://192.168.0.1/", "/tftpboot/vmlinuz",
|
|
"tftp://192.168.0.1/tftpboot/vmlinuz" },
|
|
{ "ftp://the%41nswer%3d:%34ty%32wo@ether%62oot.org:8080/p%41th/foo",
|
|
"to?%41=b#%43d",
|
|
"ftp://theAnswer%3d:4ty2wo@ipxe.org:8080/path/to?a=b#cd" },
|
|
#if 0
|
|
"http://www.ipxe.org/wiki",
|
|
"mailto:bob@nowhere.com",
|
|
"ftp://joe:secret@insecure.org:8081/hidden/path/to?what=is#this",
|
|
#endif
|
|
};
|
|
|
|
static int test_parse_unparse ( const char *uri_string ) {
|
|
char buf[URI_MAX_LEN];
|
|
size_t len;
|
|
struct uri *uri = NULL;
|
|
int rc;
|
|
|
|
/* Parse and unparse URI */
|
|
uri = parse_uri ( uri_string );
|
|
if ( ! uri ) {
|
|
rc = -ENOMEM;
|
|
goto done;
|
|
}
|
|
len = unparse_uri ( buf, sizeof ( buf ), uri, URI_ALL );
|
|
|
|
/* Compare result */
|
|
if ( strcmp ( buf, uri_string ) != 0 ) {
|
|
printf ( "Unparse of \"%s\" produced \"%s\"\n",
|
|
uri_string, buf );
|
|
rc = -EINVAL;
|
|
goto done;
|
|
}
|
|
|
|
rc = 0;
|
|
|
|
done:
|
|
uri_put ( uri );
|
|
if ( rc ) {
|
|
printf ( "URI parse-unparse of \"%s\" failed: %s\n",
|
|
uri_string, strerror ( rc ) );
|
|
}
|
|
return rc;
|
|
}
|
|
|
|
static int test_resolve ( const char *base_uri_string,
|
|
const char *relative_uri_string,
|
|
const char *resolved_uri_string ) {
|
|
struct uri *base_uri = NULL;
|
|
struct uri *relative_uri = NULL;
|
|
struct uri *resolved_uri = NULL;
|
|
char buf[URI_MAX_LEN];
|
|
size_t len;
|
|
int rc;
|
|
|
|
/* Parse URIs */
|
|
base_uri = parse_uri ( base_uri_string );
|
|
if ( ! base_uri ) {
|
|
rc = -ENOMEM;
|
|
goto done;
|
|
}
|
|
relative_uri = parse_uri ( relative_uri_string );
|
|
if ( ! relative_uri ) {
|
|
rc = -ENOMEM;
|
|
goto done;
|
|
}
|
|
|
|
/* Resolve URI */
|
|
resolved_uri = resolve_uri ( base_uri, relative_uri );
|
|
if ( ! resolved_uri ) {
|
|
rc = -ENOMEM;
|
|
goto done;
|
|
}
|
|
|
|
/* Compare result */
|
|
len = unparse_uri ( buf, sizeof ( buf ), resolved_uri, URI_ALL );
|
|
if ( strcmp ( buf, resolved_uri_string ) != 0 ) {
|
|
printf ( "Resolution of \"%s\"+\"%s\" produced \"%s\"\n",
|
|
base_uri_string, relative_uri_string, buf );
|
|
rc = -EINVAL;
|
|
goto done;
|
|
}
|
|
|
|
rc = 0;
|
|
|
|
done:
|
|
uri_put ( base_uri );
|
|
uri_put ( relative_uri );
|
|
uri_put ( resolved_uri );
|
|
if ( rc ) {
|
|
printf ( "URI resolution of \"%s\"+\"%s\" failed: %s\n",
|
|
base_uri_string, relative_uri_string,
|
|
strerror ( rc ) );
|
|
}
|
|
return rc;
|
|
}
|
|
|
|
int uri_test ( void ) {
|
|
unsigned int i;
|
|
struct uri_test *uri_test;
|
|
int rc;
|
|
int overall_rc = 0;
|
|
|
|
for ( i = 0 ; i < ( sizeof ( uri_tests ) /
|
|
sizeof ( uri_tests[0] ) ) ; i++ ) {
|
|
uri_test = &uri_tests[i];
|
|
rc = test_parse_unparse ( uri_test->base_uri_string );
|
|
if ( rc != 0 )
|
|
overall_rc = rc;
|
|
rc = test_parse_unparse ( uri_test->relative_uri_string );
|
|
if ( rc != 0 )
|
|
overall_rc = rc;
|
|
rc = test_parse_unparse ( uri_test->resolved_uri_string );
|
|
if ( rc != 0 )
|
|
overall_rc = rc;
|
|
rc = test_resolve ( uri_test->base_uri_string,
|
|
uri_test->relative_uri_string,
|
|
uri_test->resolved_uri_string );
|
|
if ( rc != 0 )
|
|
overall_rc = rc;
|
|
}
|
|
|
|
if ( overall_rc )
|
|
printf ( "URI tests failed: %s\n", strerror ( overall_rc ) );
|
|
return overall_rc;
|
|
}
|