+
+ if( *psz_ip )
+ {
+ char psz_fmt[7] = "(|||%u";
+ psz_fmt[1] = psz_fmt[2] = psz_fmt[3] = psz_parser[1];
+
+ if( sscanf( psz_parser, psz_fmt, &i_port ) < 1 )
+ {
+ free( psz_arg );
+ msg_Err( p_access, "cannot parse passive mode response" );
+ return VLC_EGENERIC;
+ }
+ }
+ else
+ {
+ unsigned a1, a2, a3, a4, p1, p2;
+
+ if( ( sscanf( psz_parser, "(%u,%u,%u,%u,%u,%u", &a1, &a2, &a3, &a4,
+ &p1, &p2 ) < 6 ) || ( a1 > 255 ) || ( a2 > 255 )
+ || ( a3 > 255 ) || ( a4 > 255 ) || ( p1 > 255 ) || ( p2 > 255 ) )
+ {
+ free( psz_arg );
+ msg_Err( p_access, "cannot parse passive mode response" );
+ return VLC_EGENERIC;
+ }
+
+ sprintf( psz_ipv4, "%u.%u.%u.%u", a1, a2, a3, a4 );
+ psz_ip = psz_ipv4;
+ i_port = (p1 << 8) | p2;
+ }