int uas_unregist(sipua_uas_t *sipuas, char *userloc, char *registrar, char *id) { int ret; int regno = -1; /* eXosipua_t *jua = (eXosipua_t*)sipuas; */ eXosip_lock(); regno = eXosip_register_init(userloc, registrar, id); if (regno < 0) { eXosip_unlock(); return UA_FAIL; } ret = eXosip_register(regno, 0); eXosip_unlock(); if(ret != 0) return UA_FAIL; return UA_OK; }
int uas_regist(sipua_uas_t *sipuas, int *regno, char *loc, char *registrar, char *id, int seconds) { int ret; eXosipua_t *jua = (eXosipua_t*)sipuas; char* siploc, *p; p = siploc = xmalloc(4+strlen(loc)+1+10+1); if(!siploc) return UA_FAIL; strcpy(p, "sip:"); p += 4; strcpy(p, loc); while(*p) p++; snprintf(p, 12, ":%d", sipuas->portno); jua_debug(("uas_regist: %s on %s within %ds\n", id, registrar, seconds)); eXosip_lock(); if(*regno < 0) { *regno = eXosip_register_init(id, registrar, siploc); if (*regno < 0) { eXosip_unlock(); return UA_FAIL; } } ret = eXosip_register(*regno, seconds); eXosip_unlock(); xfree(siploc); if(ret != 0) { jua_debug(("uas_regist: ret=%d\n", ret)); return UA_FAIL; } if(!jua->thread) { jua->thread = xthr_new(jua_loop, jua, XTHREAD_NONEFLAGS); if(!jua->thread) return UA_FAIL; } return UA_OK; }
int phvlRegister(int vlid) { phVLine *vl = ph_vlid2vline(vlid); int ret = -1; char utmp[256]; char stmp[256]; char *server; assert(vl); assert(vl->username); assert(vl->server); snprintf(utmp, sizeof(utmp), "sip:%s@%s", vl->username, vl->server); server = stmp; if (vl->port && vl->port != 5060) { /* snprintf(stmp, sizeof(stmp), "sip:%s@%s:%d", vl->username, vl->server, vl->port); */ snprintf(stmp, sizeof(stmp), "sip:%s:%d", vl->server, vl->port); } else { /* snprintf(stmp, sizeof(stmp), "sip:%s@%s:%d", vl->username, vl->server, vl->port); */ snprintf(stmp, sizeof(stmp), "sip:%s", vl->server); } eXosip_lock(); vl->rid = eXosip_register_init(utmp, server, vl->contact, vl->proxy); if (vl->rid >= 0) { if (vl->regTimeout > 0) { _owplLineSetState(vlid, LINESTATE_REGISTERING, LINESTATE_CAUSE_NORMAL); } else { _owplLineSetState(vlid, LINESTATE_UNREGISTERING, LINESTATE_CAUSE_NORMAL); } ret = eXosip_register(vl->rid, vl->regTimeout); if (ret == 0) { ret = vl->rid; vl->lastRegTime = time(0); } } eXosip_unlock(); return ret; }
int main(int argc, char* argv[]) { int i; expires = 3600; memset( &call, 0, sizeof(call) ); cout<<"Please Enter Your Username:"******"Please Enter Your Password:"******"Usage:"<< endl; cout << "a - answering call"<< endl; cout << "h - hangup"<< endl; cout << "z - zhuxiao"<< endl; cout << "c - call"<< endl; cout << "q - quit"<< endl; FILE* logfile = fopen( "logfile.txt", "w"); i = eXosip_init(NULL, NULL, 6060); if (i!=0) { fprintf (stderr, "test: could not initialize eXosip\n"); __exit(0); } eXosip_sdp_negotiation_remove_audio_payloads(); reg_id = eXosip_register_init(identity, registrar, contact); j = eXosip_register(reg_id, 3600); cout<<"init"<<endl; // eXosip_sdp_negotiation_add_codec(osip_strdup("0"), // NULL, // osip_strdup("RTP/AVP"), // NULL, NULL, NULL, // NULL,NULL, // osip_strdup("0 PCMU/8000")); eXosip_sdp_negotiation_add_codec(osip_strdup("8"), NULL, osip_strdup("RTP/AVP"), NULL, NULL, NULL, NULL,NULL, osip_strdup("8 PCMA/8000")); // eXosip_sdp_negotiation_add_codec(osip_strdup("18"), // NULL, // osip_strdup("RTP/AVP"), // NULL, NULL, NULL, // NULL,NULL, // osip_strdup("18 G729a/8000")); // eXosip_set_mode(EVENT_MODE); eXosip_set_mode(EVENT_MODE); osip_message_t *invite; cout << "oSIP>"<<endl; while( run ) { josua_event_get(); if ( _kbhit() ) { switch ( _getch() ) { case 'a': cout << "answer"<< endl; eXosip_lock(); eXosip_answer_call(call.did, 200, 0); eXosip_unlock(); break; case 'h': cout << "hangup"<< endl; eXosip_lock(); eXosip_terminate_call( call.cid, call.did ); eXosip_unlock(); break; case 'z': cout << "zhuxiao"<< endl; expires = 0; reg_id = eXosip_register_init(identity, registrar, contact); j = eXosip_register(reg_id, 0); break; case 'c': cout << "call"<< endl; i = eXosip_build_initial_invite(&invite, destip, //掩請 identity, //翋請 NULL, "oSIP phone"); if (i!=0) { fprintf (stderr, "eXosip_build_initial_invite failed\n"); __exit(0); } eXosip_lock(); eXosip_initiate_call(invite, NULL, NULL, "10500"); eXosip_unlock(); break; case 'q': eXosip_quit(); cout << "quit"<< endl; run = false; break; } } } return 0; }
int josua_event_get() { int counter =0; /* use events to print some info */ eXosip_event_t *je; for (;;) { char buf[100]; je = eXosip_event_wait(0,50); if (je==NULL) break; counter++; printf( "\r\n#######<- (%i ) eXosip_event_wait from: %s", je->type, je->remote_uri); josua_printf(buf); if (je->type==EXOSIP_CALL_NEW) { printf( "<- (%i %i) INVITE from: %s", je->cid, je->did, je->remote_uri); josua_printf(buf); // call.build(je); } else if (je->type==EXOSIP_CALL_ANSWERED) { printf( "<- (%i %i) [%i %s ANSWERED] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); call.build(je); } else if (je->type==EXOSIP_CALL_PROCEEDING) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); cout<<("EXOSIP_CALL_PROCEEDING")<<endl; } else if (je->type==EXOSIP_CALL_RINGING) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); cout<<"EXOSIP_CALL_RINGING"<<endl; } else if (je->type==EXOSIP_CALL_CANCELLED) {cout<<"cancer"; } else if (je->type==EXOSIP_CALL_REDIRECTED) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); cout<<"EXOSIP_CALL_REDIRECTED"<<endl; } else if (je->type==EXOSIP_CALL_REQUESTFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); cout<<"EXOSIP_CALL_REQUESTFAILURE"<<endl; } else if (je->type==EXOSIP_CALL_SERVERFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_CALL_GLOBALFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_CALL_CLOSED) { printf( "<- (%i %i) BYE from: %s", je->cid, je->did, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_CALL_HOLD) { printf( "<- (%i %i) INVITE (On Hold) from: %s", je->cid, je->did, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_CALL_OFFHOLD) { printf( "<- (%i %i) INVITE (Off Hold) from: %s", je->cid, je->did, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_REGISTRATION_SUCCESS) { printf( "<- (%i) [%i %s] %s for REGISTER_SUCCESS %s", je->rid, je->status_code, je->reason_phrase, je->remote_uri, je->req_uri); josua_printf(buf); cout<<endl; } else if (je->type==EXOSIP_REGISTRATION_REFRESHED) { } else if (je->type== EXOSIP_REGISTRATION_TERMINATED) { } else if (je->type==EXOSIP_REGISTRATION_FAILURE) { reg_id = eXosip_register_init(identity, registrar, contact); if(eXosip_add_authentication_info(username, username, password, NULL, NULL)) { exit(1); } eXosip_lock(); j = eXosip_register(reg_id, expires); eXosip_unlock(); cout<<"REGISTER_FAILURE"; printf( "<- (%i) [%i %s] %s for REGISTER_FAILURE %s", je->rid, je->status_code, je->reason_phrase, je->remote_uri, je->req_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_NEW) { printf( "<- (%i %i) OPTIONS from: %s", je->cid, je->did, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_ANSWERED) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_PROCEEDING) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_REDIRECTED) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_REQUESTFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_SERVERFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_OPTIONS_GLOBALFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_NEW) { printf( "<- (%i %i) INFO from: %s", je->cid, je->did, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_ANSWERED) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_PROCEEDING) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_REDIRECTED) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_REQUESTFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_SERVERFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_INFO_GLOBALFAILURE) { printf( "<- (%i %i) [%i %s] %s", je->cid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_ANSWERED) { printf( "<- (%i %i) [%i %s] %s for SUBSCRIBE", je->sid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); printf( "<- (%i %i) online=%i [status: %i reason:%i]", je->sid, je->did, je->online_status, je->ss_status, je->ss_reason); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_PROCEEDING) { printf( "<- (%i %i) [%i %s] %s for SUBSCRIBE", je->sid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_REDIRECTED) { printf( "<- (%i %i) [%i %s] %s for SUBSCRIBE", je->sid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_REQUESTFAILURE) { printf( "<- (%i %i) [%i %s] %s for SUBSCRIBE", je->sid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_SERVERFAILURE) { printf( "<- (%i %i) [%i %s] %s for SUBSCRIBE", je->sid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_GLOBALFAILURE) { printf( "<- (%i %i) [%i %s] %s for SUBSCRIBE", je->sid, je->did, je->status_code, je->reason_phrase, je->remote_uri); josua_printf(buf); } else if (je->type==EXOSIP_SUBSCRIPTION_NOTIFY) { printf( "<- (%i %i) NOTIFY from: %s", je->sid, je->did, je->remote_uri); josua_printf(buf); printf( "<- (%i %i) online=%i [status: %i reason:%i]", je->sid, je->did, je->online_status, je->ss_status, je->ss_reason); josua_printf(buf); } else if (je->type==EXOSIP_IN_SUBSCRIPTION_NEW) { printf( "<- (%i %i) SUBSCRIBE from: %s", je->nid, je->did, je->remote_uri); josua_printf(buf); /* search for the user to see if he has been previously accepted or not! */ eXosip_notify(je->did, EXOSIP_SUBCRSTATE_PENDING, EXOSIP_NOTIFY_AWAY); } else if (je->textinfo[0]!='\0') { printf( "(%i %i %i %i) %s", je->cid, je->sid, je->nid, je->did, je->textinfo); josua_printf(buf); } eXosip_event_free(je); } if (counter>0) return 0; return -1; }