/** Read an L3Frame from SAP3. Throw exception on failure. Will NOT return a NULL pointer. */ GSM::L3Frame* getFrameSMS(GSM::LogicalChannel *LCH, GSM::Primitive primitive=GSM::DATA) { GSM::L3Frame *retVal = LCH->recv(LCH->N200()*LCH->T200(),3); if (!retVal) { LOG(NOTICE) << "channel read time out on " << *LCH << " SAP3"; throw ChannelReadTimeout(); } LOG(DEBUG) << "getFrameSMS on " << *LCH << " in frame " << *retVal; if (retVal->primitive() != primitive) { LOG(NOTICE) << "unexpected primitive on " << *LCH << ", expecting " << primitive << ", got " << *retVal; throw UnexpectedPrimitive(); } if ((retVal->primitive() == GSM::DATA) && (retVal->PD() != GSM::L3SMSPD)) { LOG(NOTICE) << "unexpected (non-SMS) protocol on " << *LCH << " in frame " << *retVal; throw UnexpectedMessage(); } return retVal; }
/** Read an L3Frame from SAP3. Throw exception on failure. Will NOT return a NULL pointer. */ GSM::L3Frame* getFrameSMS(UMTS::DCCHLogicalChannel *LCH, GSM::Primitive primitive=GSM::DATA) { // FIXME -- We need to determine a correct timeout value here. GSM::L3Frame *retVal = LCH->recv(20000,3); if (!retVal) { LOG(NOTICE) << "channel read time out on " << *LCH << " SAP3"; throw ChannelReadTimeout(); } LOG(DEBUG) << "getFrameSMS on " << *LCH << " in frame " << *retVal; if (retVal->primitive() != primitive) { LOG(NOTICE) << "unexpected primitive on " << *LCH << ", expecting " << primitive << ", got " << *retVal; throw UnexpectedPrimitive(); } if ((retVal->primitive() == GSM::DATA) && (retVal->PD() != GSM::L3SMSPD)) { LOG(NOTICE) << "unexpected (non-SMS) protocol on " << *LCH << " in frame " << *retVal; throw UnexpectedMessage(); } return retVal; }