| 436 | |
| 437 | |
| 438 | void PeerInterface::processHandoverFailure(const struct sockaddr_in* peer, const char* message) |
| 439 | { |
| 440 | // This indication means that inbound handover processing failed |
| 441 | // on the other BTS. This BTS cannot handover this call right now. |
| 442 | unsigned transactionID; |
| 443 | unsigned cause; |
| 444 | unsigned holdoff = gConfig.getNum("GSM.Handover.FailureHoldoff"); |
| 445 | unsigned res = sscanf(message,"IND HANDOVER_FAILURE %u %u %u", &transactionID, &cause, &holdoff); |
| 446 | if (res==0) { |
| 447 | LOG(ALERT) << "cannot parse peering message " << message; |
| 448 | return; |
| 449 | } |
| 450 | |
| 451 | if (res<3) { |
| 452 | LOG(ALERT) << "peering message missing parameters " << message; |
| 453 | } |
| 454 | |
| 455 | // Set holdoff on this BTS. |
| 456 | |
| 457 | // FIXME -- We need to decide what else to do here. See #817. |
| 458 | gNeighborTable.holdOff(peer,holdoff); |
| 459 | |
| 460 | char rsp[50]; |
| 461 | sprintf(rsp,"ACK HANDOVER_FAILURE %u", transactionID); |
| 462 | sendMessage(peer,rsp); |
| 463 | |
| 464 | return; |
| 465 | } |
| 466 | |
| 467 | |
| 468 | |