本文整理汇总了C++中osip_transaction_add_event函数的典型用法代码示例。如果您正苦于以下问题:C++ osip_transaction_add_event函数的具体用法?C++ osip_transaction_add_event怎么用?C++ osip_transaction_add_event使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了osip_transaction_add_event函数的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: _eXosip_insubscription_answer_3456xx
int
_eXosip_insubscription_answer_3456xx (struct eXosip_t *excontext, eXosip_notify_t * jn, eXosip_dialog_t * jd, int code)
{
osip_event_t *evt_answer;
osip_message_t *response;
int i;
osip_transaction_t *tr;
tr = _eXosip_find_last_inc_subscribe (jn, jd);
if (tr == NULL) {
OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: cannot find transaction to answer"));
return OSIP_NOTFOUND;
}
if (jd == NULL)
i = _eXosip_build_response_default (excontext, &response, NULL, code, tr->orig_request);
else
i = _eXosip_build_response_default (excontext, &response, jd->d_dialog, code, tr->orig_request);
if (i != 0) {
OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_INFO1, NULL, "ERROR: Could not create response for subscribe\n"));
return i;
}
if ((300 <= code) && (code <= 399)) {
/* Should add contact fields */
/* ... */
}
evt_answer = osip_new_outgoing_sipmessage (response);
evt_answer->transactionid = tr->transactionid;
osip_transaction_add_event (tr, evt_answer);
_eXosip_wakeup (excontext);
return OSIP_SUCCESS;
}
开发者ID:Christof0113,项目名称:rtsp-tools,代码行数:34,代码来源:jresponse.c
示例2: eXosip_options_send_request
int
eXosip_options_send_request (osip_message_t * options)
{
osip_transaction_t *transaction;
osip_event_t *sipevent;
int i;
i = osip_transaction_init (&transaction, NICT, eXosip.j_osip, options);
if (i != 0)
{
osip_message_free (options);
return -1;
}
osip_list_add (eXosip.j_transactions, transaction, 0);
sipevent = osip_new_outgoing_sipmessage (options);
sipevent->transactionid = transaction->transactionid;
osip_transaction_set_your_instance (transaction,
__eXosip_new_jinfo (NULL, NULL, NULL, NULL));
osip_transaction_add_event (transaction, sipevent);
__eXosip_wakeup ();
return 0;
}
开发者ID:tibastral,项目名称:symphonie,代码行数:26,代码来源:eXoptions_api.c
示例3: eXosip_message_send_request
int
eXosip_message_send_request (osip_message_t * message)
{
osip_transaction_t *transaction;
osip_event_t *sipevent;
int i;
i = _eXosip_transaction_init (&transaction, NICT, eXosip.j_osip, message);
if (i != 0)
{
osip_message_free (message);
return -1;
}
osip_list_add (eXosip.j_transactions, transaction, 0);
sipevent = osip_new_outgoing_sipmessage (message);
sipevent->transactionid = transaction->transactionid;
#ifndef MINISIZE
osip_transaction_set_your_instance (transaction,
__eXosip_new_jinfo (NULL, NULL, NULL, NULL));
#else
osip_transaction_set_your_instance (transaction,
__eXosip_new_jinfo (NULL, NULL));
#endif
osip_transaction_add_event (transaction, sipevent);
__eXosip_wakeup ();
return 0;
}
开发者ID:tws67,项目名称:bayonne-base-windows,代码行数:31,代码来源:eXmessage_api.c
示例4: eXosip_insubscription_send_request
int
eXosip_insubscription_send_request (int did, osip_message_t * request)
{
eXosip_dialog_t *jd = NULL;
eXosip_notify_t *jn = NULL;
osip_transaction_t *transaction;
osip_event_t *sipevent;
int i;
if (request == NULL)
return -1;
if (did > 0)
{
eXosip_notify_dialog_find (did, &jn, &jd);
}
if (jd == NULL || jn == NULL)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: No incoming subscription here?\n"));
osip_message_free (request);
return -1;
}
transaction = NULL;
transaction = eXosip_find_last_out_notify (jn, jd);
if (transaction != NULL)
{
if (transaction->state != NICT_TERMINATED &&
transaction->state != NIST_TERMINATED &&
transaction->state != NICT_COMPLETED &&
transaction->state != NIST_COMPLETED)
{
osip_message_free (request);
return -1;
}
transaction = NULL;
}
i = osip_transaction_init (&transaction, NICT, eXosip.j_osip, request);
if (i != 0)
{
osip_message_free (request);
return -1;
}
osip_list_add (jd->d_out_trs, transaction, 0);
sipevent = osip_new_outgoing_sipmessage (request);
sipevent->transactionid = transaction->transactionid;
osip_transaction_set_your_instance (transaction,
__eXosip_new_jinfo (NULL, jd, NULL, jn));
osip_transaction_add_event (transaction, sipevent);
__eXosip_wakeup ();
return 0;
}
开发者ID:tibastral,项目名称:symphonie,代码行数:59,代码来源:eXinsubscription_api.c
示例5: _eXosip_insubscription_answer_1xx
int
_eXosip_insubscription_answer_1xx (eXosip_notify_t * jn, eXosip_dialog_t * jd,
int code)
{
osip_event_t *evt_answer;
osip_message_t *response;
int i;
osip_transaction_t *tr;
tr = eXosip_find_last_inc_subscribe (jn, jd);
if (tr == NULL)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: cannot find transaction to answer"));
return -1;
}
if (jd == NULL)
i = _eXosip_build_response_default (&response, NULL, code, tr->orig_request);
else
i =
_eXosip_build_response_default (&response, jd->d_dialog, code,
tr->orig_request);
if (i != 0)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"ERROR: Could not create response for subscribe\n"));
return -1;
}
if (code > 100)
{
/* request that estabish a dialog: */
/* 12.1.1 UAS Behavior */
i = complete_answer_that_establish_a_dialog (response, tr->orig_request);
if (jd == NULL)
{
i = eXosip_dialog_init_as_uas (&jd, tr->orig_request, response);
if (i != 0)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: cannot create dialog!\n"));
}
ADD_ELEMENT (jn->n_dialogs, jd);
}
}
evt_answer = osip_new_outgoing_sipmessage (response);
evt_answer->transactionid = tr->transactionid;
osip_transaction_add_event (tr, evt_answer);
__eXosip_wakeup ();
return 0;
}
开发者ID:BackupTheBerlios,项目名称:sfsipua-svn,代码行数:59,代码来源:jresponse.c
示例6: ProcessNewReqNist
void ProcessNewReqNist(osip_t* osip, osip_event_t *evt, int sock)
{
osip_transaction_t *tran;
osip_transaction_init(&tran, NIST, osip, evt->sip);
osip_transaction_set_out_socket(tran, sock);
osip_transaction_set_your_instance(tran, osip);
osip_transaction_add_event(tran, evt);
}
开发者ID:maxgrind,项目名称:sipmore,代码行数:8,代码来源:sip.c
示例7: eXosip_message_send_answer
int
eXosip_message_send_answer (int tid, int status, osip_message_t * answer)
{
osip_transaction_t *tr = NULL;
osip_event_t *evt_answer;
int i = -1;
if (tid <= 0)
return OSIP_BADPARAMETER;
if (status <= 100 || status > 699)
return OSIP_BADPARAMETER;
if (answer == NULL && status > 100 && status < 200)
return OSIP_BADPARAMETER;
if (tid > 0)
{
eXosip_transaction_find (tid, &tr);
}
if (tr == NULL)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: No MESSAGE transaction found\n"));
osip_message_free (answer);
return OSIP_NOTFOUND;
}
/* is the transaction already answered? */
if (tr->state == NIST_COMPLETED || tr->state == NIST_TERMINATED)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: transaction already answered\n"));
osip_message_free (answer);
return OSIP_WRONG_STATE;
}
if (answer == NULL)
{
i = -1;
if (status > 199 && status < 300)
i = _eXosip_build_response_default (&answer, NULL, status,
tr->orig_request);
else if (status > 300 && status <= 699)
i = _eXosip_build_response_default (&answer, NULL, status,
tr->orig_request);
if (i != 0)
return i;
}
evt_answer = osip_new_outgoing_sipmessage (answer);
evt_answer->transactionid = tr->transactionid;
osip_transaction_add_event (tr, evt_answer);
__eXosip_wakeup ();
return OSIP_SUCCESS;
}
开发者ID:LaughingAngus,项目名称:linphone-vs2008,代码行数:57,代码来源:eXmessage_api.c
示例8: ProcessNewReqIst
void ProcessNewReqIst(osip_t* osip, osip_event_t *evt, int sock)
{
osip_transaction_t *tran;
osip_transaction_init(&tran, IST, osip, evt->sip);
//osip_transaction_set_in_socket (tran, socket);
osip_transaction_set_out_socket(tran, sock);
osip_transaction_set_your_instance(tran, osip);// store osip in transaction for later usage
osip_transaction_add_event(tran, evt);
}
开发者ID:maxgrind,项目名称:sipmore,代码行数:9,代码来源:sip.c
示例9: eXosip_subscribe_send_refresh_request
int
eXosip_subscribe_send_refresh_request (struct eXosip_t *excontext, int did, osip_message_t * sub)
{
eXosip_dialog_t *jd = NULL;
eXosip_subscribe_t *js = NULL;
osip_transaction_t *transaction;
osip_event_t *sipevent;
int i;
if (did <= 0)
return OSIP_BADPARAMETER;
if (did > 0) {
_eXosip_subscribe_dialog_find (excontext, did, &js, &jd);
}
if (jd == NULL) {
OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: No subscribe here?\n"));
osip_message_free (sub);
return OSIP_NOTFOUND;
}
transaction = NULL;
transaction = _eXosip_find_last_out_subscribe (js, jd);
if (transaction != NULL) {
if (transaction->state != NICT_TERMINATED && transaction->state != NIST_TERMINATED && transaction->state != NICT_COMPLETED && transaction->state != NIST_COMPLETED) {
osip_message_free (sub);
return OSIP_WRONG_STATE;
}
transaction = NULL;
}
transaction = NULL;
i = _eXosip_transaction_init (excontext, &transaction, NICT, excontext->j_osip, sub);
if (i != 0) {
osip_message_free (sub);
return i;
}
js->s_reg_period = 3600;
_eXosip_subscribe_set_refresh_interval (js, sub);
osip_list_add (jd->d_out_trs, transaction, 0);
sipevent = osip_new_outgoing_sipmessage (sub);
sipevent->transactionid = transaction->transactionid;
osip_transaction_set_reserved5 (transaction, js);
osip_transaction_set_reserved3 (transaction, jd);
osip_transaction_add_event (transaction, sipevent);
_eXosip_wakeup (excontext);
return OSIP_SUCCESS;
}
开发者ID:CrazyBBer,项目名称:sip_stack,代码行数:55,代码来源:eXsubscription_api.c
示例10: eXosip_subscribe_send_subscribe
int eXosip_subscribe_send_subscribe(eXosip_subscribe_t *js,
eXosip_dialog_t *jd, const char *expires)
{
osip_transaction_t *transaction;
osip_message_t *subscribe;
osip_event_t *sipevent;
int i;
transaction = eXosip_find_last_out_subscribe(js, jd);
if (transaction!=NULL)
{
if (transaction->state!=NICT_TERMINATED &&
transaction->state!=NIST_TERMINATED)
return -1;
}
i = _eXosip_build_request_within_dialog(&subscribe, "SUBSCRIBE",
jd->d_dialog, "UDP");
if (i!=0)
return -2;
osip_message_set_expires(subscribe, expires);
i = osip_transaction_init(&transaction,
NICT,
eXosip.j_osip,
subscribe);
if (i!=0)
{
/* TODO: release the j_call.. */
osip_message_free(subscribe);
return -1;
}
_eXosip_subscribe_set_refresh_interval(js, subscribe);
osip_list_add(jd->d_out_trs, transaction, 0);
sipevent = osip_new_outgoing_sipmessage(subscribe);
sipevent->transactionid = transaction->transactionid;
osip_transaction_add_event(transaction, sipevent);
osip_transaction_set_your_instance(transaction, __eXosip_new_jinfo(NULL, jd, js, NULL));
__eXosip_wakeup();
return 0;
}
开发者ID:BackupTheBerlios,项目名称:sfsipua-svn,代码行数:45,代码来源:jsubscribe.c
示例11: eXosip_options_send_request
int eXosip_options_send_request(struct eXosip_t *excontext, osip_message_t * options)
{
osip_transaction_t *transaction;
osip_event_t *sipevent;
int i;
i = _eXosip_transaction_init(excontext, &transaction, NICT, excontext->j_osip, options);
if (i != 0) {
osip_message_free(options);
return i;
}
osip_list_add(&excontext->j_transactions, transaction, 0);
sipevent = osip_new_outgoing_sipmessage(options);
sipevent->transactionid = transaction->transactionid;
osip_transaction_add_event(transaction, sipevent);
_eXosip_wakeup(excontext);
return OSIP_SUCCESS;
}
开发者ID:chinglen,项目名称:exosip2,代码行数:22,代码来源:eXoptions_api.c
示例12: eXosip_subscribe_send_initial_request
int
eXosip_subscribe_send_initial_request (struct eXosip_t *excontext, osip_message_t * subscribe)
{
eXosip_subscribe_t *js = NULL;
osip_transaction_t *transaction;
osip_event_t *sipevent;
int i;
i = _eXosip_subscribe_init (&js);
if (i != 0) {
OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: cannot subscribe."));
osip_message_free (subscribe);
return i;
}
i = _eXosip_transaction_init (excontext, &transaction, NICT, excontext->j_osip, subscribe);
if (i != 0) {
_eXosip_subscribe_free (excontext, js);
osip_message_free (subscribe);
return i;
}
js->s_reg_period = 3600;
_eXosip_subscribe_set_refresh_interval (js, subscribe);
js->s_out_tr = transaction;
sipevent = osip_new_outgoing_sipmessage (subscribe);
sipevent->transactionid = transaction->transactionid;
osip_transaction_set_reserved5 (transaction, js);
osip_transaction_add_event (transaction, sipevent);
ADD_ELEMENT (excontext->j_subscribes, js);
_eXosip_update (excontext); /* fixed? */
_eXosip_wakeup (excontext);
return js->s_id;
}
开发者ID:CrazyBBer,项目名称:sip_stack,代码行数:37,代码来源:eXsubscription_api.c
示例13: bSipSend
int bSipSend(
osip_message_t *msgPtr,
osip_fsm_type_t transactionType)
{
int status;
osip_transaction_t *transactionPtr;
osip_event_t *sipeventPtr;
if ( (status = osip_transaction_init(&transactionPtr,transactionType,osip,msgPtr)) != 0 ){
printf("Failed to init transaction %d",status);
return -1;
}
if((sipeventPtr = osip_new_outgoing_sipmessage(msgPtr)) == NULL){
printf("Can't allocate message");
osip_message_free(msgPtr);
return -1;
}
sipeventPtr->transactionid = transactionPtr->transactionid;
if((status = osip_message_force_update(msgPtr)) != 0){
printf("Failed force update",status);
osip_message_free(msgPtr);
return -1;
}
if((status = osip_transaction_add_event(transactionPtr, sipeventPtr)) != 0){
printf("Can't add event");
osip_message_free(msgPtr);
return -1;
}
return 0;
}
开发者ID:usamaaftab80,项目名称:multi-p2p,代码行数:37,代码来源:main.c
示例14: eXosip_message_send_answer
int
eXosip_message_send_answer (int tid, int status, osip_message_t * answer)
{
osip_transaction_t *tr = NULL;
osip_event_t *evt_answer;
int i = -1;
if (tid > 0)
{
eXosip_transaction_find (tid, &tr);
}
if (tr == NULL)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: No MESSAGE transaction found\n"));
osip_message_free (answer);
return -1;
}
/* is the transaction already answered? */
if (tr->state == NIST_COMPLETED || tr->state == NIST_TERMINATED)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: transaction already answered\n"));
osip_message_free (answer);
return -1;
}
if (answer == NULL)
{
if (status > 100 && status < 200)
{
#if 0
/* TODO: not implemented */
i =
_eXosip_build_response_default (response, NULL, code,
tr->orig_request);
#endif
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: status code 1xx for message not implemented (use 200<status<699)\n"));
return -1;
} else if (status > 199 && status < 300)
{
i =
_eXosip_build_response_default (&answer, NULL, status,
tr->orig_request);
} else if (status > 300 && status <= 699)
{
i =
_eXosip_build_response_default (&answer, NULL, status,
tr->orig_request);
} else
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: wrong status code (200<status<=699)\n"));
return -1;
}
if (i != 0)
return -1;
}
evt_answer = osip_new_outgoing_sipmessage (answer);
evt_answer->transactionid = tr->transactionid;
osip_transaction_add_event (tr, evt_answer);
__eXosip_wakeup ();
return 0;
}
开发者ID:tws67,项目名称:bayonne-base-windows,代码行数:72,代码来源:eXmessage_api.c
示例15: osip_message_init
//.........这里部分代码省略.........
if(type == MULTICAST)
{
tmp_uri = ChordId2Uri(chordId,false);
/* when JOIN , to and from are same */
osip_message_set_to(request, tmp_uri );
osip_message_set_from(request, tmp_uri);
osip_from_param_add (request->from, osip_strdup ("user"), osip_strdup("multicast"));
osip_free(tmp_uri) ;
//no contact
}//type == MULTIPL
//---set call_id and cseq
osip_call_id_t *callid;
osip_cseq_t *cseq;
char *num;
char *cidrand;
char *register_callid_number ;
/* call-id is always the same for REGISTRATIONS */
i = osip_call_id_init(&callid);
if (i!=0)
goto si2perror2;
cidrand = osip_strdup("BF9598C48B184EBBAFADFE527EED8186") ;
osip_call_id_set_number(callid, cidrand);
register_callid_number = cidrand;
osip_call_id_set_host(callid, osip_strdup("SI2P.COM"));
request->call_id = callid;
//cseq
i = osip_cseq_init(&cseq);
if (i!=0)
goto si2perror2 ;
num = osip_strdup("1");
osip_cseq_set_number(cseq, num);
osip_cseq_set_method(cseq, osip_strdup("REGISTER"));
request->cseq = cseq;
/*the Max-Forward header */
osip_message_set_max_forwards(request, "5"); /* a UA should start a request with 70 */
/* the via header */
char tmp[200];
unsigned int branch;
branch=osip_build_random_number();
snprintf(tmp, 200, "SIP/2.0/%s %s:%s;rport;branch=z9hG4bK%u", "UDP",
localip,
localport,
branch );
osip_message_set_via(request, tmp);
/* the UA header */
osip_message_set_user_agent(request, user_agent);
/* the expires header */
char exp[10]; /* MUST never be ouside 1 and 3600 */
snprintf(exp, 9, "%i", expires);
osip_message_set_expires(request, exp);
osip_message_set_content_length(request, "0");
/*** then must wake up osip ***/
i = osip_transaction_init(&transaction,
NICT,
adosip->j_osip,
request);
if (i!=0)
goto si2perror2 ;
//jr->r_last_tr = transaction;
/* send REGISTER */
i = osip_message_to_str(request, &message1, &len);
LogStream("SEND======================================>>\n") ;
LogStream(message1) ;
if(message1) osip_free(message1) ;
// printf("SEND======================================>>\n") ;
// printf(message1) ;
sipevent = osip_new_outgoing_sipmessage(request);
sipevent->transactionid = transaction->transactionid;
osip_message_force_update(request);
osip_transaction_add_event(transaction, sipevent);
adosip->ThreadWakeUp();
return 0;
si2perror1:
if(request != NULL)osip_message_free(request);
return -1 ;
si2perror2:
if(request != NULL)osip_message_free(request);
return -1;
}
开发者ID:inuyasha1027,项目名称:SI2P,代码行数:101,代码来源:Node.cpp
示例16: osip_message_set_method
//.........这里部分代码省略.........
osip_from_param_add (request->from, osip_strdup ("user"), osip_strdup("transfer_registration"));
if(tmp_uri) osip_free(tmp_uri) ;
osip_contact_to_str(user_info->bindings->contact,&dest2);
osip_message_set_contact(request,dest2);
if(dest2) osip_free(dest2) ;
}
if(type==THIRD_PARTY)
{
//todo
}
//---set call_id and cseq
osip_call_id_t *callid;
osip_cseq_t *cseq;
char *num;
char *cidrand;
char *register_callid_number ;
//* call-id is always the same for REGISTRATIONS
i = osip_call_id_init(&callid);
if (i!=0)
goto si2perror2;
cidrand = osip_strdup("BF9598C48B184EBBAFADFE527EED8186") ;
osip_call_id_set_number(callid, cidrand);
register_callid_number = cidrand;
osip_call_id_set_host(callid, osip_strdup("SI2P.COM"));
request->call_id = callid;
//cseq
i = osip_cseq_init(&cseq);
if (i!=0)
goto si2perror2 ;
num = osip_strdup("1");
osip_cseq_set_number(cseq, num);
osip_cseq_set_method(cseq, osip_strdup("REGISTER"));
request->cseq = cseq;
//*the Max-Forward header
osip_message_set_max_forwards(request, "5"); //* a UA should start a request with 70
//* the via header
char tmp[200];
snprintf(tmp, 200, "SIP/2.0/%s %s:%s;rport;branch=z9hG4bK%u", "UDP",
localip,
localport,
via_branch_new_random() );
osip_message_set_via(request, tmp);
//* the UA header
osip_message_set_user_agent(request, user_agent);
//* the expires header
char exp[10]; //* MUST never be ouside 1 and 3600
snprintf(exp, 9, "%i", expires);
osip_message_set_expires(request, exp);
osip_message_set_content_length(request, "0");
//*** then must wake up osip
i = osip_transaction_init(&transaction,
NICT,
adosip->j_osip,
request);
if (i!=0)
goto si2perror3 ;
//* send REGISTER
i = osip_message_to_str(request, &message1, &len);
LogStream("SEND======================================>>\n") ;
LogStream(message1) ;
if(message1) osip_free(message1) ;
// printf("SEND======================================>>\n") ;
// printf(message1) ;
sipevent = osip_new_outgoing_sipmessage(request);
sipevent->transactionid = transaction->transactionid;
osip_message_force_update(request);
osip_transaction_add_event(transaction, sipevent);
adosip->ThreadWakeUp();
return 0;
si2perror1:
return -1;
si2perror2:
if(request!=NULL)
osip_message_free(request);
return -1;
si2perror3:
if(transaction!=NULL)
osip_message_free(request);
return -1;
}
开发者ID:inuyasha1027,项目名称:SI2P,代码行数:101,代码来源:Node.cpp
示例17: PPL_DECLARE
//.........这里部分代码省略.........
the correct location. */
osip_message_get_route (evt->sip, 0, &route);
if (route == NULL)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_INFO1, NULL,
"core module: This is a late ACK to discard!\n"));
/* It can be a ACK for 200 ok, but those ACK SHOULD
never go through this proxy! (and should be sent to the
contact header of the 200ok */
#ifdef SUPPORT_FOR_BROKEN_UA
/* if this ACK has a request-uri that is not us,
forward the message there. How should I modify this
message?? */
if (evt!=NULL
&& evt->sip!=NULL
&& evt->sip!=NULL
&& evt->sip->req_uri!=NULL)
{
if (psp_core_is_responsible_for_this_domain(evt->sip->req_uri)!=0)
{
int port = 5060;
if (evt->sip->req_uri->port != NULL)
port = osip_atoi (evt->sip->req_uri->port);
psp_core_cb_snd_message(NULL, evt->sip,
evt->sip->req_uri->host,
port, -1);
}
}
#endif
osip_event_free (evt);
return 0;
}
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_INFO1, NULL,
"core module: This is a ACK for INVITE!\n"));
psp_core_event_add_sfp_inc_ack (evt->sip);
osip_free (evt);
return 0;
}
/* we can create the transaction and send a 1xx */
transaction = osip_create_transaction (core->psp_osip->osip, evt);
if (transaction == NULL)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_INFO3, NULL,
"core module: Could not create a transaction for this request!\n"));
osip_event_free (evt);
return -1;
}
/* now, all retransmissions will be handled by oSIP. */
/* From rfc3261: (Section: 16.2)
"Thus, a stateful proxy SHOULD NOT generate 100 (Trying) responses
to non-INVITE requests." */
if (MSG_IS_INVITE (evt->sip))
{
i = osip_msg_build_response (&answer1xx, 100, evt->sip);
if (i != 0)
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"sfp module: could not create a 100 Trying for this transaction. (discard it and let the transaction die itself)!\n"));
osip_event_free (evt);
return -1;
}
osip_transaction_add_event (transaction, evt);
evt = osip_new_outgoing_sipmessage (answer1xx);
evt->transactionid = transaction->transactionid;
osip_transaction_add_event (transaction, evt);
}
else
osip_transaction_add_event (transaction, evt);
psp_osip_wakeup (core->psp_osip);
return 0;
}
else
{
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_INFO3, NULL,
"sfp module: No module seems to be able to forward this response!\n"));
/* this is probably a late answer? */
/* let's forward it! */
i = psp_core_handle_late_answer (evt->sip);
if (i != 0)
{
osip_event_free (evt);
return -1;
}
osip_event_free (evt);
}
return 0;
}
开发者ID:gozfree,项目名称:src,代码行数:101,代码来源:psp_core3.c
注:本文中的osip_transaction_add_event函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论