#define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include void write2(int fd, const char *str) { write(fd, str, strlen(str)); } #define BUF_SZ 256*1024 //32*1024 //arguments/return value are just guesses... int YZR_GetMaxVol(); int YZR_GetMinVol(); int YZR_GetCurrVol(); void YZR_SetVol(int); void YZR_SetDefaultVol(int); int YZR_GetDefaultVol(void); void read_file(char *fileid, char *songid); void read_track(char *songid); int fd; char **playlist; extern char **args_w_opt,**opts,**args; extern int args_ln,arg_w_opt_ln; extern void parse_args( char **envp); int main(int argc, char **argv, char **envp) { printf("Content-type: audio/ogg\r\n\r\n"); fflush(stdout); parse_args(envp); playlist=NULL; fd=socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; addr.sin_family=AF_INET; addr.sin_port=htons(1234); addr.sin_addr.s_addr=htonl(INADDR_LOOPBACK); connect(fd, (struct sockaddr*)&addr, sizeof(addr)); close(fd); { char *host="localhost"; char *port="1234"; int i; for(i=0;iai_next) { fd = socket (res->ai_family, res->ai_socktype, res->ai_protocol); if (fd < 0) continue; if (connect(fd, res->ai_addr, res->ai_addrlen) < 0) { close (fd); continue; } break; } freeaddrinfo(res0); } char *buffer=malloc(BUF_SZ); char *cmd=NULL; write(fd, "login phhusson sekhestunboulet\n", 24); bzero(buffer, BUF_SZ); read(fd, buffer, BUF_SZ); char *pl_id="88f946d29cdcc40e6603984fc2cd635702"; int i; for(i=0;i"); char *tmp; if(buf2==NULL) { fprintf(stderr, "No items found\n"); return -1; } buf2+=7; ++buf2; while(buf2[0]!='<') { while(!isxdigit(buf2[0])) buf2++; ++ln; playlist=realloc(playlist, sizeof(char*)*(ln+1)); playlist[ln-1]=strndup(buf2, 33); playlist[ln-1][32]=0; playlist[ln]=NULL; tmp=index(buf2, ','); if(tmp && tmp <=index(buf2, '<')) { buf2=tmp; buf2[0]=0; buf2++; } else break; } free(cmd);cmd=NULL; free(buffer); #if 0 unsigned int r=0; //time(&r); while(1) { //rand_r(&r); char *songid=playlist[(r%ln)]; printf("%s\n", songid); read_track(songid); ++r; } #endif int sg_id=42; for(i=0;i=tot2) break; } int i=0,j=0; int fd2; #ifdef TACT //YZR_SetVol(5); //YZR_SetDefaultVol(100); //printf("%d:%d\n", YZR_GetCurrVol(), YZR_GetDefaultVol()); system("killall -9 igg123 ; /mnt/fat/igg123 -d oss -b 2048 /mnt/jffs2/out.ogg &"); //unlink("out.ogg"); fd2=open("/mnt/jffs2/out.ogg", O_WRONLY); #else #if 0 static int Z=0; char *out_file; asprintf(&out_file, "out%04d.ogg", Z); ++Z; int fd2=open(out_file, O_WRONLY|O_CREAT); free(out_file); out_file=NULL; #endif fd2=1; #endif while(1) { tot=0; asprintf(&cmd, "substream %s %d %d %s\n", fileid, i*BUF_SZ, BUF_SZ, key); write2(fd, cmd); bzero(buffer, BUF_SZ); for(j=0;;j++) { read(fd, buffer+j, 1); if(buffer[j]=='\n') break; } sscanf(buffer, "%d %d", &ret, &tot2); if(ret!=200) { fprintf(stderr, "FAILED:%s\n", buffer); return; } bzero(buffer, BUF_SZ); if(i==0) { ret=read(fd, buffer, BUF_SZ); j=0; for(j=1;j=tot2) break; } i++; free(cmd); cmd=NULL; if(tot2