MCPcopy Create free account
hub / github.com/RangeNetworks/openbts / parseAccessCapabilities

Method parseAccessCapabilities

SGSNGGSN/GPRSL3Messages.cpp:791–867  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

789}
790
791void AccessCapabilities::parseAccessCapabilities(
792 ByteVector &bv, // bytevector we are parsing
793 size_t &rp, // location in bytevector
794 AccessCapabilities *prev, // Previous capabilities or null.
795 size_t end) // end of capabilities list
796{
797 mCaps[RFPowerCapability] = bv.readField(rp,3);
798 if (bv.readField(rp,1)) { mCaps[A5Bits] = bv.readField(rp,7); }
799 else if (prev) { mCaps[A5Bits] = prev->mCaps[A5Bits]; }
800 mCaps[ESInd] = bv.readField(rp,1);
801 mCaps[PS] = bv.readField(rp,1);
802 mCaps[VGCS] = bv.readField(rp,1);
803 mCaps[VBS] = bv.readField(rp,1);
804 if (bv.readField(rp,1)) { // multislot capability struct present
805 if (bv.readField(rp,1)) {
806 mCaps[HSCSDMultislotClass] = bv.readField(rp,5);
807 }
808 if (bv.readField(rp,1)) {
809 mCaps[GPRSMultislotClass] = bv.readField(rp,5);
810 mCaps[GPRSExtendedDynamicAllocationCapability] = bv.readField(rp,1);
811 }
812 if (bv.readField(rp,1)) {
813 mCaps[SMS_VALUE] = bv.readField(rp,4);
814 mCaps[SM_VALUE] = bv.readField(rp,4);
815 }
816 // Additions in release 99: Just scan past some of these, dont bother saving.
817 if (rp >= end) return;
818 if (bv.readField(rp,1)) { // ECSD multslot class
819 bv.readField(rp,5); // Toss it.
820 }
821 if (rp >= end) return;
822 if (bv.readField(rp,1)) { // EGPRS multslot class
823 mCaps[EGPRSMultislotClass] = bv.readField(rp,5);
824 mCaps[EGPRSExtendedDynamicAllocationCapability] = bv.readField(rp,1);
825 }
826 if (rp >= end) return;
827 if (bv.readField(rp,1)) { // DTM GPRS Multi Slot Class present
828 mCaps[DTMGPRSMultiSlotClass] = bv.readField(rp,2);
829 mCaps[SingleSlotDTM] = bv.readField(rp,1);
830 if (bv.readField(rp,1)) { // DTM EGPRS Multi Slot Class present
831 mCaps[DTMEGPRSMultiSlotClass] = bv.readField(rp,2);
832 }
833 }
834 } else if (prev) { // No multislot struct means same as previous.
835 for (int i = HSCSDMultislotClass; i <= DTMEGPRSMultiSlotClass; i++) {
836 mCaps[i] = prev->mCaps[i];
837 }
838 }
839
840 // Additions in release 99
841 if (rp >= end) return;
842 if (bv.readField(rp,1)) { mCaps[EightPSKPowerCapability] = bv.readField(rp,2); }
843 if (rp >= end) return;
844 mCaps[COMPACTInterferenceMeasurementCapability] = bv.readField(rp,1);
845 mCaps[RevisionLevelIndicator] = bv.readField(rp,1);
846 mCaps[UMTSFDDRadioAccessTechnologyCapability] = bv.readField(rp,1);
847 mCaps[UMTS384McpsTDDRadioAccessTechnologyCapability] = bv.readField(rp,1);
848 mCaps[CDMA2000RadioAccessTechnologyCapability] = bv.readField(rp,1);

Callers 1

parseMsRaCapabilityMethod · 0.80

Calls 1

readFieldMethod · 0.80

Tested by

no test coverage detected