Mercurial > audlegacy-plugins
annotate src/neon/neon.c @ 2029:c301531ffa5c
cope with seeks before the stream start point.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Fri, 12 Oct 2007 14:24:14 -0500 |
parents | fa9f85cebade |
children | e3d9ef56fec8 |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
93 if (0 != init_rb(&(h->rb), NBUFSIZ)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
94 _ERROR("Could not initialize buffer"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
95 free(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
96 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
97 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
98 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
99 h->url = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
100 h->purl = &purl; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
101 memset(h->purl, 0, sizeof(ne_uri)); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
102 h->session = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
103 h->request = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
104 h->redircount = 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
105 h->pos = 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
106 h->content_length = -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 h->icy_metadata.stream_url = NULL; |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
113 h->icy_metadata.stream_contenttype = NULL; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
114 h->reader = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
115 h->reader_status.mutex = g_mutex_new(); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
116 h->reader_status.cond = g_cond_new(); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
117 h->reader_status.reading = FALSE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
118 h->reader_status.status = NEON_READER_INIT; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
119 h->eof = FALSE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
120 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
121 _LEAVE h; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
122 } |
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 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
|
129 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
130 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
131 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
132 ne_uri_free(h->purl); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
133 destroy_rb(&h->rb); |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
134 if (NULL != h->icy_metadata.stream_name) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
135 free(h->icy_metadata.stream_name); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
136 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
137 if (NULL != h->icy_metadata.stream_title) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
138 free(h->icy_metadata.stream_title); |
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_url) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
141 free(h->icy_metadata.stream_url); |
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_contenttype) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
144 free(h->icy_metadata.stream_contenttype); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
145 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
146 free(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
147 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
148 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
149 } |
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 /* |
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 static void init(void) { |
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 int ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
158 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
159 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
160 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
161 if (0 != (ret = ne_sock_init())) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
162 _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
|
163 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
164 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
165 |
1978 | 166 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
|
167 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
168 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
|
169 _DEBUG("neon compiled with thread-safe SSL, enabling https:// transport"); |
1978 | 170 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
|
171 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
172 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
173 _LEAVE; |
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 /* |
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 static void fini(void) { |
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 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
183 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
184 ne_sock_exit(); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
185 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
186 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
187 } |
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 /* |
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 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
193 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
|
194 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
195 _ENTER; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
196 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
197 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
|
198 _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
|
199 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
|
200 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
|
201 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
202 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
|
203 } |
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 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
|
206 _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
|
207 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
|
208 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
|
209 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
210 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
|
211 } |
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 _LEAVE; |
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 /* |
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 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
|
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 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
|
223 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
|
224 gchar* tend; |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
225 gchar name[4096]; |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
226 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
|
227 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
|
228 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
|
229 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
230 _ENTER; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
231 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
243 * 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
|
244 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
245 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
|
246 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
247 * 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
|
248 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
249 *p = '\0'; |
1752
301a2f9b287d
- Use g_strlcpy instead of strcpy
Ralf Ertzinger <ralf@skytale.net>
parents:
1751
diff
changeset
|
250 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
|
251 _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
|
252 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
|
253 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
254 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
|
255 }; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
256 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
257 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
|
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 * 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
|
260 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
261 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
|
262 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
263 * 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
|
264 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
265 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
|
266 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
|
267 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
|
268 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
269 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
270 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
|
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 * 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
|
273 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
274 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
|
275 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
276 * 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
|
277 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
278 *p = '\0'; |
1752
301a2f9b287d
- Use g_strlcpy instead of strcpy
Ralf Ertzinger <ralf@skytale.net>
parents:
1751
diff
changeset
|
279 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
|
280 _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
|
281 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
|
282 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
|
283 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
284 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
|
285 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
286 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
287 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
|
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 * 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
|
290 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
291 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
|
292 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
293 * 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
|
294 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 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
|
299 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
300 break; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
301 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
302 p++; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
303 pos++; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
304 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
305 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
306 _LEAVE; |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
307 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
308 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
309 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
310 * ----- |
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 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
313 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
|
314 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
315 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
316 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
317 _DEBUG("Signaling reader thread to terminate"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
318 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
319 h->reader_status.reading = FALSE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
320 g_cond_signal(h->reader_status.cond); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
321 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
322 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
323 _DEBUG("Waiting for reader thread to die..."); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
324 g_thread_join(h->reader); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
325 _DEBUG("Reader thread has died"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
326 h->reader = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
327 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
328 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
329 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
330 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
331 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
332 |
1760 | 333 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
|
334 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
335 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
|
336 gchar* authcpy; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
337 gchar** authtok; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
338 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
339 _ENTER; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
340 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
341 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
|
342 _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
|
343 _LEAVE 1; |
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 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
346 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
|
347 /* |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
348 * No auth data |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
349 */ |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
350 _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
|
351 _LEAVE 1; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
352 } |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
353 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
354 authtok = g_strsplit(authcpy, ":", 2); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
355 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
|
356 _ERROR("Username/Password too long"); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
357 g_strfreev(authtok); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
358 free(authcpy); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
359 _LEAVE 1; |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
360 } |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
361 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
362 strncpy(username, authtok[0], NE_ABUFSIZ); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
363 strncpy(password, authtok[1], NE_ABUFSIZ); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
364 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
365 _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
|
366 |
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 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
370 _LEAVE attempt; |
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 |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
373 /* |
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 */ |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
376 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
377 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
|
378 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
379 const gchar* name; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
380 const gchar* value; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
381 void* cursor = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
382 long len; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
383 gchar* endptr; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
384 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
385 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
386 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
387 _DEBUG("Header responses:"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
388 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
|
389 _DEBUG("HEADER: %s: %s", name, value); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
390 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
|
391 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
392 * 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
|
393 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
394 if (NULL != g_strrstr(value, "bytes")) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
395 _DEBUG("server can_ranges"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
396 h->can_ranges = TRUE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
397 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
398 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
399 continue; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
400 } |
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 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
|
403 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
404 * 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
|
405 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
406 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
|
407 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
|
408 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
409 * Valid data. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
410 */ |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
411 _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
|
412 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
|
413 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
414 _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
|
415 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
416 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
417 continue; |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
418 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
419 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
420 if (0 == g_ascii_strncasecmp("content-type", name, 12)) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
421 /* |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
422 * 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
|
423 */ |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
424 _DEBUG("Content-Type: %s", value); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
425 if (NULL != h->icy_metadata.stream_contenttype) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
426 free(h->icy_metadata.stream_contenttype); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
427 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
428 h->icy_metadata.stream_contenttype = g_strdup(value); |
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 continue; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
431 } |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
432 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
433 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
|
434 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
435 * 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
|
436 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
437 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
|
438 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
|
439 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
440 * 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
|
441 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
442 _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
|
443 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
|
444 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
|
445 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
446 _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
|
447 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
448 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
449 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
|
450 } |
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 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
|
453 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
454 * 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
|
455 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
456 _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
|
457 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
|
458 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
|
459 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
460 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
|
461 } |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
462 |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
463 continue; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
464 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
465 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
466 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
467 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
468 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
469 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
470 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
471 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
472 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
473 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
|
474 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
475 int ret; |
1740
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
476 const ne_status* status; |
1719
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 _ENTER; |
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 handle->request = ne_request_create(handle->session, "GET", handle->purl->path); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
481 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
|
482 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
|
483 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
484 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
485 * Try to connect to the server. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
486 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
487 _DEBUG("Connecting..."); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
488 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
|
489 status = ne_get_status(handle->request); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
490 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
|
491 /* |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
492 * Authorization required. Reconnect to |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
493 * authenticate |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
494 */ |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
495 _DEBUG("Reconnecting due to 401"); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
496 ne_end_request(handle->request); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
497 ret = ne_begin_request(handle->request); |
8feacd004f50
- Add HTTP auth support (http://<username>:<password>@.... scheme)
Ralf Ertzinger <ralf@skytale.net>
parents:
1730
diff
changeset
|
498 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
499 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
500 switch (ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
501 case NE_OK: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
502 /* URL opened OK */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
503 _DEBUG("URL opened OK"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
504 handle->content_start = startbyte; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
505 handle->pos = startbyte; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
506 handle_headers(handle); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
507 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
508 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
509 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
510 case NE_REDIRECT: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
511 /* We hit a redirect. Handle it. */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
512 _DEBUG("Redirect encountered"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
513 handle->redircount += 1; |
1972 | 514 handle->purl = (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
|
515 ne_request_destroy(handle->request); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
516 if (NULL == handle->purl) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
517 _ERROR("Could not parse redirect response"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
518 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
519 } |
1722
2e33cfa6a872
- Correct some compiler warnings
Ralf Ertzinger <ralf@skytale.net>
parents:
1719
diff
changeset
|
520 _LEAVE 1; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
521 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
522 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
523 default: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
524 /* Something went wrong. */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
525 _ERROR("Could not open URL: %d", ret); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
526 if (1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
527 _ERROR("neon error string: %s", ne_get_error(handle->session)); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
528 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
529 ne_request_destroy(handle->request); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
530 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
531 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
532 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
533 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
534 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
535 /* |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
539 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
|
540 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
541 int ret; |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
542 ConfigDb* db; |
1760 | 543 gchar* proxy_host; |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
544 gchar* proxy_port_s; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
545 gchar* endptr; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
546 unsigned int proxy_port = 0; |
1760 | 547 gboolean use_proxy; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
548 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
549 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
550 |
1760 | 551 db = bmp_cfg_db_open(); |
1923
bf6a0330c939
- Properly check if we could read the use_proxy property from the config
Ralf Ertzinger <ralf@skytale.net>
parents:
1908
diff
changeset
|
552 if (FALSE == bmp_cfg_db_get_bool(db, NULL, "use_proxy", &use_proxy)) { |
bf6a0330c939
- Properly check if we could read the use_proxy property from the config
Ralf Ertzinger <ralf@skytale.net>
parents:
1908
diff
changeset
|
553 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
|
554 } |
bf6a0330c939
- Properly check if we could read the use_proxy property from the config
Ralf Ertzinger <ralf@skytale.net>
parents:
1908
diff
changeset
|
555 |
1760 | 556 if (use_proxy) { |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
557 if (FALSE == bmp_cfg_db_get_string(db, NULL, "proxy_host", &proxy_host)) { |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
558 _ERROR("Could not read proxy host, disabling proxy use"); |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
559 use_proxy = FALSE; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
560 } |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
561 if (FALSE == bmp_cfg_db_get_string(db, NULL, "proxy_port", &proxy_port_s)) { |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
562 _ERROR("Could not read proxy port, disabling proxy use"); |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
563 use_proxy = FALSE; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
564 } |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
565 proxy_port = strtoul(proxy_port_s, &endptr, 10); |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
566 if (!((*proxy_port_s != '\0') && (*endptr == '\0') && (proxy_port < 65536))) { |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
567 /* |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
568 * Invalid data |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
569 */ |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
570 _ERROR("Invalid proxy port, disabling proxy use"); |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
571 use_proxy = FALSE; |
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
572 } |
1760 | 573 } |
574 | |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
575 handle->redircount = 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
576 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
577 _DEBUG("Parsing URL"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
578 if (0 != ne_uri_parse(handle->url, handle->purl)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
579 _ERROR("Could not parse URL '%s'", handle->url); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
580 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
581 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
582 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
583 if (0 == handle->purl->port) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
584 handle->purl->port = 80; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
585 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
586 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
587 while (handle->redircount < 10) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
588 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
589 _DEBUG("Creating session"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
590 handle->session = ne_session_create(handle->purl->scheme, handle->purl->host, handle->purl->port); |
1760 | 591 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
|
592 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
|
593 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
|
594 |
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
|
595 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
|
596 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
|
597 |
1729 | 598 ne_set_read_timeout(handle->session, 10); |
599 ne_set_useragent(handle->session, "Audacious/1.4.0"); | |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
600 ne_redirect_register(handle->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
601 |
1760 | 602 if (use_proxy) { |
1761
78d29eb44276
- Fix config db handling
Ralf Ertzinger <ralf@skytale.net>
parents:
1760
diff
changeset
|
603 _DEBUG("Using proxy: %s:%d", proxy_host, proxy_port); |
1760 | 604 ne_session_proxy(handle->session, proxy_host, proxy_port); |
605 } | |
606 | |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
607 _DEBUG("Creating request"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
608 ret = open_request(handle, startbyte); |
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 if (0 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
611 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
612 } else if (-1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
613 ne_session_destroy(handle->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
614 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
615 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
616 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
617 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
618 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
619 * 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
|
620 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
621 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
622 _ERROR("Redirect count exceeded for URL"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
623 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
624 _LEAVE 1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
625 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
626 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
627 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
628 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
629 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
630 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
631 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
|
632 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
633 ssize_t bsize; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
634 char buffer[NETBLKSIZ]; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
635 ssize_t to_read; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
636 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
637 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
638 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
639 bsize = free_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
640 to_read = MIN(bsize, NETBLKSIZ); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
641 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
642 _DEBUG("%d bytes free in buffer, trying to read %d bytes max", bsize, to_read); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
643 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
644 _DEBUG("Reading from the network...."); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
645 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
|
646 if (0 == bsize) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
647 _DEBUG("End of file encountered"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
648 _LEAVE 1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
649 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
650 _ERROR("Error while reading from the network"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
651 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
652 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
653 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
654 _DEBUG("Read %d bytes from the network", bsize); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
655 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
656 if (0 != write_rb(&(h->rb), buffer, bsize)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
657 _ERROR("Error putting data into buffer"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
658 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
659 } |
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 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
662 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
663 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
664 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
665 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
666 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
667 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
668 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
|
669 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
670 ssize_t bfree; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
671 int ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
672 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
673 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
674 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
675 bfree = free_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
676 _DEBUG("Filling buffer up to max %d bytes free, %d bytes free now", maxfree, bfree); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
677 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
678 while (bfree > maxfree) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
679 ret = fill_buffer(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
680 if (-1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
681 _ERROR("Error while filling buffer"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
682 _LEAVE ret; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
683 } else if (1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
684 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
685 * 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
|
686 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
687 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
688 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
689 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
690 bfree = free_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
691 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
692 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
693 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
694 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
695 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
696 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
697 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
698 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
699 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
700 static gpointer reader_thread(void* data) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
701 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
702 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
|
703 int ret; |
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 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
706 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
707 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
708 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
709 while(h->reader_status.reading) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
710 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
711 |
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 * 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
|
714 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
715 if (NETBLKSIZ < free_rb(&h->rb)) { |
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 _DEBUG("Filling buffer..."); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
718 ret = fill_buffer(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 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
721 if (-1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
722 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
723 * Error encountered while reading from the network. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
724 * Set the error flag and terminate the |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
725 * reader thread. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
726 */ |
1970
e54d72373503
- Be a bit more verbose about network errors
Ralf Ertzinger <ralf@skytale.net>
parents:
1926
diff
changeset
|
727 _ERROR("Error while reading from the network. Terminating reader thread"); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
728 h->reader_status.status = NEON_READER_ERROR; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
729 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
730 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
731 } else if (1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
732 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
733 * EOF encountered while reading from the |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
734 * network. Set the EOF status and exit. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
735 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
736 _DEBUG("EOF encountered while reading from the network. Terminating reader thread"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
737 h->reader_status.status = NEON_READER_EOF; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
738 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
739 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
740 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
741 |
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 * 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
|
744 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
745 _DEBUG("Network read succeeded"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
746 } else { |
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 * Not enough free space in the buffer. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
749 * 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
|
750 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
751 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
752 if (h->reader_status.reading) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
753 _DEBUG("Reader thread going to sleep"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
754 g_cond_wait(h->reader_status.cond, h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
755 _DEBUG("Reader thread woke up"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
756 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
757 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
758 * Main thread has ordered termination of this thread. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
759 * Leave the loop. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
760 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
761 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
762 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
763 } |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
766 _DEBUG("Reader thread terminating gracefully"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
767 h->reader_status.status = NEON_READER_TERM; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
768 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
769 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
770 _LEAVE NULL; |
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 |
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 * ----- |
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 |
1978 | 777 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
|
778 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
779 VFSFile* file; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
780 struct neon_handle* handle; |
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 _ENTER; |
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 _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
|
785 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
786 if (NULL == (file = malloc(sizeof(VFSFile)))) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
787 _ERROR("Could not allocate memory for filehandle"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
788 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
789 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
790 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
791 if (NULL == (handle = handle_init())) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
792 _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
|
793 free(file); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
794 _LEAVE NULL; |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
797 if (NULL == (handle->url = strdup(path))) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
798 _ERROR("Could not copy URL string"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
799 handle_free(handle); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
800 free(file); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
801 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
802 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
803 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
804 if (0 != open_handle(handle, 0)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
805 _ERROR("Could not open URL"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
806 handle_free(handle); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
807 free(file); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
808 _LEAVE NULL; |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
811 file->handle = handle; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
812 file->base = &neon_http_const; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
813 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
814 _LEAVE file; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
815 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
816 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
817 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
818 * ---- |
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 |
1978 | 821 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
|
822 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
823 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
|
824 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
825 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
826 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
827 if (NULL != h->reader) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
828 kill_reader(h); |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
831 _DEBUG("Destroying request"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
832 if (NULL != h->request) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
833 ne_request_destroy(h->request); |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
836 _DEBUG("Destroying session"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
837 ne_session_destroy(h->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
838 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
839 handle_free(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
840 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
841 _LEAVE 0; |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
844 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
845 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
846 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
847 |
1978 | 848 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
|
849 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
850 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
|
851 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
|
852 int relem; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
853 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
|
854 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
|
855 unsigned char icy_metalen; |
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 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
858 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
859 if (NULL == h->request) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
860 _ERROR("No request to read from, seek gone wrong?"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
861 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
862 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
863 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
864 _DEBUG("Requesting %d elements of %d bytes size each (%d bytes total), to be stored at %p", |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
865 nmemb, size, (nmemb*size), ptr_); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
866 |
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 * 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
|
869 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
870 belem = used_rb(&h->rb) / size; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
871 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
872 if ((NULL != h->reader) && (0 == belem)) { |
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 * 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
|
875 * 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
|
876 * Kill the reader thread and restart. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
877 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
878 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
879 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
|
880 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
881 _ERROR("Buffer underrun, trying rebuffering"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
882 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
|
883 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
884 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
885 * 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
|
886 * again |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
887 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
888 if (NEON_READER_TERM != h->reader_status.status) { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
889 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
890 * 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
|
891 */ |
1970
e54d72373503
- Be a bit more verbose about network errors
Ralf Ertzinger <ralf@skytale.net>
parents:
1926
diff
changeset
|
892 _ERROR("Reader thread did not terminate gracefully: %d", 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
|
893 _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
|
894 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
895 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
896 g_mutex_unlock(h->reader_status.mutex); |
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 if (NULL == h->reader) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
901 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
902 * 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
|
903 * 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
|
904 * to keep the buffer filled up. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
905 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
906 _DEBUG("Doing initial buffer fill"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
907 ret = fill_buffer_limit(h, NBUFSIZ/2); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
908 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
909 if (-1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
910 _ERROR("Error while reading from the network"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
911 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
912 } else if (1 == ret) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
913 _ERROR("EOF during initial read"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
914 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
915 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
916 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
917 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
918 * 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
|
919 * Start the reader thread. |
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 h->reader_status.reading = TRUE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
922 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
|
923 h->reader_status.reading = FALSE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
924 _ERROR("Error creating reader thread!"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
925 _LEAVE 0; |
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 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
928 h->reader_status.status = NEON_READER_RUN; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
929 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
930 } else { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
931 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
932 * 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
|
933 * shape. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
934 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
935 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
936 _DEBUG("Reader thread status: %d", h->reader_status.status); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
937 switch (h->reader_status.status) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
938 case NEON_READER_INIT: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
939 case NEON_READER_RUN: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
940 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
941 * All is well, nothing to be done. |
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 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
944 case NEON_READER_EOF: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
945 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
946 * 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
|
947 * 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
|
948 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
949 if (0 == used_rb(&h->rb)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
950 _DEBUG("Reached end of stream"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
951 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
952 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
953 h->eof = TRUE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
954 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
955 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
956 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
957 case NEON_READER_ERROR: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
958 /* Terminate the reader and return 0 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
959 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
960 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
961 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
962 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
963 case NEON_READER_TERM: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
964 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
965 * The reader thread terminated gracefully, most |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
966 * likely on our own request. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
967 * We should not get here. |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
968 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
969 _ERROR("Reader thread terminated and fread() called. How did we get here?"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
970 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
971 kill_reader(h); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
972 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
973 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
974 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
975 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
976 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
977 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
978 * Deliver data from the buffer |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
979 */ |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
980 if (0 == used_rb(&h->rb)) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
981 /* |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
982 * 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
|
983 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
984 _ERROR("Buffer still underrun, fatal."); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
985 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
986 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
987 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
988 if (0 != 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
|
989 _DEBUG("%ld bytes left before next ICY metadata announcement", 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
|
990 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
|
991 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
992 * 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
|
993 * 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
|
994 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
995 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
|
996 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
997 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
998 * 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
|
999 * 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
|
1000 * 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
|
1001 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1002 _DEBUG("Expecting %d bytes of 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
|
1003 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1004 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
|
1005 /* 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
|
1006 * 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
|
1007 * 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
|
1008 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1009 _ERROR("Buffer underrun when reading metadata. Expect audio degradation"); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1010 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
|
1011 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1012 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1013 * 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
|
1014 */ |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1015 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
|
1016 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
|
1017 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
|
1018 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1019 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1020 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1021 /* |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1022 * 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
|
1023 * 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
|
1024 */ |
1749
d2e3eef90719
- Read the correct amount of data from the buffer when handling ShoutCast metadata
Ralf Ertzinger <ralf@skytale.net>
parents:
1742
diff
changeset
|
1025 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
|
1026 } else { |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1027 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
|
1028 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1029 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1030 relem = MIN(belem, nmemb); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1031 _DEBUG("%d elements of returnable data in the buffer", belem); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1032 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
|
1033 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1034 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1035 * Signal the network thread to continue reading |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1036 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1037 _DEBUG("Waking up reader thread"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1038 g_mutex_lock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1039 g_cond_signal(h->reader_status.cond); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1040 g_mutex_unlock(h->reader_status.mutex); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1041 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1042 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
|
1043 h->icy_metaleft -= (relem*size); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1044 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1045 _DEBUG("Returning %d elements", relem); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1046 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1047 _LEAVE relem; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1048 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1049 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1050 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1051 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1052 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1053 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1054 |
1978 | 1055 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
|
1056 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1057 _ENTER; |
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 _ERROR("NOT IMPLEMENTED"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1060 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1061 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1062 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1063 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1064 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1065 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1066 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1067 |
1978 | 1068 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
|
1069 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1070 gchar c; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1071 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1072 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1073 |
1978 | 1074 if (1 != neon_aud_vfs_fread_impl(&c, 1, 1, file)) { |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1075 _ERROR("Could not getc()!"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1076 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1077 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1078 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1079 _LEAVE c; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1080 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1081 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1082 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1083 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1084 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1085 |
1978 | 1086 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
|
1087 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1088 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1089 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1090 _ERROR("NOT IMPLEMENTED"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1091 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1092 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1093 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1094 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1095 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1096 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1097 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1098 |
1978 | 1099 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
|
1100 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1101 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1102 |
1978 | 1103 (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
|
1104 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1105 _LEAVE; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1106 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1107 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1108 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1109 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1110 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1111 |
1978 | 1112 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
|
1113 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1114 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
|
1115 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1116 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1117 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1118 _DEBUG("Current file position: %ld", h->pos); |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1119 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1120 _LEAVE h->pos; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1121 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1122 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1123 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1124 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1125 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1126 |
1978 | 1127 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
|
1128 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1129 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
|
1130 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1131 _ENTER; |
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 _LEAVE h->eof; |
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 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1137 * ----- |
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 |
1978 | 1140 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
|
1141 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1142 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1143 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1144 _ERROR("NOT IMPLEMENTED"); |
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 _LEAVE 0; |
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 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1150 * ----- |
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 |
1978 | 1153 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
|
1154 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1155 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
|
1156 long newpos; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1157 long content_length; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1158 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1159 _ENTER; |
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 _DEBUG("Seek requested: offset %ld, whence %d", offset, whence); |
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 * 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
|
1164 * - the server must advertise a content-length |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1165 * - the server must advertise accept-ranges: bytes |
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 if ((-1 == h->content_length) || !h->can_ranges) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1168 _DEBUG("Can not seek due to server restrictions"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1169 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1170 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1171 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1172 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
|
1173 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1174 switch (whence) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1175 case SEEK_SET: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1176 newpos = offset; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1177 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1178 case SEEK_CUR: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1179 newpos = h->pos + offset; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1180 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1181 case SEEK_END: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1182 newpos = content_length + offset; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1183 break; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1184 default: |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1185 _ERROR("Invalid whence specified"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1186 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1187 } |
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 _DEBUG("Position to seek to: %ld, current: %ld", newpos, h->pos); |
2029
c301531ffa5c
cope with seeks before the stream start point.
William Pitcock <nenolod@atheme.org>
parents:
1978
diff
changeset
|
1190 |
c301531ffa5c
cope with seeks before the stream start point.
William Pitcock <nenolod@atheme.org>
parents:
1978
diff
changeset
|
1191 /* if seek <0, plugin probably wants the beginning of the stream. |
c301531ffa5c
cope with seeks before the stream start point.
William Pitcock <nenolod@atheme.org>
parents:
1978
diff
changeset
|
1192 cope with it. --nenolod */ |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1193 if (0 > newpos) { |
2029
c301531ffa5c
cope with seeks before the stream start point.
William Pitcock <nenolod@atheme.org>
parents:
1978
diff
changeset
|
1194 _DEBUG("A seek was requested before start of stream, seeking to start of stream instead."); |
c301531ffa5c
cope with seeks before the stream start point.
William Pitcock <nenolod@atheme.org>
parents:
1978
diff
changeset
|
1195 newpos = 0; |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1196 } |
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 if (newpos > content_length) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1199 _ERROR("Can not seek beyond end of stream"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1200 _LEAVE -1; |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1203 if (newpos == h->pos) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1204 _LEAVE 0; |
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 * 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
|
1209 * - 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
|
1210 * - destroy the current request |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1211 * - dump all data currently in the ringbuffer |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1212 * - create a new request starting at newpos |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1213 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1214 if (NULL != h->reader) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1215 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1216 * There may be a thread still running. |
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 kill_reader(h); |
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 ne_request_destroy(h->request); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1222 ne_session_destroy(h->session); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1223 reset_rb(&h->rb); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1224 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1225 if (0 != open_handle(h, newpos)) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1226 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1227 * 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
|
1228 * 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
|
1229 * 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
|
1230 * read request |
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 _ERROR("Error while creating new request!"); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1233 h->request = NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1234 _LEAVE -1; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1235 } |
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 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1238 * 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
|
1239 * the reader thread again. |
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 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1242 _LEAVE 0; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1243 } |
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 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1246 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1247 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1248 |
1978 | 1249 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
|
1250 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1251 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
|
1252 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1253 _ENTER; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1254 |
1730
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1255 _DEBUG("Field name: %s", field); |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1256 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1257 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
|
1258 _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
|
1259 } |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1260 |
50d151b259bb
- Add lots of code to support the completely braindead concept that is StreamCast
Ralf Ertzinger <ralf@skytale.net>
parents:
1729
diff
changeset
|
1261 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
|
1262 _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
|
1263 } |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1264 |
1742
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1265 if (0 == g_ascii_strncasecmp(field, "content-type", 12)) { |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1266 _LEAVE g_strdup(h->icy_metadata.stream_contenttype); |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1267 } |
4f4634573e41
- Free memory for ICY tags
Ralf Ertzinger <ralf@skytale.net>
parents:
1741
diff
changeset
|
1268 |
1719
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1269 _LEAVE NULL; |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1270 } |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1271 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1272 /* |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1273 * ----- |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1274 */ |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1275 |
1978 | 1276 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
|
1277 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1278 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
|
1279 |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1280 _ENTER; |
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 (-1 == h->content_length) { |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1283 _DEBUG("Unknown content length"); |
1926
a1ed9f7cb4cc
- Return -1 from fsize() on unknown content length
Ralf Ertzinger <ralf@skytale.net>
parents:
1925
diff
changeset
|
1284 _LEAVE -1; |
1719
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 _LEAVE (h->content_start + h->content_length); |
29c35cb8873e
- Add neon HTTP transport plugin sources (for real)
Ralf Ertzinger <ralf@skytale.net>
parents:
diff
changeset
|
1288 } |