⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysctl.c

📁 RTSP PROXY Server and client
💻 C
字号:
/*kRtspProxydSysctl interface*//**************************************************************** *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2, or (at your option) *	any later version. * *	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. * ****************************************************************/#include <linux/kernel.h>#include <linux/errno.h>#include <linux/slab.h>#include <linux/net.h>#include <linux/sched.h>#include <linux/skbuff.h>#include <linux/smp_lock.h>#include <linux/sysctl.h>#include <linux/un.h>#include <linux/unistd.h>#include <net/ip.h>#include <net/sock.h>#include <net/tcp.h>#include <asm/atomic.h>#include <asm/semaphore.h>#include <asm/processor.h>#include <asm/uaccess.h>#include <linux/file.h>#include "prototypes.h"char sysctl_krtsproxyd_cacheroot[200] = "/var/cache-root";int 	sysctl_krtsproxyd_stop 	= 0;int 	sysctl_krtsproxyd_start 	= 0;int 	sysctl_krtsproxyd_unload 	= 0;int 	sysctl_krtsproxyd_clientport = 554;int 	sysctl_krtsproxyd_permreq    = S_IROTH; /* "other" read-access is required by default*/int 	sysctl_krtsproxyd_permforbid = S_IFDIR | S_ISVTX | S_IXOTH | S_IXGRP | S_IXUSR; 				/* forbidden is execute, directory and sticky*/int 	sysctl_krtsproxyd_logging 	= 0;char sysctl_krtsproxyd_serverip[20] = "#"; //the IP of the proxy serverint 	sysctl_krtsproxyd_serverport= 554; //rtsp defaultchar	sysctl_krtsproxyd_dynamicstring[200];int 	sysctl_krtsproxyd_sloppymime= 0;int	sysctl_krtsproxyd_threads	= 1; //change this value according to the CPU number of your machineint	sysctl_krtsproxyd_maxconnect = 50;static struct ctl_table_header *krtsproxyd_table_header;static int sysctl_SecureString(ctl_table *table, int *name, int nlen,		  void *oldval, size_t *oldlenp,		  void *newval, size_t newlen, void **context);static int proc_dosecurestring(ctl_table *table, int write, struct file *filp,		  void *buffer, size_t *lenp);static ctl_table krtsproxyd_table[] = {	{	NET_KRTSPROXYD_CACHEROOT,		"cacheroot",		&sysctl_krtsproxyd_cacheroot,		sizeof(sysctl_krtsproxyd_cacheroot),		0644,		NULL,		proc_dostring,		&sysctl_string,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_STOP,		"stop",		&sysctl_krtsproxyd_stop,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_START,		"start",		&sysctl_krtsproxyd_start,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_UNLOAD,		"unload",		&sysctl_krtsproxyd_unload,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_THREADS,		"threads",		&sysctl_krtsproxyd_threads,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_MAXCONNECT,		"maxconnect",		&sysctl_krtsproxyd_maxconnect,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_SLOPPYMIME,		"sloppymime",		&sysctl_krtsproxyd_sloppymime,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_CLIENTPORT,		"clientport",		&sysctl_krtsproxyd_clientport,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_PERMREQ,		"perm_required",		&sysctl_krtsproxyd_permreq,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_PERMFORBID,		"perm_forbid",		&sysctl_krtsproxyd_permforbid,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_LOGGING,		"logging",		&sysctl_krtsproxyd_logging,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_SERVERIP,		"serverip",		&sysctl_krtsproxyd_serverip,		sizeof(sysctl_krtsproxyd_serverip),		0644,		NULL,		proc_dostring,		&sysctl_string,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_SERVERPORT,		"serverport",		&sysctl_krtsproxyd_serverport,		sizeof(int),		0644,		NULL,		proc_dointvec,		&sysctl_intvec,		NULL,		NULL,		NULL	},	{	NET_KRTSPROXYD_DYNAMICSTRING,		"dynamic",		&sysctl_krtsproxyd_dynamicstring,		sizeof(sysctl_krtsproxyd_dynamicstring),		0644,		NULL,		proc_dosecurestring,		&sysctl_SecureString,		NULL,		NULL,		NULL	},	{0,0,0,0,0,0,0,0,0,0,0}	};		static ctl_table krtsproxyd_dir_table[] = {	{NET_KRTSPROXYD, "krtsproxyd", NULL, 0, 0555, krtsproxyd_table,0,0,0,0,0},	{0,0,0,0,0,0,0,0,0,0,0}};static ctl_table krtsproxyd_root_table[] = {	{CTL_NET, "net", NULL, 0, 0555, krtsproxyd_dir_table,0,0,0,0,0},	{0,0,0,0,0,0,0,0,0,0,0}};	void StartSysctl(void){	krtsproxyd_table_header = register_sysctl_table(krtsproxyd_root_table,1);}void EndSysctl(void){	unregister_sysctl_table(krtsproxyd_table_header);}static int proc_dosecurestring(ctl_table *table, int write, struct file *filp,		  void *buffer, size_t *lenp){	size_t len;	char *p, c=0;	char String[256];		if ((table->data==0) || (table->maxlen==0) || (*lenp==0) ||	    ((filp->f_pos!=0) && (write==0))) {		*lenp = 0;		return 0;	}		if (write!=0) {		len = 0;		p = buffer;		while (len < *lenp) {			if(get_user(c, p++))				return -EFAULT;			if (c == 0 || c == '\n')				break;			len++;		}		if (len >= table->maxlen)			len = table->maxlen-1;		if(copy_from_user(String, buffer,(unsigned long)len))			return -EFAULT;		((char *) String)[len] = 0;		filp->f_pos += *lenp;		AddDynamicString(String);	} else {		GetSecureString(String);		len = strlen(String);		if (len > table->maxlen)			len = table->maxlen;		if (len > *lenp)			len = *lenp;		if (len!=0)			if(copy_to_user(buffer, String,(unsigned long)len))				return -EFAULT;		if (len < *lenp) {			if(put_user('\n', ((char *) buffer) + len))				return -EFAULT;			len++;		}		*lenp = len;		filp->f_pos += len;	}	return 0;}static int sysctl_SecureString (/*@unused@*/ctl_table *table, 				/*@unused@*/int *name, 				/*@unused@*/int nlen,		  		/*@unused@*/void *oldval, 		  		/*@unused@*/size_t *oldlenp,		  		/*@unused@*/void *newval, 		  		/*@unused@*/size_t newlen, 		  		/*@unused@*/void **context){	return -ENOSYS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -