Hi,
das ist mein erster kleiner aktiver Beitrag zur Entwicklung von tuxbox. Daher verzeit bitte, falls das hier nicht die richtig Anlaufstelle ist...
Mir ist heute aufgefallen, dass der Audioplayer für das icy Protokoll (bzw. netfile.cpp) keinerlei Authentifizierung unterstützt, wie man es aber leider z.B. für die Premium-Kanäle von sky.fm braucht.
Daher hier ein kleiner dummer Patch, der zumindest extrem rudimentären Support für username:passwort login bereitstellt (wie man es eben z.B. für sky.fm braucht).
Damit man username:passwort wirklich komfortabel angeben könnte, bräuchte man noch eine base64-Encoding-Funktion. Aber ich für meinen Teil kann damit leben, dies vorher z.B. mit
# echo -n "username:password" | base64
selbst umzuwandeln.
Patch: http://f-seidel.de/linux/downloads/add_ ... lity.patch
Gruß,
Frank
Very basic authentication Support für den Audioplayer
-
- Neugieriger
- Beiträge: 11
- Registriert: Donnerstag 31. März 2005, 12:10
-
- Developer
- Beiträge: 2183
- Registriert: Mittwoch 10. Dezember 2003, 07:59
Schau mal ob das dich weiterbringt:
und dass noch (upnp/xml wieder rausnehmen)
Code: Alles auswählen
Index: netfile.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/driver/netfile.cpp,v
retrieving revision 1.28
diff -u -r1.28 netfile.cpp
--- netfile.cpp 5 Jun 2006 23:36:21 -0000 1.28
+++ netfile.cpp 12 Apr 2007 20:59:53 -0000
@@ -56,11 +56,15 @@
| shoutcast example: |
| |
| fd = fopen("icy://find.me:666/funky/station/", "r"); |
+| or |
+| fd = fopen("icy://dXNlcjpwYXNzd29yZA==@find.me:666/station", "r"); |
| |
| This is a low level mechanism that can be used for all |
| shoutcast servers, but it mainly is intended to be used for |
| private radio stations which are not listed in the official |
| shoutcast directory. The stream is opened read-only. |
+| The second format contains a base64 encoded string before '@' |
+| of username:passwort to be sent for basic authentication. |
| |
| file access modes, selectable by the fopen 'access type': |
| |
@@ -94,6 +98,8 @@
\******************************************************************************/
#include "netfile.h"
#include "global.h"
+
+#include "resolv.h"
/*
TODO:
- ICECAST support
@@ -381,9 +387,24 @@
send(url->fd, str, strlen(str), 0);
}
- sprintf(str, "User-Agent: %s\r\n\r\n", "RealPlayer/4.0");
- dprintf(stderr, "> %s", str);
- send(url->fd, str, strlen(str), 0);
+ sprintf(str, "User-Agent: %s\r\n", "RealPlayer/4.0");
+ dprintf(stderr, "> %s", str);
+ send(url->fd, str, strlen(str), 0);
+
+ if (url->logindata[0])
+ {
+ char coded_data[2048];
+ if(b64_ntop((const u_char*)url->logindata, strlen(url->logindata), coded_data, sizeof(coded_data)) < 0)
+ sprintf(str, "Authorization: Basic %s\r\n", url->logindata);
+ else
+ sprintf(str, "Authorization: Basic %s\r\n", coded_data);
+ dprintf(stderr, "> %s", str);
+ send(url->fd, str, strlen(str), 0);
+ }
+
+ sprintf(str, "\r\n"); /* end of headers to send */
+ dprintf(stderr, "> %s", str);
+ send(url->fd, str, strlen(str), 0);
if( (meta_int = parse_response(url, &id3, &tmp)) < 0)
return -1;
@@ -1756,6 +1777,7 @@
/**************************** utility functions ******************************/
void parseURL_url(URL& url) {
+ char buffer[2048];
/* now lets see what we have ... */
@@ -1767,6 +1789,7 @@
strcpy(url.file, url.url);
url.host[0] = 0;
url.port = 0;
+ url.logindata[0] = 0;
}
else
{
@@ -1800,6 +1823,17 @@
ptr = strchr(url.host, '/');
if(ptr) *ptr = 0;
+ if ((ptr = strchr(url.host, '@')))
+ {
+ *ptr = 0;
+ strcpy(url.logindata, url.host);
+ strcpy(buffer, ptr + 1);
+ strcpy(url.host, buffer);
+ }
+ else
+ url.logindata[0] = 0;
+
+
ptr = strrchr(url.host, ':');
if(ptr)
Index: netfile.h
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/driver/netfile.h,v
retrieving revision 1.9
diff -u -r1.9 netfile.h
--- netfile.h 16 May 2005 00:15:18 -0000 1.9
+++ netfile.h 12 Apr 2007 20:59:53 -0000
@@ -102,6 +102,7 @@
char entity[2048]; /* data to send on POST requests */
int fd; /* filedescriptor of the file*/
FILE *stream; /* streamdescriptor */
+ char logindata[2048];/* login data (username:password) */
} URL;
typedef struct
Code: Alles auswählen
Index: Makefile.am
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/Makefile.am,v
retrieving revision 1.33
diff -u -r1.33 Makefile.am
--- Makefile.am 5 Mar 2007 07:03:39 -0000 1.33
+++ Makefile.am 12 Apr 2007 20:55:29 -0000
@@ -10,6 +10,7 @@
@CONFIGFILE_CFLAGS@ \
@NET_CFLAGS@ \
@ZAPIT_CFLAGS@ \
+ @UPNPCLIENT_CFLAGS@ \
@TUXTXT_CFLAGS@
bin_PROGRAMS = neutrino
@@ -49,6 +50,9 @@
@MPEGTOOLS_LIBS@ \
@VORBISIDEC_LIBS@ \
@TUXTXT_LIBS@ \
+ @XMLTREE_LIBS@ \
+ @UPNPCLIENT_LIBS@ \
+ -lresolv \
-ljpeg \
-lpthread \
@XML_LIBS@
-
- Neugieriger
- Beiträge: 11
- Registriert: Donnerstag 31. März 2005, 12:10
Hallo Houdini,
erstmal vielen Dank für Deine Antwort
Ja, das dürfte es auf alle Fälle lösen. Leider hat mich meine Suche nach einer base64 encoding Funktion (mit grep) natürlich nicht auf b64_ntop aus libresolv gestoßen...
so kam es, dass ich gerade eben - leider noch bevor ich Dein Posting hier gesehen habe - selbst noch eine primitve base64_encode Funktion direkt mit eingebaut habe.
Die hätte den winzigen Vorteil, dass sie keine neue Abhängigkeit nachzieht.. andererseits ist in meiner base64_encode-Funktion bestimmt n böser Bug (oder gleich mehrere ).. da mir die Lizenz vom base64-code auf sourceforge etwas komisch vorkam, hab ich es nach der Anleitung auf wikipedia selbst nachprogrammiert... ist hier (mit sky.fm) getestet und funktioniert, aber natürlich ist es sauberer auf schon vorhandenen und relativ bugfreien Code zurückzugreifen.
Trotzdem der Vollständigkeit halber: http://f-seidel.de/linux/downloads/add_ ... y_v2.patch
Viele Grüße,
Frank
erstmal vielen Dank für Deine Antwort
Ja, das dürfte es auf alle Fälle lösen. Leider hat mich meine Suche nach einer base64 encoding Funktion (mit grep) natürlich nicht auf b64_ntop aus libresolv gestoßen...
so kam es, dass ich gerade eben - leider noch bevor ich Dein Posting hier gesehen habe - selbst noch eine primitve base64_encode Funktion direkt mit eingebaut habe.
Die hätte den winzigen Vorteil, dass sie keine neue Abhängigkeit nachzieht.. andererseits ist in meiner base64_encode-Funktion bestimmt n böser Bug (oder gleich mehrere ).. da mir die Lizenz vom base64-code auf sourceforge etwas komisch vorkam, hab ich es nach der Anleitung auf wikipedia selbst nachprogrammiert... ist hier (mit sky.fm) getestet und funktioniert, aber natürlich ist es sauberer auf schon vorhandenen und relativ bugfreien Code zurückzugreifen.
Trotzdem der Vollständigkeit halber: http://f-seidel.de/linux/downloads/add_ ... y_v2.patch
Viele Grüße,
Frank
-
- Neugieriger
- Beiträge: 11
- Registriert: Donnerstag 31. März 2005, 12:10
Wäre die eine oder andere Version es vielleicht wert, dass sie ins cvs aufgenommen werden kann?
Ich könnte das jetzt zwar schon selber machen, bin mir aber nicht völlig sicher, weilche der beiden letzten Versionen die von den meisten bevorzugte sein wird?
Gruß,
Frank
P.S.: Houdini? ist das ok, das hier zu diskutieren oder besser auf der cvs Mailingliste?
Ich könnte das jetzt zwar schon selber machen, bin mir aber nicht völlig sicher, weilche der beiden letzten Versionen die von den meisten bevorzugte sein wird?
Gruß,
Frank
P.S.: Houdini? ist das ok, das hier zu diskutieren oder besser auf der cvs Mailingliste?
-
- Developer
- Beiträge: 2183
- Registriert: Mittwoch 10. Dezember 2003, 07:59
-
- Neugieriger
- Beiträge: 11
- Registriert: Donnerstag 31. März 2005, 12:10
Ok, code ist (mit zwei kleinen Korrekturen) commited
Jetzt fehlt nurnoch eine entsprechende Ergänzung der Audioplayer-Wikipage. Aber damit warte ich mal lieber, bis der Code auch zumindest über ein Snapshot-Image verfügbar ist, bevor es hier im Board noch enttäuschte User-Beschwerden gibt ;-)
Gruß,
Frank
Jetzt fehlt nurnoch eine entsprechende Ergänzung der Audioplayer-Wikipage. Aber damit warte ich mal lieber, bis der Code auch zumindest über ein Snapshot-Image verfügbar ist, bevor es hier im Board noch enttäuschte User-Beschwerden gibt ;-)
Gruß,
Frank