#define SCHEME_MAX 32 #define AUTHORITY_MAX USERINFO_MAX + 1 + AUTHORITY_HOST_MAX + 1 + \ AUTHORITY_PORT_MAX #define AUTHORITY_HOST_MAX HOST_NAME_MAX #define AUTHORITY_PORT_MAX 5 #define USERINFO_MAX USERINFO_USERNAME_MAX + 1 + USERINFO_PASSWORD_MAX #define USERINFO_USERNAME_MAX 255 #define USERINFO_PASSWORD_MAX 255 #define QUERY_MAX 1024 #define FRAGMENT_MAX 1024 typedef struct Uri Uri; typedef struct Authority Authority; typedef struct Userinfo Userinfo; struct Uri { char scheme[SCHEME_MAX]; char username[USERINFO_USERNAME_MAX]; char password[USERINFO_PASSWORD_MAX]; char host[AUTHORITY_HOST_MAX]; char port[AUTHORITY_PORT_MAX]; char path[PATH_MAX]; char query[QUERY_MAX]; char fragment[FRAGMENT_MAX]; }; struct Authority { char username[USERINFO_USERNAME_MAX]; char password[USERINFO_PASSWORD_MAX]; char host[AUTHORITY_HOST_MAX]; char port[AUTHORITY_PORT_MAX]; }; struct Userinfo { char username[USERINFO_USERNAME_MAX]; char password[USERINFO_PASSWORD_MAX]; }; Uri *parseuri(const char *uri); char *parsescheme(const char *scheme); Authority *parseauthority(const char *authority); Userinfo *parseuserinfo(const char *userinfo); char *parsequery(const char *query);