本文整理汇总了C++中LM_WARN函数的典型用法代码示例。如果您正苦于以下问题:C++ LM_WARN函数的具体用法?C++ LM_WARN怎么用?C++ LM_WARN使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LM_WARN函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse_config_lines
int parse_config_lines(void)
{
char *p,*start;
int i, k, step;
int mdm_nr, net_nr;
nr_of_networks = 0;
nr_of_modems = 0;
step = 1;
/* parsing modems configuration string */
if ( (p = modems_config)==0) {
LM_ERR("param \"modems\" not found\n");
goto error;
}
while (*p)
{
eat_spaces(p);
/*get modem's name*/
start = p;
while (*p!=' ' && *p!='\t' && *p!='[' && *p!=0)
p++;
if ( p==start || *p==0 )
goto parse_error;
memcpy(modems[nr_of_modems].name, start, p-start);
modems[nr_of_modems].name[p-start] = 0;
modems[nr_of_modems].smsc[0] = 0;
modems[nr_of_modems].device[0] = 0;
modems[nr_of_modems].pin[0] = 0;
modems[nr_of_modems].mode = MODE_NEW;
modems[nr_of_modems].retry = 4;
modems[nr_of_modems].looping_interval = 20;
modems[nr_of_modems].baudrate = B9600;
modems[nr_of_modems].scan = SMS_BODY_SCAN;
modems[nr_of_modems].to[0] = 0;
memset(modems[nr_of_modems].net_list,0XFF,
sizeof(modems[nr_of_modems].net_list) );
/*get modem parameters*/
eat_spaces(p);
if (*p!='[')
goto parse_error;
p++;
while (*p!=']')
{
eat_spaces(p);
start = p;
while(*p!=' ' && *p!='\t' && *p!=']' && *p!=';' && *p!=0)
p++;
if ( p==start || *p==0 )
goto parse_error;
if (set_modem_arg( &(modems[nr_of_modems]), start, p)==-1)
goto error;
eat_spaces(p);
if (*p==';') {
p++;
eat_spaces(p);
}
}
if (*p!=']')
goto parse_error;
p++;
/* end of element */
if (modems[nr_of_modems].device[0]==0) {
LM_ERR("modem %s has no device associated\n",
modems[nr_of_modems].name);
goto error;
}
if (modems[nr_of_modems].smsc[0]==0) {
LM_WARN("modem %s has no sms center associated -> using"
" the default one from modem\n",modems[nr_of_modems].name);
}
nr_of_modems++;
eat_spaces(p);
if (*p==';') {
p++;
eat_spaces(p);
}
}
if (nr_of_modems==0)
{
LM_ERR("failed to parse config modems - no modem found!\n");
goto error;
}
step++;
/* parsing networks configuration string */
if ( (p = networks_config)==0) {
LM_ERR("param \"networks\" not found\n");
goto error;
}
while (*p)
{
eat_spaces(p);
/*get network name*/
start = p;
while (*p!=' ' && *p!='\t' && *p!='[' && *p!=0)
p++;
if ( p==start || *p==0 )
goto parse_error;
memcpy(networks[nr_of_networks].name, start, p-start);
//.........这里部分代码省略.........
示例2: run_reg_tm_cback
//.........这里部分代码省略.........
rec->auth_password.s==NULL || rec->auth_password.len==0) {
LM_ERR("Credentials not provisioned\n");
rec->state = WRONG_CREDENTIALS_STATE;
rec->registration_timeout = 0;
/* action successfuly completed on current list element */
return 1; /* exit list traversal */
}
if (statuscode==WWW_AUTH_CODE) {
if (0 == parse_www_authenticate_header(msg))
auth = get_www_authenticate(msg);
} else if (statuscode==PROXY_AUTH_CODE) {
if (0 == parse_proxy_authenticate_header(msg))
auth = get_proxy_authenticate(msg);
}
if (auth == NULL) {
LM_ERR("Unable to extract authentication info\n");
goto done;
}
LM_DBG("flags=[%d] realm=[%.*s] domain=[%.*s] nonce=[%.*s]"
" opaque=[%.*s] qop=[%.*s]\n",
auth->flags,
auth->realm.len, auth->realm.s,
auth->domain.len, auth->domain.s,
auth->nonce.len, auth->nonce.s,
auth->opaque.len, auth->opaque.s,
auth->qop.len, auth->qop.s);
switch(rec->state) {
case REGISTERING_STATE:
break;
case AUTHENTICATING_STATE:
/* We already sent an authenticated REGISTER and we are still challanged! */
LM_WARN("Wrong credentials for [%.*s]\n",
rec->td.rem_uri.len, rec->td.rem_uri.s);
rec->state = WRONG_CREDENTIALS_STATE;
rec->registration_timeout = 0;
/* action successfuly completed on current list element */
return 1; /* exit list traversal */
default:
LM_ERR("Unexpected [%d] notification cb in state [%d]\n",
statuscode, rec->state);
goto done;
}
/* perform authentication */
if (auth->realm.s && auth->realm.len) {
crd.realm.s = auth->realm.s; crd.realm.len = auth->realm.len;
} else {
LM_ERR("No realm found\n");
goto done;
}
crd.user.s = rec->auth_user.s; crd.user.len = rec->auth_user.len;
crd.passwd.s = rec->auth_password.s; crd.passwd.len = rec->auth_password.len;
memset(&auth_nc_cnonce, 0, sizeof(struct authenticate_nc_cnonce));
uac_auth_api._do_uac_auth(®ister_method, &rec->td.rem_target, &crd,
auth, &auth_nc_cnonce, response);
new_hdr = uac_auth_api._build_authorization_hdr(statuscode, &rec->td.rem_target,
&crd, auth, &auth_nc_cnonce, response);
if (!new_hdr) {
LM_ERR("failed to build authorization hdr\n");
goto done;
}
if(send_register(cb_param->hash_index, rec, new_hdr)==1) {
rec->state = AUTHENTICATING_STATE;
示例3: db_oracle_submit_query
/*
* Send an SQL query to the server
*/
static int db_oracle_submit_query(const db_con_t* _h, const str* _s)
{
OCIBind* bind[MAX_BIND_HANDLES];
OCIDate odt[sizeof(bind)/sizeof(bind[0])];
str tmps;
sword status;
int pass;
ora_con_t* con = CON_ORA(_h);
query_data_t* pqd = con->pqdata;
size_t hc = pqd->_n + pqd->_nw;
OCIStmt *stmthp;
if (hc >= sizeof(bind)/sizeof(bind[0])) {
LM_ERR("too many bound. Rebuild with MAX_BIND_HANDLES >= %u\n",
(unsigned)hc);
return -1;
}
if (!pqd->_rs) {
/*
* This method is at ~25% faster as set OCI_COMMIT_ON_SUCCESS
* in StmtExecute
*/
tmps.len = snprintf(st_buf, sizeof(st_buf),
"begin %.*s; commit write batch nowait; end;",
_s->len, _s->s);
if ((unsigned)tmps.len >= sizeof(st_buf))
return sql_buf_small();
tmps.s = st_buf;
_s = &tmps;
}
pass = 1;
if (!con->connected) {
status = db_oracle_reconnect(con);
if (status != OCI_SUCCESS) {
LM_ERR("can't restore connection: %s\n", db_oracle_error(con, status));
return -2;
}
LM_INFO("connection restored\n");
--pass;
}
repeat:
stmthp = NULL;
status = OCIHandleAlloc(con->envhp, (dvoid**)(dvoid*)&stmthp,
OCI_HTYPE_STMT, 0, NULL);
if (status != OCI_SUCCESS)
goto ora_err;
status = OCIStmtPrepare(stmthp, con->errhp, (text*)_s->s, _s->len,
OCI_NTV_SYNTAX, OCI_DEFAULT);
if (status != OCI_SUCCESS)
goto ora_err;
if (hc) {
bmap_t bmap;
size_t pos = 1;
int i;
memset(bind, 0, hc*sizeof(bind[0]));
for (i = 0; i < pqd->_n; i++) {
if (db_oracle_val2bind(&bmap, &pqd->_v[i], &odt[pos]) < 0)
goto bind_err;
status = OCIBindByPos(stmthp, &bind[pos], con->errhp,
pos, bmap.addr, bmap.size, bmap.type,
NULL, NULL, NULL, 0, NULL, OCI_DEFAULT);
if (status != OCI_SUCCESS)
goto ora_err;
++pos;
}
for (i = 0; i < pqd->_nw; i++) {
if (db_oracle_val2bind(&bmap, &pqd->_w[i], &odt[pos]) < 0) {
bind_err:
OCIHandleFree(stmthp, OCI_HTYPE_STMT);
LM_ERR("can't map values\n");
return -3;
}
status = OCIBindByPos(stmthp, &bind[pos], con->errhp,
pos, bmap.addr, bmap.size, bmap.type,
NULL, NULL, NULL, 0, NULL, OCI_DEFAULT);
if (status != OCI_SUCCESS)
goto ora_err;
++pos;
}
}
// timelimited operation
status = begin_timelimit(con, 0);
if (status != OCI_SUCCESS) goto ora_err;
do status = OCIStmtExecute(con->svchp, stmthp, con->errhp,
!pqd->_rs, 0, NULL, NULL,
pqd->_rs ? OCI_STMT_SCROLLABLE_READONLY : OCI_DEFAULT);
while (wait_timelimit(con, status));
if (done_timelimit(con, status)) goto stop_exec;
switch (status) {
case OCI_SUCCESS_WITH_INFO:
LM_WARN("driver: %s\n", db_oracle_errorinfo(con));
//PASS THRU
//.........这里部分代码省略.........
示例4: dlg_new_dialog
/*!
* \brief Create a new dialog from a sip message
*
* Create a new dialog from a SIP message, register a callback
* to keep track of the dialog with help of the tm module.
* This function is either called from the request callback, or
* from the dlg_manage function in the configuration script.
* \see dlg_onreq
* \see w_dlg_manage
* \param msg SIP message
* \param t transaction
* \return 0 on success, -1 on failure
*/
int dlg_new_dialog(struct sip_msg *req, struct cell *t, const int run_initial_cbs) {
struct dlg_cell *dlg;
str s;
str callid;
str ftag;
str ttag;
str req_uri;
unsigned int dir;
LM_DBG("starting dlg_new_dialog and method is [%.*s]\n", req->first_line.u.request.method.len, req->first_line.u.request.method.s);
if (current_dlg_pointer != NULL)
return -1;
if (req->first_line.u.request.method_value == METHOD_CANCEL)
return -1;
if (pre_match_parse(req, &callid, &ftag, &ttag, 0) < 0) {
LM_WARN("pre-matching failed\n");
return -1;
}
if (ttag.s != 0 && ttag.len != 0)
return -1;
if (pv_printf_s(req, ruri_param_model, &req_uri) < 0) {
LM_ERR("error - cannot print the r-uri format\n");
return -1;
}
trim(&req_uri);
if (detect_spirals) {
if (spiral_detected == 1)
return 0;
dir = DLG_DIR_NONE;
dlg = get_dlg(&callid, &ftag, &ttag, &dir);
if (dlg) {
LM_DBG("Callid '%.*s' found, must be a spiraled request\n",
callid.len, callid.s);
spiral_detected = 1;
if (run_initial_cbs)
run_dlg_callbacks(DLGCB_SPIRALED, dlg, req, NULL, DLG_DIR_DOWNSTREAM, 0);
//Add did to rr header for all spiralled requested INVITEs
if (req->first_line.u.request.method_value == METHOD_INVITE) {
if (add_dlg_rr_param(dlg, req, dlg->h_entry, dlg->h_id) < 0) {
LM_ERR("failed to add RR param\n");
}
}
// get_dlg has incremented the ref count by 1
unref_dlg(dlg, 1);
goto finish;
}
}
spiral_detected = 0;
LM_DBG("Building new Dialog for call-id %.*s\n", callid.len, callid.s);
LM_DBG("SIP Method: %.*s \n", req->first_line.u.request.method.len, req->first_line.u.request.method.s);
dlg = build_new_dlg(&callid /*callid*/,
&(get_from(req)->uri) /*from uri*/,
&ftag/*from_tag*/,
&req_uri /*r-uri*/);
if (dlg == 0) {
LM_ERR("failed to create new dialog\n");
return -1;
}
/* save caller's tag, cseq, contact and record route*/
if (populate_leg_info(dlg, req, t, DLG_CALLER_LEG,
&(get_from(req)->tag_value)) != 0) {
LM_ERR("could not add further info to the dialog\n");
lock_destroy(dlg->dlg_out_entries_lock);
lock_dealloc(dlg->dlg_out_entries_lock);
shm_free(dlg);
return -1;
}
dlg->transaction = t;
/* Populate initial varlist: */
//.........这里部分代码省略.........
示例5: getContactP
/**
* get PContact-Structure for message
* (search only once per Request)
*/
pcontact_t * getContactP(struct sip_msg* _m, udomain_t* _d, enum pcontact_reg_states reg_state) {
ppublic_t * p;
contact_body_t *b = 0;
contact_t *ct;
pcontact_info_t search_ci;
str received_host = {0, 0};
char srcip[50];
struct via_body *vb;
unsigned short port, proto;
str host;
sip_uri_t contact_uri;
int mustRetryViaSearch = 0;
int mustRetryReceivedSearch = 0;
b = cscf_parse_contacts(_m);
if (_m->first_line.type == SIP_REPLY && _m->contact && _m->contact->parsed && b->contacts) {
mustRetryViaSearch = 1;
mustRetryReceivedSearch = 1;
LM_DBG("This is a reply - to look for contact we favour the contact header above the via (b2bua)... if no contact we will use last via\n");
ct = b->contacts;
host = ct->uri;
if (parse_uri(ct->uri.s, ct->uri.len, &contact_uri) != 0) {
LM_WARN("Failed to parse contact [%.*s]\n", ct->uri.len, ct->uri.s);
return NULL;
}
host = contact_uri.host;
port = contact_uri.port_no ? contact_uri.port_no : 5060;
proto = contact_uri.proto;
if (proto == 0) {
LM_DBG("Contact protocol not specified - using received\n");
proto = _m->rcv.proto;
}
} else {
if (_m->first_line.type == SIP_REPLY)
LM_DBG("This is a reply but we are forced to use the via header\n");
else
LM_DBG("This is a request - using first via to find contact\n");
vb = cscf_get_ue_via(_m);
host = vb->host;
port = vb->port ? vb->port : 5060;
proto = vb->proto;
}
LM_DBG("searching for contact with host:port:proto contact [%d://%.*s:%d]\n", proto, host.len, host.s, port);
received_host.len = ip_addr2sbuf(&_m->rcv.src_ip, srcip, sizeof (srcip));
received_host.s = srcip;
// if (_m->id != current_msg_id) {
current_msg_id = _m->id;
c = NULL;
//search_ci.reg_state = PCONTACT_REGISTERED; //we can do this because this function is always called expecting a REGISTERED contact
search_ci.reg_state = reg_state;
search_ci.received_host.s = received_host.s;
search_ci.received_host.len = received_host.len;
search_ci.received_port = _m->rcv.src_port;
search_ci.received_proto = _m->rcv.proto;
search_ci.searchflag = SEARCH_RECEIVED;
if (is_registered_fallback2ip == 1) {
search_ci.searchflag = SEARCH_NORMAL;
}
search_ci.via_host = host;
search_ci.via_port = port;
search_ci.via_prot = proto;
search_ci.aor.s = 0;
search_ci.aor.len = 0;
// b = cscf_parse_contacts(_m);
tryagain:
if (b && b->contacts) {
for (ct = b->contacts; ct; ct = ct->next) {
search_ci.aor = ct->uri;
if (ul.get_pcontact(_d, &search_ci, &c) == 0) {
if (checkcontact(_m, c) != 0) {
c = NULL;
} else {
break;
}
}
}
} else {
LM_WARN("No contact-header found...\n");
}
if ((c == NULL) && (is_registered_fallback2ip == 1)) {
LM_INFO("Contact not found based on Contact-header, trying IP/Port/Proto\n");
// received_host.len = ip_addr2sbuf(&_m->rcv.src_ip, srcip, sizeof(srcip));
// received_host.s = srcip;
search_ci.searchflag = SEARCH_RECEIVED;
if (ul.get_pcontact(_d, &search_ci, &c) == 1) {
LM_DBG("No entry in usrloc for %.*s:%i (Proto %i) found!\n", received_host.len, received_host.s, _m->rcv.src_port, _m->rcv.proto);
} else {
if (checkcontact(_m, c) != 0) {
c = NULL;
//.........这里部分代码省略.........
示例6: is_peer_verified
static int is_peer_verified(struct sip_msg* msg, char* foo, char* foo2)
{
struct tcp_connection *c;
SSL *ssl;
long ssl_verify;
X509 *x509_cert;
LM_DBG("started...\n");
if (msg->rcv.proto != PROTO_TLS) {
LM_ERR("proto != TLS --> peer can't be verified, return -1\n");
return -1;
}
LM_DBG("trying to find TCP connection of received message...\n");
/* what if we have multiple connections to the same remote socket? e.g. we can have
connection 1: localIP1:localPort1 <--> remoteIP:remotePort
connection 2: localIP2:localPort2 <--> remoteIP:remotePort
but I think the is very unrealistic */
tcp_conn_get(0, &(msg->rcv.src_ip), msg->rcv.src_port, PROTO_TLS, &c, NULL/*fd*/);
if (c==NULL) {
LM_ERR("no corresponding TLS/TCP connection found."
" This should not happen... return -1\n");
return -1;
}
LM_DBG("corresponding TLS/TCP connection found. s=%d, fd=%d, id=%d\n",
c->s, c->fd, c->id);
if (!c->extra_data) {
LM_ERR("no extra_data specified in TLS/TCP connection found."
" This should not happen... return -1\n");
goto error;
}
ssl = (SSL *) c->extra_data;
ssl_verify = SSL_get_verify_result(ssl);
if ( ssl_verify != X509_V_OK ) {
LM_WARN("verification of presented certificate failed... return -1\n");
goto error;
}
/* now, we have only valid peer certificates or peers without certificates.
* Thus we have to check for the existence of a peer certificate
*/
x509_cert = SSL_get_peer_certificate(ssl);
if ( x509_cert == NULL ) {
LM_WARN("tlsops:is_peer_verified: WARNING: peer did not presented "
"a certificate. Thus it could not be verified... return -1\n");
goto error;
}
X509_free(x509_cert);
tcp_conn_release(c, 0);
LM_DBG("tlsops:is_peer_verified: peer is successfully verified"
"...done\n");
return 1;
error:
tcp_conn_release(c, 0);
return -1;
}
示例7: load_crl
static int load_crl(SSL_CTX * ctx, char *crl_directory, int crl_check_all)
{
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
DIR *d;
struct dirent *dir;
int crl_added = 0;
LM_DBG("Loading CRL from directory\n");
/*Get X509 store from SSL context*/
X509_STORE *store = SSL_CTX_get_cert_store(ctx);
if(!store) {
LM_ERR("Unable to get X509 store from ssl context\n");
return -1;
}
/*Parse directory*/
d = opendir(crl_directory);
if(!d) {
LM_ERR("Unable to open crl directory '%s'\n", crl_directory);
return -1;
}
while ((dir = readdir(d)) != NULL) {
/*Skip if not regular file*/
if (dir->d_type != DT_REG)
continue;
/*Create filename*/
char* filename = (char*) pkg_malloc(sizeof(char)*(strlen(crl_directory)+strlen(dir->d_name)+2));
if (!filename) {
LM_ERR("Unable to allocate crl filename\n");
closedir(d);
return -1;
}
strcpy(filename,crl_directory);
if(filename[strlen(filename)-1] != '/')
strcat(filename,"/");
strcat(filename,dir->d_name);
/*Get CRL content*/
FILE *fp = fopen(filename,"r");
pkg_free(filename);
if(!fp)
continue;
X509_CRL *crl = PEM_read_X509_CRL(fp, NULL, NULL, NULL);
fclose(fp);
if(!crl)
continue;
/*Add CRL to X509 store*/
if (X509_STORE_add_crl(store, crl) == 1)
crl_added++;
else
LM_ERR("Unable to add crl to ssl context\n");
X509_CRL_free(crl);
}
closedir(d);
if (!crl_added) {
LM_ERR("No suitable CRL files found in directory %s\n", crl_directory);
return -1;
}
/*Enable CRL checking*/
X509_VERIFY_PARAM *param;
param = X509_VERIFY_PARAM_new();
int flags = X509_V_FLAG_CRL_CHECK;
if(crl_check_all)
flags |= X509_V_FLAG_CRL_CHECK_ALL;
X509_VERIFY_PARAM_set_flags(param, flags);
SSL_CTX_set1_param(ctx, param);
X509_VERIFY_PARAM_free(param);
return 0;
#else
static int already_warned = 0;
if (!already_warned) {
LM_WARN("CRL not supported in %s\n", OPENSSL_VERSION_TEXT);
already_warned = 1;
}
return 0;
#endif
}
示例8: check_contacts
/*! \brief
* Check if the originating REGISTER message was formed correctly
* The whole message must be parsed before calling the function
* _s indicates whether the contact was star
*/
int check_contacts(struct sip_msg* _m, int* _s)
{
struct hdr_field* p;
contact_t* c;
*_s = 0;
/* Message without contacts is OK */
if (_m->contact == 0) return 0;
if (((contact_body_t*)_m->contact->parsed)->star == 1) {
/* The first Contact HF is star */
/* Expires must be zero */
if (get_expires_hf(_m) != 0) {
LM_WARN("expires must be 0 for star contact\n");
rerrno = R_STAR_EXP;
return 1;
}
/* Message must contain no contacts */
if (((contact_body_t*)_m->contact->parsed)->contacts) {
LM_WARN("star contact cannot be mixed with other contacts\n");
rerrno = R_STAR_CONT;
return 1;
}
/* Message must contain no other Contact HFs */
p = _m->contact->next;
while(p) {
if (p->type == HDR_CONTACT_T) {
LM_WARN("star contact cannot be mixed with other contacts\n");
rerrno = R_STAR_CONT;
return 1;
}
p = p->next;
}
*_s = 1;
} else { /* The first Contact HF is not star */
p = _m->contact;
while(p) {
if (p->type == HDR_CONTACT_T) {
/* Message must contain no star Contact HF */
if (((contact_body_t*)p->parsed)->star == 1) {
LM_WARN("star contact cannot be mixed with other contacts\n");
rerrno = R_STAR_CONT;
return 1;
}
/* check also the length of all contacts */
for(c=((contact_body_t*)p->parsed)->contacts ; c ; c=c->next) {
if (c->uri.len > contact_max_size) {
LM_WARN("contact uri is too long: [%.*s]\n", c->uri.len, c->uri.s);
rerrno = R_CONTACT_LEN;
return 1;
}
if (c->received && c->received->len>RECEIVED_MAX_SIZE) {
LM_WARN("received attribute of contact is too long\n");
rerrno = R_CONTACT_LEN;
return 1;
}
}
}
p = p->next;
}
}
return 0;
}
示例9: append_fixed_vars
static int append_fixed_vars(struct sip_msg *msg, struct hf_wrapper **list)
{
static char tid[MD5_LEN];
str *uri;
struct sip_uri parsed_uri, oparsed_uri;
char *val;
int val_len;
/* source ip */
if (!append_var(EV_SRCIP, ip_addr2a(&msg->rcv.src_ip), 0, list)) {
LM_ERR("append_var SRCIP failed \n");
return 0;
}
/* request URI */
uri=msg->new_uri.s && msg->new_uri.len ?
&msg->new_uri : &msg->first_line.u.request.uri;
if (!append_var(EV_RURI, uri->s, uri->len, list )) {
LM_ERR("append_var URI failed\n");
return 0;
}
/* userpart of request URI */
if (parse_uri(uri->s, uri->len, &parsed_uri)<0) {
LM_WARN("uri not parsed\n");
} else {
if (!append_var(EV_USER, parsed_uri.user.s,
parsed_uri.user.len, list)) {
LM_ERR("append_var USER failed\n");
goto error;
}
}
/* original URI */
if (!append_var(EV_ORURI, msg->first_line.u.request.uri.s,
msg->first_line.u.request.uri.len, list)) {
LM_ERR("append_var O-URI failed\n");
goto error;
}
/* userpart of request URI */
if (parse_uri(msg->first_line.u.request.uri.s,
msg->first_line.u.request.uri.len,
&oparsed_uri)<0) {
LM_WARN("orig URI not parsed\n");
} else {
if (!append_var(EV_OUSER, oparsed_uri.user.s,
oparsed_uri.user.len, list)) {
LM_ERR("ppend_var OUSER failed\n");
goto error;
}
}
/* tid, transaction id == via/branch */
if (!char_msg_val(msg, tid)) {
LM_WARN("no tid can be determined\n");
val=0; val_len=0;
} else {
val=tid;val_len=MD5_LEN;
}
if (!append_var(EV_TID, val,val_len, list)) {
LM_ERR("append_var TID failed\n");
goto error;
}
/* did, dialogue id == To-tag */
if (!(msg->to && get_to(msg) )) {
LM_ERR("no to-tag\n");
val=0; val_len=0;
} else {
val=get_to(msg)->tag_value.s;
val_len=get_to(msg)->tag_value.len;
}
if (!append_var(EV_DID, val, val_len, list)) {
LM_ERR("append_var DID failed\n");
goto error;
}
return 1;
error:
return 0;
}
示例10: build_publish_call_info_header
int build_publish_call_info_header(b2b_sca_record_t *rec, str *publish_hdr)
{
unsigned int i;
unsigned int size = sizeof(CALL_INFO_HDR);
b2b_sca_call_t *call = NULL;
char *p;
rec->expires = 30;
size += callinfo_default_uri.len +
callinfo_appindex.len + callinfo_hdr_postfix.len;
if (rec == NULL) {
/* we need to build an idle Call-Info header */
publish_hdr->s = publish_call_info_hdr_buf;
p = &publish_call_info_hdr_buf[sizeof(CALL_INFO_HDR) - 1];
goto default_hdr;
}
for (i=0; i<MAX_APPEARANCE_INDEX; i++) {
if (rec->call[i]) {
call = rec->call[i];
if (call->call_state > ALERTING_STATE)
rec->expires = 36000;
size += call->call_info_uri.len +
callinfo_appuri_prefix.len +
call->call_info_apperance_uri.len +
callinfo_appindex.len +
call->appearance_index_str.len +
callinfo_appstate.len +
app_state[call->call_state].len + 2;
}
}
if (size > PUBLISH_CALL_INFO_HDR_LEN) {
LM_WARN("buffer overflow for PUBLISH Call-Info"
" header: size [%d]\n", size);
p = (char *)pkg_malloc(size);
if (p == NULL) {
LM_ERR("OOM\n");
return -1;
}
publish_hdr->s = p;
memcpy(p, publish_call_info_hdr_buf, sizeof(CALL_INFO_HDR) - 1);
p += sizeof(CALL_INFO_HDR) - 1;
} else {
publish_hdr->s = publish_call_info_hdr_buf;
p = &publish_call_info_hdr_buf[sizeof(CALL_INFO_HDR) - 1];
}
for (i=0; i<MAX_APPEARANCE_INDEX; i++) {
if (rec->call[i]) {
call = rec->call[i];
memcpy(p, call->call_info_uri.s, call->call_info_uri.len);
p += call->call_info_uri.len;
memcpy(p, callinfo_appuri_prefix.s,
callinfo_appuri_prefix.len);
p += callinfo_appuri_prefix.len;
memcpy(p, call->call_info_apperance_uri.s,
call->call_info_apperance_uri.len);
p += call->call_info_apperance_uri.len;
*p = '\"'; p++;
memcpy(p, callinfo_appindex.s, callinfo_appindex.len);
p += callinfo_appindex.len;
memcpy(p, call->appearance_index_str.s,
call->appearance_index_str.len);
p += call->appearance_index_str.len;
memcpy(p, callinfo_appstate.s, callinfo_appstate.len);
p += callinfo_appstate.len;
memcpy(p, app_state[call->call_state].s, app_state[call->call_state].len);
p += app_state[call->call_state].len;
*p = ','; p++;
*p = '<'; p++;
}
}
default_hdr:
memcpy(p, callinfo_default_uri.s, callinfo_default_uri.len);
p += callinfo_default_uri.len;
memcpy(p, callinfo_appindex.s, callinfo_appindex.len);
p += callinfo_appindex.len;
memcpy(p, callinfo_hdr_postfix.s, callinfo_hdr_postfix.len);
p += callinfo_hdr_postfix.len;
publish_hdr->len = p - publish_hdr->s;
LM_DBG("publish_hdr [%d:%d] [%.*s]\n", size, publish_hdr->len,
publish_hdr->len, publish_hdr->s);
return 0;
}
示例11: vqm_free
void vqm_free(struct vqm_block* qm, void* p)
#endif
{
struct vqm_frag *f, *next, *prev, *first_big;
unsigned char b;
#ifdef DBG_QM_MALLOC
LM_GEN1(memlog,"params (%p, %p), called from %s: %s(%d)\n",
qm, p, file, func, line);
if (p>(void *)qm->core_end || p<(void*)qm->init_core){
LM_CRIT("bad pointer %p (out of memory block!) - aborting\n", p);
abort();
}
#endif
if (p==0) {
LM_WARN("free(0) called\n");
return;
}
f=(struct vqm_frag*) ((char*)p-sizeof(struct vqm_frag));
b=f->u.inuse.bucket;
#ifdef DBG_QM_MALLOC
VQM_DEBUG_FRAG(qm, f);
if ( ! FRAG_ISUSED(f) ) {
LM_CRIT("freeing already freed pointer, first freed: %s: %s(%d) "
"- aborting\n", f->file, f->func, f->line);
abort();
}
if ( b>MAX_BUCKET ) {
LM_CRIT("fragment with too high bucket nr: "
"%d, allocated: %s: %s(%d) - aborting\n",
b, f->file, f->func, f->line);
abort();
}
LM_GEN1(memlog,"freeing %d bucket block alloc'ed from %s: %s(%d)\n",
f->u.inuse.bucket, f->file, f->func, f->line);
f->file=file; f->func=func; f->line=line;
qm->usage[ f->u.inuse.bucket ]--;
#endif
if (IS_BIGBUCKET(qm,b)) {
next=FRAG_NEXT(f);
if ((char *)next +sizeof( struct vqm_frag) < qm->core_end) {
VQM_DEBUG_FRAG(qm, next);
if (! FRAG_ISUSED(next)) { /* coalesce with next fragment */
LM_DBG("coalesced with next\n");
vqm_detach_free(qm, next);
f->size+=next->size;
FRAG_END(f)->size=f->size;
}
}
first_big = qm->next_free[b];
if (first_big && f>first_big) {
prev=FRAG_PREV(f);
VQM_DEBUG_FRAG(qm, prev);
if (!FRAG_ISUSED(prev)) { /* coalesce with prev fragment */
LM_DBG("coalesced with prev\n");
vqm_detach_free(qm, prev );
prev->size+=f->size;
f=prev;
FRAG_END(f)->size=f->size;
}
}
if ((char *)f==qm->big_chunks) { /* release unused core */
LM_DBG("big chunk released\n");
qm->free_core+=f->size;
qm->big_chunks+=f->size;
return;
}
first_big = qm->next_free[b];
/* fix reverse link (used only for BIG_BUCKET */
if (first_big) FRAG_END(first_big)->prv_free=f;
FRAG_END(f)->prv_free=0;
} else first_big = qm->next_free[b];
f->u.nxt_free = first_big; /* also clobbers magic */
qm->next_free[b] = f;
}
示例12: modem_process
void modem_process(struct modem *mdm)
{
struct sms_msg *sms_messg;
struct incame_sms sms;
struct network *net;
int i,k,len;
int counter;
int dont_wait;
int empty_pipe;
int cpms_unsuported;
int max_mem=0, used_mem=0;
sms_messg = 0;
cpms_unsuported = 0;
/* let's open/init the modem */
LM_DBG("opening modem\n");
if (openmodem(mdm)==-1) {
LM_ERR("failed to open modem %s! %s \n",
mdm->name,strerror(errno));
return;
}
setmodemparams(mdm);
initmodem(mdm,check_cds_report);
if ( (max_mem=check_memory(mdm,MAX_MEM))==-1 ) {
LM_WARN("CPMS command unsuported! using default values (10,10)\n");
used_mem = max_mem = 10;
cpms_unsuported = 1;
}
LM_DBG("modem maximum memory is %d\n",max_mem);
set_gettime_function();
while(1)
{
/* update the local config */
cfg_update();
dont_wait = 0;
for (i=0;i<nr_of_networks && mdm->net_list[i]!=-1;i++)
{
counter = 0;
empty_pipe = 0;
net = &(networks[mdm->net_list[i]]);
/*getting msgs from pipe*/
while( counter<net->max_sms_per_call && !empty_pipe )
{
/* let's read a sms from pipe */
len = read(net->pipe_out, &sms_messg,
sizeof(sms_messg));
if (len!=sizeof(sms_messg)) {
if (len>=0)
LM_ERR("truncated message read from pipe!"
" -> discarded\n");
else if (errno==EAGAIN)
empty_pipe = 1;
else
LM_ERR("pipe reading failed: %s\n",strerror(errno));
sleep(1);
counter++;
continue;
}
(*queued_msgs)--;
/* compute and send the sms */
LM_DBG("%s processing sms for net %s:"
" \n\tTo:[%.*s]\n\tBody=<%d>[%.*s]\n",
mdm->device, net->name,
sms_messg->to.len,sms_messg->to.s,
sms_messg->text.len,sms_messg->text.len,sms_messg->text.s);
send_as_sms( sms_messg , mdm);
counter++;
/* if I reached the limit -> set not to wait */
if (counter==net->max_sms_per_call)
dont_wait = 1;
}/*while*/
}/*for*/
/* let's see if we have incoming sms */
if ( !cpms_unsuported )
if ((used_mem = check_memory(mdm,USED_MEM))==-1) {
LM_ERR("CPMS command failed! cannot get used mem -> using 10\n");
used_mem = 10;
}
/* if any, let's get them */
if (used_mem)
LM_DBG("%d new SMS on modem\n",used_mem);
for(i=1,k=1;k<=used_mem && i<=max_mem;i++) {
if (getsms(&sms,mdm,i)!=-1) {
k++;
LM_DBG("SMS Get from location %d\n",i);
/*for test ;-) -> to be remove*/
LM_DBG("SMS RECEIVED:\n\rFrom: %s %s\n\r%.*s %.*s"
"\n\r\"%.*s\"\n\r",sms.sender,sms.name,
DATE_LEN,sms.date,TIME_LEN,sms.time,
sms.userdatalength,sms.ascii);
//.........这里部分代码省略.........
示例13: send_sms_as_sip
//.........这里部分代码省略.........
while(p<sms->ascii+sms->userdatalength && no_sip_addr_begin(*p))
p++;
p++;
if (p+9>=sms->ascii+sms->userdatalength) {
LM_ERR("unable to find sip_address start in sms body [%s]!\n",
sms->ascii);
goto error;
}
}
/* lets get the address */
if (p[0]!='s' || p[1]!='i' || p[2]!='p' || p[3]!=':') {
LM_ERR("wrong sip address format in sms body [%s]!\n",sms->ascii);
goto error;
}
sip_addr.s = p;
/* goes to the end of the address */
while(p<sms->ascii+sms->userdatalength && is_in_sip_addr(*p) )
p++;
if (p>=sms->ascii+sms->userdatalength) {
LM_ERR("failed to find sip address end in sms body [%s]!\n",
sms->ascii);
}
sip_addr.len = p-sip_addr.s;
LM_DBG("sip address found [%.*s]\n",
sip_addr.len,sip_addr.s);
/* try to match SMS_HDR_AF_ADDR */
k=0;
while( is_pattern && p<sms->ascii+sms->userdatalength
&& k<SMS_HDR_AF_ADDR_LEN)
if (*(p++)!=SMS_HDR_AF_ADDR[k++])
is_pattern = 0;
} else {
/* no trace of the pattern sent along with the orig sms*/
do {
if ((p[0]=='s'||p[0]=='S') && (p[1]=='i'||p[1]=='I')
&& (p[2]=='p'||p[2]=='P') && p[3]==':') {
/* we got the address beginning */
sip_addr.s = p;
/* goes to the end of the address */
while(p<sms->ascii+sms->userdatalength && is_in_sip_addr(*p) )
p++;
if (p==sms->ascii+sms->userdatalength) {
LM_ERR("failed to find sip address end in sms body [%s]!\n",
sms->ascii);
goto error;
}
sip_addr.len = p-sip_addr.s;
} else {
/* parse to the next word */
/*LM_DBG("*** Skipping word len=%d\n",sms->userdatalength);*/
while(p<sms->ascii+sms->userdatalength&&no_sip_addr_begin(*p)){
p++;
}
p++;
if (p+9>=sms->ascii+sms->userdatalength) {
LM_ERR("unable to find sip address start in sms body [%s]!\n",
sms->ascii);
goto error;
}
/*LM_DBG("*** Done\n");*/
}
}while (!sip_addr.len);
}
/* the rest of the sms (if any ;-)) is the body! */
sip_body.s = p;
sip_body.len = sms->ascii + sms->userdatalength - p;
/* let's trim out all \n an \r from beginning */
while ( sip_body.len && sip_body.s
&& (sip_body.s[0]=='\n' || sip_body.s[0]=='\r') ) {
sip_body.s++;
sip_body.len--;
}
if (sip_body.len==0) {
LM_WARN("empty body for sms [%s]", sms->ascii);
goto error;
}
LM_DBG("extracted body is: [%.*s]\n",sip_body.len, sip_body.s);
/* finally, let's send it as sip message */
sip_from.s = sms->sender;
sip_from.len = strlen(sms->sender);
/* patch the body with date and time */
if (sms->userdatalength + CRLF_LEN + 1 /*'('*/ + DATE_LEN
+ 1 /*','*/ + TIME_LEN + 1 /*')'*/< sizeof(sms->ascii)) {
p = sip_body.s + sip_body.len;
append_str( p, CRLF, CRLF_LEN);
*(p++) = '(';
append_str( p, sms->date, DATE_LEN);
*(p++) = ',';
append_str( p, sms->time, TIME_LEN);
*(p++) = ')';
sip_body.len += CRLF_LEN + DATE_LEN + TIME_LEN + 3;
}
return send_sip_msg_request(&sip_addr, &sip_from, &sip_body);
error:
return -1;
}
示例14: handle_io
/*! \brief
* handle io routine, based on the fd_map type
* (it will be called from reactor_main_loop )
* params: fm - pointer to a fd hash entry
* idx - index in the fd_array (or -1 if not known)
* return: -1 on error, or when we are not interested any more on reads
* from this fd (e.g.: we are closing it )
* 0 on EAGAIN or when by some other way it is known that no more
* io events are queued on the fd (the receive buffer is empty).
* Usefull to detect when there are no more io events queued for
* sigio_rt, epoll_et, kqueue.
* >0 on successfull read from the fd (when there might be more io
* queued -- the receive buffer might still be non-empty)
*/
inline static int handle_io(struct fd_map* fm, int idx,int event_type)
{
int ret=0;
int n;
struct tcp_connection* con;
int s,rw;
long resp;
long response[2];
switch(fm->type){
case F_TIMER_JOB:
handle_timer_job();
break;
case F_SCRIPT_ASYNC:
async_resume_f( fm->fd, fm->data);
return 0;
case F_TCPMAIN:
again:
ret=n=receive_fd(fm->fd, response, sizeof(response), &s, 0);
if (n<0){
if (errno == EWOULDBLOCK || errno == EAGAIN){
ret=0;
break;
}else if (errno == EINTR) goto again;
else{
LM_CRIT("read_fd: %s \n", strerror(errno));
abort(); /* big error*/
}
}
if (n==0){
LM_WARN("0 bytes read\n");
break;
}
con = (struct tcp_connection *)response[0];
rw = (int)response[1];
if (con==0){
LM_CRIT("null pointer\n");
break;
}
if (s==-1) {
LM_BUG("read_fd:no fd read\n");
/* FIXME? */
return -1;
}
if (con==tcp_conn_lst){
LM_CRIT("duplicate"
" connection received: %p, id %d, fd %d, refcnt %d"
" state %d (n=%d)\n", con, con->id, con->fd,
con->refcnt, con->state, n);
tcpconn_release(con, CONN_ERROR,0);
break; /* try to recover */
}
LM_DBG("We have received conn %p with rw %d on fd %d\n",con,rw,s);
if (rw & IO_WATCH_READ) {
/* 0 attempts so far for this SIP MSG */
con->msg_attempts = 0;
/* must be before reactor_add, as the add might catch some
* already existing events => might call handle_io and
* handle_io might decide to del. the new connection =>
* must be in the list */
tcpconn_listadd(tcp_conn_lst, con, c_next, c_prev);
con->timeout = con->lifetime;
if (reactor_add_reader( s, F_TCPCONN, RCT_PRIO_NET, con )<0) {
LM_CRIT("failed to add new socket to the fd list\n");
tcpconn_listrm(tcp_conn_lst, con, c_next, c_prev);
goto con_error;
}
/* mark that the connection is currently in our process
future writes to this con won't have to acquire FD */
con->proc_id = process_no;
/* save FD which is valid in context of this TCP worker */
con->fd=s;
} else if (rw & IO_WATCH_WRITE) {
LM_DBG("Received con for async write %p ref = %d\n",con,con->refcnt);
lock_get(&con->write_lock);
resp = protos[con->type].net.write( (void*)con, s );
lock_release(&con->write_lock);
if (resp<0) {
ret=-1; /* some error occured */
con->state=S_CONN_BAD;
tcpconn_release(con, CONN_ERROR,1);
break;
//.........这里部分代码省略.........
示例15: db_oracle_val2bind
/*
* Called after val2str to realy binding
*/
int db_oracle_val2bind(bmap_t* _m, const db_val_t* _v, OCIDate* _o)
{
if (VAL_NULL(_v)) {
_m->addr = NULL;
_m->size = 0;
_m->type = SQLT_NON;
return 0;
}
switch (VAL_TYPE(_v)) {
case DB_INT:
_m->addr = (int*)&VAL_INT(_v);
_m->size = sizeof(VAL_INT(_v));
_m->type = SQLT_INT;
break;
case DB_BIGINT:
_m->addr = (int*)&VAL_BIGINT(_v);
_m->size = sizeof(VAL_BIGINT(_v));
_m->type = SQLT_NUM;
break;
case DB_BITMAP:
_m->addr = (unsigned*)&VAL_BITMAP(_v);
_m->size = sizeof(VAL_BITMAP(_v));
_m->type = SQLT_UIN;
break;
case DB_DOUBLE:
_m->addr = (double*)&VAL_DOUBLE(_v);
_m->size = sizeof(VAL_DOUBLE(_v));
_m->type = SQLT_FLT;
break;
case DB_STRING:
_m->addr = (char*)VAL_STRING(_v);
_m->size = strlen(VAL_STRING(_v))+1;
_m->type = SQLT_STR;
break;
case DB_STR:
{
unsigned len = VAL_STR(_v).len;
char *estr, *pstr = VAL_STR(_v).s;
estr = (char*)memchr(pstr, 0, len);
if (estr) {
LM_WARN("truncate STR len from %u to: '%s'\n",
len, pstr);
len = (unsigned)(estr - pstr) + 1;
}
_m->size = len;
_m->addr = pstr;
_m->type = SQLT_CHR;
}
break;
case DB_DATETIME:
{
struct tm* tm = localtime(&VAL_TIME(_v));
if (tm->tm_sec == 60)
--tm->tm_sec;
OCIDateSetDate(_o, (ub2)(tm->tm_year + 1900),
(ub1)(tm->tm_mon + 1), (ub1)tm->tm_mday);
OCIDateSetTime(_o, (ub1)tm->tm_hour, (ub1)tm->tm_min,
(ub1)tm->tm_sec);
_m->addr = _o;
_m->size = sizeof(*_o);
_m->type = SQLT_ODT;
}
break;
case DB_BLOB:
_m->addr = VAL_BLOB(_v).s;
_m->size = VAL_BLOB(_v).len;
_m->type = SQLT_CLOB;
break;
default:
LM_ERR("unknown data type\n");
return -1;
}
return 0;
}