libprews.c
来自「一套很值得分析的短信SMS开发源代码。是我今年早些时候从taobao上买来的。但」· C语言 代码 · 共 180 行
C
180 行
/* Copyright 2004-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <netware.h>
#include <library.h>
#include <nks/synch.h>
#include "novsock2.h"
#include "apr_pools.h"
#include "apr_private.h"
/* library-private data...*/
int gLibId = -1;
void *gLibHandle = (void *) NULL;
NXMutex_t *gLibLock = (NXMutex_t *) NULL;
/* internal library function prototypes...*/
int DisposeLibraryData(void *);
int _NonAppStart
(
void *NLMHandle,
void *errorScreen,
const char *cmdLine,
const char *loadDirPath,
size_t uninitializedDataLength,
void *NLMFileHandle,
int (*readRoutineP)( int conn, void *fileHandle, size_t offset,
size_t nbytes, size_t *bytesRead, void *buffer ),
size_t customDataOffset,
size_t customDataSize,
int messageCount,
const char **messages
)
{
WSADATA wsaData;
apr_status_t status;
NX_LOCK_INFO_ALLOC(liblock, "Per-Application Data Lock", 0);
#pragma unused(cmdLine)
#pragma unused(loadDirPath)
#pragma unused(uninitializedDataLength)
#pragma unused(NLMFileHandle)
#pragma unused(readRoutineP)
#pragma unused(customDataOffset)
#pragma unused(customDataSize)
#pragma unused(messageCount)
#pragma unused(messages)
gLibId = register_library(DisposeLibraryData);
if (gLibId < -1)
{
OutputToScreen(errorScreen, "Unable to register library with kernel.\n");
return -1;
}
gLibHandle = NLMHandle;
gLibLock = NXMutexAlloc(0, 0, &liblock);
if (!gLibLock)
{
OutputToScreen(errorScreen, "Unable to allocate library data lock.\n");
return -1;
}
apr_netware_setup_time();
if ((status = apr_pool_initialize()) != APR_SUCCESS)
return status;
return WSAStartup((WORD) MAKEWORD(2, 0), &wsaData);
}
void _NonAppStop( void )
{
apr_pool_terminate();
WSACleanup();
unregister_library(gLibId);
NXMutexFree(gLibLock);
}
int _NonAppCheckUnload( void )
{
return 0;
}
int register_NLM(void *NLMHandle)
{
APP_DATA *app_data = (APP_DATA*) get_app_data(gLibId);
NXLock(gLibLock);
if (!app_data) {
app_data = (APP_DATA*)library_malloc(gLibHandle, sizeof(APP_DATA));
if (app_data) {
memset (app_data, 0, sizeof(APP_DATA));
set_app_data(gLibId, app_data);
app_data->gs_nlmhandle = NLMHandle;
}
}
if (app_data && (!app_data->initialized)) {
app_data->initialized = 1;
NXUnlock(gLibLock);
return 0;
}
NXUnlock(gLibLock);
return 1;
}
int unregister_NLM(void *NLMHandle)
{
APP_DATA *app_data = (APP_DATA*) get_app_data(gLibId);
NXLock(gLibLock);
if (app_data) {
app_data->initialized = 0;
NXUnlock(gLibLock);
return 0;
}
NXUnlock(gLibLock);
return 1;
}
int DisposeLibraryData(void *data)
{
if (data)
{
library_free(data);
}
return 0;
}
int setGlobalPool(void *data)
{
APP_DATA *app_data = (APP_DATA*) get_app_data(gLibId);
NXLock(gLibLock);
if (app_data && !app_data->gPool) {
app_data->gPool = data;
}
NXUnlock(gLibLock);
return 1;
}
void* getGlobalPool()
{
APP_DATA *app_data = (APP_DATA*) get_app_data(gLibId);
if (app_data) {
return app_data->gPool;
}
return NULL;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?