mirror of
https://github.com/mpv-player/mpv
synced 2024-12-24 15:52:25 +00:00
Added support for URLs that contain an username:password
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6514 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
98571211e8
commit
d5ae673150
@ -3,8 +3,6 @@
|
|||||||
* by Bertrand Baudet <bertrand_baudet@yahoo.com>
|
* by Bertrand Baudet <bertrand_baudet@yahoo.com>
|
||||||
* (C) 2001, MPlayer team.
|
* (C) 2001, MPlayer team.
|
||||||
*
|
*
|
||||||
* TODO:
|
|
||||||
* Extract the username/password if present
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -47,17 +45,55 @@ url_new(char* url) {
|
|||||||
pos1 = ptr1-url;
|
pos1 = ptr1-url;
|
||||||
Curl->protocol = (char*)malloc(pos1+1);
|
Curl->protocol = (char*)malloc(pos1+1);
|
||||||
strncpy(Curl->protocol, url, pos1);
|
strncpy(Curl->protocol, url, pos1);
|
||||||
|
if( Curl->protocol==NULL ) {
|
||||||
|
mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed!\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
Curl->protocol[pos1] = '\0';
|
Curl->protocol[pos1] = '\0';
|
||||||
|
|
||||||
|
// jump the "://"
|
||||||
|
ptr1 += 3;
|
||||||
|
pos1 += 3;
|
||||||
|
|
||||||
|
// check if a username:password is given
|
||||||
|
ptr2 = strstr(ptr1, "@");
|
||||||
|
if( ptr2!=NULL ) {
|
||||||
|
// We got something, at least a username...
|
||||||
|
int len = ptr2-ptr1;
|
||||||
|
Curl->username = (char*)malloc(len+1);
|
||||||
|
if( Curl->username==NULL ) {
|
||||||
|
mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed!\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
strncpy(Curl->username, ptr1, len);
|
||||||
|
Curl->username[len] = '\0';
|
||||||
|
|
||||||
|
ptr3 = strstr(ptr1, ":");
|
||||||
|
if( ptr3!=NULL && ptr3<ptr2 ) {
|
||||||
|
// We also have a password
|
||||||
|
int len2 = ptr2-ptr3-1;
|
||||||
|
Curl->username[ptr3-ptr1]='\0';
|
||||||
|
Curl->password = (char*)malloc(len2+1);
|
||||||
|
if( Curl->password==NULL ) {
|
||||||
|
mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed!\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
strncpy( Curl->password, ptr3+1, len2);
|
||||||
|
Curl->password[len2]='\0';
|
||||||
|
}
|
||||||
|
ptr1 = ptr2+1;
|
||||||
|
pos1 = ptr1-url;
|
||||||
|
}
|
||||||
|
|
||||||
// look if the port is given
|
// look if the port is given
|
||||||
ptr2 = strstr(ptr1+3, ":");
|
ptr2 = strstr(ptr1, ":");
|
||||||
// If the : is after the first / it isn't the port
|
// If the : is after the first / it isn't the port
|
||||||
ptr3 = strstr(ptr1+3, "/");
|
ptr3 = strstr(ptr1, "/");
|
||||||
if(ptr3 && ptr3 - ptr2 < 0) ptr2 = NULL;
|
if(ptr3 && ptr3 - ptr2 < 0) ptr2 = NULL;
|
||||||
if( ptr2==NULL ) {
|
if( ptr2==NULL ) {
|
||||||
// No port is given
|
// No port is given
|
||||||
// Look if a path is given
|
// Look if a path is given
|
||||||
ptr2 = strstr(ptr1+3, "/");
|
ptr2 = strstr(ptr1, "/");
|
||||||
if( ptr2==NULL ) {
|
if( ptr2==NULL ) {
|
||||||
// No path/filename
|
// No path/filename
|
||||||
// So we have an URL like http://www.hostname.com
|
// So we have an URL like http://www.hostname.com
|
||||||
@ -73,16 +109,16 @@ url_new(char* url) {
|
|||||||
pos2 = ptr2-url;
|
pos2 = ptr2-url;
|
||||||
}
|
}
|
||||||
// copy the hostname in the URL container
|
// copy the hostname in the URL container
|
||||||
Curl->hostname = (char*)malloc(pos2-pos1-3+1);
|
Curl->hostname = (char*)malloc(pos2-pos1+1);
|
||||||
if( Curl->hostname==NULL ) {
|
if( Curl->hostname==NULL ) {
|
||||||
mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed!\n");
|
mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed!\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
strncpy(Curl->hostname, ptr1+3, pos2-pos1-3);
|
strncpy(Curl->hostname, ptr1, pos2-pos1);
|
||||||
Curl->hostname[pos2-pos1-3] = '\0';
|
Curl->hostname[pos2-pos1] = '\0';
|
||||||
|
|
||||||
// Look if a path is given
|
// Look if a path is given
|
||||||
ptr2 = strstr(ptr1+3, "/");
|
ptr2 = strstr(ptr1, "/");
|
||||||
if( ptr2!=NULL ) {
|
if( ptr2!=NULL ) {
|
||||||
// A path/filename is given
|
// A path/filename is given
|
||||||
// check if it's not a trailing '/'
|
// check if it's not a trailing '/'
|
||||||
|
Loading…
Reference in New Issue
Block a user