本文整理汇总了C++中LM_NOTICE函数的典型用法代码示例。如果您正苦于以下问题:C++ LM_NOTICE函数的具体用法?C++ LM_NOTICE怎么用?C++ LM_NOTICE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LM_NOTICE函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: destroy
/*
* destroy function
*/
static void destroy(void)
{
LM_NOTICE("destroy module ...\n");
close(sockets.unix_sock);
close(sockets.udp_sock);
}
开发者ID:dynamicpacket-public,项目名称:opensips17,代码行数:9,代码来源:event_datagram.c
示例2: mod_init
/*! \brief
* Init module function
*/
static int mod_init(void)
{
if(register_mi_mod(exports.name, mi_cmds)!=0)
{
LM_ERR("failed to register MI commands\n");
return -1;
}
/* Group matching feature */
if (file == NULL) {
LM_NOTICE("'file' parameter is not set, group matching disabled\n");
} else {
/* Create and init the lock */
reload_lock = lock_alloc();
if (reload_lock == NULL) {
LM_ERR("cannot allocate reload_lock\n");
goto err;
}
if (lock_init(reload_lock) == NULL) {
LM_ERR("cannot init the reload_lock\n");
lock_dealloc(reload_lock);
goto err;
}
/* PCRE options */
if (pcre_caseless != 0) {
LM_DBG("PCRE CASELESS enabled\n");
pcre_options = pcre_options | PCRE_CASELESS;
}
if (pcre_multiline != 0) {
LM_DBG("PCRE MULTILINE enabled\n");
pcre_options = pcre_options | PCRE_MULTILINE;
}
if (pcre_dotall != 0) {
LM_DBG("PCRE DOTALL enabled\n");
pcre_options = pcre_options | PCRE_DOTALL;
}
if (pcre_extended != 0) {
LM_DBG("PCRE EXTENDED enabled\n");
pcre_options = pcre_options | PCRE_EXTENDED;
}
LM_DBG("PCRE options: %i\n", pcre_options);
/* Pointer to pcres */
if ((pcres_addr = shm_malloc(sizeof(pcre **))) == 0) {
LM_ERR("no memory for pcres_addr\n");
goto err;
}
/* Integer containing the number of pcres */
if ((num_pcres = shm_malloc(sizeof(int))) == 0) {
LM_ERR("no memory for num_pcres\n");
goto err;
}
/* Load the pcres */
LM_DBG("loading pcres...\n");
if (load_pcres(START)) {
LM_ERR("failed to load pcres\n");
goto err;
}
}
return 0;
err:
free_shared_memory();
return -1;
}
开发者ID:4N7HR4X,项目名称:kamailio,代码行数:72,代码来源:regex_mod.c
示例3: is_other_contact_f
int is_other_contact_f(struct sip_msg* msg, char* _d, char *_s)
{
pv_spec_p spec = (pv_spec_p)_s;
struct usr_avp *avp = NULL;
urecord_t *r = NULL;
str ip, contact;
str uri, aor;
ucontact_t *c;
contact_t* ct;
int exp, found;
udomain_t* ud = (udomain_t*)_d;
if (parse_message(msg) < 0) {
LM_ERR("unable to parse message\n");
return -2;
}
if (!ud) {
LM_ERR("no location specified\n");
return -2;
}
/* msg doesn't have contacts */
if (!msg->contact ||
!(ct = (((contact_body_t*)msg->contact->parsed)->contacts)))
return -1;
while (ct) {
/* if expires is 0 */
calc_contact_expires(msg, ct->expires, &exp, NULL);
if (exp)
break;
ct = ct->next;
}
if (!ct) {
LM_DBG("contact has expire 0\n");
return -1;
}
uri = get_to(msg)->uri;
if (extract_aor(&uri, &aor,0,0) < 0) {
LM_ERR("failed to extract AOR record\n");
return -2;
}
ul.lock_udomain(ud, &aor);
ul.get_urecord(ud, &aor, &r);
if (!r) {
/* dont't test anything */
LM_DBG("no contact found for aor=<%.*s>\n", aor.len, aor.s);
found = -1;
goto end;
} else {
c = r->contacts;
}
while (c) {
if (!c->received.len || !c->received.s || c->received.len < 4 /* sip:*/) {
c = c->next;
continue;
}
contact.s = c->received.s + 4;
/* check for "sips:" */
if (*contact.s == ':') {
contact.len = c->received.len - 5;
contact.s++;
} else {
/* skip "sip:" */
contact.len = c->received.len - 4;
}
avp = NULL;
found = 0;
/* the ip should always be a string */
while ((avp = search_first_avp(spec->pvp.pvn.u.isname.type,
spec->pvp.pvn.u.isname.name.n, (int_str *)&ip, avp))!=0) {
if (!(avp->flags & AVP_VAL_STR)) {
LM_NOTICE("avp value should be string\n");
continue;
}
if ((contact.len == ip.len || (contact.len>ip.len && contact.s[ip.len]==':'))
&& !memcmp(contact.s, ip.s, ip.len)) {
found = 1;
break;
}
}
if (!found) {
LM_DBG("no contact <%.*s> registered earlier\n",
contact.len, contact.s);
found = 1;
goto end;
}
c = c->next;
}
found = -1;
//.........这里部分代码省略.........
开发者ID:KISSMonX,项目名称:opensips,代码行数:101,代码来源:save.c
示例4: main
//.........这里部分代码省略.........
/* get uid/gid */
if (user){
if (user2uid(&uid, &gid, user)<0){
LM_ERR("bad user name/uid number: -u %s\n", user);
goto error00;
}
}
if (group){
if (group2gid(&gid, group)<0){
LM_ERR("bad group name/gid number: -u %s\n", group);
goto error00;
}
}
if (fix_all_socket_lists()!=0){
LM_ERR("failed to initialize list addresses\n");
goto error00;
}
/* print all the listen addresses */
printf("Listening on \n");
print_all_socket_lists();
printf("Aliases: \n");
/*print_aliases();*/
print_aliases();
printf("\n");
if (dont_fork){
LM_WARN("no fork mode %s\n",
(udp_listen)?(
(udp_listen->next)?" and more than one listen address found"
"(will use only the first one)":""
):"and no udp listen address found" );
}
if (config_check){
LM_NOTICE("config file ok, exiting...\n");
return 0;
}
time(&startup_time);
/*init shm mallocs
* this must be here
* -to allow setting shm mem size from the command line
* => if shm_mem should be settable from the cfg file move
* everything after
* -it must be also before init_timer and init_tcp
* -it must be after we know uid (so that in the SYSV sems case,
* the sems will have the correct euid)
* --andrei */
if (init_shm_mallocs()==-1)
goto error;
/*init timer, before parsing the cfg!*/
if (init_timer()<0){
LM_CRIT("could not initialize timer, exiting...\n");
goto error;
}
#ifdef USE_TCP
if (!tcp_disable){
/*init tcp*/
if (init_tcp()<0){
LM_CRIT("could not initialize tcp, exiting...\n");
goto error;
}
}
#ifdef USE_TLS
开发者ID:bluemutedwisdom,项目名称:OpenSIPS,代码行数:67,代码来源:main.c
示例5: destroy
/*
* destroy function
*/
static void destroy(void)
{
LM_NOTICE("destroy module cachedb_redis ...\n");
cachedb_end_connections(&cache_mod_name);
return;
}
开发者ID:aerringer,项目名称:opensips,代码行数:9,代码来源:cachedb_redis.c
示例6: worker_reg_send_impl
int worker_reg_send_impl(ei_cnode *ec, int s,int wpid)
{
str server = STR_NULL;
ei_x_buff emsg;
struct msghdr msgh;
struct iovec cnt[6];
int rc;
memset((void*)&emsg,0,sizeof(emsg));
memset((void*)&msgh,0,sizeof(msgh));
/* server name length */
cnt[0].iov_base = &server.len;
cnt[0].iov_len = sizeof(int);
/* Erlang args size */
cnt[1].iov_base = &emsg.buffsz;
cnt[1].iov_len = sizeof(int);
/* get data size */
msgh.msg_iov = cnt;
msgh.msg_iovlen = 2;
while ((rc = recvmsg(s, &msgh, MSG_PEEK)) == -1 && errno == EAGAIN)
;
if (rc == -1){
LM_ERR("recvmsg failed (socket=%d): %s\n",s,strerror(errno));
return -1;
}
/* allocate space */
server.s = (char*)pkg_malloc(server.len+1);
if (!server.s) {
LM_ERR("not enough memory\n");
goto err;
}
emsg.buff = (char*)malloc(emsg.buffsz);
if (!emsg.buff) {
LM_ERR("malloc: not enough memory\n");
goto err;
}
/* buffers */
cnt[2].iov_base = server.s;
cnt[2].iov_len = server.len;
cnt[3].iov_base = emsg.buff;
cnt[3].iov_len = emsg.buffsz;
/* get whole data */
msgh.msg_iovlen = 4;
while ((rc = recvmsg(s, &msgh, MSG_WAITALL)) == -1 && errno == EAGAIN)
;
if (rc == -1){
LM_ERR("recvmsg failed (socket=%d): %s\n",s,strerror(errno));
goto err;
}
/* fix str */
server.s[server.len] = 0;
if(!enode) {
LM_NOTICE("there is no connected Erlang node\n");
goto err;
}
LM_DBG(">> {%.*s,'%s'} ! emsg\n",STR_FMT(&server),enode->conn.nodename);
EI_X_BUFF_PRINT(&emsg);
/* do ERL_REG_SEND */
if ((rc = ei_reg_send(ec,enode->sockfd,server.s,emsg.buff,emsg.buffsz)) == ERL_ERROR)
{
if (erl_errno)
{
LM_ERR("ei_reg_send failed on node=<%s> socket=<%d>: %s\n",enode->conn.nodename,enode->sockfd,strerror(erl_errno));
}
else if (errno)
{
LM_ERR("ei_reg_send failed on node=<%s> socket=<%d>: %s\n",enode->conn.nodename,enode->sockfd,strerror(errno));
}
else
{
LM_ERR("ei_reg_send failed on node=<%s> socket=<%d>, Unknown error.\n",ec->thisalivename,enode->sockfd);
}
}
pkg_free(server.s);
free(emsg.buff);
return 0;
err:
pkg_free(server.s);
free(emsg.buff);
//.........这里部分代码省略.........
开发者ID:AlessioCasco,项目名称:kamailio,代码行数:101,代码来源:worker.c
示例7: evapi_recv_client
void evapi_recv_client(struct ev_loop *loop, struct ev_io *watcher, int revents)
{
#define CLIENT_BUFFER_SIZE 4096
char rbuffer[CLIENT_BUFFER_SIZE];
ssize_t rlen;
int i, k;
evapi_env_t evenv;
str frame;
if(EV_ERROR & revents) {
perror("received invalid event\n");
return;
}
/* read message from client */
rlen = recv(watcher->fd, rbuffer, CLIENT_BUFFER_SIZE-1, 0);
if(rlen < 0) {
LM_ERR("cannot read the client message\n");
return;
}
for(i=0; i<EVAPI_MAX_CLIENTS; i++) {
if(_evapi_clients[i].connected==1 && _evapi_clients[i].sock==watcher->fd) {
break;
}
}
if(i==EVAPI_MAX_CLIENTS) {
LM_ERR("cannot lookup client socket %d\n", watcher->fd);
return;
}
evapi_env_reset(&evenv);
if(rlen == 0) {
/* client is gone */
evenv.eset = 1;
evenv.conidx = i;
evapi_run_cfg_route(&evenv, _evapi_rts.con_closed);
_evapi_clients[i].connected = 0;
_evapi_clients[i].sock = 0;
ev_io_stop(loop, watcher);
free(watcher);
LM_INFO("client closing connection - pos [%d] addr [%s:%d]\n",
i, _evapi_clients[i].src_addr, _evapi_clients[i].src_port);
return;
}
rbuffer[rlen] = '\0';
LM_NOTICE("{%d} [%s:%d] - received [%.*s]\n",
i, _evapi_clients[i].src_addr, _evapi_clients[i].src_port,
(int)rlen, rbuffer);
evenv.conidx = i;
evenv.eset = 1;
if(_evapi_netstring_format) {
/* netstring decapsulation */
k = 0;
while(k<rlen) {
frame.len = 0;
while(k<rlen) {
if(rbuffer[k]==' ' || rbuffer[k]=='\t'
|| rbuffer[k]=='\r' || rbuffer[k]=='\n')
k++;
else break;
}
if(k==rlen) return;
while(k<rlen) {
if(rbuffer[k]>='0' && rbuffer[k]<='9') {
frame.len = frame.len*10 + rbuffer[k] - '0';
} else {
if(rbuffer[k]==':')
break;
/* invalid character - discard the rest */
return;
}
k++;
}
if(k==rlen || frame.len<=0) return;
if(frame.len + k>=rlen) return;
k++;
frame.s = rbuffer + k;
if(frame.s[frame.len]!=',') return;
frame.s[frame.len] = '\0';
k += frame.len ;
evenv.msg.s = frame.s;
evenv.msg.len = frame.len;
evapi_run_cfg_route(&evenv, _evapi_rts.msg_received);
k++;
}
} else {
evenv.msg.s = rbuffer;
evenv.msg.len = rlen;
evapi_run_cfg_route(&evenv, _evapi_rts.msg_received);
}
}
开发者ID:AndreyRybkin,项目名称:kamailio,代码行数:95,代码来源:evapi_dispatch.c
示例8: pv_add_json
int pv_add_json ( pv_param_t* pvp, json_t * obj )
{
json_t *dest;
json_name * id;
pv_json_t * var;
json_tag * tag;
int poz;
id = (json_name *) pvp->pvn.u.dname;
var = get_pv_json(pvp);
if( var == NULL )
{
if( id->tags )
{
LM_ERR("Object is not initialized yet\n");
return -1;
}
var = (pv_json_t *) pkg_malloc(sizeof(pv_json_t));
if( var == NULL )
{
LM_ERR("Out of memory\n");
return -1;
}
memset(var,0,sizeof(pv_json_t));
var->name = id->name;
var->next = all;
var->data = obj;
all = var;
return 0;
}
if( id ->tags == NULL)
{
if( var->data )
json_object_put(var->data);
var->data = obj;
return 0;
}
dest = get_object(var, pvp, &tag, 1);
if( dest == NULL )
{
LM_NOTICE("Could not find object with that path\n");
return -1;
}
if( tag->type & TAG_KEY )
{
memcpy(buff,tag->key.s,tag->key.len);
buff[tag->key.len] = 0;
if( obj == NULL )
json_object_object_del(dest,buff);
else
json_object_object_add(dest,buff,obj);
}
if( tag->type & TAG_IDX )
{
poz = tag->idx;
if( tag->type & TAG_END )
{
if( obj == NULL)
{
LM_ERR("Invalid parameter for deletion\n");
return -1;
}
json_object_array_add(dest,obj);
return 0;
}
if( poz < 0 )
poz += json_object_array_length(dest);
if( poz<0 || poz >= json_object_array_length(dest))
{
LM_ERR("Attempting to replace at invalid index in array:%d\n",
poz);
return -1;
//.........这里部分代码省略.........
开发者ID:GeorgeShaw,项目名称:opensips,代码行数:101,代码来源:json.c
示例9: diameter_is_user_in
//.........这里部分代码省略.........
if( AAAAddAVPToMessage(req, avp, 0)!= AAA_ERR_SUCCESS)
{
LM_ERR("avp not added \n");
goto error1;
}
/* SIP_MSGID AVP */
LM_DBG("******* m_id=%d\n", _m->id);
tmp = _m->id;
if( (avp=AAACreateAVP(AVP_SIP_MSGID, 0, 0, (char*)(&tmp),
sizeof(tmp), AVP_DUPLICATE_DATA)) == 0)
{
LM_ERR("no more pkg memory!\n");
goto error;
}
if( AAAAddAVPToMessage(req, avp, 0)!= AAA_ERR_SUCCESS)
{
LM_ERR("avp not added \n");
goto error1;
}
/* ServiceType AVP */
if( (avp=AAACreateAVP(AVP_Service_Type, 0, 0, SIP_GROUP_CHECK,
SERVICE_LEN, AVP_DUPLICATE_DATA)) == 0)
{
LM_ERR("no more pkg memory!\n");
goto error;
}
if( AAAAddAVPToMessage(req, avp, 0)!= AAA_ERR_SUCCESS)
{
LM_ERR("avp not added \n");
goto error1;
}
/* Destination-Realm AVP */
uri = *(GET_RURI(_m));
parse_uri(uri.s, uri.len, &puri);
if( (avp=AAACreateAVP(AVP_Destination_Realm, 0, 0, puri.host.s,
puri.host.len, AVP_DUPLICATE_DATA)) == 0)
{
LM_ERR("no more pkg memory!\n");
goto error;
}
if( AAAAddAVPToMessage(req, avp, 0)!= AAA_ERR_SUCCESS)
{
LM_ERR("avp not added \n");
goto error1;
}
#ifdef DEBUG
AAAPrintMessage(req);
#endif
/* build a AAA message buffer */
if(AAABuildMsgBuffer(req) != AAA_ERR_SUCCESS)
{
LM_ERR("message buffer not created\n");
goto error;
}
if(sockfd==AAA_NO_CONNECTION)
{
sockfd = init_mytcp(diameter_client_host, diameter_client_port);
if(sockfd==AAA_NO_CONNECTION)
{
LM_ERR("failed to reconnect to Diameter client\n");
goto error;
}
}
ret =tcp_send_recv(sockfd, req->buf.s, req->buf.len, rb, _m->id);
if(ret == AAA_CONN_CLOSED)
{
LM_NOTICE("connection to Diameter client closed."
"It will be reopened by the next request\n");
close(sockfd);
sockfd = AAA_NO_CONNECTION;
goto error;
}
if(ret != AAA_USER_IN_GROUP)
{
LM_ERR("message sending to the DIAMETER backend authorization server"
"failed or user is not in group\n");
goto error;
}
AAAFreeMessage(&req);
return 1;
error1:
AAAFreeAVP(&avp);
error:
AAAFreeMessage(&req);
return -1;
}
开发者ID:aallamaa,项目名称:kamailio,代码行数:101,代码来源:user_in.c
示例10: mod_init
static int mod_init(void)
{
JavaVMInitArgs vm_args;
jint res;
JavaVMOption *options;
char **opts;
int nOptions;
if (force_cmd_exec < 0 || force_cmd_exec > 1)
{
LM_ERR("Parameter force_cmd_exec should be either 0 or 1\n");
return -1;
}
if (force_cmd_exec)
{
LM_NOTICE("%s: Parameter force_cmd_exec may cause a memory leaks if used from embedded languages\n", APP_NAME);
}
options = (JavaVMOption *)pkg_malloc(sizeof(JavaVMOption));
if (!options)
{
LM_ERR("pkg_malloc() failed: Couldn't initialize Java VM: Not enough memory\n");
return -1;
}
memset(options, 0, sizeof(JavaVMOption));
LM_INFO("Initializing Java VM with options: %s\n", java_options_str.s);
opts = split(java_options_str.s, " ");
for (nOptions=0; opts[nOptions] != NULL; nOptions++)
{
options[nOptions].optionString = opts[nOptions];
}
/* IMPORTANT: specify vm_args version # if you use JDK1.1.2 and beyond */
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = nOptions;
vm_args.ignoreUnrecognized = JNI_FALSE;
vm_args.options = options;
res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args);
if (res < 0)
{
handle_VM_init_failure(res);
return -1;
}
LM_INFO("%s: Java VM initialization OK\n", APP_NAME);
// attach to current thread
(*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
if ((*env)->ExceptionCheck(env))
{
handle_exception();
return -1;
}
KamailioClass = (*env)->FindClass(env, class_name.s);
if (!KamailioClass || (*env)->ExceptionCheck(env))
{
handle_exception();
(*jvm)->DetachCurrentThread(jvm);
return -1;
}
KamailioClassRef = (*env)->NewGlobalRef(env, KamailioClass);
if (!KamailioClassRef || (*env)->ExceptionCheck(env))
{
handle_exception();
(*jvm)->DetachCurrentThread(jvm);
return -1;
}
KamailioID = (*env)->GetMethodID(env, KamailioClass, "<init>", "()V");
if (!KamailioID || (*env)->ExceptionCheck(env))
{
handle_exception();
(*jvm)->DetachCurrentThread(jvm);
return -1;
}
// calling constructor
KamailioClassInstance = (*env)->NewObject(env, KamailioClass, KamailioID);
if (!KamailioClassInstance || (*env)->ExceptionCheck(env))
{
handle_exception();
(*jvm)->DetachCurrentThread(jvm);
return -1;
}
// keep a reference to kamailio class instance
KamailioClassInstanceRef = (*env)->NewGlobalRef(env, KamailioClassInstance);
if (!KamailioClassInstanceRef || (*env)->ExceptionCheck(env))
{
handle_exception();
(*jvm)->DetachCurrentThread(jvm);
return -1;
}
//.........这里部分代码省略.........
开发者ID:Jared-Prime,项目名称:kamailio,代码行数:101,代码来源:java_mod.c
示例11: get_object
json_t * get_object(pv_json_t * var, pv_param_t* pvp , json_tag ** tag,
int report_err )
{
json_name * id = (json_name *) pvp->pvn.u.dname;
json_t * cur_obj, * last_obj = 0;
json_tag * cur_tag, * last_tag = 0;
int poz;
cur_tag = id->tags;
cur_obj = var->data;
while( cur_tag )
{
last_tag = cur_tag;
last_obj = cur_obj;
if( cur_tag->type & TAG_KEY )
{
memcpy( buff, cur_tag->key.s, cur_tag->key.len );
buff[cur_tag->key.len] = 0;
if( cur_obj == NULL ||
!json_object_is_type( cur_obj, json_type_object ) )
goto error;
#if JSON_LIB_VERSION < 10
cur_obj = json_object_object_get( cur_obj, buff );
if( cur_obj == NULL && tag == NULL)
goto error;
#else
if (!json_object_object_get_ex( cur_obj,buff, &cur_obj ) &&
tag == NULL)
goto error;
#endif
}
if( cur_tag->type & TAG_IDX )
{
if( cur_obj == NULL ||
!json_object_is_type( cur_obj, json_type_array ) )
goto error;
poz = cur_tag->idx;
if( cur_tag->type & TAG_END )
{
poz = json_object_array_length(cur_obj);
}
else
{
if( poz < 0 )
poz += json_object_array_length(cur_obj);
}
if( poz < 0 )
goto error;
cur_obj = json_object_array_get_idx( cur_obj, poz );
if( cur_obj == NULL && tag == NULL)
goto error;
}
cur_tag = cur_tag->next;
}
if( tag == NULL )
{
return cur_obj;
}
else
{
*tag = last_tag;
return last_obj;
}
error:
if( report_err)
{
LM_NOTICE("Trying to get a value from a json of incorrect type\n");
if(var->data)
LM_NOTICE("Object is:\n%s\n",
json_object_to_json_string(var->data));
else
LM_NOTICE("Object is null\n");
print_tag_list( id->tags, cur_tag->next, 1);
}
//.........这里部分代码省略.........
开发者ID:GeorgeShaw,项目名称:opensips,代码行数:101,代码来源:json.c
示例12: backup_config
static int backup_config(void) {
FILE * from, * to;
char * backup_file, ch;
LM_INFO("start configuration backup\n");
if((backup_file = pkg_malloc(strlen(config_file) + strlen (".bak") + 1)) == NULL){
PKG_MEM_ERROR;
return -1;
}
if(!strcpy(backup_file, config_file)){
LM_ERR("can't copy filename\n");
goto errout;
}
if(!strcat(backup_file, ".bak")){
LM_ERR("can't attach suffix\n");
goto errout;
}
/* open source file */
if ((from = fopen(config_file, "rb"))==NULL) {
LM_ERR("Cannot open source file.\n");
goto errout;
}
/* open destination file */
if ((to = fopen(backup_file, "wb"))==NULL) {
LM_ERR("Cannot open destination file.\n");
fclose(from);
goto errout;
}
/* copy the file */
while (!feof(from)) {
ch = fgetc(from);
if (ferror(from)) {
LM_ERR("Error reading source file.\n");
goto errclose;
}
if (!feof(from)) fputc(ch, to);
if (ferror(to)) {
LM_ERR("Error writing destination file.\n");
goto errclose;
}
}
if (fclose(from)==EOF) {
LM_ERR("Error closing source file.\n");
fclose(to);
goto errout;
}
if (fclose(to)==EOF) {
LM_ERR("Error closing destination file.\n");
goto errout;
}
LM_NOTICE("backup written to %s\n", backup_file);
pkg_free(backup_file);
return 0;
errclose:
/* close the files so that resource leak is prevented ; ignore errors*/
fclose(from);
fclose(to);
errout:
pkg_free(backup_file);
return -1;
}
开发者ID:4N7HR4X,项目名称:kamailio,代码行数:64,代码来源:cr_config.c
示例13: preload_udomain
/*!
* \brief Load all records from a udomain
*
* Load all records from a udomain, useful to populate the
* memory cache on startup.
* \param _c database connection
* \param _d loaded domain
* \return 0 on success, -1 on failure
*/
int preload_udomain(db1_con_t* _c, udomain_t* _d)
{
pcontact_info_t *ci;
db_row_t *row;
db_key_t columns[18];
db1_res_t* res = NULL;
str aor, contact;
int i, n;
pcontact_t* c;
LM_DBG("pre-loading domain from DB\n");
columns[0] = &domain_col;
columns[1] = &aor_col;
columns[2] = &contact_col;
columns[3] = &received_col;
columns[4] = &rx_session_id_col;
columns[5] = ®_state_col;
columns[6] = &expires_col;
columns[7] = &socket_col;
columns[8] = &service_routes_col;
columns[9] = &public_ids_col;
columns[10] = &path_col;
if (ul_dbf.use_table(_c, _d->name) < 0) {
LM_ERR("sql use_table failed\n");
return -1;
}
#ifdef EXTRA_DEBUG
LM_NOTICE("load start time [%d]\n", (int)time(NULL));
#endif
if (DB_CAPABILITY(ul_dbf, DB_CAP_FETCH)) {
if (ul_dbf.query(_c, 0, 0, 0, columns, 0, 11, 0, 0) < 0) {
LM_ERR("db_query (1) failed\n");
return -1;
}
if(ul_dbf.fetch_result(_c, &res, ul_fetch_rows)<0) {
LM_ERR("fetching rows failed\n");
return -1;
}
} else {
if (ul_dbf.query(_c, 0, 0, 0, columns, 0, 11, 0, &res) < 0) {
LM_ERR("db_query failed\n");
return -1;
}
}
if (RES_ROW_N(res) == 0) {
LM_DBG("table is empty\n");
ul_dbf.free_result(_c, res);
return 0;
}
LM_DBG("%d rows returned in preload\n", RES_ROW_N(res));
n = 0;
do {
LM_DBG("loading records - cycle [%d]\n", ++n);
for(i = 0; i < RES_ROW_N(res); i++) {
row = RES_ROWS(res) + i;
aor.s = (char*) VAL_STRING(ROW_VALUES(row) + 1);
if (VAL_NULL(ROW_VALUES(row) + 1) || aor.s == 0 || aor.s[0] == 0) {
LM_CRIT("empty aor record in table %s...skipping\n", _d->name->s);
continue;
}
aor.len = strlen(aor.s);
ci = dbrow2info( ROW_VALUES(row)+1, &contact);
if (ci==0) {
LM_ERR("usrloc record for %.*s in table %s\n",
aor.len, aor.s, _d->name->s);
continue;
}
lock_udomain(_d, &aor);
if ( (mem_insert_pcontact(_d, &aor, ci, &c)) != 0) {
LM_ERR("inserting contact failed\n");
unlock_udomain(_d, &aor);
goto error1;
}
unlock_udomain(_d, &aor);
}
if (DB_CAPABILITY(ul_dbf, DB_CAP_FETCH)) {
if(ul_dbf.fetch_result(_c, &res, ul_fetch_rows)<0) {
LM_ERR("fetching rows (1) failed\n");
ul_dbf.free_result(_c, res);
//.........这里部分代码省略.........
开发者ID:badwtg1111,项目名称:kamailio,代码行数:101,代码来源:udomain.c
示例14: receive_msg
//.........这里部分代码省略.........
/* continue */
}
}
#endif
/* skip: */
LM_DBG("preparing to run routing scripts...\n");
if(is_printable(cfg_get(core, core_cfg, latency_cfg_log))
|| stats_on==1) {
gettimeofday( & tvb, &tz );
}
/* execute pre-script callbacks, if any; -jiri */
/* if some of the callbacks said not to continue with
* script processing, don't do so
* if we are here basic sanity checks are already done
* (like presence of at least one via), so you can count
* on via1 being parsed in a pre-script callback --andrei
*/
if (exec_pre_script_cb(msg, REQUEST_CB_TYPE)==0 )
{
STATS_REQ_FWD_DROP();
goto end; /* drop the request */
}
set_route_type(REQUEST_ROUTE);
/* exec the routing script */
if(unlikely(main_rt.rlist[DEFAULT_RT]==NULL)) {
keng = sr_kemi_eng_get();
if(keng==NULL) {
LM_ERR("no config routing engine registered\n");
goto error_req;
}
if(keng->froute(msg, REQUEST_ROUTE, NULL, NULL)<0) {
LM_NOTICE("negative return code from engine function\n");
}
} else {
if (run_top_route(main_rt.rlist[DEFAULT_RT], msg, 0)<0){
LM_WARN("error while trying script\n");
goto error_req;
}
}
if(is_printable(cfg_get(core, core_cfg, latency_cfg_log))
|| stats_on==1) {
gettimeofday( & tve, &tz );
diff = (tve.tv_sec-tvb.tv_sec)*1000000+(tve.tv_usec-tvb.tv_usec);
LOG(cfg_get(core, core_cfg, latency_cfg_log),
"request-route executed in: %d usec\n", diff);
#ifdef STATS
stats->processed_requests++;
stats->acc_req_time += diff;
STATS_RX_REQUEST( msg->first_line.u.request.method_value );
#endif
}
/* execute post request-script callbacks */
exec_post_script_cb(msg, REQUEST_CB_TYPE);
}else if (msg->first_line.type==SIP_REPLY){
/* sanity checks */
if ((msg->via1==0) || (msg->via1->error!=PARSE_OK)){
/* no via, send back error ? */
LM_ERR("no via found in reply\n");
STATS_BAD_RPL();
goto error02;
}
开发者ID:TheGrandWazoo,项目名称:kamailio,代码行数:66,代码来源:receive.c
示例15: _impl_api_rpc_call
int _impl_api_rpc_call(ei_x_buff *reply, const str *module,const str *function, const ei_x_buff *args)
{
struct msghdr msgh;
struct iovec cnt[8];
int pid_no = my_pid();
eapi_t api = API_RPC_CALL;
int buffsz=0;
int rc;
if (!csockfd) {
if (!enode) {
LM_NOTICE("there is no connected Erlang node\n");
/* reply up with error */
ei_x_format(reply, "{error,cnode,~a}", "no_erlang_node");
return -1;
}
if (rex_call_in_progress) {
LM_ERR("RPC loop detected\n");
ei_x_format(reply, "{badrpc,cnode,~a}", "rpc_loop_detected");
return -1;
}
/* do RPC from event route */
if (ei_rpc(&enode->ec,enode->sockfd,module->s,function->s,args->buff,args->index,reply) == ERL_ERROR)
{
reply->index = 0; /* re-use reply buffer */
if (erl_errno)
{
ei_x_format(reply, "{error,cnode,~s}", strerror(erl_errno));
LM_ERR("ei_rpc failed on node=<%s> socket=<%d>: %s\n",enode->conn.nodename,enode->sockfd,strerror(erl_errno));
}
else if (errno)
{
ei_x_format(reply, "{error,cnode,~s}", strerror(errno));
LM_ERR("ei_rpc failed on node=<%s> socket=<%d>: %s\n",enode->conn.nodename,enode->sockfd,strerror(errno));
}
else
{
ei_x_format(reply, "{error,cnode,~s}", "Unknown error.");
LM_ERR("ei_rpc failed on node=<%s> socket=<%d>, Unknown error.\n",enode->ec.thisalivename,enode->sockfd);
}
return -1;
}
/* reset response */
enode->response.index = 0;
return 0;
}
memset(&msgh, 0, sizeof(msgh));
memset(&cnt, 0, sizeof(cnt));
/* Kamailio PID */
cnt[0].iov_base = (void*)&pid_no;
cnt[0].iov_len = sizeof(pid_no);
/* method */
cnt[1].iov_base = (void*)&api;
cnt[1].iov_len = sizeof(api);
/* put size of following data */
cnt[2].iov_base = (void*)&module->len;
cnt[2].iov_len = sizeof(int);
cnt[3].iov_base = (void*)&function->len;
cnt[3].iov_len = sizeof(int);
buffsz = args->index; /* occupied size */
cnt[4].iov_base = (void*) &buffsz;
cnt[4].iov_len = sizeof(buffsz);
/* module name */
cnt[5].iov_base = (void*)module->s;
cnt[5].iov_len = module->len;
/* function name */
cnt[6].iov_base = (void*)function->s;
cnt[6].iov_len = function->len;
/* Erlang arguments content */
cnt[7].iov_base = (void*)args->buff;
cnt[7].iov_len = buffsz; /* occupied size */
msgh.msg_iov = cnt;
msgh.msg_iovlen = 8;
while ((rc = sendmsg(csockfd, &msgh, 0)) == -1 && errno == EAGAIN)
;
if (rc == -1) {
LM_ERR("sendmsg failed: %s\n",strerror(errno));
return -1;
}
/*receive into reply buffer */
cnt[1].iov_base = &buffsz;
cnt[1].iov_len = sizeof(buffsz);
//.........这里部分代码省略.........
开发者ID:GreenfieldTech,项目名称:kamailio,代码行数:101,代码来源:erl_api.c
示例16: certificates
/* This callback is called during each verification process,
at each step during the chain of certificates (this function
is not the certificate_verification one!). */
int verify_callback(int pre_verify_ok, X509_STORE_CTX *ctx) {
char buf[256];
X509 *err_cert;
int err, depth;
depth = X509_STORE_CTX_get_error_depth(ctx);
LM_NOTICE("depth = %d\n",depth);
if ( depth > VERIFY_DEPTH_S ) {
LM_NOTICE("cert chain too long ( depth > VERIFY_DEPTH_S)\n");
pre_verify_ok=0;
}
if( pre_verify_ok ) {
LM_NOTICE("preverify is good: verify return: %d\n", pre_verify_ok);
return pre_verify_ok;
}
err_cert = X509_STORE_CTX_get_current_cert(ctx);
err = X509_STORE_CTX_get_error(ctx);
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf);
LM_NOTICE("subject = %s\n", buf);
LM_NOTICE("verify error:num=%d:%s\n",
err, X509_verify_cert_error_string(err));
LM_NOTICE("error code is %d\n", ctx->error);
switch (ctx->error) {
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),
buf,sizeof buf);
LM_NOTICE("issuer= %s\n",buf);
break;
case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
case X509_V_ERR_CERT_NOT_YET_VALID:
LM_NOTICE("notBefore\n");
break;
case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
case X509_V_ERR_CERT_HAS_EXPIRED:
LM_NOTICE("notAfter\n");
break;
case X509_V_ERR_CERT_SIGNATURE_FAILURE:
case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
LM_NOTICE("unable to decrypt cert "
"signature\n");
break;
case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
LM_NOTICE("unable to decode issuer "
"public key\n");
break;
case X509_V_ERR_OUT_OF_MEM:
LM_NOTICE("out of memory \n");
break;
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
LM_NOTICE("Self signed certificate "
"issue\n");
break;
case X509_V_ERR_CERT_CHAIN_TOO_LONG:
LM_NOTICE("certificate chain too long\n");
break;
case X509_V_ERR_INVALID_CA:
LM_NOTICE("invalid CA\n");
break;
case X509_V_ERR_PATH_LENGTH_EXCEEDED:
LM_NOTICE("path length exceeded\n");
break;
case X509_V_ERR_INVALID_PURPOSE:
LM_NOTICE("invalid purpose\n");
break;
case X509_V_ERR_CERT_UNTRUSTED:
LM_NOTICE("certificate untrusted\n");
break;
case X509_V_ERR_CERT_REJECTED:
LM_NOTICE("certificate rejected\n");
break;
default:
LM_NOTICE("something wrong with the cert"
" ... error code is %d (check x509_vfy.h)\n", ctx->error);
break;
}
LM_NOTICE("verify return:%d\n", pre_verify_ok);
return(pre_verify_ok);
}
开发者ID:Danfx,项目名称:opensips,代码行数:88,代码来源:tls_mgm.c
示例17: worker_rpc_impl
/**
* internal implementation
*/
int worker_rpc_impl(ei_cnode *ec, int s,int wpid)
{
str module = STR_NULL;
str function = STR_NULL;
ei_x_buff args;
ei_x_buff reply;
struct msghdr msgh;
struct iovec cnt[6];
int rc;
memset((void*)&args,0,sizeof(args));
memset((void*)&reply,0,sizeof(reply));
memset((void*)&msgh,0,sizeof(msgh));
/* module name length */
cnt[0].iov_base = &module.len;
cnt[0].iov_len = sizeof(int);
/* function name length */
cnt[1].iov_base = &function.len;
cnt[1].iov_len = sizeof(int);
/* Erlang args size */
cnt[2].iov_base = &args.buffsz;
cnt[2].iov_len = sizeof(int);
/* get data size */
msgh.msg_iov = cnt;
msgh.msg_iovlen = 3;
while ((rc = recvmsg(s, &msgh, MSG_PEEK)) == -1 && errno == EAGAIN)
;
if (rc == -1){
LM_ERR("recvmsg failed (socket=%d): %s\n",s,strerror(errno));
goto err;
}
/* allocate space */
module.s = (char*)pkg_malloc(module.len+1);
if (!module.s) {
LM_ERR("not enough memory\n");
goto err;
}
function.s = (char*)pkg_malloc(function.len+1);
if (!function.s) {
LM_ERR("not enough memory\n");
goto err;
}
args.buff = (char*)malloc(args.buffsz);
if (!args.buff) {
LM_ERR("malloc: not enough memory\n");
goto err;
}
/* buffers */
cnt[3].iov_base = module.s;
cnt[3].iov_len = module.len;
cnt[4].iov_base = function.s;
cnt[4].iov_len = function.len;
cnt[5].iov_base = args.buff;
cnt[5].iov_len = args.buffsz;
/* get whole data */
msgh.msg_iovlen = 6;
while ((rc = recvmsg(s, &msgh, MSG_WAITALL)) == -1 && errno == EAGAIN)
;
if (rc == -1){
LM_ERR("recvmsg failed (socket=%d): %s\n",s,strerror(errno));
goto err;
}
/* fix str */
module.s[module.len] = 0;
function.s[function.len] = 0;
LM_DBG("rpc: %.*s:%.*s(args)\n",STR_FMT(&module),STR_FMT(&function));
EI_X_BUFF_PRINT(&args);
if(!enode) {
LM_NOTICE("there is no connected Erlang node\n");
/* reply up with error */
ei_x_format(&reply, "{error,cnode,~a}", "no_erlang_node");
goto reply;
}
/* do RPC */
if ((rc = ei_rpc(ec,enode->sockfd,module.s,function.s,args.buff,args.buffsz,&reply)) == ERL_ERROR)
{
reply.index = 0; /* re-use reply buffer */
if (erl_errno)
//.........这里部分代码省略.........
开发者ID:AlessioCasco,项目名称:kamailio,代码行数:101,代码来源:worker.c
示例18: init_ssl_ctx_behavior
/*
* Setup default SSL_CTX (and SSL * ) behavior:
* verification, cipherlist, acceptable versions, ...
*/
static int init_ssl_ctx_behavior( struct tls_domain *d ) {
int verify_mode;
#if (OPENSSL_VERSION_NUMBER > 0x10001000L)
/*
* set dh params
*/
if (!d->tmp_dh_file) {
LM_DBG("no DH params file for tls[%s:%d] defined, "
"using default '%s'\n", ip_addr2a(&d->addr), d->port,
tls_tmp_dh_file);
d->tmp_dh_file = tls_tmp_dh_file;
}
if (d->tmp_dh_file && set_dh_params(d->ctx, d->tmp_dh_file) < 0)
return -1;
if (d->tls_ec_curve) {
if (set_ec_params(d->ctx, d->tls_ec_curve) < 0) {
return -1;
}
}
else {
LM_NOTICE("No EC curve defined\n");
}
#else
if (d->tmp_dh_file || tls_tmp_dh_file)
LM_WARN("DH params file discarded as not supported by your openSSL version\n");
if (d->tls_ec_curve)
LM_WARN("EC params file discarded as not supported by your openSSL version\n");
#endif
if( d->ciphers_list != 0 ) {
if( SSL_CTX_set_cipher_list(d->ctx, d->ciphers_list) == 0 ) {
LM_ERR("failure to set SSL context "
"cipher list '%s'\n", d->ciphers_list);
return -1;
} else {
LM_NOTICE("cipher list set to %s\n", d->ciphers_list);
}
} else {
LM_DBG( "cipher list null ... setting default\n");
}
/* Set a bunch of options:
* do not accept SSLv2 / SSLv3
* no session resumption
* choose cipher according to server's preference's*/
SSL_CTX_set_options(d->ctx,
SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 |
SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION |
SSL_OP_CIPHER_SERVER_PREFERENCE);
/* Set verification procedure
* The verification can be made null with SSL_VERIFY_NONE, or
* at least easier with SSL_VERIFY_CLIENT_ONCE instead of
* SSL_VERIFY_FAIL_IF_NO_PEER_CERT.
* For extra control, instead of 0, we can specify a callback function:
* int (*verify_callback)(int, X509_STORE_CTX *)
* Also, depth 2 may be not enough in some scenarios ... though no need
* to increase it much further */
if (d->type & TLS_DOMAIN_SRV) {
/* Server mode:
* SSL_VERIFY_NONE
* the server will not send a client certificate request to the
* client, so the client will not send a certificate.
* SSL_VERIFY_PEER
* the server sends a client certificate request to the client.
* The certificate returned (if any) is checked. If the verification
* process fails, the TLS/SSL handshake is immediately terminated
* with an alert message containing the reason for the verification
* failure. The behaviour can be controlled by the additional
* SSL_VERIFY_FAIL_IF_NO_PEER_CERT and SSL_VERIFY_CLIENT_ONCE flags.
* SSL_VERIFY_FAIL_IF_NO_PEER_CERT
* if the client did not return a certificate, the TLS/SSL handshake
* is immediately terminated with a ``handshake failure'' alert.
* This flag must be used together with SSL_VERIFY_PEER.
* SSL_VERIFY_CLIENT_ONCE
* only request a client certificate on the initial TLS/SSL
* handshake. Do not ask for a client certificate again in case of
* a renegotiation. This flag must be used together with
* SSL_VERIFY_PEER.
*/
if( d->verify_cert ) {
verify_mode = SSL_VERIFY_PEER;
if( d->require_client_cert ) {
LM_WARN("client verification activated. Client "
"certificates are mandatory.\n");
verify_mode |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
} else
LM_WARN("client verification activated. Client "
"certificates are NOT mandatory.\n");
} else {
verify_mode = SSL_VERIFY_NONE;
//.........这里部分代码省略.........
开发者ID:Danfx,项目名称:opensips,代码行数:101,代码来源:tls_mgm.c
示例19: worker_send_impl
int worker_send_impl(ei_cnode *ec, int s,int wpid)
{
erlang_pid pid;
ei_x_buff emsg;
struct msghdr msgh;
struct iovec cnt[6];
int rc;
memset((void*)&emsg,0,sizeof(emsg));
memset((void*)&msgh,0,sizeof(msgh));
/* Erlang args size */
cnt[0].iov_base = &emsg.buffsz;
cnt[0].iov_len = size
|
请发表评论