The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*
 *   Copyright (C) 1995, 1996, 1997, 1998
 *      Civil Engineering in Cyberspace
 *   Copyright (C) 1997, 1998
 *   	Free Software Foundation, Inc.
 *
 *   This program is free software; you can redistribute it and/or modify it
 *   under the terms of the GNU General Public License as published by the
 *   Free Software Foundation; either version 2, or (at your option) any
 *   later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
 *
 */
#include <uri_util.h>
#include <uri.h>
#include <uri_schemes.h>
#include <uri_scheme_generic.h>

#include <uri_escapes_ftp.h>

int uri_scheme_ftp_parse(uri_t* object)
{
  return uri_parse_generic(object, URI_SCHEME_GENERIC_PARSE_SKIP_QUERY);
}

int uri_scheme_ftp_cannonicalize(uri_t* original, uri_t* object, char* tmp, int* tmp_sizep)
{
  /*
   * Anonymous user is implicit if passwd is not set
   */
  if(object->info & URI_INFO_PARSED) {
    if(!object->user ||
       (object->user &&
	!object->passwd &&
	(!strcasecmp(object->user, "ftp") ||
	 !strcasecmp(object->user, "anonymous")))) {
      object->user = 0;
    }
  }
  return uri_scheme_generic_cannonicalize(original, object, tmp, tmp_sizep);
}

char* uri_scheme_ftp_user(uri_t* object)
{
  if(!object->user || !strcasecmp(object->user, "ftp"))
    return "anonymous";
  else
    return object->user;
}

uri_scheme_desc_t uri_scheme_ftp_desc = {
  /* parse */		uri_scheme_ftp_parse,
  /* cannonicalize */	uri_scheme_ftp_cannonicalize,
  /* string */		uri_scheme_generic_string,
  /* scheme */		uri_scheme_generic_scheme,
  /* host */		uri_scheme_generic_host,
  /* port */		uri_scheme_generic_port,
  /* path */		uri_scheme_generic_path,
  /* params */		uri_scheme_generic_params,
  /* query */		uri_scheme_generic_query,
  /* frag */		uri_scheme_generic_frag,
  /* user */		uri_scheme_ftp_user,
  /* passwd */		uri_scheme_generic_passwd,
  /* netloc */		uri_scheme_generic_netloc,
  /* passwd */		uri_scheme_generic_auth,
  /* all_path */	uri_scheme_generic_all_path,
  /* scheme_set */	uri_scheme_generic_scheme_set,
  /* host_set */	uri_scheme_generic_host_set,
  /* port_set */	uri_scheme_generic_port_set,
  /* path_set */	uri_scheme_generic_path_set,
  /* params_set */	uri_scheme_generic_params_set,
  /* query_set */	uri_scheme_generic_query_set,
  /* frag_set */	uri_scheme_generic_frag_set,
  /* user_set */	uri_scheme_generic_user_set,
  /* passwd_set */	uri_scheme_generic_passwd_set,
  /* specs */		uri_scheme_ftp_specs,
  /* port_int */	21,
  /* port_char */	"21"
};