这篇教程C++ str2int函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中str2int函数的典型用法代码示例。如果您正苦于以下问题:C++ str2int函数的具体用法?C++ str2int怎么用?C++ str2int使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了str2int函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: nmea_reader_parsestatic voidnmea_reader_parse( NmeaReader* r ){ /* we received a complete sentence, now parse it to generate * a new GPS fix... */ NmeaTokenizer tzer[1]; Token tok; D("Received: '%.*s'", r->pos, r->in); if (r->pos < 9) { D("Too short. discarded."); return; } nmea_tokenizer_init(tzer, r->in, r->in + r->pos);#if GPS_DEBUG { int n; D("Found %d tokens", tzer->count); for (n = 0; n < tzer->count; n++) { Token tok = nmea_tokenizer_get(tzer,n); D("%2d: '%.*s'", n, tok.end-tok.p, tok.p); } }#endif tok = nmea_tokenizer_get(tzer, 0); if (tok.p + 5 > tok.end) { D("sentence id '%.*s' too short, ignored.", tok.end-tok.p, tok.p); return; } // ignore first two characters. tok.p += 2; if ( !memcmp(tok.p, "GGA", 3) ) { // GPS fix Token tok_time = nmea_tokenizer_get(tzer,1); Token tok_latitude = nmea_tokenizer_get(tzer,2); Token tok_latitudeHemi = nmea_tokenizer_get(tzer,3); Token tok_longitude = nmea_tokenizer_get(tzer,4); Token tok_longitudeHemi = nmea_tokenizer_get(tzer,5); Token tok_altitude = nmea_tokenizer_get(tzer,9); Token tok_altitudeUnits = nmea_tokenizer_get(tzer,10); nmea_reader_update_time(r, tok_time); nmea_reader_update_latlong(r, tok_latitude, tok_latitudeHemi.p[0], tok_longitude, tok_longitudeHemi.p[0]); nmea_reader_update_altitude(r, tok_altitude, tok_altitudeUnits); } else if ( !memcmp(tok.p, "GSA", 3) ) { int i; Token tok_fixStatus = nmea_tokenizer_get(tzer, 2); if (tok_fixStatus.p[0] != '/0' && tok_fixStatus.p[0] != '1') { Token tok_accuracy = nmea_tokenizer_get(tzer, 15); nmea_reader_update_accuracy(r, tok_accuracy); } for(i = 3; i <= 14; i++){ Token tok_prn = nmea_tokenizer_get(tzer, i); if(tok_prn.p >= tok_prn.end){ r->status.used_in_fix_mask &= ~(1 << (i-3)); }else{ r->status.used_in_fix_mask |= 1 << (i-3); } } } else if ( !memcmp(tok.p, "GSV", 3) ) { Token tok_numgsv = nmea_tokenizer_get(tzer,1); Token tok_indexgsv = nmea_tokenizer_get(tzer,2); Token tok_numsvs = nmea_tokenizer_get(tzer,3); int numgsv = str2int(tok_numgsv.p, tok_numgsv.end); int indexgsv = str2int(tok_indexgsv.p, tok_indexgsv.end); int numsvs = str2int(tok_numsvs.p, tok_numsvs.end); if((indexgsv <= numgsv) && (indexgsv >= 1)) //________ if (numsvs > 0){ int i, j = 4; for(i = (indexgsv-1) << 2; i < indexgsv << 2; i++){ Token tok_prn = nmea_tokenizer_get(tzer,j++); Token tok_elevation = nmea_tokenizer_get(tzer,j++); Token tok_azimuth = nmea_tokenizer_get(tzer,j++); Token tok_snr = nmea_tokenizer_get(tzer,j++); nmea_reader_update_sv_list(&r->status.sv_list[i], tok_prn, tok_elevation, tok_azimuth, tok_snr); } if(indexgsv == numgsv){ r->status.num_svs = numsvs; if(r->sv_status_cb) r->sv_status_cb(&r->status); } } } else if ( !memcmp(tok.p, "RMC", 3) ) { Token tok_time = nmea_tokenizer_get(tzer,1); Token tok_fixStatus = nmea_tokenizer_get(tzer,2); Token tok_latitude = nmea_tokenizer_get(tzer,3); Token tok_latitudeHemi = nmea_tokenizer_get(tzer,4); Token tok_longitude = nmea_tokenizer_get(tzer,5); Token tok_longitudeHemi = nmea_tokenizer_get(tzer,6);//.........这里部分代码省略.........
开发者ID:tempbottle,项目名称:InDashNet.Open.UN2000,代码行数:101,
示例2: bla_handle_notify//.........这里部分代码省略......... if( parse_contact(msg->contact) <0 ) { LM_ERR(" cannot parse contact header/n"); return -1; } if(msg->contact->parsed == NULL) { LM_ERR("cannot parse contact header/n"); return -1; } contact = ((contact_body_t* )msg->contact->parsed)->contacts->uri; dialog.to_tag= pfrom->tag_value; dialog.event= BLA_EVENT; dialog.flag= BLA_SUBSCRIBE; if(pua_is_dialog(&dialog)< 0) { LM_ERR("Notify in a non existing dialog/n"); return -2; } /* parse Subscription-State and extract expires if existing */ hdr = get_header_by_static_name( msg, "Subscription-State"); if( hdr==NULL ) { LM_ERR("No Subscription-State header found/n"); return -1; } subs_state= hdr->body; if(strncasecmp(subs_state.s, "terminated", 10)== 0) expires= 0; else { if(strncasecmp(subs_state.s, "active", 6)== 0 || strncasecmp(subs_state.s, "pending", 7)==0 ) { expires = DEFAULT_EXPIRES; char* sep= NULL; str exp= {NULL, 0}; sep= strchr(subs_state.s, ';'); if(sep) { if(strncasecmp(sep+1, "expires=", 8)== 0) { exp.s= sep+ 9; sep= exp.s; while((*sep)>='0' && (*sep)<='9') { sep++; exp.len++; } if( str2int(&exp, &expires)< 0) { LM_ERR("while parsing int/n"); return -1; } } } } else { LM_ERR("unknown Subscription-state token/n"); return -1; } } /* +2 for ": " between header name and value */ if ((header_name.len + 2 + contact.len + CRLF_LEN) >= sizeof(buf)) { LM_ERR("Sender header too large"); return -1; } /* build extra_headers with Sender*/ extra_headers.s= buf; memcpy(extra_headers.s, header_name.s, header_name.len); extra_headers.len= header_name.len; memcpy(extra_headers.s+extra_headers.len,": ",2); extra_headers.len+= 2; memcpy(extra_headers.s+ extra_headers.len, contact.s, contact.len); extra_headers.len+= contact.len; memcpy(extra_headers.s+ extra_headers.len, CRLF, CRLF_LEN); extra_headers.len+= CRLF_LEN; publ.id= contact; publ.body= &body; publ.source_flag= BLA_PUBLISH; publ.expires= expires; publ.event= BLA_EVENT; publ.extra_headers= &extra_headers; publ.outbound_proxy = presence_server; if(pua_send_publish(&publ)< 0) { LM_ERR("failed to send Publish message/n"); return -1; } return 1;}
开发者ID:ryzhov,项目名称:ATS0,代码行数:101,
示例3: build_dialog_infodlg_t * build_dialog_info(struct dlg_cell * cell, int dst_leg, int src_leg,char *reply_marker){ dlg_t* td = NULL; str cseq; unsigned int loc_seq; td = (dlg_t*)pkg_malloc(sizeof(dlg_t)); if(!td){ LM_ERR("out of pkg memory/n"); return NULL; } memset(td, 0, sizeof(dlg_t)); /*local sequence number*/ cseq = cell->legs[dst_leg].r_cseq; if( !cseq.s || !cseq.len || str2int(&cseq, &loc_seq) != 0){ LM_ERR("invalid cseq/n"); goto error; } if (cell->legs[dst_leg].last_gen_cseq == 0) cell->legs[dst_leg].last_gen_cseq = loc_seq+1; else cell->legs[dst_leg].last_gen_cseq++; *reply_marker = 0; td->loc_seq.value = cell->legs[dst_leg].last_gen_cseq -1; td->loc_seq.is_set = 1; /*route set*/ if( cell->legs[dst_leg].route_set.s && cell->legs[dst_leg].route_set.len){ if( parse_rr_body(cell->legs[dst_leg].route_set.s, cell->legs[dst_leg].route_set.len, &td->route_set) !=0){ LM_ERR("failed to parse route set/n"); goto error; } } /*remote target--- Request URI*/ if (cell->legs[dst_leg].contact.s==0 || cell->legs[dst_leg].contact.len==0){ LM_ERR("no contact available/n"); goto error; } td->rem_target = cell->legs[dst_leg].contact; td->rem_uri = (dst_leg==DLG_CALLER_LEG)? *dlg_leg_from_uri(cell,dst_leg): *dlg_leg_to_uri(cell,dst_leg); td->loc_uri = (dst_leg==DLG_CALLER_LEG)? *dlg_leg_to_uri(cell,dst_leg): *dlg_leg_from_uri(cell,dst_leg); td->id.call_id = cell->callid; td->id.rem_tag = cell->legs[dst_leg].tag; td->id.loc_tag = cell->legs[src_leg].tag; td->state= DLG_CONFIRMED; td->send_sock = cell->legs[dst_leg].bind_addr; /* link the dialog cell here - it will eventually be linked * within the upcoming created transaction */ td->dialog_ctx = cell; return td;error: free_tm_dlg(td); return NULL;}
开发者ID:Deni90,项目名称:opensips,代码行数:68,
示例4: Plugin_021boolean Plugin_021(byte function, struct NodoEventStruct *event, char *string) { boolean success=false; switch(function) { case PLUGIN_INIT: { LCD_I2C_init(); break; } case PLUGIN_COMMAND: { byte Par2=event->Par2 & 0xff; // Column byte Par3=event->Par2>>8 & 0xff; // Data to display byte Par4=event->Par2>>16 & 0xff; // In case of var, variable number boolean Print = true; if (event->Par1 >= 0 && event->Par1 <= PLUGIN_021_ROWS) { char TempString[80]; TempString[0]=0; switch (Par3) { case 0: case CMD_RESET: if (event->Par1 == 0) LCD_I2C_clear(); else LCD_I2C_printline(event->Par1-1,0, (char*)""); Print=false; break; case EVENT_BOOT: LCD_I2C_init(); break; case VALUE_ON: _backlightval=LCD_BACKLIGHT; LCD_I2C_expanderWrite(0); Print=false; break; case VALUE_OFF: _backlightval=LCD_NOBACKLIGHT; LCD_I2C_expanderWrite(0); Print=false; break; case EVENT_MESSAGE: if ((Par4 > 0) && (Par4 <= LCDI2C_MSG_MAX)) { sprintf(TempString,"%s", LCDText_tabel[Par4-1]); LCD_I2C_printline(event->Par1-1, Par2-1, TempString); } break; case EVENT_VARIABLE: if (Par4 > 0 && Par4 <16) { int d1 = UserVar[Par4-1]; // Get the integer part float f2 = UserVar[Par4-1] - d1; // Get fractional part int d2 = trunc(f2 * 10); // Turn into integer if (d2<0) d2=d2*-1; sprintf(TempString,"%d.%01d", d1,d2); LCD_I2C_printline(event->Par1-1, Par2-1, TempString); } break; } // case //if (Print) // LCD_I2C_printline(event->Par1-1, Par2-1, TempString); Wire.endTransmission(true); success=true; } // if break; } case PLUGIN_MMI_IN: { char *TempStr=(char*)malloc(INPUT_COMMAND_SIZE); if(GetArgv(string,TempStr,1)) { if(strcasecmp(TempStr,PLUGIN_NAME_021)==0) { if(event->Par1 >= 0 && event->Par1 <= PLUGIN_021_ROWS) { if(GetArgv(string,TempStr,4)) event->Par2|=str2cmd(TempStr)<<8; if(GetArgv(string,TempStr,5)) event->Par2|=str2int(TempStr)<<16;//.........这里部分代码省略.........
开发者ID:rtenklooster,项目名称:ESPConnexio,代码行数:101,
示例5: reader_mmt_standardvoid reader_mmt_standard(char* fname, int fid, obsmeta* meta, model* m, observations* obs){ int ncid; int dimid_nprof, dimid_nz; size_t nprof, nz; int varid_lon, varid_lat, varid_z, varid_type; int varid_v = -1; double* lon; double* lat; double** z; double** v; double missval; double validmin = DBL_MAX; double validmax = -DBL_MAX; char* type; char buf[MAXSTRLEN]; int len; int year, month, day; double tunits_multiple, tunits_offset; int mvid; int p, i; if (meta->nstds == 0) enkf_quit("ERROR_STD is necessary but not specified for product /"%s/"", meta->product); ncw_open(fname, NC_NOWRITE, &ncid); ncw_inq_dimid(fname, ncid, "N_PROF", &dimid_nprof); ncw_inq_dimlen(fname, ncid, dimid_nprof, &nprof); ncw_inq_dimid(fname, ncid, "N_LEVELS", &dimid_nz); ncw_inq_dimlen(fname, ncid, dimid_nz, &nz); enkf_printf(" # profiles = %u/n", (unsigned int) nprof); if (nprof == 0) { ncw_close(fname, ncid); return; } enkf_printf(" # z levels = %u/n", (unsigned int) nz); ncw_inq_varid(fname, ncid, "LONGITUDE", &varid_lon); lon = malloc(nprof * sizeof(double)); ncw_get_var_double(fname, ncid, varid_lon, lon); ncw_inq_varid(fname, ncid, "LATITUDE", &varid_lat); lat = malloc(nprof * sizeof(double)); ncw_get_var_double(fname, ncid, varid_lat, lat); ncw_inq_varid(fname, ncid, "PRES_BLUELINK", &varid_z); z = alloc2d(nprof, nz, sizeof(double)); ncw_get_var_double(fname, ncid, varid_z, z[0]); if (strncmp(meta->type, "TEM", 3) == 0) { validmin = -2.0; validmax = 40.0; ncw_inq_varid(fname, ncid, "TEMP_BLUELINK", &varid_v); } else if (strncmp(meta->type, "SAL", 3) == 0) { validmin = 0; validmax = 50.0; ncw_inq_varid(fname, ncid, "PSAL_BLUELINK", &varid_v); } else enkf_quit("observation type /"%s/" not handled for MMT product", meta->type); v = alloc2d(nprof, nz, sizeof(double)); ncw_get_var_double(fname, ncid, varid_v, v[0]); ncw_get_att_double(fname, ncid, varid_v, "_FillValue", &missval); ncw_inq_varid(fname, ncid, "WMO_INST_TYPE", &varid_type); type = malloc(nprof * WMO_INSTSIZE); ncw_get_var_text(fname, ncid, varid_type, type); ncw_close(fname, ncid); strcpy(buf, fname); len = strlen(buf); buf[len - 10] = 0; /* _mmt_qc.nc */ if (!str2int(&buf[len - 12], &day)) enkf_quit("MMT reader: could not convert file name /"%s/" to date", fname); buf[len - 12] = 0; if (!str2int(&buf[len - 14], &month)) enkf_quit("MMT reader: could not convert file name /"%s/" to date", fname); buf[len - 14] = 0; if (!str2int(&buf[len - 18], &year)) enkf_quit("MMT reader: could not convert file name /"%s/" to date", fname); snprintf(buf, MAXSTRLEN, "days since %4d-%02d-%02d", year, month, day); tunits_convert(buf, &tunits_multiple, &tunits_offset); mvid = model_getvarid(m, obs->obstypes[obstype_getid(obs->nobstypes, obs->obstypes, meta->type)].varname, 1); for (p = 0; p < (int) nprof; ++p) { char inststr[MAXSTRLEN]; snprintf(inststr, MAXSTRLEN, "WMO%04u", type[p * WMO_INSTSIZE]); for (i = 0; i < (int) nz; ++i) { observation* o; obstype* ot; if (fabs(v[p][i] - missval) < EPS || v[p][i] < validmin || v[p][i] > validmax)//.........这里部分代码省略.........
开发者ID:TheProjecter,项目名称:enkf-c,代码行数:101,
示例6: dlg_cseq_updateint dlg_cseq_update(sip_msg_t *msg){ dlg_cell_t *dlg = NULL; unsigned int direction; unsigned int ninc = 0; unsigned int vinc = 0; str nval; str *pval; if(dlg_cseq_prepare_msg(msg)!=0) { goto error; } if(msg->first_line.type==SIP_REPLY) { /* nothing to do for outgoing replies */ goto done; } LM_DBG("initiating cseq updates/n"); direction = DLG_DIR_NONE; dlg = dlg_lookup_msg_dialog(msg, &direction); if(dlg == NULL) { LM_DBG("no dialog for this request/n"); goto done; } /* supported only for downstrem direction */ if(direction != DLG_DIR_DOWNSTREAM) { LM_DBG("request not going downstream (%u)/n", direction); goto done; } ninc = 1; /* take the increment value from dialog */ if((dlg->iflags&DLG_IFLAG_CSEQ_DIFF)==DLG_IFLAG_CSEQ_DIFF) { /* get dialog variable holding cseq diff */ pval = get_dlg_variable(dlg, &_dlg_cseq_diff_var_name); if(pval==NULL || pval->s==NULL || pval->len<=0) { LM_DBG("dialog marked with cseq diff but no variable set yet/n"); goto done; } if(str2int(pval, &vinc)<0) { LM_ERR("invalid dlg cseq diff var value: %.*s/n", pval->len, pval->s); goto done; } } vinc += ninc; if(vinc==0) { LM_DBG("nothing to increment/n"); goto done; } nval.s = int2str(vinc, &nval.len); if(set_dlg_variable(dlg, &_dlg_cseq_diff_var_name, &nval) <0) { LM_ERR("failed to set the dlg cseq diff var/n"); goto done; } str2int(&get_cseq(msg)->number, &ninc); vinc += ninc; nval.s = int2str(vinc, &nval.len); trim(&nval); LM_DBG("adding auth cseq header value: %.*s/n", nval.len, nval.s); parse_headers(msg, HDR_EOH_F, 0); sr_hdr_add_zs(msg, "P-K-Auth-CSeq", &nval);done: if(dlg!=NULL) dlg_release(dlg); return 0;error: if(dlg!=NULL) dlg_release(dlg); return -1;}
开发者ID:4N7HR4X,项目名称:kamailio,代码行数:76,
示例7: process_mi_params/* * IMPORTANT: if a dialog reference is returned, the dialog hash entry will be kept locked when this function returns NOTE: if a reply tree is returned, no dialog reference is returned. */static inline struct mi_root* process_mi_params(struct mi_root *cmd_tree, struct dlg_cell **dlg_p, unsigned int *idx, unsigned int *cnt){ struct mi_node* node; struct dlg_entry *d_entry; struct dlg_cell *dlg; str *p1; str *p2; unsigned int h_entry; node = cmd_tree->node.kids; if (node == NULL) { /* no parameters at all */ *dlg_p = NULL; *idx = *cnt = 0; return NULL; } /* we have params -> get p1 and p2 */ p1 = &node->value; LM_DBG("p1='%.*s'/n", p1->len, p1->s); node = node->next; if ( !node || !node->value.s || !node->value.len) { p2 = NULL; } else { p2 = &node->value; LM_DBG("p2='%.*s'/n", p2->len, p2->s); if ( node->next!=NULL ) return init_mi_tree( 400, MI_SSTR(MI_MISSING_PARM)); } /* check the params */ if (p2 && str2int(p1,idx)==0 && str2int(p2,cnt)==0) { /* 2 numerical params -> index and counter */ *dlg_p = NULL; return NULL; } *idx = *cnt = 0; h_entry = dlg_hash( p1/*callid*/ ); d_entry = &(d_table->entries[h_entry]); dlg_lock( d_table, d_entry); for( dlg = d_entry->first ; dlg ; dlg = dlg->next ) { if (match_downstream_dialog( dlg, p1/*callid*/, p2/*from_tag*/)==1) { if (dlg->state==DLG_STATE_DELETED) { *dlg_p = NULL; break; } else { *dlg_p = dlg; return 0; } } } dlg_unlock( d_table, d_entry); return init_mi_tree( 404, MI_SSTR("Nu such dialog"));}
开发者ID:dynamicpacket-public,项目名称:opensips,代码行数:66,
示例8: run_reg_tm_cbackint run_reg_tm_cback(void *e_data, void *data, void *r_data){ struct sip_msg *msg; int statuscode = 0; unsigned int exp = 0; reg_record_t *rec = (reg_record_t*)e_data; struct hdr_field *c_ptr, *head_contact; struct uac_credential crd; contact_t *contact; struct authenticate_body *auth = NULL; static struct authenticate_nc_cnonce auth_nc_cnonce; HASHHEX response; str *new_hdr; struct reg_tm_cback_data *tm_cback_data = (struct reg_tm_cback_data*)data; struct cell *t; struct tmcb_params *ps; time_t now; reg_tm_cb_t *cb_param; cb_param = tm_cback_data->cb_param; if (rec!=cb_param->uac) { /* no action on current list elemnt */ return 0; /* continue list traversal */ } t = tm_cback_data->t; ps = tm_cback_data->ps; now = tm_cback_data->now; reg_print_record(rec); if (ps->rpl==FAKED_REPLY) memset(&rec->td.forced_to_su, 0, sizeof(union sockaddr_union)); else if (rec->td.forced_to_su.s.sa_family == AF_UNSPEC) rec->td.forced_to_su = t->uac[0].request.dst.to; statuscode = ps->code; switch(statuscode) { case 200: msg = ps->rpl; if(msg==FAKED_REPLY) { LM_ERR("FAKED_REPLY/n"); goto done; } if (parse_headers(msg, HDR_EOH_F, 0) == -1) { LM_ERR("failed to parse headers/n"); goto done; } if (msg->contact) { c_ptr = msg->contact; while(c_ptr) { if (c_ptr->type == HDR_CONTACT_T) { if (!c_ptr->parsed && (parse_contact(c_ptr)<0)) { LM_ERR("failed to parse Contact body/n"); goto done; } } c_ptr = c_ptr->next; } } else { LM_ERR("No contact header in received 200ok/n"); goto done; } head_contact = msg->contact; contact = ((contact_body_t*)msg->contact->parsed)->contacts; while (contact) { /* Check for binding */ if (contact->uri.len==rec->contact_uri.len && strncmp(contact->uri.s,rec->contact_uri.s,contact->uri.len)==0){ if (contact->expires && contact->expires->body.len) { if (str2int(&contact->expires->body, &exp)<0) { LM_ERR("Unable to extract expires from [%.*s]" " for binding [%.*s]/n", contact->expires->body.len, contact->expires->body.s, contact->uri.len, contact->uri.s); } } break; } /* get the next contact */ if (contact->next == NULL) { contact = NULL; c_ptr = head_contact->next; while(c_ptr) { if (c_ptr->type == HDR_CONTACT_T) { head_contact = c_ptr; contact = ((contact_body_t*)c_ptr->parsed)->contacts; break; } c_ptr = c_ptr->next; } } else { contact = contact->next; } } rec->state = REGISTERED_STATE; if (exp) rec->expires = exp; rec->registration_timeout = now + rec->expires - timer_interval;//.........这里部分代码省略.........
开发者ID:KISSMonX,项目名称:opensips,代码行数:101,
示例9: subs_cback_func//.........这里部分代码省略......... } if(lexpire== 0 ) { LM_DBG("lexpire= 0 Delete from hash table"); find_and_delete_dialog(hentity, hash_code); goto done; } /* extract the contact */ if(msg->contact== NULL || msg->contact->body.s== NULL) { LM_ERR("no contact header found"); goto error; } if( parse_contact(msg->contact) <0 ) { LM_ERR(" cannot parse contact header/n"); goto error; } if(msg->contact->parsed == NULL) { LM_ERR("cannot parse contact header/n"); goto error; } contact = ((contact_body_t* )msg->contact->parsed)->contacts->uri; if( msg->cseq==NULL || msg->cseq->body.s==NULL) { LM_ERR("cannot parse cseq header/n"); goto error; } if( str2int( &(get_cseq(msg)->number), &cseq)< 0) { LM_ERR("while converting str to int/n"); goto error; } if(initial_request == 0) { hentity->cseq = cseq; find_and_update_dialog(hentity, hash_code, lexpire, &contact); goto done; } /*process record route and add it to a string*/ if (msg->record_route!=NULL) { rt = print_rr_body(msg->record_route, &record_route, 1, 0); if(rt != 0) { LM_ERR("parsing record route [%d]/n", rt); record_route.s=NULL; record_route.len=0; } } size= sizeof(ua_pres_t)+ 2*sizeof(str)+( pto->uri.len+ pfrom->uri.len+ pto->tag_value.len+ pfrom->tag_value.len +msg->callid->body.len+ record_route.len+ hentity->contact.len+ hentity->id.len )*sizeof(char); if(hentity->extra_headers) size+= sizeof(str)+ hentity->extra_headers->len*sizeof(char);
开发者ID:Jared-Prime,项目名称:kamailio,代码行数:66,
示例10: strchr//.........这里部分代码省略......... if (!has_val) { LM_ERR("resource must not has value!/n"); goto error; } } else { if (has_val) { LM_ERR("resource must has value!/n"); goto error; } p = end?end:(r_list+strlen(r_list)); } for(; (p-1)!=name.s && isspace(*(p-1)) ; p-- ); if (p==name.s) { LM_ERR("empty resource name around %d/n",(unsigned int)(p-r_list)); goto error; } name.len = p-name.s; /* mark */ n++; len += name.len; /* next */ p = end+1; } while(end && *p); if (n==0) { LM_ERR("empty list of resorces/n"); goto error; } LM_DBG("discovered %d resources/n",n); /* allocate stuff*/ lb_rl = (struct lb_res_str_list *)pkg_malloc (sizeof(struct lb_res_str_list) + n*sizeof(struct lb_res_str) + len); if (lb_rl==NULL) { LM_ERR("no more pkg memory/n"); goto error; } /* init the strucuture */ lb_rl->n = n; lb_rl->resources =(struct lb_res_str*)(lb_rl+1); s = (char*)(lb_rl->resources + n); /* fill in the structures*/ p = r_list; n = 0; do { /* eat spaces */ for( ; *p && isspace(*p) ; p++); if (!*p) break; /* name .... */ end = strchr(p,';'); if (end) *end = 0; name.s = p; val.s = 0; p = strchr(p,'='); if (end) *end = ';'; if (!p) { p = end?end:(r_list+strlen(r_list)); } else { val.s = p+1; } for(; (p-1)!=name.s && isspace(*(p-1)) ; p-- ); name.len = p-name.s; lb_rl->resources[n].name.len = name.len; lb_rl->resources[n].name.s = s; memcpy( s, name.s, name.len ); s += name.len; /* ....and value */ if (has_val) { /* eat spaces */ for( ; *val.s && isspace(*val.s) ; val.s++); if (!*val.s) { LM_ERR("empty val !/n"); goto error1; } val.len = ( end?end:(r_list+strlen(r_list)) ) - val.s; for( ; isspace(val.s[val.len-1]) ; val.len--); if (str2int( &val , &lb_rl->resources[n].val)!=0) { LM_ERR("invalid value [%.*s]/n",val.len,val.s); goto error1; } } else { lb_rl->resources[n].val = 0; } /* next */ n++; p = end+1; } while(end && *p); return lb_rl;error1: pkg_free(lb_rl);error: return NULL;}
开发者ID:Distrotech,项目名称:opensips,代码行数:101,
示例11: reader_amsr2_standardvoid reader_amsr2_standard(char* fname, int fid, obsmeta* meta, model* m, observations* obs){ int ncid; int dimid_nobs; size_t nobs_local; int varid_lon, varid_lat, varid_sst, varid_error, varid_time; double* lon; double* lat; double* sst; double* error_std; double* time; int year, month, day; char tunits[MAXSTRLEN]; size_t tunits_len; double tunits_multiple, tunits_offset; char* basename; int model_vid; int k, i; for (i = 0; i < meta->npars; ++i) enkf_quit("unknown PARAMETER /"%s/"/n", meta->pars[i].name); basename = strrchr(fname, '/'); if (basename == NULL) basename = fname; else basename += 1; ncw_open(fname, NC_NOWRITE, &ncid); ncw_inq_dimid(fname, ncid, "nobs", &dimid_nobs); ncw_inq_dimlen(fname, ncid, dimid_nobs, &nobs_local); enkf_printf(" nobs = %u/n", (unsigned int) nobs_local); if (nobs_local == 0) { ncw_close(fname, ncid); return; } ncw_inq_varid(fname, ncid, "lon", &varid_lon); lon = malloc(nobs_local * sizeof(double)); ncw_get_var_double(fname, ncid, varid_lon, lon); ncw_inq_varid(fname, ncid, "lat", &varid_lat); lat = malloc(nobs_local * sizeof(double)); ncw_get_var_double(fname, ncid, varid_lat, lat); ncw_inq_varid(fname, ncid, "sst", &varid_sst); sst = malloc(nobs_local * sizeof(double)); ncw_get_var_double(fname, ncid, varid_sst, sst); ncw_inq_varid(fname, ncid, "error", &varid_error); error_std = malloc(nobs_local * sizeof(double)); ncw_get_var_double(fname, ncid, varid_error, error_std); ncw_inq_varid(fname, ncid, "age", &varid_time); time = malloc(nobs_local * sizeof(double)); ncw_get_var_double(fname, ncid, varid_time, time); ncw_inq_attlen(fname, ncid, varid_time, "units", &tunits_len); ncw_get_att_text(fname, ncid, varid_time, "units", tunits); basename[14] = 0; if (!str2int(&basename[12], &day)) enkf_quit("AMSR2 reader: could not convert file name /"%s/" to date", fname); basename[12] = 0; if (!str2int(&basename[10], &month)) enkf_quit("AMSR2 reader: could not convert file name /"%s/" to date", fname); basename[10] = 0; if (!str2int(&basename[6], &year)) enkf_quit("AMSR2 reader: could not convert file name /"%s/" to date", fname); snprintf(&tunits[tunits_len], MAXSTRLEN - tunits_len, " since %4d-%02d-%02d", year, month, day); ncw_close(fname, ncid); tunits_convert(tunits, &tunits_multiple, &tunits_offset); model_vid = model_getvarid(m, obs->obstypes[obstype_getid(obs->nobstypes, obs->obstypes, meta->type)].varname, 1); k = grid_gettoplayerid(model_getvargrid(m, model_vid)); for (i = 0; i < (int) nobs_local; ++i) { observation* o; obstype* ot; obs_checkalloc(obs); o = &obs->data[obs->nobs]; o->product = st_findindexbystring(obs->products, meta->product); assert(o->product >= 0); o->type = obstype_getid(obs->nobstypes, obs->obstypes, meta->type); assert(o->type >= 0); ot = &obs->obstypes[o->type]; o->instrument = st_add_ifabscent(obs->instruments, "AMSR-2", -1); o->id = obs->nobs; o->fid = fid; o->batch = 0; o->value = sst[i]; o->std = error_std[i]; o->lon = lon[i]; o->lat = lat[i]; o->depth = 0.0; o->status = model_xy2fij(m, model_vid, o->lon, o->lat, &o->fi, &o->fj);//.........这里部分代码省略.........
开发者ID:marshallward,项目名称:enkf-c,代码行数:101,
示例12: pack_ci/*! /brief * Fills the common part (for all contacts) of the info structure */static inline ucontact_info_t* pack_ci( struct sip_msg* _m, contact_t* _c, unsigned int _e, unsigned int _f, int _use_regid){ static ucontact_info_t ci; static str no_ua = str_init("n/a"); static str callid; static str path_received = {0,0}; static str path; static str received = {0,0}; static int received_found; static unsigned int allowed, allow_parsed; static struct sip_msg *m = 0; int_str val; if (_m!=0) { memset( &ci, 0, sizeof(ucontact_info_t)); /* Get callid of the message */ callid = _m->callid->body; trim_trailing(&callid); if (callid.len > CALLID_MAX_SIZE) { rerrno = R_CALLID_LEN; LM_ERR("callid too long/n"); goto error; } ci.callid = &callid; /* Get CSeq number of the message */ if (str2int(&get_cseq(_m)->number, (unsigned int*)&ci.cseq) < 0) { rerrno = R_INV_CSEQ; LM_ERR("failed to convert cseq number/n"); goto error; } /* set received socket */ if (_m->flags&sock_flag) { ci.sock = get_sock_val(_m); if (ci.sock==0) ci.sock = _m->rcv.bind_address; } else { ci.sock = _m->rcv.bind_address; } /* set tcp connection id */ if (_m->rcv.proto==PROTO_TCP || _m->rcv.proto==PROTO_TLS || _m->rcv.proto==PROTO_WS || _m->rcv.proto==PROTO_WSS) { ci.tcpconn_id = _m->rcv.proto_reserved1; } else { ci.tcpconn_id = -1; } /* additional info from message */ if (parse_headers(_m, HDR_USERAGENT_F, 0) != -1 && _m->user_agent && _m->user_agent->body.len>0 && _m->user_agent->body.len<MAX_UA_SIZE) { ci.user_agent = &_m->user_agent->body; } else { ci.user_agent = &no_ua; } /* extract Path headers */ if (path_enabled) { if (build_path_vector(_m, &path, &path_received) < 0) { rerrno = R_PARSE_PATH; goto error; } if (path.len && path.s) { ci.path = &path; if (path_mode != PATH_MODE_OFF) { /* save in msg too for reply */ if (set_path_vector(_m, &path) < 0) { rerrno = R_PARSE_PATH; goto error; } } } } ci.last_modified = act_time; /* set flags */ ci.flags = _f; getbflagsval(0, &ci.cflags); /* get received */ if (path_received.len && path_received.s) { ci.cflags |= ul.nat_flag; ci.received = path_received; } ci.server_id = server_id; if(_m->contact) { _c = (((contact_body_t*)_m->contact->parsed)->contacts); if(_c->instance!=NULL && _c->instance->body.len>0) { ci.instance = _c->instance->body; LM_DBG("set instance[%.*s]/n", ci.instance.len, ci.instance.s); } if(_use_regid && _c->instance!=NULL && _c->reg_id!=NULL && _c->reg_id->body.len>0) {//.........这里部分代码省略.........
开发者ID:SipSeb,项目名称:kamailio,代码行数:101,
示例13: INFOint CCBLRedis::onLoad() { AmConfigReader cfg; string redis_server = "127.0.0.1"; string redis_port = "6379"; string redis_reconnect_timers = "5,10,20,50,100,500,1000"; string redis_connections = "10"; string redis_max_conn_wait = "1000"; pass_on_bl_unavailable = false; full_logging = false; if(cfg.loadPluginConf(MOD_NAME)) { INFO(MOD_NAME "configuration file not found, assuming default " "configuration is fine/n"); } else { redis_server = cfg.getParameter("redis_server", redis_server); redis_port = cfg.getParameter("redis_port", redis_port); redis_reconnect_timers = cfg.getParameter("redis_reconnect_timers", redis_reconnect_timers); redis_connections = cfg.getParameter("redis_connections", redis_connections); redis_max_conn_wait = cfg.getParameter("redis_max_conn_wait", redis_max_conn_wait); full_logging = cfg.getParameter("redis_full_logging", "no")=="yes"; pass_on_bl_unavailable = cfg.getParameter("pass_on_bl_unavailable", "no")=="yes"; } unsigned int i_redis_connections; if (str2i(redis_connections, i_redis_connections)) { ERROR("could not understand redis_connections=%s/n", redis_connections.c_str()); return -1; } unsigned int i_redis_port; if (str2i(redis_port, i_redis_port)) { ERROR("could not understand redis_port=%s/n", redis_port.c_str()); return -1; } unsigned int i_redis_max_conn_wait; if (str2i(redis_max_conn_wait, i_redis_max_conn_wait)) { ERROR("could not understand redis_max_conn_wait=%s/n", redis_max_conn_wait.c_str()); return -1; } std::vector<unsigned int> reconnect_timers; std::vector<string> timeouts_v = explode(redis_reconnect_timers, ","); for (std::vector<string>::iterator it= timeouts_v.begin(); it != timeouts_v.end(); it++) { int r; if (!str2int(*it, r)) { ERROR("REDIS reconnect timeout '%s' not understood/n", it->c_str()); return -1; } reconnect_timers.push_back(r); } connection_pool.set_config(redis_server, i_redis_port, reconnect_timers, i_redis_max_conn_wait); connection_pool.add_connections(i_redis_connections); connection_pool.start(); DBG("setting max number max_retries to %u (as connections)/n", i_redis_connections); max_retries = i_redis_connections; return 0;}
开发者ID:Chocolatbuddha,项目名称:sems,代码行数:68,
示例14: pReadHDRenum MqErrorEpReadHDR ( register struct MqS * context, struct MqS ** a_context){ struct MqReadS * read = context->link.read; MQ_SIZE ctxId; MQ_SIZE size; register int const string = context->config.isString; register struct HdrS * cur; int debug; register struct MqBufferS * bdy; struct MqBufferS * hdr = read->hdr; // 1. preset context *a_context = context; // 2. read MqErrorSwitch (pIoRead (context->link.io, hdr, HDR_SIZE)); cur = (struct HdrS *) hdr->cur.B;//MqDLogV (context, __func__, 0, "START (%c%c%c%c)/n", cur->tok[0], cur->tok[1], cur->tok[2], cur->tok[3]);//pReadLog(context, "pReadHDR->1"); // check "HDR"#ifdef MQ_SAVE if (unlikely (strncmp (cur->ID, "HDR", 3))) { MQ_BUF save = MqBufferCreate (MQ_ERROR_PANIC, 1000); do { MqBufferAppendC (save, (MQ_STR) hdr->data); } while (pIoRead (context->link.io, hdr, HDR_SIZE) == MQ_OK); *(hdr->data+hdr->cursize) = '/0'; MqBufferAppendC (save, (MQ_STR) hdr->data); MqErrorDb (MQ_ERROR_INVALID_HEADER); MqErrorSAppendV (context, "but got: %s", (MQ_STR) save->data); MqBufferDelete (&save); return MQ_ERROR; }#endif // 3. read binary data if (unlikely(string)) { ctxId = str2int(cur->ctxId.S,NULL,16); size = str2int(cur->size.S,NULL,16); } else { ctxId = cur->ctxId.B; size = cur->size.B; // 3.b fix byte-order if (context->link.bits.endian) { pSwap4 (&ctxId); pSwap4 (&size); } } // 4. set my context if (ctxId != context->link.ctxId) { // check if ctxId is out of range if (ctxId > context->link.ctxIdP->link.ctxIdR) return MqErrorV (context, __func__, -1, "invalid context-id '%i'", ctxId); // do the context-switch if the message does !!not!! belongs to the // original context context = context->link.ctxIdP->link.ctxIdA[ctxId]; // check if entry was already deleted if (!context) return MQ_CONTINUE; *a_context = context; }//MqDLogV (context, __func__, 0, "cur->ctxId.B<%i>, context->context.ctxId<%i>/n", cur->ctxId.B, context->context.ctxId);//MqDLogV (context, __func__, 0, "hex/n<%s>/n", pLogHEX (hdr->data, sizeof (struct HdrS))); debug = context->config.debug; context->link._trans = cur->trans; // 6. log message if (unlikely (debug >= 5)) { hdr->type = MQ_STRING_TYPE(string); pLogHDR (context, __func__, 5, hdr); } // 7. setup read read = context->link.read; read->handShake = (enum MqHandShakeE) cur->code; read->returnNum = 0; // MqReadBDY need the original "header", save this header in the current context read->hdrorig = hdr; bdy = read->bdy; // 8. read token pTokenSetCurrent (context->link.srvT, cur->tok); // 9. read BDY if ((bdy->cursize = size)) { bdy->type = MQ_STRING_TYPE(string); if (unlikely (debug >= 6)) MqLogV (context, __func__, 6, "BDY -> " MQ_FORMAT_Z " bytes/n", size); // 1. read MqErrorSwitch (pIoRead (context->link.io, bdy, bdy->cursize)); // 2. read 'HDR'#ifdef MQ_SAVE//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:nhi1-svn,代码行数:101,
示例15: reg_tm_cbackvoid reg_tm_cback(struct cell *t, int type, struct tmcb_params *ps){ struct sip_msg *msg; reg_tm_cb_t *cb_param; int statuscode = 0; unsigned int exp = 0; reg_record_t *rec; struct hdr_field *c_ptr, *head_contact; struct uac_credential crd; contact_t *contact; struct authenticate_body *auth = NULL; static struct authenticate_nc_cnonce auth_nc_cnonce; HASHHEX response; str *new_hdr; time_t now; if(ps==NULL || ps->rpl==NULL) { LM_ERR("wrong ps parameter/n"); return; } if(ps->param==NULL || *ps->param==NULL) { LM_ERR("null callback parameter/n"); return; } cb_param = (reg_tm_cb_t *)*ps->param; if(cb_param->uac == NULL) { LM_ERR("null record/n"); return; } statuscode = ps->code; now = time(0); LM_DBG("tm [%p] notification cb for %s [%d] reply at [%d]/n", t, (ps->rpl==FAKED_REPLY)?"FAKED_REPLY":"", statuscode, (unsigned int)now); if(statuscode<200) return; lock_get(®_htable[cb_param->hash_index].lock); rec = reg_htable[cb_param->hash_index].first; while(rec) { if (rec==cb_param->uac) { break; } rec = rec->next; } if(!rec) { LM_ERR("record [%p] not found on hash index [%d]/n", cb_param->uac, cb_param->hash_index); lock_release(®_htable[cb_param->hash_index].lock); return; } reg_print_record(rec); switch(statuscode) { case 200: msg = ps->rpl; if(msg==FAKED_REPLY) { LM_ERR("FAKED_REPLY/n"); goto done; } if (parse_headers(msg, HDR_EOH_F, 0) == -1) { LM_ERR("failed to parse headers/n"); goto done; } if (msg->contact) { c_ptr = msg->contact; while(c_ptr) { if (c_ptr->type == HDR_CONTACT_T) { if (!c_ptr->parsed && (parse_contact(c_ptr)<0)) { LM_ERR("failed to parse Contact body/n"); goto done; } } c_ptr = c_ptr->next; } } else { LM_ERR("No contact header in received 200ok/n"); goto done; } head_contact = msg->contact; contact = ((contact_body_t*)msg->contact->parsed)->contacts; while (contact) { /* Check for binding */ if (contact->uri.len==rec->contact_uri.len && strncmp(contact->uri.s,rec->contact_uri.s,contact->uri.len)==0){ if (contact->expires && contact->expires->body.len) { if (str2int(&contact->expires->body, &exp)<0) { LM_ERR("Unable to extract expires from [%.*s]" " for binding [%.*s]/n", contact->expires->body.len, contact->expires->body.s, contact->uri.len, contact->uri.s); } else { rec->expires = exp; } } break; } /* get the next contact */ if (contact->next == NULL) {//.........这里部分代码省略.........
开发者ID:mtulio,项目名称:mtulio,代码行数:101,
示例16: atoiint atoi(const char *src){ long val; str2int(src, 10, (long) INT_MIN, (long) INT_MAX, &val); return (int) val;}
开发者ID:NickeyWoo,项目名称:mysql-3.23.49,代码行数:6,
示例17: mainint main(int argc, char **argv){ if(argc < 6 || argc > 7){ printf("Wrong number of arguments!"); exit(-1); } int workerID = str2int(argv[1]); int nBuffers = str2int(argv[2]); float sleepTime = str2float(argv[3]); int msgID = str2int(argv[4]); int shmID = str2int(argv[5]); int semID; BOOL lock = FALSE; if(argc == 7){ //if a semID is given semID = str2int(argv[6]); lock = TRUE; } //connect to message queue int msgQ = msgID; if(msgQ == -1){ perror("Error connecting to message queue"); exit(-1); } //send startup message struct message msg; msg.mtype = 1; msg.workerID = workerID; msg.sleepTime = sleepTime; if(msgsnd(msgQ, &msg, sizeof(struct message) - sizeof(long), 0) == -1){ perror("Error sending message"); exit(-1); } //attatch to shared memory int *shm = shmat(shmID, (void *)0, 0); if(shm == (int *) -1){ perror("Error attatching to shared memory"); exit(-1); } //===================== PART 5 ============================== //use semaphores if(lock){ int i; int currentBuffer = workerID; for(i=0; i<nBuffers; i++){ int j; for(j=0; j<2; j++){ //read twice wait(currentBuffer, semID, nBuffers); int read = shm[currentBuffer]; if(usleep(sleepTime*1000000) == -1){ perror("Error sleeping"); exit(-1); } //check if changed if(shm[currentBuffer] != read){ msg.mtype = 3; msg.workerID = workerID; msg.changedBuffer = currentBuffer; msg.initVal = read; msg.newVal = shm[currentBuffer]; if(msgsnd(msgQ, &msg, sizeof(struct message), 0) == -1){ perror("Error sending message"); exit(-1); } } signal(currentBuffer, semID, nBuffers); currentBuffer += workerID; if(currentBuffer >= nBuffers) currentBuffer -= nBuffers; } //write wait(currentBuffer, semID, nBuffers); int read = shm[currentBuffer]; if(usleep(sleepTime*1000000) == -1){ perror("Error sleeping"); exit(-1); } shm[currentBuffer] = read | (1<<(workerID -1)); signal(currentBuffer, semID, nBuffers); currentBuffer += workerID; if(currentBuffer >= nBuffers) currentBuffer -= nBuffers; //.........这里部分代码省略.........
开发者ID:Squaar,项目名称:cs-385-hw-2,代码行数:101,
示例18: atollong atol(const char *src){ long val; str2int(src, 10, LONG_MIN, LONG_MAX, &val); return val;}
开发者ID:NickeyWoo,项目名称:mysql-3.23.49,代码行数:6,
示例19: apply_cseq_opint apply_cseq_op(struct sip_msg *msg,int val){ int offset,len,olen; struct lump *tmp; char *buf,*obuf; unsigned int cseq_no; str pkg_cseq; if (!msg) { LM_ERR("null pointer provided/n"); return -1; } if(parse_headers(msg, HDR_CSEQ_F, 0) <0 ) { LM_ERR("failed to parse headers /n"); return -1; } if (str2int(&(((struct cseq_body *)msg->cseq->parsed)->number),&cseq_no) < 0) { LM_ERR("Failed to convert cseq to integer /n"); return -1; } cseq_no=cseq_no+val; obuf = int2str(cseq_no,&olen); if (obuf == NULL) { LM_ERR("Failed to convert new integer to string /n"); return -1; } pkg_cseq.s = pkg_malloc(olen); if (!pkg_cseq.s) { LM_ERR("No more pkg mem /n"); return -1; } memcpy(pkg_cseq.s,obuf,olen); pkg_cseq.len = olen; buf = msg->buf; len = ((struct cseq_body *)msg->cseq->parsed)->number.len; offset = ((struct cseq_body *)msg->cseq->parsed)->number.s - buf; if ((tmp = del_lump(msg,offset,len,0)) == 0) { LM_ERR("failed to remove the existing CSEQ/n"); pkg_free(pkg_cseq.s); return -1; } if (insert_new_lump_after(tmp,pkg_cseq.s,pkg_cseq.len,0) == 0) { LM_ERR("failed to insert new CSEQ/n"); pkg_free(pkg_cseq.s); return -1; } LM_DBG("Message CSEQ translated from [%.*s] to [%.*s]/n", ((struct cseq_body *)msg->cseq->parsed)->number.len, ((struct cseq_body *)msg->cseq->parsed)->number.s,pkg_cseq.len, pkg_cseq.s); return cseq_no;}
开发者ID:WuKongQC,项目名称:opensips,代码行数:64,
示例20: ht_table_specint ht_table_spec(char *spec){ keyvalue_t kval; str name; str dbtable = {0, 0}; unsigned int autoexpire = 0; unsigned int size = 4; unsigned int dbmode = 0; unsigned int updateexpire = 1; str in; str tok; param_t *pit=NULL; int_str ival; int itype; if(!shm_initialized()) { LM_ERR("shared memory was not initialized/n"); return -1; } /* parse: name=>dbtable=abc;autoexpire=123;size=123 */ in.s = spec; in.len = strlen(in.s); if(keyvalue_parse_str(&in, KEYVALUE_TYPE_PARAMS, &kval)<0) { LM_ERR("failed parsing: %.*s/n", in.len, in.s); return -1; } name = kval.key; itype = PV_VAL_NONE; memset(&ival, 0, sizeof(int_str)); for (pit = kval.u.params; pit; pit=pit->next) { tok = pit->body; if(pit->name.len==7 && strncmp(pit->name.s, "dbtable", 7)==0) { dbtable = tok; LM_DBG("htable [%.*s] - dbtable [%.*s]/n", name.len, name.s, dbtable.len, dbtable.s); } else if(pit->name.len==10 && strncmp(pit->name.s, "autoexpire", 10)==0) { if(str2int(&tok, &autoexpire)!=0) goto error; LM_DBG("htable [%.*s] - expire [%u]/n", name.len, name.s, autoexpire); } else if(pit->name.len==4 && strncmp(pit->name.s, "size", 4)==0) { if(str2int(&tok, &size)!=0) goto error; LM_DBG("htable [%.*s] - size [%u]/n", name.len, name.s, size); } else if(pit->name.len==6 && strncmp(pit->name.s, "dbmode", 6)==0) { if(str2int(&tok, &dbmode)!=0) goto error; LM_DBG("htable [%.*s] - dbmode [%u]/n", name.len, name.s, dbmode); } else if(pit->name.len==7 && strncmp(pit->name.s, "initval", 7)==0) { if(str2sint(&tok, &ival.n)!=0) goto error; itype = PV_VAL_INT; LM_DBG("htable [%.*s] - initval [%d]/n", name.len, name.s, ival.n); } else if(pit->name.len == 12 && strncmp(pit->name.s, "updateexpire", 12) == 0) { if(str2int(&tok, &updateexpire) != 0) goto error; LM_DBG("htable [%.*s] - updateexpire [%u]/n", name.len, name.s, updateexpire); } else { goto error; } } return ht_add_table(&name, autoexpire, &dbtable, size, dbmode, itype, &ival, updateexpire);error: LM_ERR("invalid htable parameter [%.*s]/n", in.len, in.s); return -1;}
开发者ID:tsudot,项目名称:kamailio,代码行数:75,
示例21: glp_read_mincostint glp_read_mincost(glp_graph *G, int v_rhs, int a_low, int a_cap, int a_cost, const char *fname){ struct csa _csa, *csa = &_csa; glp_vertex *v; glp_arc *a; int i, j, k, nv, na, ret = 0; double rhs, low, cap, cost; char *flag = NULL; if (v_rhs >= 0 && v_rhs > G->v_size - (int)sizeof(double)) xerror("glp_read_mincost: v_rhs = %d; invalid offset/n", v_rhs); if (a_low >= 0 && a_low > G->a_size - (int)sizeof(double)) xerror("glp_read_mincost: a_low = %d; invalid offset/n", a_low); if (a_cap >= 0 && a_cap > G->a_size - (int)sizeof(double)) xerror("glp_read_mincost: a_cap = %d; invalid offset/n", a_cap); if (a_cost >= 0 && a_cost > G->a_size - (int)sizeof(double)) xerror("glp_read_mincost: a_cost = %d; invalid offset/n", a_cost); glp_erase_graph(G, G->v_size, G->a_size); if (setjmp(csa->jump)) { ret = 1; goto done; } csa->fname = fname; csa->fp = NULL; csa->count = 0; csa->c = '/n'; csa->field[0] = '/0'; csa->empty = csa->nonint = 0; xprintf("Reading min-cost flow problem data from `%s'.../n", fname); csa->fp = xfopen(fname, "r"); if (csa->fp == NULL) { xprintf("Unable to open `%s' - %s/n", fname, xerrmsg()); longjmp(csa->jump, 1); } /* read problem line */ read_designator(csa); if (strcmp(csa->field, "p") != 0) error(csa, "problem line missing or invalid"); read_field(csa); if (strcmp(csa->field, "min") != 0) error(csa, "wrong problem designator; `min' expected"); read_field(csa); if (!(str2int(csa->field, &nv) == 0 && nv >= 0)) error(csa, "number of nodes missing or invalid"); read_field(csa); if (!(str2int(csa->field, &na) == 0 && na >= 0)) error(csa, "number of arcs missing or invalid"); xprintf("Flow network has %d node%s and %d arc%s/n", nv, nv == 1 ? "" : "s", na, na == 1 ? "" : "s"); if (nv > 0) glp_add_vertices(G, nv); end_of_line(csa); /* read node descriptor lines */ flag = xcalloc(1+nv, sizeof(char)); memset(&flag[1], 0, nv * sizeof(char)); if (v_rhs >= 0) { rhs = 0.0; for (i = 1; i <= nv; i++) { v = G->v[i]; memcpy((char *)v->data + v_rhs, &rhs, sizeof(double)); } } for (;;) { read_designator(csa); if (strcmp(csa->field, "n") != 0) break; read_field(csa); if (str2int(csa->field, &i) != 0) error(csa, "node number missing or invalid"); if (!(1 <= i && i <= nv)) error(csa, "node number %d out of range", i); if (flag[i]) error(csa, "duplicate descriptor of node %d", i); read_field(csa); if (str2num(csa->field, &rhs) != 0) error(csa, "node supply/demand missing or invalid"); check_int(csa, rhs); if (v_rhs >= 0) { v = G->v[i]; memcpy((char *)v->data + v_rhs, &rhs, sizeof(double)); } flag[i] = 1; end_of_line(csa); } xfree(flag), flag = NULL; /* read arc descriptor lines */ for (k = 1; k <= na; k++) { if (k > 1) read_designator(csa); if (strcmp(csa->field, "a") != 0) error(csa, "wrong line designator; `a' expected"); read_field(csa); if (str2int(csa->field, &i) != 0) error(csa, "starting node number missing or invalid"); if (!(1 <= i && i <= nv)) error(csa, "starting node number %d out of range", i); read_field(csa); if (str2int(csa->field, &j) != 0) error(csa, "ending node number missing or invalid");//.........这里部分代码省略.........
开发者ID:BohanHsu,项目名称:developer,代码行数:101,
示例22: ksr_tls_parse_hostportstatic int ksr_tls_parse_hostport(int* type, struct ip_addr* ip, unsigned int* port, cfg_token_t* token, cfg_parser_t* st){ int ret; cfg_token_t t; cfg_option_t* opt; ret = cfg_get_token(&t, st, 0); if (ret < 0) return -1; if (ret > 0) { LM_ERR("%s:%d:%d: Missing IP address/n", st->file, token->start.line, token->start.col); return -1; } if (t.type == '[') { if (parse_ipv6(ip, &t, st) < 0) return -1; } else if (t.type == CFG_TOKEN_ALPHA) { opt = cfg_lookup_token(token_default, &t.val); if (opt) { *type = TLS_DOMAIN_DEF; /* Default domain */ return 0; } else { opt = cfg_lookup_token(ksr_tls_token_any, &t.val); if (opt) { *type = TLS_DOMAIN_ANY; /* Default domain */ return 0; } else { if (parse_ipv4(ip, &t, st) < 0) return -1; } } } else { LM_ERR("%s:%d:%d: Syntax error, IP address expected/n", st->file, t.start.line, t.start.col); return -1; } *type = 0; /* Parse port */ ret = cfg_get_token(&t, st, 0); if (ret < 0) return -1; if (ret > 0) { LM_ERR("%s:%d:%d: Syntax error, ':' expected/n", st->file, st->line, st->col); return -1; } if (t.type != ':') { LM_ERR("%s:%d:%d: Syntax error, ':' expected/n", st->file, t.start.line, t.start.col); return -1; } ret = cfg_get_token(&t, st, 0); if (ret < 0) return -1; if (ret > 0) { LM_ERR("%s:%d:%d: Premature end of file, port number missing/n", st->file, t.start.line, t.start.col); return -1; } if (t.type != CFG_TOKEN_ALPHA || (str2int(&t.val, port) < 0)) { LM_ERR("%s:%d:%d: Invalid port number '%.*s'/n", st->file, t.start.line, t.start.col, STR_FMT(&t.val)); return -1; } return 0;}
开发者ID:adubovikov,项目名称:kamailio,代码行数:70,
示例23: glp_read_maxflowint glp_read_maxflow(glp_graph *G, int *_s, int *_t, int a_cap, const char *fname){ struct csa _csa, *csa = &_csa; glp_arc *a; int i, j, k, s, t, nv, na, ret = 0; double cap; if (a_cap >= 0 && a_cap > G->a_size - (int)sizeof(double)) xerror("glp_read_maxflow: a_cap = %d; invalid offset/n", a_cap); glp_erase_graph(G, G->v_size, G->a_size); if (setjmp(csa->jump)) { ret = 1; goto done; } csa->fname = fname; csa->fp = NULL; csa->count = 0; csa->c = '/n'; csa->field[0] = '/0'; csa->empty = csa->nonint = 0; xprintf("Reading maximum flow problem data from `%s'.../n", fname); csa->fp = xfopen(fname, "r"); if (csa->fp == NULL) { xprintf("Unable to open `%s' - %s/n", fname, xerrmsg()); longjmp(csa->jump, 1); } /* read problem line */ read_designator(csa); if (strcmp(csa->field, "p") != 0) error(csa, "problem line missing or invalid"); read_field(csa); if (strcmp(csa->field, "max") != 0) error(csa, "wrong problem designator; `max' expected"); read_field(csa); if (!(str2int(csa->field, &nv) == 0 && nv >= 2)) error(csa, "number of nodes missing or invalid"); read_field(csa); if (!(str2int(csa->field, &na) == 0 && na >= 0)) error(csa, "number of arcs missing or invalid"); xprintf("Flow network has %d node%s and %d arc%s/n", nv, nv == 1 ? "" : "s", na, na == 1 ? "" : "s"); if (nv > 0) glp_add_vertices(G, nv); end_of_line(csa); /* read node descriptor lines */ s = t = 0; for (;;) { read_designator(csa); if (strcmp(csa->field, "n") != 0) break; read_field(csa); if (str2int(csa->field, &i) != 0) error(csa, "node number missing or invalid"); if (!(1 <= i && i <= nv)) error(csa, "node number %d out of range", i); read_field(csa); if (strcmp(csa->field, "s") == 0) { if (s > 0) error(csa, "only one source node allowed"); s = i; } else if (strcmp(csa->field, "t") == 0) { if (t > 0) error(csa, "only one sink node allowed"); t = i; } else error(csa, "wrong node designator; `s' or `t' expected"); if (s > 0 && s == t) error(csa, "source and sink nodes must be distinct"); end_of_line(csa); } if (s == 0) error(csa, "source node descriptor missing/n"); if (t == 0) error(csa, "sink node descriptor missing/n"); if (_s != NULL) *_s = s; if (_t != NULL) *_t = t; /* read arc descriptor lines */ for (k = 1; k <= na; k++) { if (k > 1) read_designator(csa); if (strcmp(csa->field, "a") != 0) error(csa, "wrong line designator; `a' expected"); read_field(csa); if (str2int(csa->field, &i) != 0) error(csa, "starting node number missing or invalid"); if (!(1 <= i && i <= nv)) error(csa, "starting node number %d out of range", i); read_field(csa); if (str2int(csa->field, &j) != 0) error(csa, "ending node number missing or invalid"); if (!(1 <= j && j <= nv)) error(csa, "ending node number %d out of range", j); read_field(csa); if (!(str2num(csa->field, &cap) == 0 && cap >= 0.0)) error(csa, "arc capacity missing or invalid"); check_int(csa, cap); a = glp_add_arc(G, i, j); if (a_cap >= 0) memcpy((char *)a->data + a_cap, &cap, sizeof(double)); end_of_line(csa);//.........这里部分代码省略.........
开发者ID:BohanHsu,项目名称:developer,代码行数:101,
示例24: refreshXcapDocstruct mi_root* refreshXcapDoc(struct mi_root* cmd, void* param){ struct mi_node* node= NULL; str doc_url; xcap_doc_sel_t doc_sel; char* serv_addr; str stream= {0, 0}; int type; unsigned int xcap_port; char* etag= NULL; node = cmd->node.kids; if(node == NULL) return 0; doc_url = node->value; if(doc_url.s == NULL || doc_url.len== 0) { LM_ERR("empty uri/n"); return init_mi_tree(404, "Empty document URL", 20); } node= node->next; if(node== NULL) return 0; if(node->value.s== NULL || node->value.len== 0) { LM_ERR("port number/n"); return init_mi_tree(404, "Empty document URL", 20); } if(str2int(&node->value, &xcap_port)< 0) { LM_ERR("while converting string to int/n"); goto error; } if(node->next!= NULL) return 0; /* send GET HTTP request to the server */ stream.s = send_http_get(doc_url.s, xcap_port, NULL, 0, &etag, &stream.len); if(stream.s== NULL) { LM_ERR("in http get/n"); return 0; } /* call registered functions with document argument */ if(parse_doc_url(doc_url, &serv_addr, &doc_sel)< 0) { LM_ERR("parsing document url/n"); return 0; } type = xcap_doc_type(&doc_sel.auid); if (type < 0) { LM_ERR("incorect auid: %.*s/n", doc_sel.auid.len, doc_sel.auid.s); goto error; } run_xcap_update_cb(type, doc_sel.xid, stream.s); pkg_free(stream.s); return init_mi_tree(200, "OK", 2);error: if(stream.s) pkg_free(stream.s); return 0;}
开发者ID:KISSMonX,项目名称:opensips,代码行数:71,
示例25: toolkit_setting//.........这里部分代码省略......... } else if (strcasecmp(value, "exit") == 0) { /* Header Exit */ new_rule->flow = tf_exit; } else if (strcasecmp(value, "goto") == 0) { /* Header Goto */ new_rule->operation = to_sub; new_rule->flow = tf_exit; if (rest == NULL) { return false; } else if ((new_rule->parameter = strdup(rest)) == NULL) { return false; } } else if (strcasecmp(value, "redirect") == 0) { /* Header Redirect */ new_rule->operation = to_redirect; new_rule->flow = tf_exit; if (rest == NULL) { return false; } else if ((new_rule->parameter = strdup(rest)) == NULL) { return false; } } else if (strcasecmp(value, "return") == 0) { /* Header Return */ new_rule->flow = tf_return; } else if (strcasecmp(value, "skip") == 0) { /* Header Skip */ if ((new_rule->value = str2int(rest)) < 1) { return false; } } else if (strcasecmp(value, "use") == 0) { /* Header Use */ new_rule->operation = to_replace; new_rule->flow = tf_exit; if (valid_uri(rest, false) == false) { return false; } else if ((new_rule->parameter = strdup(rest)) == NULL) { return false; } } else { return false; } } else if (strcmp(key, "match") == 0) { /* Match */ cflags = REG_EXTENDED; if (new_rule->case_insensitive) { cflags |= REG_ICASE; } new_rule->condition = tc_match; if (split_string(value, &value, &rest, ' ') == -1) { return false; } if (*value == '!') { new_rule->neg_match = true; value++; }
开发者ID:wdlth,项目名称:hiawatha,代码行数:67,
示例26: reader_cars_standardvoid reader_cars_standard(char* fname, int fid, obsmeta* meta, grid* g, observations* obs){ int ncid; int dimid_nprof, dimid_nz = -1; size_t nprof, nz; int varid_lon, varid_lat, varid_z, varid_type; int varid_v = -1; double* lon; double* lat; double** z; double** v; double missval, validmin, validmax; int* type; char buf[MAXSTRLEN]; int len; int year, month, day; double tunits_multiple, tunits_offset; int p, i; for (i = 0; i < meta->npars; ++i) enkf_quit("unknown PARAMETER /"%s/"/n", meta->pars[i].name); if (meta->nstds == 0) enkf_quit("ERROR_STD is necessary but not specified for product /"%s/"", meta->product); ncw_open(fname, NC_NOWRITE, &ncid); ncw_inq_dimid(ncid, "nobs", &dimid_nprof); ncw_inq_dimlen(ncid, dimid_nprof, &nprof); enkf_printf(" # profiles = %u/n", (unsigned int) nprof); if (nprof == 0) { ncw_close(ncid); return; } if (ncw_dim_exists(ncid, "zt")) ncw_inq_dimid(ncid, "zt", &dimid_nz); else if (ncw_dim_exists(ncid, "ztd")) ncw_inq_dimid(ncid, "ztd", &dimid_nz); else enkf_quit("reader_cars_standard(): neither dimension /"zt/" ot /"ztd/" exist"); ncw_inq_dimlen(ncid, dimid_nz, &nz); enkf_printf(" # z levels = %u/n", (unsigned int) nz); ncw_inq_varid(ncid, "lon", &varid_lon); lon = malloc(nprof * sizeof(double)); ncw_get_var_double(ncid, varid_lon, lon); ncw_inq_varid(ncid, "lat", &varid_lat); lat = malloc(nprof * sizeof(double)); ncw_get_var_double(ncid, varid_lat, lat); ncw_inq_varid(ncid, "zt", &varid_z); z = alloc2d(nprof, nz, sizeof(double)); ncw_get_var_double(ncid, varid_z, z[0]); if (strncmp(meta->type, "TEM", 3) == 0) ncw_inq_varid(ncid, "temp", &varid_v); else if (strncmp(meta->type, "SAL", 3) == 0) ncw_inq_varid(ncid, "salt", &varid_v); else enkf_quit("observation type /"%s/" not handled for CARS product", meta->type); v = alloc2d(nprof, nz, sizeof(double)); ncw_get_var_double(ncid, varid_v, v[0]); ncw_get_att_double(ncid, varid_v, "missing_value", &missval); ncw_get_att_double(ncid, varid_v, "valid_min", &validmin); ncw_get_att_double(ncid, varid_v, "valid_max", &validmax); ncw_inq_varid(ncid, "type", &varid_type); type = malloc(nprof * sizeof(int)); ncw_get_var_int(ncid, varid_type, type); ncw_close(ncid); strcpy(buf, fname); len = strlen(buf); buf[len - 3] = 0; /* .nc */ if (!str2int(&buf[len - 5], &day)) enkf_quit("CARS reader: could not convert file name /"%s/" to date", fname); buf[len - 17] = 0; if (!str2int(&buf[len - 19], &month)) enkf_quit("CARS reader: could not convert file name /"%s/" to date", fname); buf[len - 21] = 0; if (!str2int(&buf[len - 25], &year)) enkf_quit("CARS reader: could not convert file name /"%s/" to date", fname); snprintf(buf, MAXSTRLEN, "days since %4d-%02d-%02d", year, month, day); tunits_convert(buf, &tunits_multiple, &tunits_offset); for (p = 0; p < (int) nprof; ++p) { char inststr[MAXSTRLEN]; if (type[p] == 11) strcpy(inststr, "ARGO"); else if (type[p] == 12) strcpy(inststr, "TAO"); else if (type[p] == 61) strcpy(inststr, "PIRATA"); else if (type[p] == 7 || type[p] == 9 || type[p] == 13 || type[p] == 35 || type[p] == 41) strcpy(inststr, "CTD"); else if (type[p] == 8 || type[p] == 17)//.........这里部分代码省略.........
开发者ID:ocehugo,项目名称:enkf-c,代码行数:101,
示例27: pua_rpc_publishstatic void pua_rpc_publish(rpc_t* rpc, void* c){ str pres_uri, expires, event, content_type, id, etag, outbound_proxy, extra_headers, body; rpc_delayed_ctx_t* dctx; int exp, sign, ret, err_ret, sip_error; char err_buf[MAX_REASON_LEN]; struct sip_uri uri; publ_info_t publ; body.s = 0; body.len = 0; dctx = 0; LM_DBG("rpc publishing .../n"); if ((rpc->capabilities == 0) || !(rpc->capabilities(c) & RPC_DELAYED_REPLY)) { rpc->fault(c, 600, "Reply wait/async mode not supported" " by this rpc transport"); return; } ret = rpc->scan(c, "SSSSSSSS*S", &pres_uri, &expires, &event, &content_type, &id, &etag, &outbound_proxy, &extra_headers, &body); if (ret < 8) { rpc->fault(c, 400, "Too few or wrong type of parameters (%d)", ret); return; } if (parse_uri(pres_uri.s, pres_uri.len, &uri) <0) { LM_ERR("bad resentity uri/n"); rpc->fault(c, 400, "Invalid presentity uri '%s'", pres_uri.s); return; } LM_DBG("presentity uri '%.*s'/n", pres_uri.len, pres_uri.s); if (expires.s[0]== '-') { sign= -1; expires.s++; expires.len--; } else { sign = 1; } if (str2int(&expires, (unsigned int*)&exp) < 0) { LM_ERR("invalid expires parameter/n" ); rpc->fault(c, 400, "Invalid expires value '%s'", expires.s); return; } exp = exp * sign; LM_DBG("expires '%d'/n", exp); LM_DBG("event '%.*s'/n", event.len, event.s); LM_DBG("content type '%.*s'/n", content_type.len, content_type.s); LM_DBG("id '%.*s'/n", id.len, id.s); LM_DBG("ETag '%.*s'/n", etag.len, etag.s); LM_DBG("outbound_proxy '%.*s'/n", outbound_proxy.len, outbound_proxy.s); LM_DBG("extra headers '%.*s'/n", extra_headers.len, extra_headers.s); if (body.len > 0) LM_DBG("body '%.*s'/n", body.len, body.s); if ((body.s == 0) && (content_type.len != 1 || content_type.s[0] != '.')) { LM_ERR("body is missing, but content type is not ./n"); rpc->fault(c, 400, "Body is missing"); return; } memset(&publ, 0, sizeof(publ_info_t)); publ.pres_uri= &pres_uri; publ.expires= exp; publ.event= get_event_flag(&event); if (publ.event < 0) { LM_ERR("unknown event '%.*s'/n", event.len, event.s); rpc->fault(c, 400, "Unknown event"); return; } if (content_type.len != 1) { publ.content_type= content_type; } if (!((id.len == 1) && (id.s[0]== '.'))) { publ.id= id; } if (!((etag.len== 1) && (etag.s[0]== '.'))) { publ.etag= &etag; }//.........这里部分代码省略.........
开发者ID:krys1976,项目名称:kamailio,代码行数:101,
示例28: build_dlg_tdlg_t * build_dlg_t(struct dlg_cell * cell, int dst_leg, int src_leg){ dlg_t* td = NULL; str cseq; unsigned int loc_seq; td = (dlg_t*)pkg_malloc(sizeof(dlg_t)); if(!td){ LM_ERR("out of pkg memory/n"); return NULL; } memset(td, 0, sizeof(dlg_t)); if ((dst_leg == DLG_CALLER_LEG && (cell->flags & DLG_FLAG_PING_CALLER)) || (dst_leg == callee_idx(cell) && (cell->flags & DLG_FLAG_PING_CALLEE)) || (dst_leg == DLG_CALLER_LEG && (cell->flags & DLG_FLAG_REINVITE_PING_CALLER)) || (dst_leg == callee_idx(cell) && (cell->flags & DLG_FLAG_REINVITE_PING_CALLEE)) || cell->flags & DLG_FLAG_CSEQ_ENFORCE) { dlg_lock_dlg(cell); if (cell->legs[dst_leg].last_gen_cseq == 0) { /* no OPTIONS pings for this dlg yet */ dlg_unlock_dlg(cell); goto before_strcseq; } else { /* OPTIONS pings sent, use new cseq */ td->loc_seq.value = ++(cell->legs[dst_leg].last_gen_cseq); td->loc_seq.is_set=1; dlg_unlock_dlg(cell); goto after_strcseq; } }before_strcseq: /*local sequence number*/ cseq = cell->legs[dst_leg].r_cseq; if( !cseq.s || !cseq.len || str2int(&cseq, &loc_seq) != 0){ LM_ERR("invalid cseq/n"); goto error; } /*we don not increase here the cseq as this will be done by TM*/ td->loc_seq.value = loc_seq; td->loc_seq.is_set = 1;after_strcseq: /*route set*/ if( cell->legs[dst_leg].route_set.s && cell->legs[dst_leg].route_set.len){ if( parse_rr_body(cell->legs[dst_leg].route_set.s, cell->legs[dst_leg].route_set.len, &td->route_set) !=0){ LM_ERR("failed to parse route set/n"); goto error; } } /*remote target--- Request URI*/ if (cell->legs[dst_leg].contact.s==0 || cell->legs[dst_leg].contact.len==0){ LM_ERR("no contact available/n"); goto error; } td->rem_target = cell->legs[dst_leg].contact; td->rem_uri = (dst_leg==DLG_CALLER_LEG)? *dlg_leg_from_uri(cell,dst_leg): *dlg_leg_to_uri(cell,dst_leg); td->loc_uri = (dst_leg==DLG_CALLER_LEG)? *dlg_leg_to_uri(cell,dst_leg): *dlg_leg_from_uri(cell,dst_leg); td->id.call_id = cell->callid; td->id.rem_tag = cell->legs[dst_leg].tag; td->id.loc_tag = cell->legs[src_leg].tag; td->state= DLG_CONFIRMED; td->send_sock = cell->legs[dst_leg].bind_addr; /* link the dialog cell here - it will eventually be linked * within the upcoming created transaction */ td->dialog_ctx = cell; return td;error: free_tm_dlg(td); return NULL;}
开发者ID:Deni90,项目名称:opensips,代码行数:85,
示例29: sca_init_requestint sca_init_request(struct sip_msg* msg, str* p1, str* p2){ int method_value, ret; //unsigned int size, hash_index, shared_entity; unsigned int hash_index, shared_entity, app_index; str *b2bl_key, *host, *port, *display, *uri, *shared_line; //char *p; //uri_type scheme; struct to_body *appearance_name_addr_body; pv_value_t pv_val; b2b_sca_record_t *record = NULL; b2b_sca_call_t *call = NULL; b2bl_cb_ctx_t *cb_params; str publish_hdr = {NULL, 0}; str custom_hdr = {NULL, 0}; str call_info_uri = {NULL, 0}; str call_info_apperance_uri = {NULL, 0}; if (parse_headers(msg, HDR_EOH_F, 0) < 0) { LM_ERR("failed to parse message/n"); return -1; } method_value = msg->first_line.u.request.method_value; if (method_value != METHOD_INVITE) { LM_ERR("nonINVITE [%d] cannot initiate a call/n", method_value); return -1; } ret = tmb.t_newtran(msg); if(ret < 1) { if(ret == 0) { LM_DBG("It is a retransmission, drop/n"); tmb.unref_cell(tmb.t_gett()); } else { LM_ERR("Error when creating tm transaction/n"); } return 0; } if (p1 && (pv_get_spec_value(msg, (pv_spec_t *)p1, &pv_val) == 0)) { if (pv_val.flags & PV_VAL_INT) { shared_entity = pv_val.ri; LM_DBG("got shared_entity %d/n", shared_entity); } else if (pv_val.flags & PV_VAL_STR) { if(str2int(&(pv_val.rs), (unsigned int*)&shared_entity) != 0) { LM_ERR("Unable to get entity_no from pv '%.*s'/n", pv_val.rs.len, pv_val.rs.s); return -1; } } else { LM_ERR("shared entity not a str or int type/n"); return -1; } } else { LM_ERR("Unable to get shared entity from pv:%p/n", p1); return -1; } switch (shared_entity) { case 0: LM_DBG("Incoming call from shared line/n"); break; case 1: LM_DBG("Outgoing call via a shared line/n"); break; default: LM_ERR("shared line entity should be 0 or 1/n"); return -1; } /* Get the hash index for the shared line. */ if (get_hash_index_and_shared_line(msg, &hash_index, &shared_line)<0) return -1; LM_DBG("got hash_index=[%d] for shared line [%.*s]/n", hash_index, shared_line->len, shared_line->s); /* Get the appearance name-addr for this call. */ appearance_name_addr_body = get_appearance_name_addr(msg); if (appearance_name_addr_body == NULL) { LM_ERR("unable to get apperance of this call/n"); return -1; } //scheme = appearance_name_addr_body->parsed_uri.type; host = &appearance_name_addr_body->parsed_uri.host; port = &appearance_name_addr_body->parsed_uri.port; display = &appearance_name_addr_body->display; uri = &appearance_name_addr_body->uri; LM_DBG("display uri [%.*s][%.*s] from host:port [%.*s]:[%.*s]/n", display->len, display->s, uri->len, uri->s, host->len, host->s, port->len, port->s); /* Prepare absoluteURI for Call-Info header. */ if (build_absoluteURI(host, port, &call_info_uri) != 0) goto error1; /* Prepare appearanceURI param for Call-Info header. */ if (build_appearanceURI(display, uri, &call_info_apperance_uri) != 0) goto error1;//.........这里部分代码省略.........
开发者ID:AndreiPlesa,项目名称:opensips,代码行数:101,
注:本文中的str2int函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ str2ip函数代码示例 C++ str2fmt函数代码示例 |