mirror of
				https://github.com/ElvishArtisan/rivendell.git
				synced 2025-10-30 17:23:53 +01:00 
			
		
		
		
	2019-01-07 Fred Gleason <fredg@paravelsystems.com>
* Removed the 'rlm_icecast2' RLM. * Removed the 'rlm_tunein' RLM.
This commit is contained in:
		| @@ -1,536 +0,0 @@ | |||||||
| /* rlm_icecast2.c |  | ||||||
|  * |  | ||||||
|  *   (C) Copyright 2008 Fred Gleason <fredg@paravelsystems.com> |  | ||||||
|  * |  | ||||||
|  *   This program is free software; you can redistribute it and/or modify |  | ||||||
|  *   it under the terms of the GNU General Public License version 2 |  | ||||||
|  *   as published by the Free Software Foundation. |  | ||||||
|  * |  | ||||||
|  *   This program is distributed in the hope that it will be useful, |  | ||||||
|  *   but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  *   GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  *   You should have received a copy of the GNU General Public |  | ||||||
|  *   License along with this program; if not, write to the Free Software |  | ||||||
|  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |  | ||||||
|  * |  | ||||||
|  * This is a Rivendell Loadable Module.  It uses Now&Next PAD data |  | ||||||
|  * to update the metadata on an Icecast2 mountpoint specified in the  |  | ||||||
|  * configuration file pointed to by the plugin argument. |  | ||||||
|  * |  | ||||||
|  * This module requires the curl(1) network transfer tool, included with |  | ||||||
|  * most Linux distros.  It is also available at http://curl.haxx.se/. |  | ||||||
|  * |  | ||||||
|  * To compile this module, just do: |  | ||||||
|  *  |  | ||||||
|  *   gcc -shared -o rlm_icecast2.rlm rlm_icecast2.c |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <strings.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include <unistd.h> |  | ||||||
|  |  | ||||||
| #include <rlm/rlm.h> |  | ||||||
|  |  | ||||||
| int rlm_icecast2_devs; |  | ||||||
| char *rlm_icecast2_usernames; |  | ||||||
| char *rlm_icecast2_passwords; |  | ||||||
| char *rlm_icecast2_hostnames; |  | ||||||
| int *rlm_icecast2_tcpports; |  | ||||||
| char *rlm_icecast2_mountpoints; |  | ||||||
| char *rlm_icecast2_formats; |  | ||||||
| int *rlm_icecast2_masters; |  | ||||||
| int *rlm_icecast2_aux1s; |  | ||||||
| int *rlm_icecast2_aux2s; |  | ||||||
| int *rlm_icecast2_vlog101s; |  | ||||||
| int *rlm_icecast2_vlog102s; |  | ||||||
| int *rlm_icecast2_vlog103s; |  | ||||||
| int *rlm_icecast2_vlog104s; |  | ||||||
| int *rlm_icecast2_vlog105s; |  | ||||||
| int *rlm_icecast2_vlog106s; |  | ||||||
| int *rlm_icecast2_vlog107s; |  | ||||||
| int *rlm_icecast2_vlog108s; |  | ||||||
| int *rlm_icecast2_vlog109s; |  | ||||||
| int *rlm_icecast2_vlog110s; |  | ||||||
| int *rlm_icecast2_vlog111s; |  | ||||||
| int *rlm_icecast2_vlog112s; |  | ||||||
| int *rlm_icecast2_vlog113s; |  | ||||||
| int *rlm_icecast2_vlog114s; |  | ||||||
| int *rlm_icecast2_vlog115s; |  | ||||||
| int *rlm_icecast2_vlog116s; |  | ||||||
| int *rlm_icecast2_vlog117s; |  | ||||||
| int *rlm_icecast2_vlog118s; |  | ||||||
| int *rlm_icecast2_vlog119s; |  | ||||||
| int *rlm_icecast2_vlog120s; |  | ||||||
|  |  | ||||||
| int rlm_icecast2_BufferDiff(char *sString,int dOrigin,int dDiff,int dMaxSize) |  | ||||||
| { |  | ||||||
|   int dOldSize,dNewSize; |  | ||||||
|   int i; |  | ||||||
|  |  | ||||||
|   /* |  | ||||||
|    * Will it fit? |  | ||||||
|    */ |  | ||||||
|   dOldSize=strlen(sString); |  | ||||||
|   if((dOldSize+dDiff)>=dMaxSize) { |  | ||||||
|     return -1; |  | ||||||
|   } |  | ||||||
|   dNewSize=dOldSize+dDiff; |  | ||||||
|  |  | ||||||
|   /*  |  | ||||||
|    * Adding characters  |  | ||||||
|    */ |  | ||||||
|   if(dDiff>0) { |  | ||||||
|     for(i=dOldSize;i>dOrigin;i--) { |  | ||||||
|       sString[i+dDiff]=sString[i]; |  | ||||||
|     } |  | ||||||
|     return dNewSize; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /*  |  | ||||||
|    * No Change |  | ||||||
|    */ |  | ||||||
|   if(dDiff==0) { |  | ||||||
|     return dNewSize; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /* |  | ||||||
|    * Deleting Characters |  | ||||||
|    */ |  | ||||||
|   if(dDiff<0) { |  | ||||||
|     for(i=dOrigin;i<dOldSize;i++) { |  | ||||||
|       sString[i]=sString[i-dDiff]; |  | ||||||
|     } |  | ||||||
|     return dNewSize; |  | ||||||
|   } |  | ||||||
|   return -1;  |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int rlm_icecast2_EncodeString(char *sString,int dMaxSize) |  | ||||||
| { |  | ||||||
|   int i;                  /* General Purpose Counter */ |  | ||||||
|   char sAccum[4];          /* General String Buffer */ |  | ||||||
|  |  | ||||||
|   i=0; |  | ||||||
|   while(sString[i]!=0) { |  | ||||||
|     if(((sString[i]!='*') && (sString[i]!='-') && |  | ||||||
| 	(sString[i]!='_') && (sString[i]!='.')) &&  |  | ||||||
|        ((sString[i]<'0') || |  | ||||||
|        ((sString[i]>'9') && (sString[i]<'A')) || |  | ||||||
|        ((sString[i]>'Z') && (sString[i]<'a')) || |  | ||||||
|        (sString[i]>'z'))) { |  | ||||||
|       if(rlm_icecast2_BufferDiff(sString,i,2,dMaxSize)<0) { |  | ||||||
| 	fprintf(stderr,"rlm_icecast2: BufferDiff() failed, maxsize: %d\n", |  | ||||||
| 		dMaxSize); |  | ||||||
| 	return -1; |  | ||||||
|       } |  | ||||||
|       sprintf(sAccum,"%%%2x",sString[i]); |  | ||||||
|       sString[i++]=sAccum[0]; |  | ||||||
|       sString[i++]=sAccum[1]; |  | ||||||
|       sString[i]=sAccum[2]; |  | ||||||
|     } |  | ||||||
|     if(sString[i]==' ') { |  | ||||||
|      sString[i]='+'; |  | ||||||
|     } |  | ||||||
|     i++; |  | ||||||
|     if(i>=dMaxSize) { |  | ||||||
|       fprintf(stderr,"rlm_icecast2: offset exceeded limit, maxsize: %d\n", |  | ||||||
| 	      dMaxSize); |  | ||||||
|       return -1; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return strlen(sString); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int rlm_icecast2_GetLogStatus(void *ptr,const char *arg,const char *section, |  | ||||||
| 			    const char *logname) |  | ||||||
| { |  | ||||||
|   const char *tag=RLMGetStringValue(ptr,arg,section,logname,""); |  | ||||||
|   if(strcasecmp(tag,"yes")==0) { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"on")==0) { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"true")==0) { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"no")==0) { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"off")==0) { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"false")==0) { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"onair")==0) { |  | ||||||
|     return 2; |  | ||||||
|   }   |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void rlm_icecast2_RLMStart(void *ptr,const char *arg) |  | ||||||
| { |  | ||||||
|   char username[256]; |  | ||||||
|   char section[256]; |  | ||||||
|   char errtext[256]; |  | ||||||
|   int i=1; |  | ||||||
|  |  | ||||||
|   rlm_icecast2_devs=0; |  | ||||||
|   rlm_icecast2_usernames=NULL; |  | ||||||
|   rlm_icecast2_passwords=NULL; |  | ||||||
|   rlm_icecast2_formats=NULL; |  | ||||||
|   rlm_icecast2_masters=NULL; |  | ||||||
|   rlm_icecast2_aux1s=NULL; |  | ||||||
|   rlm_icecast2_aux2s=NULL; |  | ||||||
|   rlm_icecast2_vlog101s=NULL; |  | ||||||
|   rlm_icecast2_vlog102s=NULL; |  | ||||||
|   rlm_icecast2_vlog103s=NULL; |  | ||||||
|   rlm_icecast2_vlog104s=NULL; |  | ||||||
|   rlm_icecast2_vlog105s=NULL; |  | ||||||
|   rlm_icecast2_vlog106s=NULL; |  | ||||||
|   rlm_icecast2_vlog107s=NULL; |  | ||||||
|   rlm_icecast2_vlog108s=NULL; |  | ||||||
|   rlm_icecast2_vlog109s=NULL; |  | ||||||
|   rlm_icecast2_vlog110s=NULL; |  | ||||||
|   rlm_icecast2_vlog111s=NULL; |  | ||||||
|   rlm_icecast2_vlog112s=NULL; |  | ||||||
|   rlm_icecast2_vlog113s=NULL; |  | ||||||
|   rlm_icecast2_vlog114s=NULL; |  | ||||||
|   rlm_icecast2_vlog115s=NULL; |  | ||||||
|   rlm_icecast2_vlog116s=NULL; |  | ||||||
|   rlm_icecast2_vlog117s=NULL; |  | ||||||
|   rlm_icecast2_vlog118s=NULL; |  | ||||||
|   rlm_icecast2_vlog119s=NULL; |  | ||||||
|   rlm_icecast2_vlog120s=NULL; |  | ||||||
|  |  | ||||||
|   sprintf(section,"Icecast%d",i++); |  | ||||||
|   strncpy(username,RLMGetStringValue(ptr,arg,section,"Username",""),255); |  | ||||||
|   username[255]=0; |  | ||||||
|   if(strlen(username)==0) { |  | ||||||
|     RLMLog(ptr,LOG_WARNING,"rlm_icecast2: no icecast mountpoints specified"); |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   while(strlen(username)>0) { |  | ||||||
|     rlm_icecast2_usernames=realloc(rlm_icecast2_usernames, |  | ||||||
| 			   (rlm_icecast2_devs+1)*(rlm_icecast2_devs+1)*256); |  | ||||||
|     strcpy(rlm_icecast2_usernames+256*rlm_icecast2_devs,username); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_passwords=realloc(rlm_icecast2_passwords, |  | ||||||
| 			   (rlm_icecast2_devs+1)*(rlm_icecast2_devs+1)*256); |  | ||||||
|     strcpy(rlm_icecast2_passwords+256*rlm_icecast2_devs, |  | ||||||
| 	   RLMGetStringValue(ptr,arg,section,"Password","")); |  | ||||||
|     rlm_icecast2_hostnames=realloc(rlm_icecast2_hostnames, |  | ||||||
| 			   (rlm_icecast2_devs+1)*(rlm_icecast2_devs+1)*256); |  | ||||||
|     strcpy(rlm_icecast2_hostnames+256*rlm_icecast2_devs, |  | ||||||
| 	   RLMGetStringValue(ptr,arg,section,"Hostname","")); |  | ||||||
|     rlm_icecast2_tcpports=realloc(rlm_icecast2_tcpports, |  | ||||||
| 			    (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_tcpports[rlm_icecast2_devs]= |  | ||||||
|       RLMGetIntegerValue(ptr,arg,section,"Tcpport",0); |  | ||||||
|     rlm_icecast2_mountpoints=realloc(rlm_icecast2_mountpoints, |  | ||||||
| 			   (rlm_icecast2_devs+1)*(rlm_icecast2_devs+1)*256); |  | ||||||
|     strcpy(rlm_icecast2_mountpoints+256*rlm_icecast2_devs, |  | ||||||
| 	   RLMGetStringValue(ptr,arg,section,"Mountpoint","")); |  | ||||||
|     rlm_icecast2_formats=realloc(rlm_icecast2_formats,(rlm_icecast2_devs+1)*256); |  | ||||||
|     strncpy(rlm_icecast2_formats+256*rlm_icecast2_devs, |  | ||||||
| 	    RLMGetStringValue(ptr,arg,section,"FormatString",""),256); |  | ||||||
|     rlm_icecast2_masters=realloc(rlm_icecast2_masters, |  | ||||||
| 			    (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_masters[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"MasterLog"); |  | ||||||
|     rlm_icecast2_aux1s=realloc(rlm_icecast2_aux1s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_aux1s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"Aux1Log"); |  | ||||||
|     rlm_icecast2_aux2s=realloc(rlm_icecast2_aux2s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_aux2s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"Aux2Log"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog101s=realloc(rlm_icecast2_vlog101s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog101s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog101"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog102s=realloc(rlm_icecast2_vlog102s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog102s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog102"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog103s=realloc(rlm_icecast2_vlog103s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog103s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog103"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog104s=realloc(rlm_icecast2_vlog104s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog104s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog104"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog105s=realloc(rlm_icecast2_vlog105s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog105s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog105"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog106s=realloc(rlm_icecast2_vlog106s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog106s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog106"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog107s=realloc(rlm_icecast2_vlog107s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog107s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog107"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog108s=realloc(rlm_icecast2_vlog108s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog108s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog108"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog109s=realloc(rlm_icecast2_vlog109s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog109s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog109"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog110s=realloc(rlm_icecast2_vlog110s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog110s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog110"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog111s=realloc(rlm_icecast2_vlog111s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog111s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog111"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog112s=realloc(rlm_icecast2_vlog112s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog112s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog112"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog113s=realloc(rlm_icecast2_vlog113s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog113s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog113"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog114s=realloc(rlm_icecast2_vlog114s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog114s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog114"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog115s=realloc(rlm_icecast2_vlog115s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog115s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog115"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog116s=realloc(rlm_icecast2_vlog116s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog116s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog116"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog117s=realloc(rlm_icecast2_vlog117s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog117s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog117"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog118s=realloc(rlm_icecast2_vlog118s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog118s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog118"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog119s=realloc(rlm_icecast2_vlog119s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog119s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog119"); |  | ||||||
|  |  | ||||||
|     rlm_icecast2_vlog120s=realloc(rlm_icecast2_vlog120s, |  | ||||||
| 			  (rlm_icecast2_devs+1)*sizeof(int)); |  | ||||||
|     rlm_icecast2_vlog120s[rlm_icecast2_devs]= |  | ||||||
|       rlm_icecast2_GetLogStatus(ptr,arg,section,"VLog120"); |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     sprintf(errtext,"rlm_icecast2: configured mountpoint \"http://%s:%u%s\"", |  | ||||||
| 	    rlm_icecast2_hostnames+256*rlm_icecast2_devs, |  | ||||||
| 	    rlm_icecast2_tcpports[rlm_icecast2_devs], |  | ||||||
| 	    rlm_icecast2_mountpoints+256*rlm_icecast2_devs); |  | ||||||
|     rlm_icecast2_devs++; |  | ||||||
|     RLMLog(ptr,LOG_INFO,errtext); |  | ||||||
|     sprintf(section,"Icecast%d",i++); |  | ||||||
|     strncpy(username,RLMGetStringValue(ptr,arg,section,"Username",""),255); |  | ||||||
|     username[255]=0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void rlm_icecast2_RLMFree(void *ptr) |  | ||||||
| { |  | ||||||
|   free(rlm_icecast2_usernames); |  | ||||||
|   free(rlm_icecast2_passwords); |  | ||||||
|   free(rlm_icecast2_hostnames); |  | ||||||
|   free(rlm_icecast2_tcpports); |  | ||||||
|   free(rlm_icecast2_mountpoints); |  | ||||||
|   free(rlm_icecast2_formats); |  | ||||||
|   free(rlm_icecast2_masters); |  | ||||||
|   free(rlm_icecast2_aux1s); |  | ||||||
|   free(rlm_icecast2_aux2s); |  | ||||||
|   free(rlm_icecast2_vlog101s); |  | ||||||
|   free(rlm_icecast2_vlog102s); |  | ||||||
|   free(rlm_icecast2_vlog103s); |  | ||||||
|   free(rlm_icecast2_vlog104s); |  | ||||||
|   free(rlm_icecast2_vlog105s); |  | ||||||
|   free(rlm_icecast2_vlog106s); |  | ||||||
|   free(rlm_icecast2_vlog107s); |  | ||||||
|   free(rlm_icecast2_vlog108s); |  | ||||||
|   free(rlm_icecast2_vlog109s); |  | ||||||
|   free(rlm_icecast2_vlog110s); |  | ||||||
|   free(rlm_icecast2_vlog111s); |  | ||||||
|   free(rlm_icecast2_vlog112s); |  | ||||||
|   free(rlm_icecast2_vlog113s); |  | ||||||
|   free(rlm_icecast2_vlog114s); |  | ||||||
|   free(rlm_icecast2_vlog115s); |  | ||||||
|   free(rlm_icecast2_vlog116s); |  | ||||||
|   free(rlm_icecast2_vlog117s); |  | ||||||
|   free(rlm_icecast2_vlog118s); |  | ||||||
|   free(rlm_icecast2_vlog119s); |  | ||||||
|   free(rlm_icecast2_vlog120s); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void rlm_icecast2_RLMPadDataSent(void *ptr,const struct rlm_svc *svc, |  | ||||||
| 				const struct rlm_log *log, |  | ||||||
| 				const struct rlm_pad *now, |  | ||||||
| 				const struct rlm_pad *next) |  | ||||||
| { |  | ||||||
|   int i; |  | ||||||
|   int flag=0; |  | ||||||
|   char str[1024]; |  | ||||||
|   char account[1024]; |  | ||||||
|   char url[1024]; |  | ||||||
|   char msg[1500]; |  | ||||||
|  |  | ||||||
|   for(i=0;i<rlm_icecast2_devs;i++) { |  | ||||||
|     switch(log->log_mach) { |  | ||||||
|     case 0: |  | ||||||
|       flag=rlm_icecast2_masters[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 1: |  | ||||||
|       flag=rlm_icecast2_aux1s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 2: |  | ||||||
|       flag=rlm_icecast2_aux2s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 100: |  | ||||||
|       flag=rlm_icecast2_vlog101s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 101: |  | ||||||
|       flag=rlm_icecast2_vlog102s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 102: |  | ||||||
|       flag=rlm_icecast2_vlog103s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 103: |  | ||||||
|       flag=rlm_icecast2_vlog104s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 104: |  | ||||||
|       flag=rlm_icecast2_vlog105s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 105: |  | ||||||
|       flag=rlm_icecast2_vlog106s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 106: |  | ||||||
|       flag=rlm_icecast2_vlog107s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 107: |  | ||||||
|       flag=rlm_icecast2_vlog108s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 108: |  | ||||||
|       flag=rlm_icecast2_vlog109s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 109: |  | ||||||
|       flag=rlm_icecast2_vlog110s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 110: |  | ||||||
|       flag=rlm_icecast2_vlog111s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 111: |  | ||||||
|       flag=rlm_icecast2_vlog112s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 112: |  | ||||||
|       flag=rlm_icecast2_vlog113s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 113: |  | ||||||
|       flag=rlm_icecast2_vlog114s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 114: |  | ||||||
|       flag=rlm_icecast2_vlog115s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 115: |  | ||||||
|       flag=rlm_icecast2_vlog116s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 116: |  | ||||||
|       flag=rlm_icecast2_vlog117s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 117: |  | ||||||
|       flag=rlm_icecast2_vlog118s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 118: |  | ||||||
|       flag=rlm_icecast2_vlog119s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 119: |  | ||||||
|       flag=rlm_icecast2_vlog120s[i]; |  | ||||||
|       break; |  | ||||||
|     } |  | ||||||
|     if((flag==1)||((flag==2)&&(log->log_onair!=0))) { |  | ||||||
|       strncpy(str,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 				    rlm_icecast2_formats+256*i),256); |  | ||||||
|       rlm_icecast2_EncodeString(str,1023); |  | ||||||
|       snprintf(account,1024,"%s:%s",rlm_icecast2_usernames+256*i, |  | ||||||
| 	       rlm_icecast2_passwords+256*i); |  | ||||||
|       snprintf(url,1024,"http://%s:%d/admin/metadata?mount=%s&mode=updinfo&song=%s", |  | ||||||
| 	       rlm_icecast2_hostnames+256*i, |  | ||||||
| 	       rlm_icecast2_tcpports[i], |  | ||||||
| 	       rlm_icecast2_mountpoints+256*i,str); |  | ||||||
|       if(strlen(now->rlm_title)!=0) { |  | ||||||
| 	if(fork()==0) { |  | ||||||
| 	  execlp("curl","curl","-u",account,"-o","/dev/null","-s", |  | ||||||
| 		 url,(char *)NULL); |  | ||||||
| 	  RLMLog(ptr,LOG_WARNING,"rlm_icecast2: unable to execute curl(1)"); |  | ||||||
| 	  exit(0); |  | ||||||
| 	} |  | ||||||
|       } |  | ||||||
|       snprintf(msg,1500,"rlm_icecast2: sending pad update: \"%s\"", |  | ||||||
| 	       (const char *)str); |  | ||||||
|       RLMLog(ptr,LOG_INFO,msg); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,554 +0,0 @@ | |||||||
| /* rlm_tunein.c |  | ||||||
|  * |  | ||||||
|  *   (C) Copyright 2018 Fred Gleason <fredg@paravelsystems.com> |  | ||||||
|  * |  | ||||||
|  *   This program is free software; you can redistribute it and/or modify |  | ||||||
|  *   it under the terms of the GNU General Public License version 2 |  | ||||||
|  *   as published by the Free Software Foundation. |  | ||||||
|  * |  | ||||||
|  *   This program is distributed in the hope that it will be useful, |  | ||||||
|  *   but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  *   GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  *   You should have received a copy of the GNU General Public |  | ||||||
|  *   License along with this program; if not, write to the Free Software |  | ||||||
|  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |  | ||||||
|  * |  | ||||||
|  * This is a Rivendell Loadable Module.  It uses Now&Next PAD data |  | ||||||
|  * to update the metadata on TuneIn specified in the  |  | ||||||
|  * configuration file pointed to by the plugin argument. |  | ||||||
|  * |  | ||||||
|  * This module requires the curl(1) network transfer tool, included with |  | ||||||
|  * most Linux distros.  It is also available at http://curl.haxx.se/. |  | ||||||
|  * |  | ||||||
|  * To compile this module, just do: |  | ||||||
|  *  |  | ||||||
|  *   gcc -shared -o rlm_tunein.rlm rlm_tunein.c |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <strings.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include <unistd.h> |  | ||||||
|  |  | ||||||
| #include <rlm/rlm.h> |  | ||||||
|  |  | ||||||
| int rlm_tunein_devs; |  | ||||||
| char *rlm_tunein_stationids; |  | ||||||
| char *rlm_tunein_partnerids; |  | ||||||
| char *rlm_tunein_partnerkeys; |  | ||||||
| char *rlm_tunein_titles; |  | ||||||
| char *rlm_tunein_artists; |  | ||||||
| char *rlm_tunein_albums; |  | ||||||
| int *rlm_tunein_masters; |  | ||||||
| int *rlm_tunein_aux1s; |  | ||||||
| int *rlm_tunein_aux2s; |  | ||||||
| int *rlm_tunein_vlog101s; |  | ||||||
| int *rlm_tunein_vlog102s; |  | ||||||
| int *rlm_tunein_vlog103s; |  | ||||||
| int *rlm_tunein_vlog104s; |  | ||||||
| int *rlm_tunein_vlog105s; |  | ||||||
| int *rlm_tunein_vlog106s; |  | ||||||
| int *rlm_tunein_vlog107s; |  | ||||||
| int *rlm_tunein_vlog108s; |  | ||||||
| int *rlm_tunein_vlog109s; |  | ||||||
| int *rlm_tunein_vlog110s; |  | ||||||
| int *rlm_tunein_vlog111s; |  | ||||||
| int *rlm_tunein_vlog112s; |  | ||||||
| int *rlm_tunein_vlog113s; |  | ||||||
| int *rlm_tunein_vlog114s; |  | ||||||
| int *rlm_tunein_vlog115s; |  | ||||||
| int *rlm_tunein_vlog116s; |  | ||||||
| int *rlm_tunein_vlog117s; |  | ||||||
| int *rlm_tunein_vlog118s; |  | ||||||
| int *rlm_tunein_vlog119s; |  | ||||||
| int *rlm_tunein_vlog120s; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int rlm_tunein_BufferDiff(char *sString,int dOrigin,int dDiff,int dMaxSize) |  | ||||||
| { |  | ||||||
|   int dOldSize,dNewSize; |  | ||||||
|   int i; |  | ||||||
|  |  | ||||||
|   /* |  | ||||||
|    * Will it fit? |  | ||||||
|    */ |  | ||||||
|   dOldSize=strlen(sString); |  | ||||||
|   if((dOldSize+dDiff)>=dMaxSize) { |  | ||||||
|     return -1; |  | ||||||
|   } |  | ||||||
|   dNewSize=dOldSize+dDiff; |  | ||||||
|  |  | ||||||
|   /*  |  | ||||||
|    * Adding characters  |  | ||||||
|    */ |  | ||||||
|   if(dDiff>0) { |  | ||||||
|     for(i=dOldSize;i>dOrigin;i--) { |  | ||||||
|       sString[i+dDiff]=sString[i]; |  | ||||||
|     } |  | ||||||
|     return dNewSize; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /*  |  | ||||||
|    * No Change |  | ||||||
|    */ |  | ||||||
|   if(dDiff==0) { |  | ||||||
|     return dNewSize; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /* |  | ||||||
|    * Deleting Characters |  | ||||||
|    */ |  | ||||||
|   if(dDiff<0) { |  | ||||||
|     for(i=dOrigin;i<dOldSize;i++) { |  | ||||||
|       sString[i]=sString[i-dDiff]; |  | ||||||
|     } |  | ||||||
|     return dNewSize; |  | ||||||
|   } |  | ||||||
|   return -1;  |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int rlm_tunein_EncodeString(char *sString,int dMaxSize) |  | ||||||
| { |  | ||||||
|   int i;                  /* General Purpose Counter */ |  | ||||||
|   char sAccum[4];          /* General String Buffer */ |  | ||||||
|  |  | ||||||
|   i=0; |  | ||||||
|   while(sString[i]!=0) { |  | ||||||
|     if(((sString[i]!='*') && (sString[i]!='-') && |  | ||||||
| 	(sString[i]!='_') && (sString[i]!='.')) &&  |  | ||||||
|        ((sString[i]<'0') || |  | ||||||
|        ((sString[i]>'9') && (sString[i]<'A')) || |  | ||||||
|        ((sString[i]>'Z') && (sString[i]<'a')) || |  | ||||||
|        (sString[i]>'z'))) { |  | ||||||
|       if(rlm_tunein_BufferDiff(sString,i,2,dMaxSize)<0) { |  | ||||||
| 	return -1; |  | ||||||
|       } |  | ||||||
|       sprintf(sAccum,"%%%2x",sString[i]); |  | ||||||
|       sString[i++]=sAccum[0]; |  | ||||||
|       sString[i++]=sAccum[1]; |  | ||||||
|       sString[i]=sAccum[2]; |  | ||||||
|     } |  | ||||||
|     if(sString[i]==' ') { |  | ||||||
|      sString[i]='+'; |  | ||||||
|     } |  | ||||||
|     i++; |  | ||||||
|     if(i>=dMaxSize) { |  | ||||||
|       return -1; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return strlen(sString); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int rlm_tunein_GetLogStatus(void *ptr,const char *arg,const char *section, |  | ||||||
| 			    const char *logname) |  | ||||||
| { |  | ||||||
|   const char *tag=RLMGetStringValue(ptr,arg,section,logname,""); |  | ||||||
|   if(strcasecmp(tag,"yes")==0) { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"on")==0) { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"true")==0) { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"no")==0) { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"off")==0) { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"false")==0) { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(strcasecmp(tag,"onair")==0) { |  | ||||||
|     return 2; |  | ||||||
|   }   |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void rlm_tunein_RLMStart(void *ptr,const char *arg) |  | ||||||
| { |  | ||||||
|   char stationid[256]; |  | ||||||
|   char section[256]; |  | ||||||
|   char errtext[256]; |  | ||||||
|   int i=1; |  | ||||||
|  |  | ||||||
|   rlm_tunein_devs=0; |  | ||||||
|   rlm_tunein_stationids=NULL; |  | ||||||
|   rlm_tunein_partnerids=NULL; |  | ||||||
|   rlm_tunein_partnerkeys=NULL; |  | ||||||
|   rlm_tunein_titles=NULL; |  | ||||||
|   rlm_tunein_artists=NULL; |  | ||||||
|   rlm_tunein_albums=NULL; |  | ||||||
|   rlm_tunein_masters=NULL; |  | ||||||
|   rlm_tunein_aux1s=NULL; |  | ||||||
|   rlm_tunein_aux2s=NULL; |  | ||||||
|   rlm_tunein_vlog101s=NULL; |  | ||||||
|   rlm_tunein_vlog102s=NULL; |  | ||||||
|   rlm_tunein_vlog103s=NULL; |  | ||||||
|   rlm_tunein_vlog104s=NULL; |  | ||||||
|   rlm_tunein_vlog105s=NULL; |  | ||||||
|   rlm_tunein_vlog106s=NULL; |  | ||||||
|   rlm_tunein_vlog107s=NULL; |  | ||||||
|   rlm_tunein_vlog108s=NULL; |  | ||||||
|   rlm_tunein_vlog109s=NULL; |  | ||||||
|   rlm_tunein_vlog110s=NULL; |  | ||||||
|   rlm_tunein_vlog111s=NULL; |  | ||||||
|   rlm_tunein_vlog112s=NULL; |  | ||||||
|   rlm_tunein_vlog113s=NULL; |  | ||||||
|   rlm_tunein_vlog114s=NULL; |  | ||||||
|   rlm_tunein_vlog115s=NULL; |  | ||||||
|   rlm_tunein_vlog116s=NULL; |  | ||||||
|   rlm_tunein_vlog117s=NULL; |  | ||||||
|   rlm_tunein_vlog118s=NULL; |  | ||||||
|   rlm_tunein_vlog119s=NULL; |  | ||||||
|   rlm_tunein_vlog120s=NULL; |  | ||||||
|  |  | ||||||
|   sprintf(section,"Station%d",i++); |  | ||||||
|   strncpy(stationid,RLMGetStringValue(ptr,arg,section,"StationID",""),255); |  | ||||||
|   stationid[255]=0; |  | ||||||
|   if(strlen(stationid)==0) { |  | ||||||
|     RLMLog(ptr,LOG_WARNING,"rlm_tunein: no Live365 stations specified"); |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   while(strlen(stationid)>0) { |  | ||||||
|     rlm_tunein_stationids=realloc(rlm_tunein_stationids, |  | ||||||
| 		      (rlm_tunein_devs+1)*(rlm_tunein_devs+1)*256); |  | ||||||
|     strcpy(rlm_tunein_stationids+256*rlm_tunein_devs,stationid); |  | ||||||
|     rlm_tunein_partnerids=realloc(rlm_tunein_partnerids,(rlm_tunein_devs+1)*256); |  | ||||||
|     strncpy(rlm_tunein_partnerids+256*rlm_tunein_devs, |  | ||||||
| 	    RLMGetStringValue(ptr,arg,section,"PartnerID",""),256); |  | ||||||
|     rlm_tunein_partnerkeys=realloc(rlm_tunein_partnerkeys,(rlm_tunein_devs+1)*256); |  | ||||||
|     strncpy(rlm_tunein_partnerkeys+256*rlm_tunein_devs, |  | ||||||
| 	    RLMGetStringValue(ptr,arg,section,"PartnerKey",""),256); |  | ||||||
|  |  | ||||||
|     rlm_tunein_titles=realloc(rlm_tunein_titles,(rlm_tunein_devs+1)*256); |  | ||||||
|     strncpy(rlm_tunein_titles+256*rlm_tunein_devs, |  | ||||||
| 	    RLMGetStringValue(ptr,arg,section,"TitleString",""),256); |  | ||||||
|  |  | ||||||
|     rlm_tunein_artists=realloc(rlm_tunein_artists,(rlm_tunein_devs+1)*256); |  | ||||||
|     strncpy(rlm_tunein_artists+256*rlm_tunein_devs, |  | ||||||
| 	    RLMGetStringValue(ptr,arg,section,"ArtistString",""),256); |  | ||||||
|  |  | ||||||
|     rlm_tunein_albums=realloc(rlm_tunein_albums,(rlm_tunein_devs+1)*256); |  | ||||||
|     strncpy(rlm_tunein_albums+256*rlm_tunein_devs, |  | ||||||
| 	    RLMGetStringValue(ptr,arg,section,"AlbumString",""),256); |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     rlm_tunein_masters=realloc(rlm_tunein_masters, |  | ||||||
| 			    (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_masters[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"MasterLog"); |  | ||||||
|     rlm_tunein_aux1s=realloc(rlm_tunein_aux1s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_aux1s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"Aux1Log"); |  | ||||||
|     rlm_tunein_aux2s=realloc(rlm_tunein_aux2s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog101s=realloc(rlm_tunein_vlog101s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog101s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog101"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog102s=realloc(rlm_tunein_vlog102s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog102s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog102"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog103s=realloc(rlm_tunein_vlog103s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog103s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog103"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog104s=realloc(rlm_tunein_vlog104s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog104s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog104"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog105s=realloc(rlm_tunein_vlog105s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog105s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog105"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog106s=realloc(rlm_tunein_vlog106s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog106s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog106"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog107s=realloc(rlm_tunein_vlog107s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog107s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog107"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog108s=realloc(rlm_tunein_vlog108s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog108s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog108"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog109s=realloc(rlm_tunein_vlog109s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog109s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog109"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog110s=realloc(rlm_tunein_vlog110s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog110s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog110"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog111s=realloc(rlm_tunein_vlog111s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog111s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog111"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog112s=realloc(rlm_tunein_vlog112s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog112s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog112"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog113s=realloc(rlm_tunein_vlog113s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog113s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog113"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog114s=realloc(rlm_tunein_vlog114s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog114s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog114"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog115s=realloc(rlm_tunein_vlog115s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog115s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog115"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog116s=realloc(rlm_tunein_vlog116s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog116s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog116"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog117s=realloc(rlm_tunein_vlog117s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog117s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog117"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog118s=realloc(rlm_tunein_vlog118s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog118s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog118"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog119s=realloc(rlm_tunein_vlog119s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog119s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog119"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_vlog120s=realloc(rlm_tunein_vlog120s, |  | ||||||
| 			  (rlm_tunein_devs+1)*sizeof(int)); |  | ||||||
|     rlm_tunein_vlog120s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"VLog120"); |  | ||||||
|  |  | ||||||
|     rlm_tunein_aux2s[rlm_tunein_devs]= |  | ||||||
|       rlm_tunein_GetLogStatus(ptr,arg,section,"Aux2Log"); |  | ||||||
|     sprintf(errtext,"rlm_tunein: configured station \"%s\"", |  | ||||||
| 	    rlm_tunein_stationids+256*rlm_tunein_devs); |  | ||||||
|     rlm_tunein_devs++; |  | ||||||
|     RLMLog(ptr,LOG_INFO,errtext); |  | ||||||
|     sprintf(section,"Station%d",i++); |  | ||||||
|     strncpy(stationid,RLMGetStringValue(ptr,arg,section,"StationID",""),255); |  | ||||||
|     stationid[255]=0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void rlm_tunein_RLMFree(void *ptr) |  | ||||||
| { |  | ||||||
|   free(rlm_tunein_stationids); |  | ||||||
|   free(rlm_tunein_partnerids); |  | ||||||
|   free(rlm_tunein_partnerkeys); |  | ||||||
|   free(rlm_tunein_titles); |  | ||||||
|   free(rlm_tunein_artists); |  | ||||||
|   free(rlm_tunein_albums); |  | ||||||
|   free(rlm_tunein_masters); |  | ||||||
|   free(rlm_tunein_aux1s); |  | ||||||
|   free(rlm_tunein_aux2s); |  | ||||||
|   free(rlm_tunein_vlog101s); |  | ||||||
|   free(rlm_tunein_vlog102s); |  | ||||||
|   free(rlm_tunein_vlog103s); |  | ||||||
|   free(rlm_tunein_vlog104s); |  | ||||||
|   free(rlm_tunein_vlog105s); |  | ||||||
|   free(rlm_tunein_vlog106s); |  | ||||||
|   free(rlm_tunein_vlog107s); |  | ||||||
|   free(rlm_tunein_vlog108s); |  | ||||||
|   free(rlm_tunein_vlog109s); |  | ||||||
|   free(rlm_tunein_vlog110s); |  | ||||||
|   free(rlm_tunein_vlog111s); |  | ||||||
|   free(rlm_tunein_vlog112s); |  | ||||||
|   free(rlm_tunein_vlog113s); |  | ||||||
|   free(rlm_tunein_vlog114s); |  | ||||||
|   free(rlm_tunein_vlog115s); |  | ||||||
|   free(rlm_tunein_vlog116s); |  | ||||||
|   free(rlm_tunein_vlog117s); |  | ||||||
|   free(rlm_tunein_vlog118s); |  | ||||||
|   free(rlm_tunein_vlog119s); |  | ||||||
|   free(rlm_tunein_vlog120s); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void rlm_tunein_RLMPadDataSent(void *ptr,const struct rlm_svc *svc, |  | ||||||
| 				const struct rlm_log *log, |  | ||||||
| 				const struct rlm_pad *now, |  | ||||||
| 				const struct rlm_pad *next) |  | ||||||
| { |  | ||||||
|   int i; |  | ||||||
|   int flag=0; |  | ||||||
|   char stationid[1024]; |  | ||||||
|   char partnerid[1024]; |  | ||||||
|   char partnerkey[1024]; |  | ||||||
|   char title[1024]; |  | ||||||
|   char artist[1024]; |  | ||||||
|   char album[1024]; |  | ||||||
|   char url[8192]; |  | ||||||
|   char msg[1500]; |  | ||||||
|  |  | ||||||
|   for(i=0;i<rlm_tunein_devs;i++) { |  | ||||||
|     switch(log->log_mach) { |  | ||||||
|     case 0: |  | ||||||
|       flag=rlm_tunein_masters[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 1: |  | ||||||
|       flag=rlm_tunein_aux1s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 2: |  | ||||||
|       flag=rlm_tunein_aux2s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 100: |  | ||||||
|       flag=rlm_tunein_vlog101s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 101: |  | ||||||
|       flag=rlm_tunein_vlog102s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 102: |  | ||||||
|       flag=rlm_tunein_vlog103s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 103: |  | ||||||
|       flag=rlm_tunein_vlog104s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 104: |  | ||||||
|       flag=rlm_tunein_vlog105s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 105: |  | ||||||
|       flag=rlm_tunein_vlog106s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 106: |  | ||||||
|       flag=rlm_tunein_vlog107s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 107: |  | ||||||
|       flag=rlm_tunein_vlog108s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 108: |  | ||||||
|       flag=rlm_tunein_vlog109s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 109: |  | ||||||
|       flag=rlm_tunein_vlog110s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 110: |  | ||||||
|       flag=rlm_tunein_vlog111s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 111: |  | ||||||
|       flag=rlm_tunein_vlog112s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 112: |  | ||||||
|       flag=rlm_tunein_vlog113s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 113: |  | ||||||
|       flag=rlm_tunein_vlog114s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 114: |  | ||||||
|       flag=rlm_tunein_vlog115s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 115: |  | ||||||
|       flag=rlm_tunein_vlog116s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 116: |  | ||||||
|       flag=rlm_tunein_vlog117s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 117: |  | ||||||
|       flag=rlm_tunein_vlog118s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 118: |  | ||||||
|       flag=rlm_tunein_vlog119s[i]; |  | ||||||
|       break; |  | ||||||
|  |  | ||||||
|     case 119: |  | ||||||
|       flag=rlm_tunein_vlog120s[i]; |  | ||||||
|       break; |  | ||||||
|     } |  | ||||||
|     if((flag==1)||((flag==2)&&(log->log_onair!=0))) { |  | ||||||
|       strncpy(stationid,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 					rlm_tunein_stationids+256*i),256); |  | ||||||
|       rlm_tunein_EncodeString(stationid,1023); |  | ||||||
|  |  | ||||||
|       strncpy(partnerid,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 					 rlm_tunein_partnerids+256*i),256); |  | ||||||
|       rlm_tunein_EncodeString(partnerid,1023); |  | ||||||
|  |  | ||||||
|       strncpy(partnerkey,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 					 rlm_tunein_partnerkeys+256*i),256); |  | ||||||
|       rlm_tunein_EncodeString(partnerkey,1023); |  | ||||||
|  |  | ||||||
|       strncpy(title,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 				      rlm_tunein_titles+256*i),256); |  | ||||||
|       rlm_tunein_EncodeString(title,1023); |  | ||||||
|       strncpy(artist,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 				      rlm_tunein_artists+256*i),256); |  | ||||||
|       rlm_tunein_EncodeString(artist,1023); |  | ||||||
|       strncpy(album,RLMResolveNowNext(ptr,now,next, |  | ||||||
| 				      rlm_tunein_albums+256*i),256); |  | ||||||
|       rlm_tunein_EncodeString(album,1023); |  | ||||||
|       snprintf(url,8192,"http://air.radiotime.com/Playing.ashx?partnerId=%s&partnerKey=%s&id=%s&title=%s&artist=%s", |  | ||||||
| 	       partnerid, |  | ||||||
| 	       partnerkey, |  | ||||||
| 	       stationid, |  | ||||||
| 	       title, |  | ||||||
| 	       artist); |  | ||||||
|       if(strlen(now->rlm_title)!=0) { |  | ||||||
| 	if(fork()==0) { |  | ||||||
| 	  execlp("curl","curl","-o","/dev/null","-s",url,(char *)NULL); |  | ||||||
| 	  RLMLog(ptr,LOG_WARNING,"rlm_tunein: unable to execute curl(1)"); |  | ||||||
| 	  exit(0); |  | ||||||
| 	} |  | ||||||
|       } |  | ||||||
|       snprintf(msg,1500,"rlm_tunein: sending pad update: \"%s\"", |  | ||||||
| 	       (const char *)url); |  | ||||||
|       RLMLog(ptr,LOG_INFO,msg); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user