Changeset 141 for pjproject/trunk/pjsip/src/pjsip-ua/sip_inv.c
- Timestamp:
- Feb 7, 2006 6:48:01 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsip-ua/sip_inv.c
r139 r141 107 107 static pj_bool_t mod_inv_on_rx_request(pjsip_rx_data *rdata) 108 108 { 109 pjsip_dialog *dlg; 110 109 111 /* Ignore requests outside dialog */ 110 if (pjsip_rdata_get_dlg(rdata) == NULL) 112 dlg = pjsip_rdata_get_dlg(rdata); 113 if (dlg == NULL) 111 114 return PJ_FALSE; 112 115 113 /* Ignore all. */ 116 /* Answer BYE with 200/OK. */ 117 if (rdata->msg_info.msg->line.req.method.id == PJSIP_BYE_METHOD) { 118 pj_status_t status; 119 pjsip_tx_data *tdata; 120 121 status = pjsip_dlg_create_response(dlg, rdata, 200, NULL, &tdata); 122 if (status == PJ_SUCCESS) 123 status = pjsip_dlg_send_response(dlg, pjsip_rdata_get_tsx(rdata), 124 tdata); 125 126 return status==PJ_SUCCESS ? PJ_TRUE : PJ_FALSE; 127 } 128 114 129 return PJ_FALSE; 115 130 } … … 915 930 916 931 case PJSIP_INV_STATE_DISCONNECTED: 917 case PJSIP_INV_STATE_TERMINATED:918 932 /* No need to do anything. */ 919 933 PJ_TODO(RETURN_A_PROPER_STATUS_CODE_HERE); … … 1067 1081 pjsip_transaction *tsx = e->body.tsx_state.tsx; 1068 1082 pjsip_dialog *dlg = pjsip_tsx_get_dlg(tsx); 1083 pj_status_t status; 1069 1084 1070 1085 PJ_ASSERT_ON_FAIL(tsx && dlg, return); 1071 1086 1072 if (tsx ->method.id == PJSIP_INVITE_METHOD) {1087 if (tsx == s->invite_tsx) { 1073 1088 1074 1089 switch (tsx->state) { … … 1093 1108 inv_set_state(s, PJSIP_INV_STATE_CONNECTING, e); 1094 1109 1110 } else if (tsx->status_code==401 || tsx->status_code==407) { 1111 1112 /* Handle authentication failure: 1113 * Resend the request with Authorization header. 1114 */ 1115 pjsip_tx_data *tdata; 1116 1117 status = pjsip_auth_clt_reinit_req(&s->dlg->auth_sess, 1118 e->body.tsx_state.src.rdata, 1119 tsx->last_tx, 1120 &tdata); 1121 1122 if (status != PJ_SUCCESS) { 1123 1124 /* Does not have proper credentials. 1125 * End the session. 1126 */ 1127 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1128 1129 } else { 1130 1131 /* Restart session. */ 1132 s->state = PJSIP_INV_STATE_NULL; 1133 s->invite_tsx = NULL; 1134 1135 /* Send the request. */ 1136 status = pjsip_inv_send_msg(s, tdata, NULL ); 1137 } 1138 1095 1139 } else { 1140 1096 1141 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1142 1097 1143 } 1098 1144 break; … … 1116 1162 } else { 1117 1163 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1118 inv_set_state(s, PJSIP_INV_STATE_TERMINATED, e);1119 1164 } 1120 1165 break; … … 1136 1181 PJ_ASSERT_ON_FAIL(tsx && dlg, return); 1137 1182 1138 if (tsx ->method.id == PJSIP_INVITE_METHOD) {1183 if (tsx == s->invite_tsx) { 1139 1184 switch (tsx->state) { 1140 1185 case PJSIP_TSX_STATE_PROCEEDING: … … 1151 1196 /* This happens on transport error */ 1152 1197 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1153 inv_set_state(s, PJSIP_INV_STATE_TERMINATED, e);1154 1198 break; 1155 1199 default: … … 1168 1212 PJ_ASSERT_ON_FAIL(tsx && dlg, return); 1169 1213 1170 if (tsx ->method.id == PJSIP_INVITE_METHOD) {1214 if (tsx == s->invite_tsx) { 1171 1215 1172 1216 switch (tsx->state) { … … 1207 1251 } else { 1208 1252 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1209 inv_set_state(s, PJSIP_INV_STATE_TERMINATED, e);1210 1253 } 1211 1254 break; … … 1244 1287 } 1245 1288 1289 } else if (tsx->method.id == PJSIP_INVITE_METHOD) { 1290 1291 /* Ignore previously failed INVITE transaction event 1292 * (e.g. when rejected with 401/407) 1293 */ 1294 1246 1295 } else { 1247 1296 pj_assert(!"Unexpected transaction type"); … … 1256 1305 PJ_ASSERT_ON_FAIL(tsx && dlg, return); 1257 1306 1258 if (tsx ->method.id == PJSIP_INVITE_METHOD) {1307 if (tsx == s->invite_tsx) { 1259 1308 1260 1309 switch (tsx->state) { … … 1270 1319 if (tsx->status_code/100 != 2) { 1271 1320 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1272 inv_set_state(s, PJSIP_INV_STATE_TERMINATED, e);1273 1321 } 1274 1322 break; … … 1297 1345 inv_set_state(s, PJSIP_INV_STATE_DISCONNECTED, e); 1298 1346 1299 } else if (tsx ->method.id == PJSIP_INVITE_METHOD) {1347 } else if (tsx == s->invite_tsx) { 1300 1348 1301 1349 switch (tsx->state) { … … 1308 1356 } 1309 1357 1358 } else if (tsx->method.id == PJSIP_INVITE_METHOD) { 1359 1360 /* Re-INVITE */ 1310 1361 1311 1362 } else {
Note: See TracChangeset
for help on using the changeset viewer.