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; }