summaryrefslogtreecommitdiff
path: root/include/cddb/cddb_conn_ni.h
blob: 6eddbdcf1d58ec3ec1e59dadae5000f403867914 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*
    $Id: cddb_conn_ni.h,v 1.14 2005/08/03 18:27:19 airborne Exp $

    Copyright (C) 2003, 2004, 2005 Kris Verbeeck <airborne@advalvas.be>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the
    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA  02111-1307, USA.
*/

#ifndef CDDB_CONN_NI_H
#define CDDB_CONN_NI_H 1

#ifdef __cplusplus
    extern "C" {
#endif


#include "cddb_ni.h"
#include "ll.h"


/* --- type definitions */


/** Actual definition of iconv structure. */
struct cddb_iconv_s
{
    iconv_t cd_to_freedb;       /**< character set conversion descriptor for
                                     converting from user to FreeDB format */
    iconv_t cd_from_freedb;     /**< character set conversion descriptor for
                                     converting from FreeDB to user format */
};

/** Actual definition of serach parameters structure. */
typedef struct cddb_search_params_s
{
    unsigned int fields;        /**< fields to search (cddb_search_t
                                     bit string) */
    unsigned int cats;          /**< categories to search (cddb_cat_t
                                     bit string) */
} cddb_search_params_t;

/** Actual definition of connection structure. */
struct cddb_conn_s 
{
    unsigned int buf_size;      /**< maximum line/buffer size, defaults to 1024
                                     (see DEFAULT_BUF_SIZE) */
    char *line;                 /**< last line read */

    int is_connected;           /**< are we already connected to the server? */
    struct sockaddr_in sa;      /**< the socket address structure for
                                     connecting to the CDDB server */
    int socket;                 /**< the socket file descriptor */
    char *server_name;          /**< host name of the CDDB server, defaults
                                     to 'freedb.org' (see DEFAULT_SERVER) */
    int server_port;            /**< port of the CDDB server, defaults to 888 
                                     (see DEFAULT_PORT) */
    int timeout;                /**< time out interval (in seconds) used during
                                     network operations, defaults to 10 seconds
                                     (see DEFAULT_TIMEOUT) */

    char *http_path_query;      /**< URL for querying the server through HTTP,
                                     defaults to /~cddb/cddb.cgi'
                                     (see DEFAULT_PATH_QUERY) */
    char *http_path_submit;     /**< URL for submitting to the server through HTTP,
                                     defaults to /~cddb/submit.cgi'
                                     (see DEFAULT_PATH_SUBMIT) */
    int is_http_enabled;        /**< use HTTP, disabled by default */

    int is_http_proxy_enabled;  /**< use HTTP through a proxy server,
                                     disabled by default */
    char *http_proxy_server;    /**< host name of the HTTP proxy server */
    int http_proxy_server_port; /**< port of the HTTP proxy server,
                                     defaults to 8080 (see DEFAULT_PROXY_PORT) */
    char *http_proxy_username;  /**< HTTP proxy user name */
    char *http_proxy_password;  /**< HTTP proxy password */
    char *http_proxy_auth;      /**< Base64 encoded username:password */

    FILE *cache_fp;             /**< a file pointer to a cached CDDB entry or
                                     NULL if no cached version is available */
    cddb_cache_mode_t use_cache;/**< field to specify local CDDB cache behaviour, 
                                     enabled by default (CACHE_ON) */
    char *cache_dir;            /**< CDDB slave cache, defaults to 
                                     '~/.cddbslave' (see DEFAULT_CACHE) */
    int cache_read;             /**< read data from cached file instead of
                                     from the network */

    char *cname;                /**< name of the client program, 'libcddb' by
                                     default */
    char *cversion;             /**< version of the client program, current 
                                     libcddb version by default */
    char *user;                 /**< user name supplied to CDDB server, defaults
                                     to the value of the 'USER' environment 
                                     variable or 'anonymous' if undefined */
    char *hostname;             /**< host name of the local machine, defaults
                                     to the value of the 'HOSTNAME' environment
                                     variable or 'localhost' if undefined */

    cddb_error_t errnum;        /**< error number of last CDDB command */

    list_t *query_data;         /**< list to keep CDDB query results */
    list_t *sites_data;         /**< list to keep FreeDB mirror sites */
    cddb_search_params_t srch;  /**< parameters for text search */

    cddb_iconv_t charset;       /**< character set conversion settings */
};


/* --- getters & setters --- */


#define cddb_cache_file(c) (c)->cache_fp


/* --- connecting / disconnecting --- */


int cddb_connect(cddb_conn_t *c);

void cddb_disconnect(cddb_conn_t *c);


/* --- miscellaneous --- */


/**
 * Clone proxy settings from source connection to destinaton
 * connection.
 */
void cddb_clone_proxy(cddb_conn_t *dst, cddb_conn_t *src);


/* --- error handling --- */


/**
 * Set the error number for the last libcddb command.
 *
 * @param c The CDDB connection structure.
 * @param n The error number
 */
#define cddb_errno_set(c, n) (c)->errnum = n

/**
 * Set the error number for the last libcddb command.  If this number
 * is different from CDDB_ERR_OK, a message is also logged with the
 * level specified.
 *
 * @param c The CDDB connection structure.
 * @param n The error number
 * @param l The log level
 */
#define cddb_errno_log(c, n, l) cddb_errno_set(c, n); cddb_log(l, cddb_error_str(n))

#define cddb_errno_log_debug(c, n) cddb_errno_log(c, n, CDDB_LOG_DEBUG)
#define cddb_errno_log_info(c, n) cddb_errno_log(c, n, CDDB_LOG_INFO)
#define cddb_errno_log_warn(c, n) cddb_errno_log(c, n, CDDB_LOG_WARN)
#define cddb_errno_log_error(c, n) cddb_errno_log(c, n, CDDB_LOG_ERROR)
#define cddb_errno_log_crit(c, n) cddb_errno_log(c, n, CDDB_LOG_CRITICAL)


#ifdef __cplusplus
    }
#endif

#endif /* CDDB_CONN_NI_H */