# HG changeset patch # User bertrand # Date 1024813639 0 # Node ID 6e9d7a6b1806728378e7d017ad1fd22071309956 # Parent e2fe4801a98ed0f6b4eedb45bb444944df08698b Added support for URLs that contain an username:password diff -r e2fe4801a98e -r 6e9d7a6b1806 libmpdemux/url.c --- a/libmpdemux/url.c Sun Jun 23 01:30:47 2002 +0000 +++ b/libmpdemux/url.c Sun Jun 23 06:27:19 2002 +0000 @@ -3,8 +3,6 @@ * by Bertrand Baudet * (C) 2001, MPlayer team. * - * TODO: - * Extract the username/password if present */ #include @@ -47,17 +45,55 @@ pos1 = ptr1-url; Curl->protocol = (char*)malloc(pos1+1); 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'; + // 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 && ptr3username[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 - ptr2 = strstr(ptr1+3, ":"); + ptr2 = strstr(ptr1, ":"); // 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( ptr2==NULL ) { // No port is given // Look if a path is given - ptr2 = strstr(ptr1+3, "/"); + ptr2 = strstr(ptr1, "/"); if( ptr2==NULL ) { // No path/filename // So we have an URL like http://www.hostname.com @@ -73,16 +109,16 @@ pos2 = ptr2-url; } // 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 ) { mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed!\n"); return NULL; } - strncpy(Curl->hostname, ptr1+3, pos2-pos1-3); - Curl->hostname[pos2-pos1-3] = '\0'; + strncpy(Curl->hostname, ptr1, pos2-pos1); + Curl->hostname[pos2-pos1] = '\0'; // Look if a path is given - ptr2 = strstr(ptr1+3, "/"); + ptr2 = strstr(ptr1, "/"); if( ptr2!=NULL ) { // A path/filename is given // check if it's not a trailing '/'