/* $Id$ 
 * 
 * Licensed to the Apache Software Foundation (ASF) under one or more 
 * contributor license agreements. See the NOTICE file distributed with  
 * this work for additional information regarding copyright ownership. 
 * The ASF licenses this file to you under the Apache License, Version  
 * 2.0 (the "License"); you may not use this file except in compliance  
 * with the License. You may obtain a copy of the License at 
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */ 

/*
 * etchurl.h -- URL class
 * modeled after java binding URL class
 */

#ifndef ETCHURL_H
#define ETCHURL_H

#include "etch_collection.h"
#include "etch_arraylist.h"
#include "etchhash.h"

#define ETCH_URL_DEFAULT_SCHEME L"http"
#define ETCH_URL_DEFNUMPARMS 4
#define ETCH_URL_DEFNUMTERMS 4
#define ETCH_URL_DEFSUBTERMS 4


typedef struct etch_url
{
    unsigned int    hashkey;  
    unsigned short  obj_type; 
    unsigned short  class_id;
    struct objmask* vtab;  
    int  (*destroy)(void*);
    void*(*clone)  (void*); 
    obj_gethashkey  get_hashkey;
    struct objmask* parent;
    etchresult*     result;
    unsigned int    refcount;
    unsigned int    length;
    unsigned char   is_null;
    unsigned char   is_copy;
    unsigned char   is_static;
    unsigned char   reserved;

    unsigned port;

    wchar_t* raw;
    wchar_t* scheme;  
    wchar_t* user;  
    wchar_t* password; 
    wchar_t* fragment; 
    wchar_t* host;  
    wchar_t* uri;  

    etch_arraylist* params;
    etch_hashtable* terms;  

    size_t charcount;
    size_t bytecount;

} etch_url;


etch_url* new_url(wchar_t* urlstring);
etch_object* etchurl_get_term (etch_url*, const wchar_t* termname);
boolean etchurl_get_boolean_term(etch_url*, const wchar_t* termname, boolean* retval);
etch_iterator* etchurl_get_params(etch_url*);
objmask* etchurl_remove_term(etch_url*, wchar_t* key);
int etchurl_get_integer_term(etch_url*, const wchar_t* termname, int* retval);
int etchurl_add_term(etch_url*, wchar_t* termname, wchar_t* termval);
int etchurl_add_double_term( etch_url*, wchar_t* termname, const double termval);
int etchurl_add_integer_term(etch_url*, wchar_t* termname, const int termval);
int etchurl_paramcount(etch_url*);
int etchurl_termcount (etch_url*);

int is_url_scheme_http (etch_url*); 
int is_url_scheme_udp  (etch_url*);

#endif /* #ifndef ETCHURL_H */