public static function parse($isAddress = TRUE) { $SCA = new self($isAddress); $size = hexdec(PDU::getPduSubstr(2)); if ($size) { // if is OA or DA size in digits if ($isAddress) { if ($size % 2 != 0) { $size++; } // else size in octets } else { $size--; $size *= 2; } $SCA->setType(new SCA\Type(hexdec(PDU::getPduSubstr(2)))); $hex = PDU::getPduSubstr($size); switch ($SCA->getType()->getType()) { case SCA\Type::TYPE_UNKNOWN: case SCA\Type::TYPE_INTERNATIONAL: case SCA\Type::TYPE_ACCEPTER_INTO_NET: case SCA\Type::TYPE_SUBSCRIBER_NET: case SCA\Type::TYPE_TRIMMED: $SCA->setPhone(rtrim(implode("", array_map('strrev', array_map(array('self', '_map_filter_decode'), str_split($hex, 2)))), 'F')); break; case SCA\Type::TYPE_ALPHANUMERICAL: $SCA->setPhone(PDU\Helper::decode7bit($hex)); break; } } return $SCA; }
/** * parse pdu string * @param \Data $data * @return array [decded text, text size, self object] * @throws Exception */ public static function parse(Data $data) { $alphabet = $data->getPdu()->getDcs()->getTextAlphabet(); $header = NULL; $length = $data->getPdu()->getUdl() * ($alphabet == PDU\DCS::ALPHABET_UCS2 ? 4 : 2); if ($data->getPdu()->getType()->getUdhi()) { PDU::debug("Header::parse()"); $header = Header::parse(); } $hex = PDU::getPduSubstr($length); PDU::debug("Data (hex): " . $hex); switch ($alphabet) { case PDU\DCS::ALPHABET_DEFAULT: PDU::debug("Helper::decode7bit()"); $text = PDU\Helper::decode7bit($hex); break; case PDU\DCS::ALPHABET_8BIT: PDU::debug("Helper::decode8bit()"); $text = PDU\Helper::decode8bit($hex); break; case PDU\DCS::ALPHABET_UCS2: PDU::debug("Helper::decode16Bit()"); $text = PDU\Helper::decode16Bit($hex); break; default: throw new Exception("Unknown alpabet"); } $size = mb_strlen($text, 'UTF-8'); $self = new self($data, $hex, $size, $header ? $header->toArray() : NULL); $self->_text = $text; return array($text, $size, $self); }