mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
Networking support under MinGW.
Patch by flo/yepyep <flodt8@yahoo.de>. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10282 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
5ccc705d9a
commit
6ac4f22567
@ -28,11 +28,17 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <libmpdemux/stream.h>
|
#include <libmpdemux/stream.h>
|
||||||
#include <mp_msg.h>
|
#include <mp_msg.h>
|
||||||
|
27
configure
vendored
27
configure
vendored
@ -155,6 +155,7 @@ Optional features:
|
|||||||
--disable-edl disable EDL (edit decision list) support [enable]
|
--disable-edl disable EDL (edit decision list) support [enable]
|
||||||
--disable-rtc disable RTC (/dev/rtc) on Linux [autodetect]
|
--disable-rtc disable RTC (/dev/rtc) on Linux [autodetect]
|
||||||
--disable-network disable network support (for: http/mms/rtp) [enable]
|
--disable-network disable network support (for: http/mms/rtp) [enable]
|
||||||
|
--enable-winsock2 enable winsock2 usage [autodetect]
|
||||||
--enable-smb enable Samba (SMB) input support [autodetect]
|
--enable-smb enable Samba (SMB) input support [autodetect]
|
||||||
--enable-live enable LIVE.COM Streaming Media support [disable]
|
--enable-live enable LIVE.COM Streaming Media support [disable]
|
||||||
--enable-dvdnav enable dvdnav support [disable]
|
--enable-dvdnav enable dvdnav support [disable]
|
||||||
@ -1058,6 +1059,7 @@ _tv_v4l=auto
|
|||||||
_tv_bsdbt848=auto
|
_tv_bsdbt848=auto
|
||||||
_edl=yes
|
_edl=yes
|
||||||
_network=yes
|
_network=yes
|
||||||
|
_winsock2=auto
|
||||||
_smbsupport=auto
|
_smbsupport=auto
|
||||||
_vidix=auto
|
_vidix=auto
|
||||||
_joystick=no
|
_joystick=no
|
||||||
@ -1233,6 +1235,8 @@ for ac_option do
|
|||||||
--disable-fastmemcpy) _fastmemcpy=no ;;
|
--disable-fastmemcpy) _fastmemcpy=no ;;
|
||||||
--enable-network) _network=yes ;;
|
--enable-network) _network=yes ;;
|
||||||
--disable-network) _network=no ;;
|
--disable-network) _network=no ;;
|
||||||
|
--enable-winsock2) _winsock2=yes ;;
|
||||||
|
--disable-winsock2) _winsock2=no ;;
|
||||||
--enable-smb) _smbsupport=yes ;;
|
--enable-smb) _smbsupport=yes ;;
|
||||||
--disable-smb) _smbsupport=no ;;
|
--disable-smb) _smbsupport=no ;;
|
||||||
--enable-vidix) _vidix=yes ;;
|
--enable-vidix) _vidix=yes ;;
|
||||||
@ -1807,6 +1811,14 @@ EOF
|
|||||||
cc_check -lsocket && _ld_sock="-lsocket"
|
cc_check -lsocket && _ld_sock="-lsocket"
|
||||||
cc_check -lnsl && _ld_sock="-lnsl"
|
cc_check -lnsl && _ld_sock="-lnsl"
|
||||||
cc_check -lsocket -lnsl && _ld_sock="-lsocket -lnsl"
|
cc_check -lsocket -lnsl && _ld_sock="-lsocket -lnsl"
|
||||||
|
if test $_winsock2 = auto && not cygwin ; then
|
||||||
|
_winsock2=no
|
||||||
|
cat > $TMPC << EOF
|
||||||
|
#include <winsock2.h>
|
||||||
|
int main(void) { (void) gethostbyname(0); return 0; }
|
||||||
|
EOF
|
||||||
|
cc_check -lws2_32 && _ld_sock="-lws2_32" && _winsock2=yes
|
||||||
|
fi
|
||||||
if test "$_ld_sock" ; then
|
if test "$_ld_sock" ; then
|
||||||
echores "yes (using $_ld_sock)"
|
echores "yes (using $_ld_sock)"
|
||||||
else
|
else
|
||||||
@ -1814,6 +1826,14 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test $_winsock2 = yes ; then
|
||||||
|
_ld_sock="-lws2_32"
|
||||||
|
_def_winsock2='#define HAVE_WINSOCK2 1'
|
||||||
|
else
|
||||||
|
_def_winsock2='#undef HAVE_WINSOCK2'
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
_use_aton=no
|
_use_aton=no
|
||||||
echocheck "inet_pton()"
|
echocheck "inet_pton()"
|
||||||
cat > $TMPC << EOF
|
cat > $TMPC << EOF
|
||||||
@ -1822,7 +1842,9 @@ cat > $TMPC << EOF
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
int main(void) { (void) inet_pton(0, 0, 0); return 0; }
|
int main(void) { (void) inet_pton(0, 0, 0); return 0; }
|
||||||
EOF
|
EOF
|
||||||
if cc_check $_ld_sock ; then
|
if test "$_winsock2" = yes ; then
|
||||||
|
echores "not needed (using winsock2 functions)"
|
||||||
|
elif cc_check $_ld_sock ; then
|
||||||
# NOTE: Linux has libresolv but does not need it
|
# NOTE: Linux has libresolv but does not need it
|
||||||
:
|
:
|
||||||
echores "yes (using $_ld_sock)"
|
echores "yes (using $_ld_sock)"
|
||||||
@ -5791,6 +5813,9 @@ $_def_faad_version
|
|||||||
/* enable network */
|
/* enable network */
|
||||||
$_def_network
|
$_def_network
|
||||||
|
|
||||||
|
/* enable winsock2 instead of Unix functions*/
|
||||||
|
$_def_winsock2
|
||||||
|
|
||||||
/* define this to use inet_aton() instead of inet_pton() */
|
/* define this to use inet_aton() instead of inet_pton() */
|
||||||
$_def_use_aton
|
$_def_use_aton
|
||||||
|
|
||||||
|
@ -16,6 +16,12 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "url.h"
|
#include "url.h"
|
||||||
#include "asf.h"
|
#include "asf.h"
|
||||||
|
|
||||||
@ -433,7 +439,7 @@ int asf_mmst_streaming_start(stream_t *stream)
|
|||||||
int s = stream->fd;
|
int s = stream->fd;
|
||||||
|
|
||||||
if( s>0 ) {
|
if( s>0 ) {
|
||||||
close( stream->fd );
|
closesocket( stream->fd );
|
||||||
stream->fd = -1;
|
stream->fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,12 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "url.h"
|
#include "url.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
#include "asf.h"
|
#include "asf.h"
|
||||||
@ -643,7 +649,7 @@ asf_http_streaming_start( stream_t *stream, int *demuxer_type ) {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
done = 1;
|
done = 1;
|
||||||
if( fd>0 ) close( fd );
|
if( fd>0 ) closesocket( fd );
|
||||||
|
|
||||||
if( !strcasecmp( url->protocol, "http_proxy" ) ) {
|
if( !strcasecmp( url->protocol, "http_proxy" ) ) {
|
||||||
if( url->port==0 ) url->port = 8080;
|
if( url->port==0 ) url->port = 8080;
|
||||||
@ -729,7 +735,7 @@ asf_http_streaming_start( stream_t *stream, int *demuxer_type ) {
|
|||||||
case ASF_Unknown_e:
|
case ASF_Unknown_e:
|
||||||
default:
|
default:
|
||||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"Unknown ASF streaming type\n");
|
mp_msg(MSGT_NETWORK,MSGL_ERR,"Unknown ASF streaming type\n");
|
||||||
close(fd);
|
closesocket(fd);
|
||||||
http_free( http_hdr );
|
http_free( http_hdr );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,13 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include "demuxer.h"
|
#include "demuxer.h"
|
||||||
#include "../m_config.h"
|
#include "../m_config.h"
|
||||||
@ -194,6 +201,10 @@ connect2Server_with_af(char *host, int port, int af) {
|
|||||||
struct hostent *hp=NULL;
|
struct hostent *hp=NULL;
|
||||||
char buf[255];
|
char buf[255];
|
||||||
|
|
||||||
|
#ifdef HAVE_WINSOCK2
|
||||||
|
u_long val;
|
||||||
|
#endif
|
||||||
|
|
||||||
socket_server_fd = socket(af, SOCK_STREAM, 0);
|
socket_server_fd = socket(af, SOCK_STREAM, 0);
|
||||||
|
|
||||||
|
|
||||||
@ -215,10 +226,14 @@ connect2Server_with_af(char *host, int port, int af) {
|
|||||||
|
|
||||||
bzero(&server_address, sizeof(server_address));
|
bzero(&server_address, sizeof(server_address));
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
#ifdef USE_ATON
|
#ifdef USE_ATON
|
||||||
if (inet_aton(host, our_s_addr)!=1)
|
if (inet_aton(host, our_s_addr)!=1)
|
||||||
#else
|
#else
|
||||||
if (inet_pton(af, host, our_s_addr)!=1)
|
if (inet_pton(af, host, our_s_addr)!=1)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
if ( inet_addr(host)==INADDR_NONE )
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
mp_msg(MSGT_NETWORK,MSGL_STATUS,"Resolving %s for %s...\n", host, af2String(af));
|
mp_msg(MSGT_NETWORK,MSGL_STATUS,"Resolving %s for %s...\n", host, af2String(af));
|
||||||
@ -235,6 +250,12 @@ connect2Server_with_af(char *host, int port, int af) {
|
|||||||
|
|
||||||
memcpy( our_s_addr, (void*)hp->h_addr, hp->h_length );
|
memcpy( our_s_addr, (void*)hp->h_addr, hp->h_length );
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_WINSOCK2
|
||||||
|
else {
|
||||||
|
unsigned long addr = inet_addr(host);
|
||||||
|
memcpy( our_s_addr, (void*)&addr, sizeof(addr) );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (af) {
|
switch (af) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
@ -254,7 +275,7 @@ connect2Server_with_af(char *host, int port, int af) {
|
|||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_ATON
|
#if defined(USE_ATON) || defined(HAVE_WINSOCK2)
|
||||||
strncpy( buf, inet_ntoa( *((struct in_addr*)our_s_addr) ), 255);
|
strncpy( buf, inet_ntoa( *((struct in_addr*)our_s_addr) ), 255);
|
||||||
#else
|
#else
|
||||||
inet_ntop(af, our_s_addr, buf, 255);
|
inet_ntop(af, our_s_addr, buf, 255);
|
||||||
@ -262,11 +283,20 @@ connect2Server_with_af(char *host, int port, int af) {
|
|||||||
mp_msg(MSGT_NETWORK,MSGL_STATUS,"Connecting to server %s[%s]:%d ...\n", host, buf , port );
|
mp_msg(MSGT_NETWORK,MSGL_STATUS,"Connecting to server %s[%s]:%d ...\n", host, buf , port );
|
||||||
|
|
||||||
// Turn the socket as non blocking so we can timeout on the connection
|
// Turn the socket as non blocking so we can timeout on the connection
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) | O_NONBLOCK );
|
fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) | O_NONBLOCK );
|
||||||
|
#else
|
||||||
|
val = 1;
|
||||||
|
ioctlsocket( socket_server_fd, FIONBIO, &val );
|
||||||
|
#endif
|
||||||
if( connect( socket_server_fd, (struct sockaddr*)&server_address, server_address_size )==-1 ) {
|
if( connect( socket_server_fd, (struct sockaddr*)&server_address, server_address_size )==-1 ) {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
if( errno!=EINPROGRESS ) {
|
if( errno!=EINPROGRESS ) {
|
||||||
|
#else
|
||||||
|
if( (WSAGetLastError() != WSAEINPROGRESS) && (WSAGetLastError() != WSAEWOULDBLOCK) ) {
|
||||||
|
#endif
|
||||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server with %s\n", af2String(af));
|
mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server with %s\n", af2String(af));
|
||||||
close(socket_server_fd);
|
closesocket(socket_server_fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,7 +323,12 @@ connect2Server_with_af(char *host, int port, int af) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Turn back the socket as blocking
|
// Turn back the socket as blocking
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) & ~O_NONBLOCK );
|
fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) & ~O_NONBLOCK );
|
||||||
|
#else
|
||||||
|
val = 0;
|
||||||
|
ioctlsocket( socket_server_fd, FIONBIO, &val );
|
||||||
|
#endif
|
||||||
// Check if there were any error
|
// Check if there were any error
|
||||||
err_len = sizeof(int);
|
err_len = sizeof(int);
|
||||||
ret = getsockopt(socket_server_fd,SOL_SOCKET,SO_ERROR,&err,&err_len);
|
ret = getsockopt(socket_server_fd,SOL_SOCKET,SO_ERROR,&err,&err_len);
|
||||||
@ -655,7 +690,7 @@ extension=NULL;
|
|||||||
|
|
||||||
http_hdr = http_read_response( fd );
|
http_hdr = http_read_response( fd );
|
||||||
if( http_hdr==NULL ) {
|
if( http_hdr==NULL ) {
|
||||||
close( fd );
|
closesocket( fd );
|
||||||
http_free( http_hdr );
|
http_free( http_hdr );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -734,7 +769,7 @@ extension=NULL;
|
|||||||
// TODO: RFC 2616, recommand to detect infinite redirection loops
|
// TODO: RFC 2616, recommand to detect infinite redirection loops
|
||||||
next_url = http_get_field( http_hdr, "Location" );
|
next_url = http_get_field( http_hdr, "Location" );
|
||||||
if( next_url!=NULL ) {
|
if( next_url!=NULL ) {
|
||||||
close( fd );
|
closesocket( fd );
|
||||||
url_free( url );
|
url_free( url );
|
||||||
streaming_ctrl->url = url = url_new( next_url );
|
streaming_ctrl->url = url = url_new( next_url );
|
||||||
http_free( http_hdr );
|
http_free( http_hdr );
|
||||||
@ -840,7 +875,7 @@ nop_streaming_start( stream_t *stream ) {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase );
|
mp_msg(MSGT_NETWORK,MSGL_ERR,"Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase );
|
||||||
close( fd );
|
closesocket( fd );
|
||||||
fd = -1;
|
fd = -1;
|
||||||
}
|
}
|
||||||
stream->fd = fd;
|
stream->fd = fd;
|
||||||
@ -938,7 +973,7 @@ realrtsp_streaming_start( stream_t *stream ) {
|
|||||||
if ( redirected == 1 ) {
|
if ( redirected == 1 ) {
|
||||||
url_free(stream->streaming_ctrl->url);
|
url_free(stream->streaming_ctrl->url);
|
||||||
stream->streaming_ctrl->url = url_new(mrl);
|
stream->streaming_ctrl->url = url_new(mrl);
|
||||||
close(fd);
|
closesocket(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(mrl);
|
free(mrl);
|
||||||
@ -988,19 +1023,28 @@ rtp_open_socket( URL_t *url ) {
|
|||||||
}
|
}
|
||||||
memcpy( (void*)&server_address.sin_addr.s_addr, (void*)hp->h_addr, hp->h_length );
|
memcpy( (void*)&server_address.sin_addr.s_addr, (void*)hp->h_addr, hp->h_length );
|
||||||
} else {
|
} else {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
#ifdef USE_ATON
|
#ifdef USE_ATON
|
||||||
inet_aton(url->hostname, &server_address.sin_addr);
|
inet_aton(url->hostname, &server_address.sin_addr);
|
||||||
#else
|
#else
|
||||||
inet_pton(AF_INET, url->hostname, &server_address.sin_addr);
|
inet_pton(AF_INET, url->hostname, &server_address.sin_addr);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
unsigned int addr = inet_addr(url->hostname);
|
||||||
|
memcpy( (void*)&server_address.sin_addr, (void*)&addr, sizeof(addr) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
server_address.sin_family=AF_INET;
|
server_address.sin_family=AF_INET;
|
||||||
server_address.sin_port=htons(url->port);
|
server_address.sin_port=htons(url->port);
|
||||||
|
|
||||||
if( bind( socket_server_fd, (struct sockaddr*)&server_address, sizeof(server_address) )==-1 ) {
|
if( bind( socket_server_fd, (struct sockaddr*)&server_address, sizeof(server_address) )==-1 ) {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
if( errno!=EINPROGRESS ) {
|
if( errno!=EINPROGRESS ) {
|
||||||
|
#else
|
||||||
|
if( WSAGetLastError() != WSAEINPROGRESS ) {
|
||||||
|
#endif
|
||||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server\n");
|
mp_msg(MSGT_NETWORK,MSGL_ERR,"Failed to connect to server\n");
|
||||||
close(socket_server_fd);
|
closesocket(socket_server_fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1032,7 +1076,7 @@ rtp_open_socket( URL_t *url ) {
|
|||||||
if( err ) {
|
if( err ) {
|
||||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"Timeout! No data from host %s\n", url->hostname );
|
mp_msg(MSGT_NETWORK,MSGL_ERR,"Timeout! No data from host %s\n", url->hostname );
|
||||||
mp_msg(MSGT_NETWORK,MSGL_DBG2,"Socket error: %d\n", err );
|
mp_msg(MSGT_NETWORK,MSGL_DBG2,"Socket error: %d\n", err );
|
||||||
close(socket_server_fd);
|
closesocket(socket_server_fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1091,7 +1135,7 @@ streaming_start(stream_t *stream, int *demuxer_type, URL_t *url) {
|
|||||||
// For RTP streams, we usually don't know the stream type until we open it.
|
// For RTP streams, we usually don't know the stream type until we open it.
|
||||||
if( !strcasecmp( stream->streaming_ctrl->url->protocol, "rtp")) {
|
if( !strcasecmp( stream->streaming_ctrl->url->protocol, "rtp")) {
|
||||||
if(stream->fd >= 0) {
|
if(stream->fd >= 0) {
|
||||||
if(close(stream->fd) < 0)
|
if(closesocket(stream->fd) < 0)
|
||||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"streaming_start : Closing socket %d failed %s\n",stream->fd,strerror(errno));
|
mp_msg(MSGT_NETWORK,MSGL_ERR,"streaming_start : Closing socket %d failed %s\n",stream->fd,strerror(errno));
|
||||||
}
|
}
|
||||||
stream->fd = -1;
|
stream->fd = -1;
|
||||||
|
@ -8,12 +8,16 @@
|
|||||||
#define __NETWORK_H
|
#define __NETWORK_H
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <netdb.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "url.h"
|
#include "url.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
|
@ -26,9 +26,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sys/socket.h>
|
|
||||||
//#include <netinet/in.h>
|
|
||||||
//#include <netdb.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -37,6 +34,16 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
|
#include <sys/socket.h>
|
||||||
|
//#include <netinet/in.h>
|
||||||
|
//#include <netdb.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "pnm.h"
|
#include "pnm.h"
|
||||||
//#include "libreal/rmff.h"
|
//#include "libreal/rmff.h"
|
||||||
|
|
||||||
@ -207,7 +214,11 @@ static int rm_write(int s, const char *buf, int len) {
|
|||||||
if (n > 0)
|
if (n > 0)
|
||||||
total += n;
|
total += n;
|
||||||
else if (n < 0) {
|
else if (n < 0) {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
if ((timeout>0) && ((errno == EAGAIN) || (errno == EINPROGRESS))) {
|
if ((timeout>0) && ((errno == EAGAIN) || (errno == EINPROGRESS))) {
|
||||||
|
#else
|
||||||
|
if ((timeout>0) && ((errno == EAGAIN) || (WSAGetLastError() == WSAEINPROGRESS))) {
|
||||||
|
#endif
|
||||||
sleep (1); timeout--;
|
sleep (1); timeout--;
|
||||||
} else
|
} else
|
||||||
return -1;
|
return -1;
|
||||||
@ -810,7 +821,7 @@ int pnm_peek_header (pnm_t *this, char *data) {
|
|||||||
|
|
||||||
void pnm_close(pnm_t *p) {
|
void pnm_close(pnm_t *p) {
|
||||||
|
|
||||||
if (p->s >= 0) close(p->s);
|
if (p->s >= 0) closesocket(p->s);
|
||||||
free(p->path);
|
free(p->path);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -29,9 +29,15 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -119,9 +125,13 @@ static int host_connect_attempt(struct in_addr ia, int port) {
|
|||||||
sin.sin_port = htons(port);
|
sin.sin_port = htons(port);
|
||||||
|
|
||||||
if (connect(s, (struct sockaddr *)&sin, sizeof(sin))==-1
|
if (connect(s, (struct sockaddr *)&sin, sizeof(sin))==-1
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
&& errno != EINPROGRESS) {
|
&& errno != EINPROGRESS) {
|
||||||
|
#else
|
||||||
|
&& WSAGetLastError() == WSAEINPROGRESS) {
|
||||||
|
#endif
|
||||||
printf ("rtsp: connect(): %s\n", strerror(errno));
|
printf ("rtsp: connect(): %s\n", strerror(errno));
|
||||||
close(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +173,11 @@ static int write_stream(int s, const char *buf, int len) {
|
|||||||
if (n > 0)
|
if (n > 0)
|
||||||
total += n;
|
total += n;
|
||||||
else if (n < 0) {
|
else if (n < 0) {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
if ((timeout>0) && ((errno == EAGAIN) || (errno == EINPROGRESS))) {
|
if ((timeout>0) && ((errno == EAGAIN) || (errno == EINPROGRESS))) {
|
||||||
|
#else
|
||||||
|
if ((timeout>0) && ((errno == EAGAIN) || (WSAGetLastError() == WSAEINPROGRESS))) {
|
||||||
|
#endif
|
||||||
sleep (1); timeout--;
|
sleep (1); timeout--;
|
||||||
} else
|
} else
|
||||||
return -1;
|
return -1;
|
||||||
@ -641,7 +655,7 @@ rtsp_t *rtsp_connect(int fd, char* mrl, char *path, char *host, int port, char *
|
|||||||
|
|
||||||
void rtsp_close(rtsp_t *s) {
|
void rtsp_close(rtsp_t *s) {
|
||||||
|
|
||||||
if (s->server_state) close(s->s); /* TODO: send a TEAROFF */
|
if (s->server_state) closesocket(s->s); /* TODO: send a TEAROFF */
|
||||||
if (s->path) free(s->path);
|
if (s->path) free(s->path);
|
||||||
if (s->host) free(s->host);
|
if (s->host) free(s->host);
|
||||||
if (s->mrl) free(s->mrl);
|
if (s->mrl) free(s->mrl);
|
||||||
|
@ -26,9 +26,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -2,12 +2,18 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#include <netinet/in.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* MPEG-2 TS RTP stack */
|
/* MPEG-2 TS RTP stack */
|
||||||
|
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
#ifndef _RTP_H
|
#ifndef _RTP_H
|
||||||
#define _RTP_H
|
#define _RTP_H
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
struct rtpbits {
|
struct rtpbits {
|
||||||
unsigned int v:2; /* version: 2 */
|
unsigned int v:2; /* version: 2 */
|
||||||
|
@ -14,6 +14,13 @@
|
|||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "mp_msg.h"
|
#include "mp_msg.h"
|
||||||
#include "help_mp.h"
|
#include "help_mp.h"
|
||||||
#include "../osdep/shmem.h"
|
#include "../osdep/shmem.h"
|
||||||
@ -376,6 +383,14 @@ stream_t* new_stream(int fd,int type){
|
|||||||
stream_t *s=malloc(sizeof(stream_t));
|
stream_t *s=malloc(sizeof(stream_t));
|
||||||
if(s==NULL) return NULL;
|
if(s==NULL) return NULL;
|
||||||
memset(s,0,sizeof(stream_t));
|
memset(s,0,sizeof(stream_t));
|
||||||
|
|
||||||
|
#ifdef HAVE_WINSOCK2
|
||||||
|
{
|
||||||
|
WSADATA wsdata;
|
||||||
|
int temp = WSAStartup(0x0202, &wsdata); // there might be a better place for this (-> later)
|
||||||
|
mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 init: %i\n", temp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
s->fd=fd;
|
s->fd=fd;
|
||||||
s->type=type;
|
s->type=type;
|
||||||
@ -414,7 +429,11 @@ void free_stream(stream_t *s){
|
|||||||
default:
|
default:
|
||||||
if(s->close) s->close(s);
|
if(s->close) s->close(s);
|
||||||
}
|
}
|
||||||
if(s->fd>0) close(s->fd);
|
if(s->fd>0) closesocket(s->fd);
|
||||||
|
#ifdef HAVE_WINSOCK2
|
||||||
|
mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 uninit\n");
|
||||||
|
WSACleanup(); // there might be a better place for this (-> later)
|
||||||
|
#endif
|
||||||
// Disabled atm, i don't like that. s->priv can be anything after all
|
// Disabled atm, i don't like that. s->priv can be anything after all
|
||||||
// streams should destroy their priv on close
|
// streams should destroy their priv on close
|
||||||
//if(s->priv) free(s->priv);
|
//if(s->priv) free(s->priv);
|
||||||
|
@ -48,9 +48,14 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "mp_msg.h"
|
#include "mp_msg.h"
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
@ -89,6 +94,7 @@ static struct m_struct_st stream_opts = {
|
|||||||
//// When the cache is running we need a lock as
|
//// When the cache is running we need a lock as
|
||||||
//// fill_buffer is called from another proccess
|
//// fill_buffer is called from another proccess
|
||||||
static int lock_fd(int fd) {
|
static int lock_fd(int fd) {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
struct flock lock;
|
struct flock lock;
|
||||||
|
|
||||||
memset(&lock,0,sizeof(struct flock));
|
memset(&lock,0,sizeof(struct flock));
|
||||||
@ -104,10 +110,14 @@ static int lock_fd(int fd) {
|
|||||||
}
|
}
|
||||||
} while(0);
|
} while(0);
|
||||||
mp_msg(MSGT_STREAM,MSGL_DBG2, "Locked (%d)\n",getpid());
|
mp_msg(MSGT_STREAM,MSGL_DBG2, "Locked (%d)\n",getpid());
|
||||||
|
#else
|
||||||
|
printf("FIXME? should lock here\n");
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unlock_fd(int fd) {
|
static int unlock_fd(int fd) {
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
struct flock lock;
|
struct flock lock;
|
||||||
|
|
||||||
memset(&lock,0,sizeof(struct flock));
|
memset(&lock,0,sizeof(struct flock));
|
||||||
@ -119,6 +129,9 @@ static int unlock_fd(int fd) {
|
|||||||
strerror(errno));
|
strerror(errno));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
printf("FIXME? should unlock here\n");
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,7 +293,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
|
|||||||
return STREAM_OK;
|
return STREAM_OK;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
close(f);
|
closesocket(f);
|
||||||
m_struct_free(&stream_opts,opts);
|
m_struct_free(&stream_opts,opts);
|
||||||
return STREAM_ERROR;
|
return STREAM_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -19,17 +19,23 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <netdb.h>
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <netinet/in.h>
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WINSOCK2
|
||||||
|
#define closesocket close
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "video_out.h"
|
#include "video_out.h"
|
||||||
#include "video_out_internal.h"
|
#include "video_out_internal.h"
|
||||||
#include "../mp_msg.h"
|
#include "../mp_msg.h"
|
||||||
@ -168,7 +174,7 @@ static int udp_init(bl_host_t *h) {
|
|||||||
if (connect(h->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
if (connect(h->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
mp_msg(MSGT_VO, MSGL_ERR, "couldn't connect socket for %s\n",
|
mp_msg(MSGT_VO, MSGL_ERR, "couldn't connect socket for %s\n",
|
||||||
h->name);
|
h->name);
|
||||||
close(h->fd);
|
closesocket(h->fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -180,7 +186,7 @@ static void udp_send(bl_host_t *h) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void udp_close(bl_host_t *h) {
|
static void udp_close(bl_host_t *h) {
|
||||||
close(h->fd);
|
closesocket(h->fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NO_BLS 2
|
#define NO_BLS 2
|
||||||
|
Loading…
Reference in New Issue
Block a user