⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsx_uas_test.c

📁 一个开源SIP协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_TRYING) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -112;
	    }

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST3_PROVISIONAL_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -113;
	    }

	    /* Check that event must be TX_MSG */
	    if (e->body.tsx_state.type != PJSIP_EVENT_TX_MSG) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect event"));
		test_complete = -114;
	    }

	} else if (tsx->state == PJSIP_TSX_STATE_COMPLETED) {

	    /* Previous state must be PROCEEDING. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_PROCEEDING) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -115;
	    }

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST3_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -116;
	    }

	    /* Check that event must be TX_MSG */
	    if (e->body.tsx_state.type != PJSIP_EVENT_TX_MSG) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect event"));
		test_complete = -117;
	    }

	}

    } else
    if (pj_strcmp2(&tsx->branch, TEST4_BRANCH_ID)==0) {
	/*
	 * TEST4_BRANCH_ID tests receiving retransmissions in TRYING state.
	 */
	if (tsx->state == PJSIP_TSX_STATE_TRYING) {
	    /* Request is received. */
	} else if (tsx->state == PJSIP_TSX_STATE_TERMINATED) {

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST4_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, 
			  "    error: incorrect status code %d "
			  "(expecting %d)", tsx->status_code,
			  TEST4_STATUS_CODE));
		test_complete = -120;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_TRYING) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -121;
	    }

	} else if (tsx->state != PJSIP_TSX_STATE_DESTROYED) 
	{
	    PJ_LOG(3,(THIS_FILE, "    error: unexpected state %s (122)",
		      pjsip_tsx_state_str(tsx->state)));
	    test_complete = -122;

	}


    } else
    if (pj_strcmp2(&tsx->branch, TEST5_BRANCH_ID)==0) {
	/*
	 * TEST5_BRANCH_ID tests receiving retransmissions in PROCEEDING state
	 */
	if (tsx->state == PJSIP_TSX_STATE_TRYING) {
	    /* Request is received. */

	} else if (tsx->state == PJSIP_TSX_STATE_TERMINATED) {

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST5_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -130;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_PROCEEDING) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -131;
	    }

	} else if (tsx->state == PJSIP_TSX_STATE_PROCEEDING) {

	    /* Check status code. */
	    if (tsx->status_code != TEST5_PROVISIONAL_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -132;
	    }

	} else if (tsx->state != PJSIP_TSX_STATE_DESTROYED) {
	    PJ_LOG(3,(THIS_FILE, "    error: unexpected state %s (133)",
		      pjsip_tsx_state_str(tsx->state)));
	    test_complete = -133;

	}

    } else
    if (pj_strcmp2(&tsx->branch, TEST6_BRANCH_ID)==0) {
	/*
	 * TEST6_BRANCH_ID tests receiving retransmissions in COMPLETED state
	 */
	if (tsx->state == PJSIP_TSX_STATE_TRYING) {
	    /* Request is received. */

	} else if (tsx->state == PJSIP_TSX_STATE_TERMINATED) {

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST6_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code %d "
			  "(expecting %d)", tsx->status_code, 
			  TEST6_STATUS_CODE));
		test_complete = -140;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_COMPLETED) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -141;
	    }

	} else if (tsx->state != PJSIP_TSX_STATE_PROCEEDING &&
		   tsx->state != PJSIP_TSX_STATE_COMPLETED &&
		   tsx->state != PJSIP_TSX_STATE_DESTROYED) 
	{
	    PJ_LOG(3,(THIS_FILE, "    error: unexpected state %s (142)",
		      pjsip_tsx_state_str(tsx->state)));
	    test_complete = -142;

	}


    } else
    if (pj_strcmp2(&tsx->branch, TEST7_BRANCH_ID)==0 ||
	pj_strcmp2(&tsx->branch, TEST8_BRANCH_ID)==0) 
    {
	/*
	 * TEST7_BRANCH_ID and TEST8_BRANCH_ID test retransmission of
	 * INVITE final response
	 */
	int code;

	if (pj_strcmp2(&tsx->branch, TEST7_BRANCH_ID) == 0)
	    code = TEST7_STATUS_CODE;
	else
	    code = TEST8_STATUS_CODE;

	if (tsx->state == PJSIP_TSX_STATE_TRYING) {
	    /* Request is received. */

	} else if (tsx->state == PJSIP_TSX_STATE_TERMINATED) {

	    if (test_complete == 0)
		test_complete = 1;

	    /* Check status code. */
	    if (tsx->status_code != PJSIP_SC_TSX_TIMEOUT) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -150;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_COMPLETED) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -151;
	    }

	    /* Check the number of retransmissions */
	    if (tp_flag & PJSIP_TRANSPORT_RELIABLE) {

		if (tsx->retransmit_count != 0) {
		    PJ_LOG(3,(THIS_FILE, "    error: should not retransmit"));
		    test_complete = -1510;
		}

	    } else {

		if (tsx->retransmit_count != 10) {
		    PJ_LOG(3,(THIS_FILE, 
			      "    error: incorrect retransmit count %d "
			      "(expecting 10)",
			      tsx->retransmit_count));
		    test_complete = -1510;
		}

	    }

	} else if (tsx->state == PJSIP_TSX_STATE_COMPLETED) {

	    /* Check that status code is status_code. */
	    if (tsx->status_code != code) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -152;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_TRYING) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -153;
	    }

	} else if (tsx->state != PJSIP_TSX_STATE_DESTROYED)  {

	    PJ_LOG(3,(THIS_FILE, "    error: unexpected state (154)"));
	    test_complete = -154;

	}


    } else
    if (pj_strcmp2(&tsx->branch, TEST9_BRANCH_ID)==0)  {
	/*
	 * TEST9_BRANCH_ID tests that retransmission of INVITE final response
	 * must cease when ACK is received.
	 */

	if (tsx->state == PJSIP_TSX_STATE_TRYING) {
	    /* Request is received. */

	} else if (tsx->state == PJSIP_TSX_STATE_TERMINATED) {

	    if (test_complete == 0)
		test_complete = 1;

	    /* Check status code. */
	    if (tsx->status_code != TEST9_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -160;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_CONFIRMED) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -161;
	    }

	} else if (tsx->state == PJSIP_TSX_STATE_COMPLETED) {

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST9_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -162;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_TRYING) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -163;
	    }


	} else if (tsx->state == PJSIP_TSX_STATE_CONFIRMED) {

	    /* Check that status code is status_code. */
	    if (tsx->status_code != TEST9_STATUS_CODE) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -164;
	    }
	    
	    /* Previous state. */
	    if (e->body.tsx_state.prev_state != PJSIP_TSX_STATE_COMPLETED) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect prev_state"));
		test_complete = -165;
	    }

	} else if (tsx->state != PJSIP_TSX_STATE_DESTROYED)  {

	    PJ_LOG(3,(THIS_FILE, "    error: unexpected state (166)"));
	    test_complete = -166;

	}


    } else
    if (pj_strcmp2(&tsx->branch, TEST10_BRANCH_ID)==0 ||
	pj_strcmp2(&tsx->branch, TEST11_BRANCH_ID)==0 ||
	pj_strcmp2(&tsx->branch, TEST12_BRANCH_ID)==0)  
    {
	if (tsx->state == PJSIP_TSX_STATE_TERMINATED) {
	    
	    if (!test_complete)
		test_complete = 1;

	    if (tsx->status_code != PJSIP_SC_TSX_TRANSPORT_ERROR) {
		PJ_LOG(3,(THIS_FILE,"    error: incorrect status code"));
		test_complete = -170;
	    }
	}
    }

}

/* Save transaction key to global variables. */
static void save_key(pjsip_transaction *tsx)
{
    pj_str_t key;

    pj_strdup(tsx->pool, &key, &tsx->transaction_key);
    pj_strcpy(&tsx_key, &key);
}

#define DIFF(a,b)   ((a<b) ? (b-a) : (a-b))

/*
 * Message receiver handler.
 */
static pj_bool_t on_rx_message(pjsip_rx_data *rdata)
{
    pjsip_msg *msg = rdata->msg_info.msg;
    pj_str_t branch_param = rdata->msg_info.via->branch_param;
    pj_status_t status;

    if (pj_strcmp2(&branch_param, TEST1_BRANCH_ID) == 0 ||
	pj_strcmp2(&branch_param, TEST2_BRANCH_ID) == 0) 
    {
	/*
	 * TEST1_BRANCH_ID tests that non-INVITE transaction transmits 2xx 
	 * final response using correct transport and terminates transaction 
	 * after 32 seconds.
	 *
	 * TEST2_BRANCH_ID performs similar test for non-2xx final response.
	 */
	int status_code = (pj_strcmp2(&branch_param, TEST1_BRANCH_ID) == 0) ?
			  TEST1_STATUS_CODE : TEST2_STATUS_CODE;

	if (msg->type == PJSIP_REQUEST_MSG) {
	    /* On received request, create UAS and respond with final 
	     * response. 
	     */
	    pjsip_transaction *tsx;

	    status = pjsip_tsx_create_uas(&tsx_user, rdata, &tsx);
	    if (status != PJ_SUCCESS) {
		app_perror("    error: unable to create transaction", status);
		test_complete = -110;
		return PJ_TRUE;
	    }
	    pjsip_tsx_recv_msg(tsx, rdata);

	    save_key(tsx);
	    send_response(rdata, tsx, status_code);

	} else {
	    /* Verify the response received. */

	    ++recv_count;

	    /* Verify status code. */
	    if (msg->line.status.code != status_code) {
		PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		test_complete = -113;
	    }

	    /* Verify that no retransmissions is received. */
	    if (recv_count > 1) {
		PJ_LOG(3,(THIS_FILE, "    error: retransmission received"));
		test_complete = -114;
	    }

	}
	return PJ_TRUE;

    } else if (pj_strcmp2(&branch_param, TEST3_BRANCH_ID) == 0) {

	/* TEST3_BRANCH_ID tests provisional response. */

	if (msg->type == PJSIP_REQUEST_MSG) {
	    /* On received request, create UAS and respond with provisional
	     * response, then schedule timer to send final response.
	     */
	    pjsip_transaction *tsx;

	    status = pjsip_tsx_create_uas(&tsx_user, rdata, &tsx);
	    if (status != PJ_SUCCESS) {
		app_perror("    error: unable to create transaction", status);
		test_complete = -116;
		return PJ_TRUE;
	    }
	    pjsip_tsx_recv_msg(tsx, rdata);

	    save_key(tsx);

	    send_response(rdata, tsx, TEST3_PROVISIONAL_CODE);
	    schedule_send_response(rdata, &tsx->transaction_key, 
				   TEST3_STATUS_CODE, 2000);

	} else {
	    /* Verify the response received. */

	    ++recv_count;

	    if (recv_count == 1) {
		/* Verify status code. */
		if (msg->line.status.code != TEST3_PROVISIONAL_CODE) {
		    PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		    test_complete = -123;
		}
	    } else if (recv_count == 2) {
		/* Verify status code. */
		if (msg->line.status.code != TEST3_STATUS_CODE) {
		    PJ_LOG(3,(THIS_FILE, "    error: incorrect status code"));
		    test_complete = -124;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -