Mercurial > mplayer.hg
changeset 7630:4c51ce16c4a2
smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
TODO: add libsmb* detection and #define LIBSMBCLIENT to ./configure !
author | arpi |
---|---|
date | Sun, 06 Oct 2002 18:03:12 +0000 |
parents | 9068ed109341 |
children | 04a6df4fb976 |
files | help/help_mp-en.h libmpdemux/open.c libmpdemux/stream.c libmpdemux/stream.h |
diffstat | 4 files changed, 101 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/help/help_mp-en.h Sun Oct 06 17:50:37 2002 +0000 +++ b/help/help_mp-en.h Sun Oct 06 18:03:12 2002 +0000 @@ -165,6 +165,10 @@ #define MSGTR_ConnToServer "Connected to server: %s\n" #define MSGTR_FileNotFound "File not found: '%s'\n" +#define MSGTR_SMBInitError "Cannot init the libsmbclient library: %d\n" +#define MSGTR_SMBFileNotFound "Could not open from lan: '%s'\n" +#define MSGTR_SMBNotCompiled "MPlayer was not compiled with SMB reading support\n" + #define MSGTR_CantOpenDVD "Couldn't open DVD device: %s\n" #define MSGTR_DVDwait "Reading disc structure, please wait...\n" #define MSGTR_DVDnumTitles "There are %d titles on this DVD.\n"
--- a/libmpdemux/open.c Sun Oct 06 17:50:37 2002 +0000 +++ b/libmpdemux/open.c Sun Oct 06 18:03:12 2002 +0000 @@ -79,6 +79,44 @@ #endif #endif +// Define function about auth the libsmbclient library +// FIXME: I really do not not is this function is properly working + +#ifdef LIBSMBCLIENT + +#include "libsmbclient.h" + +static char smb_password[15]; +static char smb_username[15]; + +static void smb_auth_fn(const char *server, const char *share, + char *workgroup, int wgmaxlen, char *username, int unmaxlen, + char *password, int pwmaxlen) +{ + char temp[128]; + + strcpy(temp, "LAN"); + if (temp[strlen(temp) - 1] == 0x0a) + temp[strlen(temp) - 1] = 0x00; + + if (temp[0]) strncpy(workgroup, temp, wgmaxlen - 1); + + strcpy(temp, smb_username); + if (temp[strlen(temp) - 1] == 0x0a) + temp[strlen(temp) - 1] = 0x00; + + if (temp[0]) strncpy(username, temp, unmaxlen - 1); + + strcpy(temp, smb_password); + if (temp[strlen(temp) - 1] == 0x0a) + temp[strlen(temp) - 1] = 0x00; + + if (temp[0]) strncpy(password, temp, pwmaxlen - 1); +} + + +#endif + // Open a new stream (stdin/file/vcd/url) stream_t* open_stream(char* filename,int vcd_track,int* file_format){ @@ -409,6 +447,43 @@ #ifdef STREAMING url = url_new(filename); if(url) { + if (strcmp(url->protocol, "smb")==0){ +#ifdef LIBSMBCLIENT + + // we need init of libsmbclient + int err; + + // FIXME: HACK: make the username/password global varaibles + // so the auth_fn function should grab it ... + // i cannot thing other way... + err = smbc_init(smb_auth_fn, 10); /* Initialize things */ + // libsmbclient using + if (err < 0) { + mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_SMBInitError,err); + return NULL; + } + f=smbc_open(filename, O_RDONLY, 0666); + + // cannot open the file, outputs that + // MSGTR_FileNotFound -> MSGTR_SMBFileNotFound + if(f<0){ + mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_SMBFileNotFound,filename); + return NULL; + } + len=smbc_lseek(f,0,SEEK_END); + smbc_lseek(f,0,SEEK_SET); + // FIXME: I really wonder is such situation -> but who cares ;) +// if (len == -1) +// return new_stream(f,STREAMTYPE_STREAM); // open as stream + url_free(url); + stream=new_stream(f,STREAMTYPE_SMB); + stream->end_pos=len; + return stream; +#else + mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_SMBNotCompiled,filename); + return NULL; +#endif + } stream=new_stream(f,STREAMTYPE_STREAM); if( streaming_start( stream, file_format, url )<0){ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_UnableOpenURL, filename);
--- a/libmpdemux/stream.c Sun Oct 06 17:50:37 2002 +0000 +++ b/libmpdemux/stream.c Sun Oct 06 18:03:12 2002 +0000 @@ -44,12 +44,21 @@ void close_cdda(stream_t* s); #endif +#ifdef LIBSMBCLIENT +#include "libsmbclient.h" +#endif + //=================== STREAMER ========================= int stream_fill_buffer(stream_t *s){ int len; if(s->eof){ s->buf_pos=s->buf_len=0; return 0; } switch(s->type){ +#ifdef LIBSMBCLIENT + case STREAMTYPE_SMB: + len=smbc_read(s->fd,s->buffer,STREAM_BUFFER_SIZE); + break; +#endif case STREAMTYPE_FILE: case STREAMTYPE_STREAM: case STREAMTYPE_PLAYLIST: @@ -110,6 +119,7 @@ switch(s->type){ case STREAMTYPE_FILE: + case STREAMTYPE_SMB: case STREAMTYPE_STREAM: #ifdef _LARGEFILE_SOURCE newpos=pos&(~((long long)STREAM_BUFFER_SIZE-1));break; @@ -140,6 +150,12 @@ s->pos=newpos; // real seek if(lseek(s->fd,s->pos,SEEK_SET)<0) s->eof=1; break; +#ifdef LIBSMBCLIENT + case STREAMTYPE_SMB: + s->pos=newpos; // real seek + if(smbc_lseek(s->fd,s->pos,SEEK_SET)<0) s->eof=1; + break; +#endif #ifdef HAVE_VCD case STREAMTYPE_VCD: s->pos=newpos; // real seek @@ -267,6 +283,11 @@ } if(s->fd>0) close(s->fd); switch(s->type) { +#ifdef LIBSMBCLIENT + case STREAMTYPE_SMB: + smbc_close(s->fd); + break; +#endif #ifdef HAVE_CDDA case STREAMTYPE_CDDA: close_cdda(s);
--- a/libmpdemux/stream.h Sun Oct 06 17:50:37 2002 +0000 +++ b/libmpdemux/stream.h Sun Oct 06 18:03:12 2002 +0000 @@ -16,6 +16,7 @@ #define STREAMTYPE_DS 8 // read from a demuxer stream #define STREAMTYPE_DVDNAV 9 // we cannot safely "seek" in this... #define STREAMTYPE_CDDA 10 // raw audio CD reader +#define STREAMTYPE_SMB 11 // smb:// url, using libsmbclient (samba) #define STREAM_BUFFER_SIZE 2048