[Mplayer-cvslog] CVS: main/libmpdemux open.c,1.60,1.61 stream.c,1.44,1.45 stream.h,1.51,1.52
Arpi of Ize
arpi at mplayerhq.hu
Sun Oct 6 20:03:15 CEST 2002
Update of /cvsroot/mplayer/main/libmpdemux
In directory mail:/var/tmp.root/cvs-serv31634/libmpdemux
Modified Files:
open.c stream.c stream.h
Log Message:
smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev at abv.bg>
TODO: add libsmb* detection and #define LIBSMBCLIENT to ./configure !
Index: open.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/open.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- open.c 29 Sep 2002 19:26:40 -0000 1.60
+++ open.c 6 Oct 2002 18:03:12 -0000 1.61
@@ -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);
Index: stream.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/stream.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- stream.c 15 Sep 2002 20:51:55 -0000 1.44
+++ stream.c 6 Oct 2002 18:03:12 -0000 1.45
@@ -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);
Index: stream.h
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/stream.h,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- stream.h 15 Sep 2002 22:38:01 -0000 1.51
+++ stream.h 6 Oct 2002 18:03:12 -0000 1.52
@@ -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
More information about the MPlayer-cvslog
mailing list