예제 #1
0
파일: SMS.cs 프로젝트: frankzzcn/sms-pdu
		public static void Fetch(SMS sms, ref string source)
		{
			SMSBase.Fetch(sms, ref source);

			if (sms._direction == SMSDirection.Submited)
				sms._messageReference = PopByte(ref source);

			sms._phoneNumber = PopPhoneNumber(ref source);
			sms._protocolIdentifier = PopByte(ref source);
			sms._dataCodingScheme = PopByte(ref source);

            if (sms._direction == SMSDirection.Submited)
            {
                if (sms._validityPeriod != 0x00)
                    sms._validityPeriod = PopByte(ref source);
            }

			if (sms._direction == SMSDirection.Received)
				sms._serviceCenterTimeStamp = PopDate(ref source);

			sms._userData = source;

			if (source == string.Empty)
				return;

			int userDataLength = PopByte(ref source);

			if (userDataLength == 0)
				return;

            if (sms._userDataStartsWithHeader)
            {
                sms._userDataHeaderLength = PeekByte(source);

                sms._userDataHeader = PeekBytes(source, 1, sms._userDataHeaderLength);
            }

			if (userDataLength == 0)
				return;

            switch ((SMSEncoding)sms._dataCodingScheme & SMSEncoding.ReservedMask)
            {
                case SMSEncoding._7bit:
                    sms._message = Decode7bit(source, userDataLength);
                    if (sms._userDataStartsWithHeader && sms._userDataHeaderLength > 0)
                        sms._message = sms._message.Remove(0, ((sms._userDataHeaderLength + 1) * 8 + ((sms._userDataHeaderLength + 1) * 8) % 7) / 7);
                    break;
				case SMSEncoding._8bit:
					sms._message = Decode8bit(source, userDataLength);
					break;
				case SMSEncoding.UCS2:
					sms._message = DecodeUCS2(source, userDataLength);
					break;
			}
		}
예제 #2
0
        public static void Fetch(SMS sms, ref string source)
        {
            SMSBase.Fetch(sms, ref source);

            if (sms._direction == SMSDirection.Submited)
            {
                sms._messageReference = PopByte(ref source);
            }

            sms._phoneNumber        = PopPhoneNumber(ref source);
            sms._protocolIdentifier = PopByte(ref source);
            sms._dataCodingScheme   = PopByte(ref source);

            if (sms._direction == SMSDirection.Submited)
            {
                sms._validityPeriod = PopByte(ref source);
            }

            if (sms._direction == SMSDirection.Received)
            {
                sms._serviceCenterTimeStamp = PopDate(ref source);
            }

            sms._userData = source;

            if (source == string.Empty)
            {
                return;
            }

            int userDataLength = PopByte(ref source);

            if (userDataLength == 0)
            {
                return;
            }

            if (sms._userDataStartsWithHeader)
            {
                byte userDataHeaderLength = PopByte(ref source);

                sms._userDataHeader = PopBytes(ref source, userDataHeaderLength);

                userDataLength -= userDataHeaderLength + 1;
            }

            if (userDataLength == 0)
            {
                return;
            }

            switch ((SMSEncoding)sms._dataCodingScheme & SMSEncoding.ReservedMask)
            {
            case SMSEncoding._7bit:
                sms._message = Decode7bit(source, userDataLength);
                break;

            case SMSEncoding._8bit:
                sms._message = Decode8bit(source, userDataLength);
                break;

            case SMSEncoding.UCS2:
                sms._message = DecodeUCS2(source, userDataLength);
                break;
            }
        }