Mercurial > audlegacy-plugins
annotate src/neon/neon.c @ 2442:1286f65395d7
string arrays should be freed with g_strfreev()
author | Tomasz Mon <desowin@gmail.com> |
---|---|
date | Sat, 08 Mar 2008 10:17:53 +0100 |
parents | d0c5974cad17 |
children | 194c2f8c2a92 |
rev | line source |
---|---|
1751
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
1 /* |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
2 * A neon HTTP input plugin for Audacious |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
3 * Copyright (C) 2007 Ralf Ertzinger |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
4 * |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
5 * This program is free software; you can redistribute it and/or modify |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
6 * it under the terms of the GNU General Public License as published by |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
7 * the Free Software Foundation; either version 2 of the License, or |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
8 * (at your option) any later version. |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
9 * |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
10 * This program is distributed in the hope that it will be useful, |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
13 * GNU General Public License for more details. |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
14 * |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
15 * You should have received a copy of the GNU General Public License |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
16 * along with this program; if not, write to the Free Software |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
18 */ |
dc83901850df
- Add license texts to the neon source
Ralf Ertzinger <ralf@skytale.net>
parents:
1749
diff
changeset
|
19 |
1961
e8ea3a76a84e
Various #include cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
1926
diff
changeset
|
20 #include "neon.h" |
e8ea3a76a84e
Various #include cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
1926
diff
changeset
|
21 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
22 #include <audacious/plugin.h> |
1760 | 23 #include <audacious/configdb.h> |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
24 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
25 #include <ne_socket.h> |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
26 #include <ne_utils.h> |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
27 #include <ne_redirect.h> |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
28 #include <ne_request.h> |
1740
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
29 #include <ne_auth.h> |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
30 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
31 #include "debug.h" |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
32 #include "rb.h" |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
33 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
34 #define NBUFSIZ (128u*1024u) |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
35 #define NETBLKSIZ (4096u) |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
36 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
37 DECLARE_PLUGIN(neon, init, fini) |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
38 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
39 VFSConstructor neon_http_const = { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
40 "http://", |
1978 | 41 neon_aud_vfs_fopen_impl, |
42 neon_aud_vfs_fclose_impl, | |
43 neon_aud_vfs_fread_impl, | |
44 neon_aud_vfs_fwrite_impl, | |
45 neon_aud_vfs_getc_impl, | |
46 neon_aud_vfs_ungetc_impl, | |
47 neon_aud_vfs_fseek_impl, | |
48 neon_aud_vfs_rewind_impl, | |
49 neon_aud_vfs_ftell_impl, | |
50 neon_aud_vfs_feof_impl, | |
51 neon_aud_vfs_truncate_impl, | |
52 neon_aud_vfs_fsize_impl, | |
53 neon_aud_vfs_metadata_impl | |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
54 }; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
55 |
1925
2662c3a11f9f
- Enable https:// transport
Ralf Ertzinger <ralf@skytale.net>
parents:
1923
diff
changeset
|
56 VFSConstructor neon_https_const = { |
2662c3a11f9f
- Enable https:// transport
Ralf Ertzinger <ralf@skytale.net>
parents:
1923
diff
changeset
|
57 "https://", |
1978 | 58 neon_aud_vfs_fopen_impl, |
59 neon_aud_vfs_fclose_impl, | |
60 neon_aud_vfs_fread_impl, | |
61 neon_aud_vfs_fwrite_impl, | |
62 neon_aud_vfs_getc_impl, | |
63 neon_aud_vfs_ungetc_impl, | |
64 neon_aud_vfs_fseek_impl, | |
65 neon_aud_vfs_rewind_impl, | |
66 neon_aud_vfs_ftell_impl, | |
67 neon_aud_vfs_feof_impl, | |
68 neon_aud_vfs_truncate_impl, | |
69 neon_aud_vfs_fsize_impl, | |
70 neon_aud_vfs_metadata_impl | |
1925
2662c3a11f9f
- Enable https:// transport
Ralf Ertzinger <ralf@skytale.net>
parents:
1923
diff
changeset
|
71 }; |
2662c3a11f9f
- Enable https:// transport
Ralf Ertzinger <ralf@skytale.net>
parents:
1923
diff
changeset
|
72 |
1907
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
73 /* bring ne_set_connect_timeout in as a weak reference, not using it |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
74 * unless we have it available (neon 0.27) --nenolod |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
75 */ |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
76 extern void ne_set_connect_timeout(ne_session *sess, int timeout) __attribute__ ((weak)); |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
77 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
78 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
79 * ======== |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
80 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
81 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
82 static struct neon_handle* handle_init(void) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
83 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
84 struct neon_handle* h; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
85 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
86 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
87 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
88 if (NULL == (h = malloc(sizeof(struct neon_handle)))) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
89 _ERROR("Could not allocate memory for handle"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
90 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
91 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
92 |
2152
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
93 h->reader = NULL; |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
94 h->reader_status.mutex = g_mutex_new(); |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
95 h->reader_status.cond = g_cond_new(); |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
96 h->reader_status.reading = FALSE; |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
97 h->reader_status.status = NEON_READER_INIT; |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
98 |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
99 if (0 != init_rb_with_lock(&(h->rb), NBUFSIZ, h->reader_status.mutex)) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
100 _ERROR("Could not initialize buffer"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
101 free(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
102 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
103 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
104 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
105 h->url = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
106 h->purl = &purl; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
107 memset(h->purl, 0, sizeof(ne_uri)); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
108 h->session = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
109 h->request = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
110 h->redircount = 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
111 h->pos = 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
112 h->content_length = -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
113 h->can_ranges = FALSE; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
114 h->icy_metaint = 0; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
115 h->icy_metaleft = 0; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
116 h->icy_metadata.stream_name = NULL; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
117 h->icy_metadata.stream_title = NULL; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
118 h->icy_metadata.stream_url = NULL; |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
119 h->icy_metadata.stream_contenttype = NULL; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
120 h->eof = FALSE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
121 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
122 _LEAVE h; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
123 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
124 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
125 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
126 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
127 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
128 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
129 static void handle_free(struct neon_handle* h) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
130 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
131 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
132 |
2369
e145ee199e1d
- Fix two debugging statements
Ralf Ertzinger <ralf@skytale.net>
parents:
2367
diff
changeset
|
133 _DEBUG("<%p> freeing handle", h); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
134 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
135 ne_uri_free(h->purl); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
136 destroy_rb(&h->rb); |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
137 if (NULL != h->icy_metadata.stream_name) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
138 free(h->icy_metadata.stream_name); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
139 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
140 if (NULL != h->icy_metadata.stream_title) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
141 free(h->icy_metadata.stream_title); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
142 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
143 if (NULL != h->icy_metadata.stream_url) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
144 free(h->icy_metadata.stream_url); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
145 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
146 if (NULL != h->icy_metadata.stream_contenttype) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
147 free(h->icy_metadata.stream_contenttype); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
148 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
149 free(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
150 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
151 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
152 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
153 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
154 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
155 * ---- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
156 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
157 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
158 static void init(void) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
159 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
160 int ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
161 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
162 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
163 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
164 if (0 != (ret = ne_sock_init())) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
165 _ERROR("Could not initialize neon library: %d\n", ret); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
166 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
167 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
168 |
1978 | 169 aud_vfs_register_transport(&neon_http_const); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
170 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
171 if (0 != ne_has_support(NE_FEATURE_SSL)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
172 _DEBUG("neon compiled with thread-safe SSL, enabling https:// transport"); |
1978 | 173 aud_vfs_register_transport(&neon_https_const); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
174 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
175 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
176 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
177 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
178 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
179 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
180 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
181 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
182 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
183 static void fini(void) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
184 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
185 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
186 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
187 ne_sock_exit(); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
188 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
189 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
190 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
191 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
192 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
193 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
194 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
195 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
196 static void add_icy(struct icy_metadata* m, gchar* name, gchar* value) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
197 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
198 _ENTER; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
199 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
200 if (0 == g_ascii_strncasecmp(name, "StreamTitle", 11)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
201 _DEBUG("Found StreamTitle: %s", value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
202 if (NULL != m->stream_title) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
203 free(m->stream_title); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
204 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
205 m->stream_title = g_strdup(value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
206 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
207 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
208 if (0 == g_ascii_strncasecmp(name, "StreamUrl", 9)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
209 _DEBUG("Found StreamUrl: %s", value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
210 if (NULL != m->stream_url) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
211 free(m->stream_url); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
212 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
213 m->stream_url = g_strdup(value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
214 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
215 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
216 _LEAVE; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
217 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
218 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
219 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
220 * ----- |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
221 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
222 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
223 static void parse_icy(struct icy_metadata* m, gchar* metadata, int len) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
224 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
225 gchar* p; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
226 gchar* tstart; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
227 gchar* tend; |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
228 gchar name[4096]; |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
229 gchar value[4096]; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
230 int state; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
231 int pos; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
232 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
233 _ENTER; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
234 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
235 p = metadata; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
236 state = 1; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
237 pos = 0; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
238 name[0] = '\0'; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
239 value[0] = '\0'; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
240 tstart = metadata; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
241 tend = metadata; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
242 while ((pos < len) && (*p != '\0')) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
243 switch (state) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
244 case 1: |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
245 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
246 * Reading tag name |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
247 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
248 if ('=' == *p) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
249 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
250 * End of tag name. |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
251 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
252 *p = '\0'; |
1752
301a2f9b287d
- Use g_strlcpy instead of strcpy
Ralf Ertzinger <ralf@skytale.net>
parents:
1751
diff
changeset
|
253 g_strlcpy(name, tstart, 4096); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
254 _DEBUG("Found tag name: %s", name); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
255 state = 2; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
256 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
257 tend = p; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
258 }; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
259 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
260 case 2: |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
261 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
262 * Waiting for start of value |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
263 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
264 if ('\'' == *p) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
265 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
266 * Leading ' of value |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
267 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
268 tend = tstart = p + 1; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
269 state = 3; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
270 value[0] = '\0'; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
271 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
272 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
273 case 3: |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
274 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
275 * Reading value |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
276 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
277 if ('\'' == *p) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
278 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
279 * End of value |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
280 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
281 *p = '\0'; |
1752
301a2f9b287d
- Use g_strlcpy instead of strcpy
Ralf Ertzinger <ralf@skytale.net>
parents:
1751
diff
changeset
|
282 g_strlcpy(value, tstart, 4096); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
283 _DEBUG("Found tag value: %s", value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
284 add_icy(m, name, value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
285 state = 4; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
286 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
287 tend = p; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
288 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
289 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
290 case 4: |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
291 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
292 * Waiting for next tag start |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
293 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
294 if (';' == *p) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
295 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
296 * Next tag name starts after this char |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
297 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
298 tend = tstart = p + 1; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
299 state = 1; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
300 name[0] = '\0'; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
301 value[0] = '\0'; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
302 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
303 break; |
2308
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
304 default: |
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
305 /* |
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
306 * This should not happen |
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
307 */ |
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
308 _ERROR("Invalid state while parsing metadata, metadata may be corrupted: %d", state); |
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
309 _LEAVE; |
c9200f019176
- Handle invalid states in ICY-Metadata parser
Ralf Ertzinger <ralf@skytale.net>
parents:
2307
diff
changeset
|
310 break; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
311 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
312 p++; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
313 pos++; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
314 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
315 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
316 _LEAVE; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
317 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
318 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
319 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
320 * ----- |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
321 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
322 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
323 static void kill_reader(struct neon_handle* h) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
324 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
325 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
326 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
327 _DEBUG("Signaling reader thread to terminate"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
328 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
329 h->reader_status.reading = FALSE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
330 g_cond_signal(h->reader_status.cond); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
331 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
332 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
333 _DEBUG("Waiting for reader thread to die..."); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
334 g_thread_join(h->reader); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
335 _DEBUG("Reader thread has died"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
336 h->reader = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
337 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
338 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
339 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
340 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
341 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
342 |
1760 | 343 static int server_auth_callback(void* userdata, const char* realm, int attempt, char* username, char* password) { |
1740
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
344 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
345 struct neon_handle* h = (struct neon_handle*)userdata; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
346 gchar* authcpy; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
347 gchar** authtok; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
348 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
349 _ENTER; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
350 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
351 if ((NULL == h->purl->userinfo) || ('\0' == *(h->purl->userinfo))) { |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
352 _ERROR("Authentication required, but no credentials set"); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
353 _LEAVE 1; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
354 } |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
355 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
356 if (NULL == (authcpy = g_strdup(h->purl->userinfo))) { |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
357 /* |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
358 * No auth data |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
359 */ |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
360 _ERROR("Could not allocate memory for authentication data"); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
361 _LEAVE 1; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
362 } |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
363 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
364 authtok = g_strsplit(authcpy, ":", 2); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
365 if ((strlen(authtok[1]) > (NE_ABUFSIZ-1)) || (strlen(authtok[0]) > (NE_ABUFSIZ-1))) { |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
366 _ERROR("Username/Password too long"); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
367 g_strfreev(authtok); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
368 free(authcpy); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
369 _LEAVE 1; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
370 } |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
371 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
372 strncpy(username, authtok[0], NE_ABUFSIZ); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
373 strncpy(password, authtok[1], NE_ABUFSIZ); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
374 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
375 _DEBUG("Authenticating: Username: %s, Password: %s", username, password); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
376 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
377 g_strfreev(authtok); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
378 free(authcpy); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
379 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
380 _LEAVE attempt; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
381 } |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
382 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
383 /* |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
384 * ----- |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
385 */ |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
386 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
387 static void handle_headers(struct neon_handle* h) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
388 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
389 const gchar* name; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
390 const gchar* value; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
391 void* cursor = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
392 long len; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
393 gchar* endptr; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
394 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
395 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
396 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
397 _DEBUG("Header responses:"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
398 while(NULL != (cursor = ne_response_header_iterate(h->request, cursor, &name, &value))) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
399 _DEBUG("HEADER: %s: %s", name, value); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
400 if (0 == g_ascii_strncasecmp("accept-ranges", name, 13)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
401 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
402 * The server advertises range capability. we need "bytes" |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
403 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
404 if (NULL != g_strrstr(value, "bytes")) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
405 _DEBUG("server can_ranges"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
406 h->can_ranges = TRUE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
407 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
408 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
409 continue; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
410 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
411 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
412 if (0 == g_ascii_strncasecmp("content-length", name, 14)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
413 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
414 * The server sent us the content length. Parse and store. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
415 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
416 len = strtol(value, &endptr, 10); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
417 if ((*value != '\0') && (*endptr == '\0') && (len >= 0)) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
418 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
419 * Valid data. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
420 */ |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
421 _DEBUG("Content length as advertised by server: %ld", len); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
422 h->content_length = len; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
423 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
424 _ERROR("Invalid content length header: %s", value); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
425 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
426 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
427 continue; |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
428 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
429 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
430 if (0 == g_ascii_strncasecmp("content-type", name, 12)) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
431 /* |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
432 * The server sent us a content type. Save it for later |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
433 */ |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
434 _DEBUG("Content-Type: %s", value); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
435 if (NULL != h->icy_metadata.stream_contenttype) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
436 free(h->icy_metadata.stream_contenttype); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
437 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
438 h->icy_metadata.stream_contenttype = g_strdup(value); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
439 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
440 continue; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
441 } |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
442 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
443 if (0 == g_ascii_strncasecmp("icy-metaint", name, 11)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
444 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
445 * The server sent us a ICY metaint header. Parse and store. |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
446 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
447 len = strtol(value, &endptr, 10); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
448 if ((*value != '\0') && (*endptr == '\0') && (len > 0)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
449 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
450 * Valid data |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
451 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
452 _DEBUG("ICY MetaInt as advertised by server: %ld", len); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
453 h->icy_metaint = len; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
454 h->icy_metaleft = len; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
455 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
456 _ERROR("Invalid ICY MetaInt header: %s", value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
457 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
458 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
459 continue; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
460 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
461 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
462 if (0 == g_ascii_strncasecmp("icy-name", name, 8)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
463 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
464 * The server sent us a ICY name. Save it for later |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
465 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
466 _DEBUG("ICY stream name: %s", value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
467 if (NULL != h->icy_metadata.stream_name) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
468 free(h->icy_metadata.stream_name); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
469 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
470 h->icy_metadata.stream_name = g_strdup(value); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
471 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
472 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
473 continue; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
474 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
475 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
476 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
477 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
478 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
479 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
480 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
481 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
482 |
2361
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
483 static int neon_proxy_auth_cb(void *userdata, const char *realm, int attempt, char *username, char *password) { |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
484 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
485 ConfigDb *db; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
486 gchar *value = NULL; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
487 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
488 _ENTER; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
489 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
490 if ((db = aud_cfg_db_open()) == NULL) { |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
491 _DEBUG("<%p> configdb failed to open!", userdata); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
492 _LEAVE -1; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
493 } |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
494 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
495 aud_cfg_db_get_string(db, NULL, "proxy_user", &value); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
496 if (!value) { |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
497 _DEBUG("<%p> proxy_auth requested but no proxy_user", userdata); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
498 _LEAVE -1; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
499 } |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
500 g_strlcpy(username, value, NE_ABUFSIZ); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
501 value = NULL; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
502 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
503 aud_cfg_db_get_string(db, NULL, "proxy_pass", &value); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
504 if (!value) { |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
505 _DEBUG("<%p> proxy_auth requested but no proxy_pass", userdata); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
506 _LEAVE -1; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
507 } |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
508 g_strlcpy(password, value, NE_ABUFSIZ); |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
509 value = NULL; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
510 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
511 _LEAVE attempt; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
512 } |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
513 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
514 /* |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
515 * ----- |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
516 */ |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
517 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
518 static int open_request(struct neon_handle* handle, unsigned long startbyte) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
519 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
520 int ret; |
1740
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
521 const ne_status* status; |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
522 ne_uri* rediruri; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
523 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
524 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
525 |
2114
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
526 if (handle->purl->query && *(handle->purl->query)) { |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
527 gchar *tmp = g_strdup_printf("%s?%s", handle->purl->path, handle->purl->query); |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
528 handle->request = ne_request_create(handle->session, "GET", tmp); |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
529 g_free(tmp); |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
530 } else { |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
531 handle->request = ne_request_create(handle->session, "GET", handle->purl->path); |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
532 } |
0d77ec0c71d4
Send any query strings along with the HTTP request.
William Pitcock <nenolod@atheme.org>
parents:
2035
diff
changeset
|
533 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
534 ne_print_request_header(handle->request, "Range", "bytes=%ld-", startbyte); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
535 ne_print_request_header(handle->request, "Icy-MetaData", "1"); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
536 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
537 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
538 * Try to connect to the server. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
539 */ |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
540 _DEBUG("<%p> Connecting...", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
541 ret = ne_begin_request(handle->request); |
1740
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
542 status = ne_get_status(handle->request); |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
543 _DEBUG("<%p> Return: %d, Status: %d", handle, ret, status->code); |
1740
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
544 if ((NE_OK == ret) && (401 == status->code)) { |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
545 /* |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
546 * Authorization required. Reconnect to |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
547 * authenticate |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
548 */ |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
549 _DEBUG("Reconnecting due to 401"); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
550 ne_end_request(handle->request); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
551 ret = ne_begin_request(handle->request); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
552 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
553 |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
554 if ((NE_OK == ret) && ((301 == status->code) || (302 == status->code) || (303 == status->code) || (307 == status->code))) { |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
555 /* |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
556 * Redirect encountered. Reconnect. |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
557 */ |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
558 ne_end_request(handle->request); |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
559 ret = NE_REDIRECT; |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
560 } |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
561 |
2366
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
562 if ((NE_OK == ret) && (407 == status->code)) { |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
563 /* |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
564 * Proxy auth required. Reconnect to authenticate |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
565 */ |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
566 _DEBUG("Reconnecting due to 407"); |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
567 ne_end_request(handle->request); |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
568 ret = ne_begin_request(handle->request); |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
569 } |
f0a895a1e50d
- Add final part for proxy auth handling
Ralf Ertzinger <ralf@skytale.net>
parents:
2361
diff
changeset
|
570 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
571 switch (ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
572 case NE_OK: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
573 /* URL opened OK */ |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
574 _DEBUG("<%p> URL opened OK", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
575 handle->content_start = startbyte; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
576 handle->pos = startbyte; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
577 handle_headers(handle); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
578 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
579 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
580 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
581 case NE_REDIRECT: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
582 /* We hit a redirect. Handle it. */ |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
583 _DEBUG("<%p> Redirect encountered", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
584 handle->redircount += 1; |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
585 rediruri = (ne_uri*)ne_redirect_location(handle->session); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
586 ne_request_destroy(handle->request); |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
587 |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
588 if (NULL == rediruri) { |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
589 _ERROR("<%p> Could not parse redirect response", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
590 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
591 } |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
592 ne_uri_free(handle->purl); |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
593 ne_uri_copy(handle->purl, rediruri); |
1722
2e33cfa6a872
- Correct some compiler warnings
Ralf Ertzinger <ralf@skytale.net>
parents:
1719
diff
changeset
|
594 _LEAVE 1; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
595 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
596 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
597 default: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
598 /* Something went wrong. */ |
2333 | 599 _ERROR("<%p> Could not open URL: %d", handle, ret); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
600 if (1 == ret) { |
2333 | 601 _ERROR("<%p> neon error string: %s", handle, ne_get_error(handle->session)); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
602 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
603 ne_request_destroy(handle->request); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
604 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
605 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
606 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
607 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
608 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
609 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
610 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
611 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
612 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
613 static int open_handle(struct neon_handle* handle, unsigned long startbyte) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
614 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
615 int ret; |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
616 ConfigDb* db; |
2410
d0c5974cad17
Fix the bug !!!oneoneone+1.
William Pitcock <nenolod@atheme.org>
parents:
2369
diff
changeset
|
617 gchar* proxy_host = NULL; |
d0c5974cad17
Fix the bug !!!oneoneone+1.
William Pitcock <nenolod@atheme.org>
parents:
2369
diff
changeset
|
618 gchar* proxy_port_s = NULL; |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
619 gchar* endptr; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
620 unsigned int proxy_port = 0; |
2361
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
621 gboolean use_proxy, use_proxy_auth; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
622 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
623 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
624 |
2124 | 625 db = aud_cfg_db_open(); |
626 if (FALSE == aud_cfg_db_get_bool(db, NULL, "use_proxy", &use_proxy)) { | |
1923
bf6a0330c939
- Properly check if we could read the use_proxy property from the config
Ralf Ertzinger <ralf@skytale.net>
parents:
1908
diff
changeset
|
627 use_proxy = FALSE; |
bf6a0330c939
- Properly check if we could read the use_proxy property from the config
Ralf Ertzinger <ralf@skytale.net>
parents:
1908
diff
changeset
|
628 } |
bf6a0330c939
- Properly check if we could read the use_proxy property from the config
Ralf Ertzinger <ralf@skytale.net>
parents:
1908
diff
changeset
|
629 |
2361
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
630 if (FALSE == aud_cfg_db_get_bool(db, NULL, "use_proxy_auth", &use_proxy_auth)) { |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
631 use_proxy_auth = FALSE; |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
632 } |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
633 |
1760 | 634 if (use_proxy) { |
2124 | 635 if (FALSE == aud_cfg_db_get_string(db, NULL, "proxy_host", &proxy_host)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
636 _ERROR("<%p> Could not read proxy host, disabling proxy use", handle); |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
637 use_proxy = FALSE; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
638 } |
2124 | 639 if (FALSE == aud_cfg_db_get_string(db, NULL, "proxy_port", &proxy_port_s)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
640 _ERROR("<%p> Could not read proxy port, disabling proxy use", handle); |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
641 use_proxy = FALSE; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
642 } |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
643 proxy_port = strtoul(proxy_port_s, &endptr, 10); |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
644 if (!((*proxy_port_s != '\0') && (*endptr == '\0') && (proxy_port < 65536))) { |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
645 /* |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
646 * Invalid data |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
647 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
648 _ERROR("<%p> Invalid proxy port, disabling proxy use", handle); |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
649 use_proxy = FALSE; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
650 } |
1760 | 651 } |
2124 | 652 aud_cfg_db_close(db); |
1760 | 653 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
654 handle->redircount = 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
655 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
656 _DEBUG("<%p> Parsing URL", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
657 if (0 != ne_uri_parse(handle->url, handle->purl)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
658 _ERROR("<%p> Could not parse URL '%s'", handle, handle->url); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
659 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
660 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
661 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
662 while (handle->redircount < 10) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
663 |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
664 if (0 == handle->purl->port) { |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
665 handle->purl->port = ne_uri_defaultport(handle->purl->scheme); |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
666 } |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
667 |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
668 _DEBUG("<%p> Creating session to %s://%s:%d", handle, handle->purl->scheme, handle->purl->host, handle->purl->port); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
669 handle->session = ne_session_create(handle->purl->scheme, handle->purl->host, handle->purl->port); |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
670 ne_redirect_register(handle->session); |
1760 | 671 ne_add_server_auth(handle->session, NE_AUTH_BASIC, server_auth_callback, (void *)handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
672 ne_set_session_flag(handle->session, NE_SESSFLAG_ICYPROTO, 1); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
673 ne_set_session_flag(handle->session, NE_SESSFLAG_PERSIST, 0); |
1907
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
674 |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
675 if (ne_set_connect_timeout != NULL) |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
676 ne_set_connect_timeout(handle->session, 10); |
bc245b3ad09c
Allow for the neon http VFS plugin to work without neon 0.27 by using weak attributes.
William Pitcock <nenolod@atheme.org>
parents:
1761
diff
changeset
|
677 |
1729 | 678 ne_set_read_timeout(handle->session, 10); |
2367
04a5792e0c0f
- Try a diffenent approach for proxy auth
Ralf Ertzinger <ralf@skytale.net>
parents:
2366
diff
changeset
|
679 ne_set_useragent(handle->session, "Audacious/1.5.0"); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
680 |
1760 | 681 if (use_proxy) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
682 _DEBUG("<%p> Using proxy: %s:%d", handle, proxy_host, proxy_port); |
1760 | 683 ne_session_proxy(handle->session, proxy_host, proxy_port); |
2361
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
684 |
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
685 if (use_proxy_auth) { |
2369
e145ee199e1d
- Fix two debugging statements
Ralf Ertzinger <ralf@skytale.net>
parents:
2367
diff
changeset
|
686 _DEBUG("<%p> Using proxy authentication", handle); |
2367
04a5792e0c0f
- Try a diffenent approach for proxy auth
Ralf Ertzinger <ralf@skytale.net>
parents:
2366
diff
changeset
|
687 ne_add_proxy_auth(handle->session, NE_AUTH_BASIC, neon_proxy_auth_cb, (void *)handle); |
2361
c831816c0b87
Add support for proxy_use_auth.
William Pitcock <nenolod@atheme.org>
parents:
2333
diff
changeset
|
688 } |
1760 | 689 } |
690 | |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
691 _DEBUG("<%p> Creating request", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
692 ret = open_request(handle, startbyte); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
693 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
694 if (0 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
695 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
696 } else if (-1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
697 ne_session_destroy(handle->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
698 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
699 } |
2324
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
700 |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
701 _DEBUG("<%p> Following redirect...", handle); |
6ad2dffcad47
- Work around some funny design decisions regarding redirect handling in neon
Ralf Ertzinger <ralf@skytale.net>
parents:
2310
diff
changeset
|
702 ne_session_destroy(handle->session); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
703 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
704 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
705 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
706 * If we get here, our redirect count exceeded |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
707 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
708 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
709 _ERROR("<%p> Redirect count exceeded for URL %s", handle, handle->url); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
710 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
711 _LEAVE 1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
712 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
713 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
714 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
715 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
716 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
717 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
718 static int fill_buffer(struct neon_handle* h) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
719 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
720 ssize_t bsize; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
721 char buffer[NETBLKSIZ]; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
722 ssize_t to_read; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
723 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
724 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
725 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
726 bsize = free_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
727 to_read = MIN(bsize, NETBLKSIZ); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
728 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
729 _DEBUG("<%p> %d bytes free in buffer, trying to read %d bytes max", h, bsize, to_read); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
730 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
731 _DEBUG("<%p> Reading from the network....", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
732 if (0 >= (bsize = ne_read_response_block(h->request, buffer, to_read))) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
733 if (0 == bsize) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
734 _DEBUG("<%p> End of file encountered", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
735 _LEAVE 1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
736 } else { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
737 _ERROR("<%p> Error while reading from the network", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
738 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
739 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
740 } |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
741 _DEBUG("<%p> Read %d bytes from the network", h, bsize); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
742 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
743 if (0 != write_rb(&(h->rb), buffer, bsize)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
744 _ERROR("<%p> Error putting data into buffer", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
745 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
746 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
747 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
748 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
749 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
750 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
751 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
752 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
753 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
754 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
755 static int fill_buffer_limit(struct neon_handle* h, unsigned int maxfree) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
756 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
757 ssize_t bfree; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
758 int ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
759 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
760 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
761 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
762 bfree = free_rb(&h->rb); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
763 _DEBUG("<%p> Filling buffer up to max %d bytes free, %d bytes free now", h, maxfree, bfree); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
764 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
765 while (bfree > maxfree) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
766 ret = fill_buffer(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
767 if (-1 == ret) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
768 _ERROR("<%p> Error while filling buffer", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
769 _LEAVE ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
770 } else if (1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
771 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
772 * EOF while filling the buffer. Return what we have. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
773 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
774 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
775 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
776 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
777 bfree = free_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
778 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
779 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
780 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
781 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
782 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
783 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
784 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
785 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
786 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
787 static gpointer reader_thread(void* data) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
788 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
789 struct neon_handle* h = (struct neon_handle*)data; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
790 int ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
791 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
792 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
793 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
794 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
795 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
796 while(h->reader_status.reading) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
797 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
798 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
799 * Hit the network only if we have more than NETBLKSIZ of free buffer |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
800 */ |
2152
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
801 if (NETBLKSIZ < free_rb_locked(&h->rb)) { |
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
802 g_mutex_unlock(h->reader_status.mutex); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
803 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
804 _DEBUG("<%p> Filling buffer...", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
805 ret = fill_buffer(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
806 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
807 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
808 if (-1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
809 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
810 * Error encountered while reading from the network. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
811 * Set the error flag and terminate the |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
812 * reader thread. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
813 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
814 _ERROR("<%p> Error while reading from the network. Terminating reader thread", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
815 h->reader_status.status = NEON_READER_ERROR; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
816 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
817 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
818 } else if (1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
819 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
820 * EOF encountered while reading from the |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
821 * network. Set the EOF status and exit. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
822 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
823 _DEBUG("<%p> EOF encountered while reading from the network. Terminating reader thread", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
824 h->reader_status.status = NEON_READER_EOF; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
825 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
826 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
827 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
828 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
829 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
830 * So we actually got some data out of the stream. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
831 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
832 _DEBUG("<%p> Network read succeeded", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
833 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
834 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
835 * Not enough free space in the buffer. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
836 * Sleep until the main thread wakes us up. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
837 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
838 _DEBUG("<%p> Reader thread going to sleep", h); |
2152
8a5231ff9c4f
- Use a single lock for the ring buffer and the condition variable
Ralf Ertzinger <ralf@skytale.net>
parents:
2124
diff
changeset
|
839 g_cond_wait(h->reader_status.cond, h->reader_status.mutex); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
840 _DEBUG("<%p> Reader thread woke up", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
841 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
842 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
843 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
844 _DEBUG("<%p> Reader thread terminating gracefully", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
845 h->reader_status.status = NEON_READER_TERM; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
846 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
847 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
848 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
849 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
850 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
851 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
852 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
853 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
854 |
1978 | 855 VFSFile* neon_aud_vfs_fopen_impl(const gchar* path, const gchar* mode) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
856 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
857 VFSFile* file; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
858 struct neon_handle* handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
859 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
860 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
861 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
862 _DEBUG("Trying to open '%s' with neon", path); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
863 |
2031 | 864 if (NULL == (file = g_new0(VFSFile, 1))) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
865 _ERROR("Could not allocate memory for filehandle"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
866 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
867 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
868 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
869 if (NULL == (handle = handle_init())) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
870 _ERROR("Could not allocate memory for neon handle"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
871 free(file); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
872 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
873 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
874 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
875 _DEBUG("Allocated new handle: %p", handle); |
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
876 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
877 if (NULL == (handle->url = strdup(path))) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
878 _ERROR("<%p> Could not copy URL string", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
879 handle_free(handle); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
880 free(file); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
881 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
882 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
883 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
884 if (0 != open_handle(handle, 0)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
885 _ERROR("<%p> Could not open URL", handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
886 handle_free(handle); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
887 free(file); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
888 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
889 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
890 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
891 file->handle = handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
892 file->base = &neon_http_const; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
893 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
894 _LEAVE file; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
895 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
896 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
897 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
898 * ---- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
899 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
900 |
1978 | 901 gint neon_aud_vfs_fclose_impl(VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
902 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
903 struct neon_handle* h = (struct neon_handle *)file->handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
904 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
905 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
906 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
907 if (NULL != h->reader) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
908 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
909 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
910 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
911 _DEBUG("<%p> Destroying request", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
912 if (NULL != h->request) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
913 ne_request_destroy(h->request); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
914 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
915 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
916 _DEBUG("<%p> Destroying session", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
917 ne_session_destroy(h->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
918 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
919 handle_free(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
920 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
921 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
922 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
923 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
924 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
925 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
926 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
927 |
1978 | 928 size_t neon_aud_vfs_fread_impl(gpointer ptr_, size_t size, size_t nmemb, VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
929 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
930 struct neon_handle* h = (struct neon_handle*)file->handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
931 int belem; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
932 int relem; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
933 int ret; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
934 char icy_metadata[4096]; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
935 unsigned char icy_metalen; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
936 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
937 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
938 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
939 if (NULL == h->request) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
940 _ERROR("<%p> No request to read from, seek gone wrong?", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
941 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
942 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
943 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
944 _DEBUG("<%p> Requesting %d elements of %d bytes size each (%d bytes total), to be stored at %p", |
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
945 h, nmemb, size, (nmemb*size), ptr_); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
946 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
947 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
948 * Look how much data is in the buffer |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
949 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
950 belem = used_rb(&h->rb) / size; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
951 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
952 if ((NULL != h->reader) && (0 == belem)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
953 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
954 * There is a reader thread, but the buffer is empty. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
955 * If we are running normally we will have to rebuffer. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
956 * Kill the reader thread and restart. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
957 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
958 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
959 if (NEON_READER_RUN == h->reader_status.status) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
960 g_mutex_unlock(h->reader_status.mutex); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
961 _ERROR("<%p> Buffer underrun, trying rebuffering", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
962 kill_reader(h); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
963 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
964 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
965 * We have to check if the reader terminated gracefully |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
966 * again |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
967 */ |
2184
f2590691d4b7
- Fix locking issues causing spurious error messages (and possibly deadlocks)
Ralf Ertzinger <ralf@skytale.net>
parents:
2152
diff
changeset
|
968 if ((NEON_READER_TERM != h->reader_status.status) && |
f2590691d4b7
- Fix locking issues causing spurious error messages (and possibly deadlocks)
Ralf Ertzinger <ralf@skytale.net>
parents:
2152
diff
changeset
|
969 (NEON_READER_EOF != h->reader_status.status)) { |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
970 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
971 * Reader thread did not terminate gracefully. |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
972 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
973 _ERROR("<%p> Reader thread did not terminate gracefully: %d", h, h->reader_status.status); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
974 _LEAVE 0; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
975 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
976 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
977 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
978 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
979 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
980 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
981 if (NULL == h->reader) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
982 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
983 * There is no reader thread yet. Read the first bytes from |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
984 * the network ourselves, and then fire up the reader thread |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
985 * to keep the buffer filled up. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
986 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
987 _DEBUG("<%p> Doing initial buffer fill", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
988 ret = fill_buffer_limit(h, NBUFSIZ/2); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
989 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
990 if (-1 == ret) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
991 _ERROR("<%p> Error while reading from the network", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
992 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
993 } else if (1 == ret) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
994 _ERROR("<%p> EOF during initial read", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
995 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
996 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
997 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
998 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
999 * We have some data in the buffer now. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1000 * Start the reader thread. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1001 */ |
2184
f2590691d4b7
- Fix locking issues causing spurious error messages (and possibly deadlocks)
Ralf Ertzinger <ralf@skytale.net>
parents:
2152
diff
changeset
|
1002 g_mutex_lock(h->reader_status.mutex); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1003 h->reader_status.reading = TRUE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1004 if (NULL == (h->reader = g_thread_create(reader_thread, h, TRUE, NULL))) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1005 h->reader_status.reading = FALSE; |
2184
f2590691d4b7
- Fix locking issues causing spurious error messages (and possibly deadlocks)
Ralf Ertzinger <ralf@skytale.net>
parents:
2152
diff
changeset
|
1006 g_mutex_unlock(h->reader_status.mutex); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1007 _ERROR("<%p> Error creating reader thread!", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1008 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1009 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1010 h->reader_status.status = NEON_READER_RUN; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1011 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1012 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1013 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1014 * There already is a reader thread. Look if it is in good |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1015 * shape. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1016 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1017 g_mutex_lock(h->reader_status.mutex); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1018 _DEBUG("<%p> Reader thread status: %d", h, h->reader_status.status); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1019 switch (h->reader_status.status) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1020 case NEON_READER_INIT: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1021 case NEON_READER_RUN: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1022 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1023 * All is well, nothing to be done. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1024 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1025 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1026 case NEON_READER_EOF: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1027 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1028 * If there still is data in the buffer, carry on. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1029 * If not, terminate the reader thread and return 0. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1030 */ |
2184
f2590691d4b7
- Fix locking issues causing spurious error messages (and possibly deadlocks)
Ralf Ertzinger <ralf@skytale.net>
parents:
2152
diff
changeset
|
1031 if (0 == used_rb_locked(&h->rb)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1032 _DEBUG("<%p> Reached end of stream", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1033 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1034 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1035 h->eof = TRUE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1036 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1037 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1038 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1039 case NEON_READER_ERROR: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1040 /* Terminate the reader and return 0 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1041 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1042 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1043 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1044 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1045 case NEON_READER_TERM: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1046 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1047 * The reader thread terminated gracefully, most |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1048 * likely on our own request. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1049 * We should not get here. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1050 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1051 _ERROR("<%p> Reader thread terminated and fread() called. How did we get here?", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1052 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1053 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1054 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1055 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1056 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1057 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1058 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1059 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1060 * Deliver data from the buffer |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1061 */ |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1062 if (0 == used_rb(&h->rb)) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1063 /* |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1064 * The buffer is still empty, we can deliver no data! |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1065 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1066 _ERROR("<%p> Buffer still underrun, fatal.", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1067 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1068 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1069 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1070 if (0 != h->icy_metaint) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1071 _DEBUG("<%p> %ld bytes left before next ICY metadata announcement", h, h->icy_metaleft); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1072 if (0 == h->icy_metaleft) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1073 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1074 * The next data in the buffer is a ICY metadata announcement. |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1075 * Get the length byte |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1076 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1077 read_rb(&h->rb, &icy_metalen, 1); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1078 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1079 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1080 * We need enough data in the buffer to |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1081 * a) Read the complete ICY metadata block |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1082 * b) deliver at least one byte to the reader |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1083 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1084 _DEBUG("<%p> Expecting %d bytes of ICY metadata", h, (icy_metalen*16)); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1085 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1086 if ((free_rb(&h->rb)-(icy_metalen*16)) < size) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1087 /* There is not enough data. We do not have much choice at this point, |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1088 * so we'll deliver the metadata as normal data to the reader and |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1089 * hope for the best. |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1090 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1091 _ERROR("<%p> Buffer underrun when reading metadata. Expect audio degradation", h); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1092 h->icy_metaleft = h->icy_metaint + (icy_metalen*16); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1093 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1094 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1095 * Grab the metadata from the buffer and send it to the parser |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1096 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1097 read_rb(&h->rb, icy_metadata, (icy_metalen*16)); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1098 parse_icy(&h->icy_metadata, icy_metadata, (icy_metalen*16)); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1099 h->icy_metaleft = h->icy_metaint; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1100 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1101 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1102 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1103 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1104 * The maximum number of bytes we can deliver is determined |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1105 * by the number of bytes left until the next metadata announcement |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1106 */ |
1749
d2e3eef90719
- Read the correct amount of data from the buffer when handling ShoutCast metadata
Ralf Ertzinger <ralf@skytale.net>
parents:
1742
diff
changeset
|
1107 belem = MIN(used_rb(&h->rb), h->icy_metaleft) / size; |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1108 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1109 belem = used_rb(&h->rb) / size; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1110 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1111 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1112 relem = MIN(belem, nmemb); |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1113 _DEBUG("<%p> %d elements of returnable data in the buffer", h, belem); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1114 read_rb(&h->rb, ptr_, relem*size); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1115 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1116 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1117 * Signal the network thread to continue reading |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1118 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1119 _DEBUG("<%p> Waking up reader thread", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1120 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1121 g_cond_signal(h->reader_status.cond); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1122 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1123 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1124 h->pos += (relem*size); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1125 h->icy_metaleft -= (relem*size); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1126 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1127 _DEBUG("<%p> Returning %d elements", h, relem); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1128 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1129 _LEAVE relem; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1130 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1131 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1132 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1133 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1134 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1135 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1136 |
1978 | 1137 size_t neon_aud_vfs_fwrite_impl(gconstpointer ptr, size_t size, size_t nmemb, VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1138 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1139 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1140 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1141 _ERROR("<%p> NOT IMPLEMENTED", file->handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1142 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1143 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1144 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1145 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1146 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1147 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1148 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1149 |
1978 | 1150 gint neon_aud_vfs_getc_impl(VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1151 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1152 gchar c; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1153 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1154 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1155 |
1978 | 1156 if (1 != neon_aud_vfs_fread_impl(&c, 1, 1, file)) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1157 _ERROR("<%p> Could not getc()!", file->handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1158 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1159 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1160 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1161 _LEAVE c; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1162 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1163 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1164 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1165 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1166 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1167 |
1978 | 1168 gint neon_aud_vfs_ungetc_impl(gint c, VFSFile* stream) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1169 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1170 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1171 |
2310
11b4a4e15f63
- Fix typo in neon_aud_vfs_ungetc_impl()
Ralf Ertzinger <ralf@skytale.net>
parents:
2308
diff
changeset
|
1172 _ERROR("<%p> NOT IMPLEMENTED", stream->handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1173 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1174 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1175 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1176 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1177 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1178 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1179 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1180 |
1978 | 1181 void neon_aud_vfs_rewind_impl(VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1182 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1183 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1184 |
1978 | 1185 (void)neon_aud_vfs_fseek_impl(file, 0L, SEEK_SET); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1186 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1187 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1188 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1189 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1190 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1191 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1192 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1193 |
1978 | 1194 glong neon_aud_vfs_ftell_impl(VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1195 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1196 struct neon_handle* h = (struct neon_handle *)file->handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1197 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1198 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1199 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1200 _DEBUG("<%p> Current file position: %ld", h, h->pos); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1201 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1202 _LEAVE h->pos; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1203 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1204 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1205 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1206 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1207 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1208 |
1978 | 1209 gboolean neon_aud_vfs_feof_impl(VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1210 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1211 struct neon_handle* h = (struct neon_handle*)file->handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1212 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1213 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1214 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1215 _LEAVE h->eof; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1216 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1217 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1218 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1219 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1220 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1221 |
1978 | 1222 gint neon_aud_vfs_truncate_impl(VFSFile* file, glong size) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1223 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1224 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1225 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1226 _ERROR("<%p> NOT IMPLEMENTED", file->handle); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1227 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1228 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1229 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1230 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1231 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1232 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1233 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1234 |
1978 | 1235 gint neon_aud_vfs_fseek_impl(VFSFile* file, glong offset, gint whence) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1236 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1237 struct neon_handle* h = (struct neon_handle*)file->handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1238 long newpos; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1239 long content_length; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1240 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1241 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1242 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1243 _DEBUG("<%p> Seek requested: offset %ld, whence %d", h, offset, whence); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1244 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1245 * Two things must be satisfied for us to be able to seek: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1246 * - the server must advertise a content-length |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1247 * - the server must advertise accept-ranges: bytes |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1248 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1249 if ((-1 == h->content_length) || !h->can_ranges) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1250 _DEBUG("<%p> Can not seek due to server restrictions", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1251 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1252 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1253 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1254 content_length = h->content_length + h->content_start; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1255 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1256 switch (whence) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1257 case SEEK_SET: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1258 newpos = offset; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1259 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1260 case SEEK_CUR: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1261 newpos = h->pos + offset; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1262 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1263 case SEEK_END: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1264 newpos = content_length + offset; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1265 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1266 default: |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1267 _ERROR("<%p> Invalid whence specified", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1268 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1269 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1270 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1271 _DEBUG("<%p> Position to seek to: %ld, current: %ld", h, newpos, h->pos); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1272 if (0 > newpos) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1273 _ERROR("<%p> Can not seek before start of stream", h); |
2031 | 1274 _LEAVE -1; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1275 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1276 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1277 if (newpos > content_length) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1278 _ERROR("<%p> Can not seek beyond end of stream", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1279 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1280 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1281 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1282 if (newpos == h->pos) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1283 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1284 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1285 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1286 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1287 * To seek to the new position we have to |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1288 * - stop the current reader thread, if there is one |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1289 * - destroy the current request |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1290 * - dump all data currently in the ringbuffer |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1291 * - create a new request starting at newpos |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1292 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1293 if (NULL != h->reader) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1294 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1295 * There may be a thread still running. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1296 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1297 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1298 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1299 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1300 ne_request_destroy(h->request); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1301 ne_session_destroy(h->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1302 reset_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1303 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1304 if (0 != open_handle(h, newpos)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1305 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1306 * Something went wrong while creating the new request. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1307 * There is not much we can do now, we'll set the request |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1308 * to NULL, so that fread() will error out on the next |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1309 * read request |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1310 */ |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1311 _ERROR("<%p> Error while creating new request!", h); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1312 h->request = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1313 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1314 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1315 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1316 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1317 * Things seem to have worked. The next read request will start |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1318 * the reader thread again. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1319 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1320 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1321 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1322 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1323 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1324 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1325 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1326 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1327 |
1978 | 1328 gchar *neon_aud_vfs_metadata_impl(VFSFile* file, const gchar* field) { |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1329 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1330 struct neon_handle* h = (struct neon_handle*)file->handle; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1331 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1332 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1333 |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1334 _DEBUG("<%p> Field name: %s", h, field); |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1335 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1336 if (0 == g_ascii_strncasecmp(field, "track-name", 10)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1337 _LEAVE g_strdup(h->icy_metadata.stream_title); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1338 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1339 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1340 if (0 == g_ascii_strncasecmp(field, "stream-name", 11)) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1341 _LEAVE g_strdup(h->icy_metadata.stream_name); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1342 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1343 |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1344 if (0 == g_ascii_strncasecmp(field, "content-type", 12)) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1345 _LEAVE g_strdup(h->icy_metadata.stream_contenttype); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1346 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1347 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1348 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1349 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1350 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1351 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1352 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1353 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1354 |
1978 | 1355 off_t neon_aud_vfs_fsize_impl(VFSFile* file) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1356 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1357 struct neon_handle* h = (struct neon_handle*)file->handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1358 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1359 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1360 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1361 if (-1 == h->content_length) { |
2307
1606353a9fcb
- Whenever possible, mention the currently used handle in error/debug messages, to aid debugging of concurrent requests
Ralf Ertzinger <ralf@skytale.net>
parents:
2184
diff
changeset
|
1362 _DEBUG("<%p> Unknown content length", h); |
1926
a1ed9f7cb4cc
- Return -1 from fsize() on unknown content length
Ralf Ertzinger <ralf@skytale.net>
parents:
1925
diff
changeset
|
1363 _LEAVE -1; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1364 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1365 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1366 _LEAVE (h->content_start + h->content_length); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1367 } |