TODO: When a channel is first opened we should save the CMServiceRequest or LocationUpdateRequest or PagingResponse and initiate an identification and optional authorization procedure on the channel itself. That is true for both GSM and UMTS. Once we have an IMSI, we can create TranEntrys for each procedure that is MO, and also move each each MTC or MT-SMS TranEntry onto this channel. If there wa
| 948 | // FOR NOW: |
| 949 | // Just have a primary transaction on the channel, which is known from the GSMState aka CallState. |
| 950 | static void L3SDCCHLoop(L3LogicalChannel*dcch) |
| 951 | { |
| 952 | assert(dcch->chtype() == SDCCHType); |
| 953 | while (dcch->chanRunning()) { |
| 954 | if (dcch->radioFailure()) { // Checks expiry of T3109, set at 30s. |
| 955 | LOG(NOTICE) << "radio link failure, dropped call"; |
| 956 | //gNewTransactionTable.ttLostChannel(dcch); |
| 957 | dcch->chanRelease(HARDRELEASE); // Kill off all the transactions associated with this channel. |
| 958 | return; |
| 959 | } |
| 960 | |
| 961 | // Any L3 Messages from the MS side on this channel? |
| 962 | // Wait 100ms. I made this number up out of thin air. |
| 963 | // Since an incoming L3 message will be returned instantly, this delay is the effective delay |
| 964 | // in handling SIP messages or timers, and could be much longer since none of those are precision timers. |
| 965 | if (checkemMessages(dcch,100)) { gResetWatchdog(); continue; } |
| 966 | } |
| 967 | } |
| 968 | |
| 969 | // dcch may be SDCCH or FACCH. |
| 970 | // This does not return until the channel is released. |
no test coverage detected