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

📄 cryptlib.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 2 页
字号:
	struct CRYPTO_dynlock_value *l, const char *file, int line))	{	dynlock_lock_callback=func;	}void CRYPTO_set_dynlock_destroy_callback(void (*func)	(struct CRYPTO_dynlock_value *l, const char *file, int line))	{	dynlock_destroy_callback=func;	}void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file,		int line)	{	return(locking_callback);	}int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type,					  const char *file,int line)	{	return(add_lock_callback);	}void CRYPTO_set_locking_callback(void (*func)(int mode,int type,					      const char *file,int line))	{	locking_callback=func;	}void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type,					      const char *file,int line))	{	add_lock_callback=func;	}unsigned long (*CRYPTO_get_id_callback(void))(void)	{	return(id_callback);	}void CRYPTO_set_id_callback(unsigned long (*func)(void))	{	id_callback=func;	}unsigned long CRYPTO_thread_id(void)	{	unsigned long ret=0;	if (id_callback == NULL)		{#ifdef OPENSSL_SYS_WIN16		ret=(unsigned long)GetCurrentTask();#elif defined(OPENSSL_SYS_WIN32)		ret=(unsigned long)GetCurrentThreadId();#elif defined(GETPID_IS_MEANINGLESS)		ret=1L;#else		ret=(unsigned long)getpid();#endif		}	else		ret=id_callback();	return(ret);	}void CRYPTO_lock(int mode, int type, const char *file, int line)	{#ifdef LOCK_DEBUG		{		char *rw_text,*operation_text;		if (mode & CRYPTO_LOCK)			operation_text="lock  ";		else if (mode & CRYPTO_UNLOCK)			operation_text="unlock";		else			operation_text="ERROR ";		if (mode & CRYPTO_READ)			rw_text="r";		else if (mode & CRYPTO_WRITE)			rw_text="w";		else			rw_text="ERROR";		fprintf(stderr,"lock:%08lx:(%s)%s %-18s %s:%d\n",			CRYPTO_thread_id(), rw_text, operation_text,			CRYPTO_get_lock_name(type), file, line);		}#endif	if (type < 0)		{		if (dynlock_lock_callback != NULL)			{			struct CRYPTO_dynlock_value *pointer				= CRYPTO_get_dynlock_value(type);			OPENSSL_assert(pointer != NULL);			dynlock_lock_callback(mode, pointer, file, line);			CRYPTO_destroy_dynlockid(type);			}		}	else		if (locking_callback != NULL)			locking_callback(mode,type,file,line);	}int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,	     int line)	{	int ret = 0;	if (add_lock_callback != NULL)		{#ifdef LOCK_DEBUG		int before= *pointer;#endif		ret=add_lock_callback(pointer,amount,type,file,line);#ifdef LOCK_DEBUG		fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n",			CRYPTO_thread_id(),			before,amount,ret,			CRYPTO_get_lock_name(type),			file,line);#endif		}	else		{		CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,file,line);		ret= *pointer+amount;#ifdef LOCK_DEBUG		fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n",			CRYPTO_thread_id(),			*pointer,amount,ret,			CRYPTO_get_lock_name(type),			file,line);#endif		*pointer=ret;		CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,file,line);		}	return(ret);	}const char *CRYPTO_get_lock_name(int type)	{	if (type < 0)		return("dynamic");	else if (type < CRYPTO_NUM_LOCKS)		return(lock_names[type]);	else if (type-CRYPTO_NUM_LOCKS > sk_num(app_locks))		return("ERROR");	else		return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS));	}#if	defined(__i386)   || defined(__i386__)   || defined(_M_IX86) || \	defined(__INTEL__) || \	defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64)unsigned long  OPENSSL_ia32cap_P=0;unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; }#if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY)#define OPENSSL_CPUID_SETUPvoid OPENSSL_cpuid_setup(void){ static int trigger=0;  unsigned long OPENSSL_ia32_cpuid(void);  char *env;    if (trigger)	return;    trigger=1;    if ((env=getenv("OPENSSL_ia32cap")))	OPENSSL_ia32cap_P = strtoul(env,NULL,0)|(1<<10);    else	OPENSSL_ia32cap_P = OPENSSL_ia32_cpuid()|(1<<10);    /*     * |(1<<10) sets a reserved bit to signal that variable     * was initialized already... This is to avoid interference     * with cpuid snippets in ELF .init segment.     */}#endif#elseunsigned long *OPENSSL_ia32cap_loc(void) { return NULL; }#endifint OPENSSL_NONPIC_relocated = 0;#if !defined(OPENSSL_CPUID_SETUP)void OPENSSL_cpuid_setup(void) {}#endif#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL)#ifdef __CYGWIN__/* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */#include <windows.h>#endif/* All we really need to do is remove the 'error' state when a thread * detaches */BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,	     LPVOID lpvReserved)	{	switch(fdwReason)		{	case DLL_PROCESS_ATTACH:		OPENSSL_cpuid_setup();#if defined(_WIN32_WINNT)		{		IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL;		IMAGE_NT_HEADERS *nt_headers;		if (dos_header->e_magic==IMAGE_DOS_SIGNATURE)			{			nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header						+ dos_header->e_lfanew);			if (nt_headers->Signature==IMAGE_NT_SIGNATURE &&			    hinstDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase))				OPENSSL_NONPIC_relocated=1;			}		}#endif		break;	case DLL_THREAD_ATTACH:		break;	case DLL_THREAD_DETACH:		ERR_remove_state(0);		break;	case DLL_PROCESS_DETACH:		break;		}	return(TRUE);	}#endif#if defined(_WIN32) && !defined(__CYGWIN__)#include <tchar.h>#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333int OPENSSL_isservice(void){ HWINSTA h;  DWORD len;  WCHAR *name;    (void)GetDesktopWindow(); /* return value is ignored */    h = GetProcessWindowStation();    if (h==NULL) return -1;    if (GetUserObjectInformationW (h,UOI_NAME,NULL,0,&len) ||	GetLastError() != ERROR_INSUFFICIENT_BUFFER)	return -1;    if (len>512) return -1;		/* paranoia */    len++,len&=~1;			/* paranoia */#ifdef _MSC_VER    name=(WCHAR *)_alloca(len+sizeof(WCHAR));#else    name=(WCHAR *)alloca(len+sizeof(WCHAR));#endif    if (!GetUserObjectInformationW (h,UOI_NAME,name,len,&len))	return -1;    len++,len&=~1;			/* paranoia */    name[len/sizeof(WCHAR)]=L'\0';	/* paranoia */#if 1    /* This doesn't cover "interactive" services [working with real     * WinSta0's] nor programs started non-interactively by Task     * Scheduler [those are working with SAWinSta]. */    if (wcsstr(name,L"Service-0x"))	return 1;#else    /* This covers all non-interactive programs such as services. */    if (!wcsstr(name,L"WinSta0"))	return 1;#endif    else				return 0;}#elseint OPENSSL_isservice(void) { return 0; }#endifvoid OPENSSL_showfatal (const char *fmta,...){ va_list ap;  TCHAR buf[256];  const TCHAR *fmt;#ifdef STD_ERROR_HANDLE	/* what a dirty trick! */  HANDLE h;    if ((h=GetStdHandle(STD_ERROR_HANDLE)) != NULL &&	GetFileType(h)!=FILE_TYPE_UNKNOWN)    {	/* must be console application */	va_start (ap,fmta);	vfprintf (stderr,fmta,ap);	va_end (ap);	return;    }#endif    if (sizeof(TCHAR)==sizeof(char))	fmt=(const TCHAR *)fmta;    else do    { int    keepgoing;      size_t len_0=strlen(fmta)+1,i;      WCHAR *fmtw;#ifdef _MSC_VER	fmtw = (WCHAR *)_alloca (len_0*sizeof(WCHAR));#else	fmtw = (WCHAR *)alloca (len_0*sizeof(WCHAR));#endif	if (fmtw == NULL) { fmt=(const TCHAR *)L"no stack?"; break; }#ifndef OPENSSL_NO_MULTIBYTE	if (!MultiByteToWideChar(CP_ACP,0,fmta,len_0,fmtw,len_0))#endif	    for (i=0;i<len_0;i++) fmtw[i]=(WCHAR)fmta[i];	for (i=0;i<len_0;i++)	{   if (fmtw[i]==L'%') do	    {	keepgoing=0;		switch (fmtw[i+1])		{   case L'0': case L'1': case L'2': case L'3': case L'4':		    case L'5': case L'6': case L'7': case L'8': case L'9':		    case L'.': case L'*':		    case L'-':	i++; keepgoing=1; break;		    case L's':	fmtw[i+1]=L'S';   break;		    case L'S':	fmtw[i+1]=L's';   break;		    case L'c':	fmtw[i+1]=L'C';   break;		    case L'C':	fmtw[i+1]=L'c';   break;		}	    } while (keepgoing);	}	fmt = (const TCHAR *)fmtw;    } while (0);    va_start (ap,fmta);    _vsntprintf (buf,sizeof(buf)/sizeof(TCHAR)-1,fmt,ap);    buf [sizeof(buf)/sizeof(TCHAR)-1] = _T('\0');    va_end (ap);#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333    /* this -------------v--- guards NT-specific calls */    if (GetVersion() < 0x80000000 && OPENSSL_isservice())    {	HANDLE h = RegisterEventSource(0,_T("OPENSSL"));	const TCHAR *pmsg=buf;	ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0);	DeregisterEventSource(h);    }    else#endif	MessageBox (NULL,buf,_T("OpenSSL: FATAL"),MB_OK|MB_ICONSTOP);}#elsevoid OPENSSL_showfatal (const char *fmta,...){ va_list ap;    va_start (ap,fmta);    vfprintf (stderr,fmta,ap);    va_end (ap);}int OPENSSL_isservice (void) { return 0; }#endifvoid OpenSSLDie(const char *file,int line,const char *assertion)	{	OPENSSL_showfatal(		"%s(%d): OpenSSL internal error, assertion failed: %s\n",		file,line,assertion);	abort();	}void *OPENSSL_stderr(void)	{ return stderr; }

⌨️ 快捷键说明

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